<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>176958</bug_id>
          
          <creation_ts>2017-09-14 14:24:26 -0700</creation_ts>
          <short_desc>Rationalize how WSL&apos;s operator&amp;[] works</short_desc>
          <delta_ts>2018-10-13 16:46:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>176199</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>buildbot</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1349007</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-14 14:24:26 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349009</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-14 14:25:53 -0700</bug_when>
    <thetext>There should be three of them, depending on how it&apos;s used:

operator[] for loads.

operator[]= for stores.

operator&amp;[] for getting a pointer to an element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349155</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-14 19:02:40 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #1)
&gt; There should be three of them, depending on how it&apos;s used:
&gt; 
&gt; operator[] for loads.
&gt; 
&gt; operator[]= for stores.
&gt; 
&gt; operator&amp;[] for getting a pointer to an element.

Nope, we want operator&amp;[] for all the things.

I made it work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349160</commentid>
    <comment_count>3</comment_count>
      <attachid>320864</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-14 19:09:27 -0700</bug_when>
    <thetext>Created attachment 320864
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349161</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-14 19:10:16 -0700</bug_when>
    <thetext>Attachment 320864 did not pass style-queue:


ERROR: Tools/ChangeLog:31:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: dangling pointer  [changelog/unwantedsecurityterms] [3]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349511</commentid>
    <comment_count>5</comment_count>
      <attachid>320958</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-15 13:38:30 -0700</bug_when>
    <thetext>Created attachment 320958
the patch

Rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349514</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-15 13:41:34 -0700</bug_when>
    <thetext>Attachment 320958 did not pass style-queue:


ERROR: Tools/ChangeLog:31:  Please consider whether the use of security-sensitive phrasing could help someone exploit WebKit: dangling pointer  [changelog/unwantedsecurityterms] [3]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349551</commentid>
    <comment_count>7</comment_count>
      <attachid>320864</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-09-15 15:43:12 -0700</bug_when>
    <thetext>Comment on attachment 320864
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=320864&amp;action=review

&gt; Tools/WebGPUShadingLanguageRI/Checker.js:176
&gt; +        if (elementType instanceof ArrayRefType)
&gt; +            throw new WTypeError(node.origin.originStrimg, &quot;Operand to @ is an array reference: &quot; + elementType);

I&apos;m confused. You have a test below where you make an arrayref of an arrayref (and it results in just a single level of arrayref). unifyNode doesn&apos;t seem to solve this because ArrayRefType doesn&apos;t override unifyNode().

&gt; Tools/WebGPUShadingLanguageRI/Checker.js:328
&gt; +        if (node.name == &quot;operator&amp;[]&quot;) {

There isn&apos;t a better way to do this?

&gt; Tools/WebGPUShadingLanguageRI/Checker.js:335
&gt; +                node.argumentList[0].numElements = argType.numElements;

I would expect this to be an argument to the constructor.

&gt; Tools/WebGPUShadingLanguageRI/Checker.js:338
&gt; +                node.argumentList[0] = new MakePtrExpression(node.origin, node.argumentList[0]);

Doing this automatically is a little scary. What&apos;s the reason for this? Why not fail?

&gt; Tools/WebGPUShadingLanguageRI/Checker.js:339
&gt; +                argumentTypes[0] = new PtrType(node.origin, &quot;thread&quot;, argumentTypes[0]);

Curious why you didn&apos;t choose to use symbols instead of the addressspace strings.

&gt; Tools/WebGPUShadingLanguageRI/MakeArrayRefExpression.js:38
&gt; +        this.__proto__ = ConvertPtrToArrayRefExpression.prototype;

😰 Isn&apos;t there a better way of doing this?

&gt; Tools/WebGPUShadingLanguageRI/Test.js:2222
&gt; +        thread int^ operator&amp;[](thread Foo^ foo, uint index)

Why did we use ^ instead of *?

&gt; Tools/WebGPUShadingLanguageRI/Test.js:2235
&gt; +            return foo[0] + foo[1];

Adding them together doesn&apos;t actually check the body of operator&amp;[]

&gt; Tools/WebGPUShadingLanguageRI/Test.js:2261
&gt; +            return foo.x + foo.y;

Ditto.

&gt; Tools/WebGPUShadingLanguageRI/Test.js:2284
&gt; +            return (^foo)[0] + (^foo)[1];

Ditto.

&gt; Tools/WebGPUShadingLanguageRI/Test.js:2315
&gt; +                return foo[0] + foo[1];

Ditto (though I guess it doesn&apos;t matter here)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349552</commentid>
    <comment_count>8</comment_count>
      <attachid>320958</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-09-15 15:43:42 -0700</bug_when>
    <thetext>Comment on attachment 320958
the patch

See comments on previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349565</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-15 16:43:27 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #7)
&gt; Comment on attachment 320864 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=320864&amp;action=review
&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Checker.js:176
&gt; &gt; +        if (elementType instanceof ArrayRefType)
&gt; &gt; +            throw new WTypeError(node.origin.originStrimg, &quot;Operand to @ is an array reference: &quot; + elementType);
&gt; 
&gt; I&apos;m confused. You have a test below where you make an arrayref of an
&gt; arrayref (and it results in just a single level of arrayref). unifyNode
&gt; doesn&apos;t seem to solve this because ArrayRefType doesn&apos;t override unifyNode().

If we try to make an ArrayRef from an ArrayRef, you get an error:

        if (elementType instanceof ArrayRefType)
            throw new WTypeError(node.origin.originStrimg, &quot;Operand to @ is an array reference: &quot; + elementType);

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Checker.js:328
&gt; &gt; +        if (node.name == &quot;operator&amp;[]&quot;) {
&gt; 
&gt; There isn&apos;t a better way to do this?

The way I was imagining this is that it&apos;s really a SubscriptExpression, and once we know the types, we select exactly what kind of call it&apos;s going to be.

But this is equivalent.  It&apos;s not unusual for compilers to do == tests on the names of functions.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Checker.js:335
&gt; &gt; +                node.argumentList[0].numElements = argType.numElements;
&gt; 
&gt; I would expect this to be an argument to the constructor.

JS doesn&apos;t have constructor overloading.  Also, elsewhere it&apos;s the Checker&apos;s job to infer the numElements of a MakeArrayRefExpression.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Checker.js:338
&gt; &gt; +                node.argumentList[0] = new MakePtrExpression(node.origin, node.argumentList[0]);
&gt; 
&gt; Doing this automatically is a little scary. What&apos;s the reason for this? Why
&gt; not fail?

The reason is to support [] and .field overloading for structs as well as arrays.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Checker.js:339
&gt; &gt; +                argumentTypes[0] = new PtrType(node.origin, &quot;thread&quot;, argumentTypes[0]);
&gt; 
&gt; Curious why you didn&apos;t choose to use symbols instead of the addressspace
&gt; strings.

I used symbols as enums once.  I found it annoying, so I stopped doing it.

To use symbols, you have to declare variables and then have them point to symbols and those symbols have to have names that reflect the variable names.  It&apos;s a lot of busy work.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/MakeArrayRefExpression.js:38
&gt; &gt; +        this.__proto__ = ConvertPtrToArrayRefExpression.prototype;
&gt; 
&gt; 😰 Isn&apos;t there a better way of doing this?

The ability of an object to become another type is pretty fundamental to JS.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Test.js:2222
&gt; &gt; +        thread int^ operator&amp;[](thread Foo^ foo, uint index)
&gt; 
&gt; Why did we use ^ instead of *?

We could still switch to *.  I&apos;m not opposed to that.

I just thought that using ^ is a nice way to remind the programmer than this isn&apos;t really a pointer.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Test.js:2235
&gt; &gt; +            return foo[0] + foo[1];
&gt; 
&gt; Adding them together doesn&apos;t actually check the body of operator&amp;[]

True.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Test.js:2261
&gt; &gt; +            return foo.x + foo.y;
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Test.js:2284
&gt; &gt; +            return (^foo)[0] + (^foo)[1];
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Test.js:2315
&gt; &gt; +                return foo[0] + foo[1];
&gt; 
&gt; Ditto (though I guess it doesn&apos;t matter here)

I&apos;ll add some test that checks the body of operator&amp;[].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349566</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-15 16:44:59 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/222116/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353373</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:25:56 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693268&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468938</commentid>
    <comment_count>12</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 16:46:28 -0700</bug_when>
    <thetext>Migrated to https://github.com/gpuweb/WHLSL/issues/139</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320864</attachid>
            <date>2017-09-14 19:09:27 -0700</date>
            <delta_ts>2017-09-15 15:43:12 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31081</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjA3MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDkzIEBACisyMDE3LTA5LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmF0aW9uYWxpemUgaG93IFdTTCdzIG9wZXJhdG9yJltdIHdvcmtzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY5NTgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFr
ZXMgb3BlcmF0b3ImW10gd29yayB3aXRoIG5vbi1hcnJheS1yZWYgdHlwZXMuIFRoZSB3YXkgdGhp
cyB3b3JrcyBpcyB0aGF0IGlmIHlvdSBkbyBiYXNlW2luZGV4XQorICAgICAgICB0aGVuIHdlIHBh
dHRlcm4gbWF0Y2ggYmFzZSdzIHR5cGUgYW5kIHByb2NlZWQgYWNjb3JkaW5nbHk6CisgICAgICAg
IAorICAgICAgICAgICAgSWYgYmFzZSdzIHR5cGUgaXMgVF46CisgICAgICAgICAgICAgICAgPT4g
UmVqZWN0CisgICAgICAgICAgICAKKyAgICAgICAgICAgIElmIGJhc2UncyB0eXBlIGlzIFRbXToK
KyAgICAgICAgICAgICAgICA9PiBBY2NlcHQKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSWYg
YmFzZSdzIHR5cGUgaXMgVFtjXToKKyAgICAgICAgICAgICAgICA9PiBXcmFwIGl0IHdpdGggYSBN
YWtlQXJyYXlSZWZFeHByZXNzaW9uIGFuZCBhY2NlcHQuCisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEFsbCBvdGhlciBjYXNlczoKKyAgICAgICAgICAgICAgICA9PiBXcmFwIGl0IHdpdGggYSBN
YWtlUHRyRXhwcmVzc2lvbiBhbmQgYWNjZXB0LgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtl
cyBpdCBwb3NzaWJsZSBmb3Igb3BlcmF0b3ImW10gdG8gd29yayB3aXRoIGx2YWx1ZXMuIEl0IGFs
c28gbWVhbnMgdGhhdCBvcGVyYXRvciZbXSBnZXRzIHRvCisgICAgICAgICJzZWUiIHRoZSB0ZW1w
b3JhcnkgdmFsdWVzIHdlIGNyZWF0ZSB2aWEgc25hcHNob3QoKSBpbiB0aGUgaW50ZXJwcmV0ZXIu
IFdlJ2xsIGhhdmUgdG8gZml4IHRoYXQsIGFuZCBJJ3ZlCisgICAgICAgIGZpbGVkIGJ1ZyAxNzY5
NzMgZm9yIHRoYXQuIE9uY2UgdGhhdCdzIGZpeGVkLCB0aGlzIHdpbGwgaGF2ZSB3ZWxsLWRlZmlu
ZWQgYmVoYXZpb3IsIHRob3VnaCB3aXRoIHRoZSB2ZXJ5CisgICAgICAgIHBlY3VsaWFyIGNhdmVh
dCB0aGF0IGFuIGV4cHJlc3Npb24gbGlrZSB0aGlzOgorICAgICAgICAKKyAgICAgICAgICAgICB0
b3RhbGx5Tm90QW5MVmFsdWUoKVs0Ml0KKyAgICAgICAgCisgICAgICAgIENvdWxkIGJlIHVzZWQg
dG8gZ2V0IGEgcG9pbnRlciB0byBhIG5vbi1sdmFsdWUuIEJ1dCB3ZSBjYW4gYmUgZXh0cmVtZWx5
IHByZWNpc2UgYWJvdXQgd2hhdCB0aGF0IG1lYW5zCisgICAgICAgIGFuZCBwcm9oaWJpdCBkYW5n
bGluZyBwb2ludGVycywgd2hpY2ggaXMga2luZGEgY3JhenkuCisgICAgICAgIAorICAgICAgICBJ
biBvcmRlciB0byBkbyB0aGlzLCBJIGhhZCB0byBtYWtlIE1ha2VBcnJheVJlZkV4cHJlc3Npb24g
d29yaywgc28gSSBkaWQgdGhhdCBhbmQgYWRkZWQgdGVzdHMgZm9yIGl0LgorCisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qczoKKyAgICAgICAgKEFycmF5UmVmVHlwZS5wcm90b3R5
cGUudW5pZnlJbXBsKToKKyAgICAgICAgKEFycmF5UmVmVHlwZS5wcm90b3R5cGUudG9TdHJpbmcp
OgorICAgICAgICAoQXJyYXlSZWZUeXBlKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9BcnJheVR5cGUuanM6CisgICAgICAgIChBcnJheVR5cGUpOgorICAgICAgICAoQXJyYXlU
eXBlLnByb3RvdHlwZS5nZXQgbnVtRWxlbWVudHNWYWx1ZSk6CisgICAgICAgIChBcnJheVR5cGUu
cHJvdG90eXBlLmdldCBzaXplKToKKyAgICAgICAgKEFycmF5VHlwZS5wcm90b3R5cGUucG9wdWxh
dGVEZWZhdWx0VmFsdWUpOgorICAgICAgICAoQXJyYXlUeXBlLnByb3RvdHlwZS51bmlmeUltcGwp
OgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanM6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9u
LmpzOiBBZGRlZC4KKyAgICAgICAgKENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbik6Cisg
ICAgICAgIChDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBsVmFs
dWUpOgorICAgICAgICAoQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uLnByb3RvdHlwZS50
b1N0cmluZyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ3JlYXRlTGl0ZXJh
bC5qczoKKyAgICAgICAgKGNyZWF0ZUxpdGVyYWwuR2VuZXJpY0xpdGVyYWwud2l0aFR5cGUpOgor
ICAgICAgICAoY3JlYXRlTGl0ZXJhbC5HZW5lcmljTGl0ZXJhbC5wcm90b3R5cGUuZ2V0IGlzTGl0
ZXJhbCk6CisgICAgICAgIChjcmVhdGVMaXRlcmFsLkdlbmVyaWNMaXRlcmFsLnByb3RvdHlwZS51
bmlmeUltcGwpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0RvdEV4cHJlc3Np
b24uanM6CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgYWRkcmVzc1NwYWNl
KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3IuanM6CisgICAg
ICAgIChFdmFsdWF0b3IucHJvdG90eXBlLnZpc2l0TWFrZUFycmF5UmVmRXhwcmVzc2lvbik6Cisg
ICAgICAgIChFdmFsdWF0b3IucHJvdG90eXBlLnZpc2l0Q29udmVydFB0clRvQXJyYXlSZWZFeHBy
ZXNzaW9uKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpz
OgorICAgICAgICAoSW50cmluc2ljcyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5qczogQWRkZWQuCisgICAgICAgIChNYWtlQXJyYXlS
ZWZFeHByZXNzaW9uKToKKyAgICAgICAgKE1ha2VBcnJheVJlZkV4cHJlc3Npb24ucHJvdG90eXBl
LmdldCBsVmFsdWUpOgorICAgICAgICAoTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5wcm90b3R5cGUu
YmVjb21lQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAgKE1ha2VBcnJh
eVJlZkV4cHJlc3Npb24ucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9NYWtlUHRyRXhwcmVzc2lvbi5qczoKKyAgICAgICAgKE1ha2VQdHJFeHBy
ZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgIChNYWtlUHRyRXhwcmVzc2lvbik6
CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qczoKKyAgICAgICAg
KFB0clR5cGUucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKFB0clR5cGUpOgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlZmVyZW5jZVR5cGUuanM6CisgICAgICAgIChS
ZWZlcmVuY2VUeXBlKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRl
ci5qczoKKyAgICAgICAgKFJld3JpdGVyLnByb3RvdHlwZS52aXNpdEFycmF5VHlwZSk6CisgICAg
ICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAg
ICAgICAgKFJld3JpdGVyLnByb3RvdHlwZS52aXNpdENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVz
c2lvbik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5
LmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbDoKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzOgorICAgICAgICAoVEVTVF9idWls
ZEFycmF5VGhlblN1bUl0VXNpbmdBcnJheVJlZmVyZW5jZSk6CisgICAgICAgIChURVNUX292ZXJy
aWRlU3Vic2NyaXB0U3RydWN0KToKKyAgICAgICAgKFRFU1Rfb3ZlcnJpZGVTdWJzY3JpcHRTdHJ1
Y3RBbmRVc2VQb2ludGVycyk6CisgICAgICAgIChURVNUX292ZXJyaWRlU3Vic2NyaXB0U3RydWN0
QW5kVXNlUG9pbnRlcnNJbmNvcnJlY3RseSk6CisgICAgICAgIChURVNUX21ha2VBcnJheVJlZkZy
b21Qb2ludGVyKToKKyAgICAgICAgKFRFU1RfbWFrZUFycmF5UmVmRnJvbUFycmF5UmVmKToKKyAg
ICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzOgorICAgICAgICAoVmlz
aXRvci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorCiAyMDE3LTA5LTE0ICBZb3VzdWtl
IEtpbW90byAgPHlvdXN1a2Uua2ltb3RvQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5DYWlyb10g
QWRkIGFuIG9wdGlvbiB0byBidWlsZCBXZWJLaXRMZWdhY3kgYW5kIFdlYktpdApJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkocmV2aXNpb24gMjIyMDM4KQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1
Nyw3IEBAIGxvYWQoIkNoZWNrZXIuanMiKTsKIGxvYWQoIkNvbW1hRXhwcmVzc2lvbi5qcyIpOwog
bG9hZCgiQ29uc3RleHByVHlwZVBhcmFtZXRlci5qcyIpOwogbG9hZCgiQ29udGludWUuanMiKTsK
K2xvYWQoIkNvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiRGVyZWZl
cmVuY2VFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJEb1doaWxlTG9vcC5qcyIpOwogbG9hZCgiRG90
RXhwcmVzc2lvbi5qcyIpOwpAQCAtODgsNiArODksNyBAQCBsb2FkKCJMZXhlclRva2VuLmpzIik7
CiBsb2FkKCJMaXRlcmFsVHlwZUNoZWNrZXIuanMiKTsKIGxvYWQoIkxvZ2ljYWxOb3QuanMiKTsK
IGxvYWQoIkxvb3BDaGVja2VyLmpzIik7Citsb2FkKCJNYWtlQXJyYXlSZWZFeHByZXNzaW9uLmpz
Iik7CiBsb2FkKCJNYWtlUHRyRXhwcmVzc2lvbi5qcyIpOwogbG9hZCgiTmFtZUNvbnRleHQuanMi
KTsKIGxvYWQoIk5hbWVSZXNvbHZlci5qcyIpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvQXJyYXlSZWZUeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qcwkocmV2aXNpb24gMjIyMDM3KQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJyYXlSZWZUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSwxNSArMjksMTIgQEAKIGNsYXNzIEFycmF5UmVmVHlwZSBleHRlbmRzIFJlZmVyZW5jZVR5
cGUgewogICAgIHVuaWZ5SW1wbCh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKQogICAgIHsKLSAg
ICAgICAgaWYgKG90aGVyIGluc3RhbmNlb2YgQXJyYXlSZWZUeXBlKSB7Ci0gICAgICAgICAgICBp
ZiAodGhpcy5hZGRyZXNzU3BhY2UgIT0gb3RoZXIuYWRkcmVzc1NwYWNlKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghKG90
aGVyIGluc3RhbmNlb2YgQXJyYXlUeXBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBpZiAodGhpcy5hZGRyZXNzU3BhY2UgIT0gInRocmVhZCIpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIGlmICghKG90aGVyIGlu
c3RhbmNlb2YgQXJyYXlSZWZUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGlmICh0aGlzLmFkZHJlc3NTcGFjZSAhPSBvdGhlci5hZGRyZXNzU3BhY2Up
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAogICAgICAgICByZXR1cm4gdGhp
cy5lbGVtZW50VHlwZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyLmVsZW1lbnRUeXBl
KTsKICAgICB9CiAgICAgCkBAIC00NSw3ICs0Miw3IEBAIGNsYXNzIEFycmF5UmVmVHlwZSBleHRl
bmRzIFJlZmVyZW5jZVR5cGUKIAogICAgIHRvU3RyaW5nKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLmFkZHJlc3NTcGFjZSArICIgIiArIHRoaXMuZWxlbWVudFR5cGUgKyAiW10iOworICAg
ICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZSArICJbXSAiICsgdGhpcy5hZGRyZXNzU3BhY2U7
CiAgICAgfQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5
cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQXJyYXlU
eXBlLmpzCShyZXZpc2lvbiAyMjIwMzcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9BcnJheVR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIGNsYXNzIEFy
cmF5VHlwZSBleHRlbmRzIFR5cGUgewogICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgZWxlbWVudFR5
cGUsIG51bUVsZW1lbnRzKQogICAgIHsKKyAgICAgICAgaWYgKCFudW1FbGVtZW50cykKKyAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigibnVsbCBudW1FbGVtZW50cyIpOwogICAgICAgICBzdXBl
cigpOwogICAgICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47CiAgICAgICAgIHRoaXMuX2VsZW1l
bnRUeXBlID0gZWxlbWVudFR5cGU7CkBAIC0zOCw2ICs0MCwxMyBAQCBjbGFzcyBBcnJheVR5cGUg
ZXh0ZW5kcyBUeXBlIHsKICAgICBnZXQgbnVtRWxlbWVudHMoKSB7IHJldHVybiB0aGlzLl9udW1F
bGVtZW50czsgfQogICAgIGdldCBpc1ByaW1pdGl2ZSgpIHsgcmV0dXJuIHRoaXMuZWxlbWVudFR5
cGUuaXNQcmltaXRpdmU7IH0KICAgICAKKyAgICBnZXQgbnVtRWxlbWVudHNWYWx1ZSgpCisgICAg
eworICAgICAgICBpZiAoISh0aGlzLm51bUVsZW1lbnRzLmlzTGl0ZXJhbCkpCisgICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIm51bUVsZW1lbnRzIGlzIG5vdCBhIGxpdGVyYWw6ICIgKyB0aGlz
Lm51bUVsZW1lbnRzKTsKKyAgICAgICAgcmV0dXJuIHRoaXMubnVtRWxlbWVudHMudmFsdWU7Cisg
ICAgfQorCiAgICAgdG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVu
dFR5cGUgKyAiWyIgKyB0aGlzLm51bUVsZW1lbnRzICsgIl0iOwpAQCAtNDUsMjEgKzU0LDIyIEBA
IGNsYXNzIEFycmF5VHlwZSBleHRlbmRzIFR5cGUgewogICAgIAogICAgIGdldCBzaXplKCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnNpemUgKiB0aGlzLm51bUVsZW1l
bnRzOworICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5zaXplICogdGhpcy5udW1FbGVt
ZW50c1ZhbHVlOwogICAgIH0KICAgICAKLSAgICB1bmlmeUltcGwodW5pZmljYXRvbkNvbnRleHQs
IG90aGVyKQorICAgIHBvcHVsYXRlRGVmYXVsdFZhbHVlKGJ1ZmZlciwgb2Zmc2V0KQogICAgIHsK
LSAgICAgICAgaWYgKG90aGVyIGluc3RhbmNlb2YgQXJyYXlSZWZUeXBlKSB7Ci0gICAgICAgICAg
ICBpZiAob3RoZXIuYWRkcmVzc1NwYWNlICE9ICJ0aHJlYWQiKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghKG90aGVyIGlu
c3RhbmNlb2YgQXJyYXlUeXBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmICghdGhpcy5udW1FbGVtZW50cy51bmlmeSh1bmlmaWNh
dGlvbkNvbnRleHQsIG90aGVyLm51bUVsZW1lbnRzKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm51bUVs
ZW1lbnRzVmFsdWU7ICsraSkKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudFR5cGUucG9wdWxhdGVE
ZWZhdWx0VmFsdWUoYnVmZmVyLCBvZmZzZXQgKyBpICogdGhpcy5lbGVtZW50VHlwZS5zaXplKTsK
KyAgICB9CisgICAgCisgICAgdW5pZnlJbXBsKHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpCisg
ICAgeworICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIEFycmF5VHlwZSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoIXRoaXMubnVtRWxlbWVu
dHMudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlci5udW1FbGVtZW50cykpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50
VHlwZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyLmVsZW1lbnRUeXBlKTsKICAgICB9
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHJldmlzaW9u
IDIyMjAzOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHdv
cmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsMTUgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZp
c2l0b3IgewogICAgIAogICAgIHZpc2l0QXJyYXlUeXBlKG5vZGUpCiAgICAgeworICAgICAgICBu
b2RlLmVsZW1lbnRUeXBlLnZpc2l0KHRoaXMpOworICAgICAgICAKICAgICAgICAgaWYgKCFub2Rl
Lm51bUVsZW1lbnRzLmlzQ29uc3RleHByKQogICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQXJyYXkgbGVuZ3RoIG11c3QgYmUgY29uc3Rl
eHByIik7CisgICAgICAgIAorICAgICAgICBsZXQgdHlwZSA9IG5vZGUubnVtRWxlbWVudHMudmlz
aXQodGhpcyk7CisgICAgICAgIAorICAgICAgICBpZiAoIXR5cGUuZXF1YWxzV2l0aENvbW1pdCh0
aGlzLl9wcm9ncmFtLmludHJpbnNpY3MudWludDMyKSkKKyAgICAgICAgICAgIHRocm93IG5ldyBX
VHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkFycmF5IGxlbmd0aCBtdXN0IGJl
IGEgdWludDMyIik7CiAgICAgfQogICAgIAogICAgIHZpc2l0VmFyaWFibGVEZWNsKG5vZGUpCkBA
IC0xNDcsMTMgKzE1NCw0MSBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAg
dmlzaXRNYWtlUHRyRXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAgaWYgKCFub2RlLmxW
YWx1ZS5pc0xWYWx1ZSkKLSAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3Jp
Z2luLm9yaWdpblN0cmluZywgIk9wZXJhbmQgdG8gXFwgaXMgbm90IGFuIExWYWx1ZTogIiArIG5v
ZGUubFZhbHVlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2lu
Lm9yaWdpblN0cmluZywgIk9wZXJhbmQgdG8gJiBpcyBub3QgYW4gTFZhbHVlOiAiICsgbm9kZS5s
VmFsdWUpOwogICAgICAgICAKICAgICAgICAgbGV0IGVsZW1lbnRUeXBlID0gbm9kZS5sVmFsdWUu
dmlzaXQodGhpcykudW5pZnlOb2RlOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIG5ldyBQdHJU
eXBlKG5vZGUub3JpZ2luLCBub2RlLmxWYWx1ZS5hZGRyZXNzU3BhY2UsIGVsZW1lbnRUeXBlKTsK
ICAgICB9CiAgICAgCisgICAgdmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUpCisgICAg
eworICAgICAgICBsZXQgZWxlbWVudFR5cGUgPSBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKS51bmlm
eU5vZGU7CisgICAgICAgIGlmIChlbGVtZW50VHlwZSBpbnN0YW5jZW9mIFB0clR5cGUpIHsKKyAg
ICAgICAgICAgIG5vZGUuYmVjb21lQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uKCk7Cisg
ICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5UmVmVHlwZShub2RlLm9yaWdpbiwgZWxlbWVudFR5
cGUuYWRkcmVzc1NwYWNlLCBlbGVtZW50VHlwZS5lbGVtZW50VHlwZSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmICghbm9kZS5sVmFsdWUuaXNMVmFsdWUpCisgICAgICAgICAgICB0
aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJPcGVyYW5kIHRv
IEAgaXMgbm90IGFuIExWYWx1ZTogIiArIG5vZGUubFZhbHVlKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChlbGVtZW50VHlwZSBpbnN0YW5jZW9mIEFycmF5UmVmVHlwZSkKKyAgICAgICAgICAgIHRo
cm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmltZywgIk9wZXJhbmQgdG8g
QCBpcyBhbiBhcnJheSByZWZlcmVuY2U6ICIgKyBlbGVtZW50VHlwZSk7CisgICAgICAgIAorICAg
ICAgICBpZiAoZWxlbWVudFR5cGUgaW5zdGFuY2VvZiBBcnJheVR5cGUpIHsKKyAgICAgICAgICAg
IG5vZGUubnVtRWxlbWVudHMgPSBlbGVtZW50VHlwZS5udW1FbGVtZW50czsKKyAgICAgICAgICAg
IGVsZW1lbnRUeXBlID0gZWxlbWVudFR5cGUuZWxlbWVudFR5cGU7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgbm9kZS5udW1FbGVtZW50cyA9IFVpbnRMaXRlcmFsLndpdGhUeXBlKG5vZGUu
b3JpZ2luLCAxLCB0aGlzLl9wcm9ncmFtLmludHJpbnNpY3MudWludDMyKTsKKyAgICAgICAgICAg
IAorICAgICAgICByZXR1cm4gbmV3IEFycmF5UmVmVHlwZShub2RlLm9yaWdpbiwgbm9kZS5sVmFs
dWUuYWRkcmVzc1NwYWNlLCBlbGVtZW50VHlwZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0Q29u
dmVydFRvQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIlNob3VsZCBub3QgZXhpc3QgeWV0LiIpOworICAgIH0KKyAgICAKICAgICB2aXNpdERv
dEV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCBzdHJ1Y3RUeXBlID0gbm9kZS5z
dHJ1Y3QudmlzaXQodGhpcykudW5pZnlOb2RlOwpAQCAtMjg3LDYgKzMyMiwyNCBAQCBjbGFzcyBD
aGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJ2aXNpdG9yIHJldHVybmVkIG51bGwgZm9yICIgKyBhcmd1bWVudCk7CiAgICAgICAgICAgICBy
ZXR1cm4gVHlwZVJlZi53cmFwKG5ld0FyZ3VtZW50KTsKICAgICAgICAgfSk7CisgICAgICAgIAor
ICAgICAgICAvLyBIZXJlIHdlIG5lZWQgdG8gaGFuZGxlIHRoZSBjYXNlcyB3aGVyZSBvcGVyYXRv
ciZbXSBpcyBjYWxsZWQgd2l0aCBhIHR5cGUgdGhhdCBpc24ndCBzdWZmaWNpZW50bHkKKyAgICAg
ICAgLy8gcmVmZXJlbmNleS4KKyAgICAgICAgaWYgKG5vZGUubmFtZSA9PSAib3BlcmF0b3ImW10i
KSB7CisgICAgICAgICAgICBsZXQgYXJnVHlwZSA9IGFyZ3VtZW50VHlwZXNbMF0udW5pZnlOb2Rl
OworICAgICAgICAgICAgaWYgKGFyZ1R5cGUgaW5zdGFuY2VvZiBQdHJUeXBlKQorICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlBv
aW50ZXIgc3Vic2NyaXB0IGlzIG5vdCB2YWxpZCIpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoYXJnVHlwZSBpbnN0YW5jZW9mIEFycmF5VHlwZSkgeworICAgICAgICAgICAgICAgIG5v
ZGUuYXJndW1lbnRMaXN0WzBdID0gbmV3IE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9kZS5vcmln
aW4sIG5vZGUuYXJndW1lbnRMaXN0WzBdKTsKKyAgICAgICAgICAgICAgICBub2RlLmFyZ3VtZW50
TGlzdFswXS5udW1FbGVtZW50cyA9IGFyZ1R5cGUubnVtRWxlbWVudHM7CisgICAgICAgICAgICAg
ICAgYXJndW1lbnRUeXBlc1swXSA9IG5ldyBBcnJheVJlZlR5cGUobm9kZS5vcmlnaW4sICJ0aHJl
YWQiLCBhcmdUeXBlLmVsZW1lbnRUeXBlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIShhcmdU
eXBlIGluc3RhbmNlb2YgQXJyYXlSZWZUeXBlKSkgeworICAgICAgICAgICAgICAgIG5vZGUuYXJn
dW1lbnRMaXN0WzBdID0gbmV3IE1ha2VQdHJFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLmFy
Z3VtZW50TGlzdFswXSk7CisgICAgICAgICAgICAgICAgYXJndW1lbnRUeXBlc1swXSA9IG5ldyBQ
dHJUeXBlKG5vZGUub3JpZ2luLCAidGhyZWFkIiwgYXJndW1lbnRUeXBlc1swXSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIG5vZGUuYXJndW1lbnRUeXBlcyA9
IGFyZ3VtZW50VHlwZXM7CiAgICAgICAgIGlmIChub2RlLnJldHVyblR5cGUpCiAgICAgICAgICAg
ICBub2RlLnJldHVyblR5cGUudmlzaXQodGhpcyk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9Db252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24uanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29udmVydFB0clRvQXJyYXlSZWZFeHBy
ZXNzaW9uLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0NvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisi
dXNlIHN0cmljdCI7CisKK2NsYXNzIENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbiBleHRl
bmRzIEV4cHJlc3Npb24geworICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbFZhbHVlKQorICAgIHsK
KyAgICAgICAgc3VwZXIob3JpZ2luKTsKKyAgICAgICAgdGhpcy5fbFZhbHVlID0gbFZhbHVlOwor
ICAgIH0KKyAgICAKKyAgICBnZXQgbFZhbHVlKCkgeyByZXR1cm4gdGhpcy5fbFZhbHVlOyB9Cisg
ICAgCisgICAgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJAKCIgKyB0aGlzLmxW
YWx1ZSArICIpIjsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0NyZWF0ZUxpdGVyYWwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvQ3JlYXRlTGl0ZXJhbC5qcwkocmV2aXNpb24gMjIyMDM4KQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvQ3JlYXRlTGl0ZXJhbC5qcwkod29ya2luZyBjb3B5KQpAQCAt
MzQsOCArMzQsMjMgQEAgZnVuY3Rpb24gY3JlYXRlTGl0ZXJhbChjb25maWcpCiAgICAgICAgICAg
ICB0aGlzLnR5cGUgPSBjb25maWcuY3JlYXRlVHlwZS5jYWxsKHRoaXMsIG9yaWdpbiwgdmFsdWUp
OwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBzdGF0aWMgd2l0aFR5cGUob3JpZ2luLCB2
YWx1ZSwgdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBHZW5l
cmljTGl0ZXJhbChvcmlnaW4sIHZhbHVlKTsKKyAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVHlw
ZVJlZi53cmFwKHR5cGUpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH0KICAg
ICAgICAgZ2V0IGlzQ29uc3RleHByKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICBnZXQgaXNM
aXRlcmFsKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICAKKyAgICAgICAgdW5pZnlJbXBsKHVu
aWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghKG90
aGVyIGluc3RhbmNlb2YgR2VuZXJpY0xpdGVyYWwpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlID09IG90aGVyLnZhbHVlOworICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICB0b1N0cmluZygpCiAgICAgICAgIHsKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0RvdEV4cHJlc3Npb24uanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRG90RXhwcmVzc2lvbi5qcwkocmV2aXNp
b24gMjIyMDM3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRG90RXhwcmVzc2lv
bi5qcwkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQCBjbGFzcyBEb3RFeHByZXNzaW9u
IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgICAgZ2V0IHN0cnVjdCgpIHsgcmV0dXJuIHRoaXMuX3N0
cnVjdDsgfQogICAgIGdldCBmaWVsZE5hbWUoKSB7IHJldHVybiB0aGlzLl9maWVsZE5hbWU7IH0K
ICAgICBnZXQgaXNMVmFsdWUoKSB7IHJldHVybiB0aGlzLnN0cnVjdC5pc0xWYWx1ZTsgfQorICAg
IGdldCBhZGRyZXNzU3BhY2UoKSB7IHJldHVybiB0aGlzLnN0cnVjdC5hZGRyZXNzU3BhY2U7IH0K
ICAgICAKICAgICB0b1N0cmluZygpCiAgICAgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvRXZhbHVhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0V2YWx1YXRvci5qcwkocmV2aXNpb24gMjIyMDM4KQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiAr
MTA2LDE2IEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICByZXR1
cm4gRVB0ci5ib3gobm9kZS5sVmFsdWUudmlzaXQodGhpcykpOwogICAgIH0KICAgICAKKyAgICB2
aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBF
UHRyLmJveChuZXcgRUFycmF5UmVmKG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpLCBub2RlLm51bUVs
ZW1lbnRzLnZpc2l0KHRoaXMpLmxvYWRWYWx1ZSgpKSk7CisgICAgfQorICAgIAorICAgIHZpc2l0
Q29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICByZXR1
cm4gRVB0ci5ib3gobmV3IEVBcnJheVJlZihub2RlLmxWYWx1ZS52aXNpdCh0aGlzKS5sb2FkVmFs
dWUoKSwgMSkpOworICAgIH0KKyAgICAKICAgICB2aXNpdERvdEV4cHJlc3Npb24obm9kZSkKICAg
ICB7CiAgICAgICAgIGxldCBzdHJ1Y3RQdHIgPSBub2RlLnN0cnVjdC52aXNpdCh0aGlzKTsKSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwkocmV2aXNp
b24gMjIyMDM4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCwxOCBAQCBjbGFzcyBJbnRyaW5zaWNzIHsK
ICAgICAgICAgICAgIH0pOwogICAgICAgICAKICAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAg
ICAgICAgICJuYXRpdmUgb3BlcmF0b3IgaW50MzI8Pih1aW50MzIpIiwKKyAgICAgICAgICAgIGZ1
bmMgPT4geworICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW3ZhbHVlXSkg
PT4gRVB0ci5ib3godmFsdWUubG9hZFZhbHVlKCkgfCAwKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAKKyAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgb3BlcmF0
b3IgdWludDMyPD4oaW50MzIpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAg
ICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW3ZhbHVlXSkgPT4gRVB0ci5ib3godmFsdWUubG9h
ZFZhbHVlKCkgPj4+IDApOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlz
Ll9tYXAuc2V0KAogICAgICAgICAgICAgIm5hdGl2ZSBpbnQgb3BlcmF0b3IrPD4oaW50LGludCki
LAogICAgICAgICAgICAgZnVuYyA9PiB7CiAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRh
dGlvbiA9IChbbGVmdCwgcmlnaHRdKSA9PgpAQCAtMjQ5LDE2ICsyNjEsMTYgQEAgY2xhc3MgSW50
cmluc2ljcyB7CiAgICAgICAgIH07CiAgICAgICAgIAogICAgICAgICB0aGlzLl9tYXAuc2V0KAot
ICAgICAgICAgICAgIm5hdGl2ZSB0aHJlYWQgVF4gb3BlcmF0b3ImW108VD4odGhyZWFkIFRbXSx1
aW50KSIsCisgICAgICAgICAgICAibmF0aXZlIFReIHRocmVhZCBvcGVyYXRvciZbXTxUPihUW10g
dGhyZWFkLHVpbnQpIiwKICAgICAgICAgICAgIGFycmF5RWxlbWVudFB0cik7CiAgICAgICAgIHRo
aXMuX21hcC5zZXQoCi0gICAgICAgICAgICAibmF0aXZlIHRocmVhZGdyb3VwIFReIG9wZXJhdG9y
JltdPFQ6cHJpbWl0aXZlPih0aHJlYWRncm91cCBUW10sdWludCkiLAorICAgICAgICAgICAgIm5h
dGl2ZSBUXiB0aHJlYWRncm91cCBvcGVyYXRvciZbXTxUOnByaW1pdGl2ZT4oVFtdIHRocmVhZGdy
b3VwLHVpbnQpIiwKICAgICAgICAgICAgIGFycmF5RWxlbWVudFB0cik7CiAgICAgICAgIHRoaXMu
X21hcC5zZXQoCi0gICAgICAgICAgICAibmF0aXZlIGRldmljZSBUXiBvcGVyYXRvciZbXTxUOnBy
aW1pdGl2ZT4oZGV2aWNlIFRbXSx1aW50KSIsCisgICAgICAgICAgICAibmF0aXZlIFReIGRldmlj
ZSBvcGVyYXRvciZbXTxUOnByaW1pdGl2ZT4oVFtdIGRldmljZSx1aW50KSIsCiAgICAgICAgICAg
ICBhcnJheUVsZW1lbnRQdHIpOwogICAgICAgICB0aGlzLl9tYXAuc2V0KAotICAgICAgICAgICAg
Im5hdGl2ZSBjb25zdGFudCBUXiBvcGVyYXRvciZbXTxUOnByaW1pdGl2ZT4oY29uc3RhbnQgVFtd
LHVpbnQpIiwKKyAgICAgICAgICAgICJuYXRpdmUgVF4gY29uc3RhbnQgb3BlcmF0b3ImW108VDpw
cmltaXRpdmU+KFRbXSBjb25zdGFudCx1aW50KSIsCiAgICAgICAgICAgICBhcnJheUVsZW1lbnRQ
dHIpOwogICAgIH0KICAgICAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL01h
a2VBcnJheVJlZkV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5qcwkobm9uZXhpc3RlbnQpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9NYWtlQXJyYXlSZWZFeHByZXNzaW9uLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgTWFrZUFycmF5UmVmRXhw
cmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24geworICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbFZh
bHVlKQorICAgIHsKKyAgICAgICAgc3VwZXIob3JpZ2luKTsKKyAgICAgICAgdGhpcy5fbFZhbHVl
ID0gbFZhbHVlOworICAgIH0KKyAgICAKKyAgICBnZXQgbFZhbHVlKCkgeyByZXR1cm4gdGhpcy5f
bFZhbHVlOyB9CisgICAgCisgICAgYmVjb21lQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9u
KCkKKyAgICB7CisgICAgICAgIHRoaXMuX19wcm90b19fID0gQ29udmVydFB0clRvQXJyYXlSZWZF
eHByZXNzaW9uLnByb3RvdHlwZTsKKyAgICB9CisgICAgCisgICAgdG9TdHJpbmcoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuICJAIiArICh0aGlzLm51bUVsZW1lbnRzID8gIjw8IiArIHRoaXMubnVt
RWxlbWVudHMgKyAiPj4iIDogIiIpICsgIigiICsgdGhpcy5sVmFsdWUgKyAiKSI7CisgICAgfQor
fQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9NYWtlUHRyRXhwcmVzc2lv
bi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9NYWtlUHRy
RXhwcmVzc2lvbi5qcwkocmV2aXNpb24gMjIyMDM3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvTWFrZVB0ckV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1
LDYgQEAgY2xhc3MgTWFrZVB0ckV4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaQogICAgIAogICAg
IHRvU3RyaW5nKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAiJigiICsgdGhpcy5wdHIgKyAiKSI7
CisgICAgICAgIHJldHVybiAiJigiICsgdGhpcy5sVmFsdWUgKyAiKSI7CiAgICAgfQogfQpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpzCShyZXZpc2lvbiAyMjIw
MzcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGNsYXNzIFB0clR5cGUgZXh0ZW5kcyBSZWZlcmVuY2VU
eXBlIHsKICAgICAKICAgICB0b1N0cmluZygpCiAgICAgewotICAgICAgICByZXR1cm4gdGhpcy5h
ZGRyZXNzU3BhY2UgKyAiICIgKyB0aGlzLmVsZW1lbnRUeXBlICsgIl4iOworICAgICAgICByZXR1
cm4gdGhpcy5lbGVtZW50VHlwZSArICJeICIgKyB0aGlzLmFkZHJlc3NTcGFjZTsKICAgICB9CiB9
CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlZmVyZW5jZVR5cGUuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVmZXJlbmNlVHlw
ZS5qcwkocmV2aXNpb24gMjIyMDM3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UmVmZXJlbmNlVHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogY2xhc3Mg
UmVmZXJlbmNlVHlwZSBleHRlbmRzIFR5cGUgewogICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgYWRk
cmVzc1NwYWNlLCBlbGVtZW50VHlwZSkKICAgICB7CisgICAgICAgIGlmICghZWxlbWVudFR5cGUp
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgZWxlbWVudFR5cGUiKTsKICAgICAg
ICAgc3VwZXIoKTsKICAgICAgICAgdmFsaWRhdGVBZGRyZXNzU3BhY2UoYWRkcmVzc1NwYWNlKTsK
ICAgICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2luOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvUmV3cml0ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvUmV3cml0ZXIuanMJKHJldmlzaW9uIDIyMjAzOCkKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNyAr
MTU3LDcgQEAgY2xhc3MgUmV3cml0ZXIgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAg
dmlzaXRBcnJheVR5cGUobm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgQXJyYXlUeXBl
KG5vZGUub3JpZ2luLCBub2RlLmVsZW1lbnRUeXBlLnZpc2l0KHRoaXMpKTsKKyAgICAgICAgcmV0
dXJuIG5ldyBBcnJheVR5cGUobm9kZS5vcmlnaW4sIG5vZGUuZWxlbWVudFR5cGUudmlzaXQodGhp
cyksIG5vZGUubnVtRWxlbWVudHMudmlzaXQodGhpcykpOwogICAgIH0KICAgICAKICAgICB2aXNp
dEFzc2lnbm1lbnQobm9kZSkKQEAgLTE4OSw2ICsxODksMTkgQEAgY2xhc3MgUmV3cml0ZXIgZXh0
ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgICAgIHJldHVybiBuZXcgTWFrZVB0ckV4cHJlc3Npb24o
bm9kZS5vcmlnaW4sIG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpKTsKICAgICB9CiAgICAgCisgICAg
dmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBsZXQgcmVz
dWx0ID0gbmV3IE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUubFZhbHVl
LnZpc2l0KHRoaXMpKTsKKyAgICAgICAgaWYgKG5vZGUubnVtRWxlbWVudHMpCisgICAgICAgICAg
ICByZXN1bHQubnVtRWxlbWVudHMgPSBub2RlLm51bUVsZW1lbnRzLnZpc2l0KHRoaXMpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2aXNpdENvbnZlcnRQdHJUb0Fy
cmF5UmVmRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDb252ZXJ0
UHRyVG9BcnJheVJlZkV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUubFZhbHVlLnZpc2l0KHRo
aXMpKTsKKyAgICB9CisgICAgCiAgICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQogICAgIHsKICAg
ICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWYXJpYWJsZVJlZihub2RlLm9yaWdpbiwgbm9kZS5uYW1l
KTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExp
YnJhcnkuanMJKHJldmlzaW9uIDIyMjAzNykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1N0YW5kYXJkTGlicmFyeS5qcwkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOSBAQCB0
eXBlZGVmIHVpbnQgPSB1aW50MzI7CiAKIG5hdGl2ZSBwcmltaXRpdmUgdHlwZWRlZiBkb3VibGU7
CiAKK25hdGl2ZSBvcGVyYXRvciBpbnQzMih1aW50MzIpOworbmF0aXZlIG9wZXJhdG9yIHVpbnQz
MihpbnQzMik7CisKIG5hdGl2ZSBpbnQgb3BlcmF0b3IrKGludCwgaW50KTsKIG5hdGl2ZSB1aW50
IG9wZXJhdG9yKyh1aW50LCB1aW50KTsKIG5hdGl2ZSBpbnQgb3BlcmF0b3ItKGludCwgaW50KTsK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJKHJldmlzaW9uIDIy
MjAzOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogPHNjcmlwdCBzcmM9IkNvbW1hRXhwcmVzc2lvbi5q
cyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ29uc3RleHByVHlwZVBhcmFtZXRlci5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ29udGludWUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
IkNvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iRG9XaGlsZUxvb3AuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkRvdEV4cHJlc3Npb24u
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkRlcmVmZXJlbmNlRXhwcmVzc2lvbi5qcyI+PC9z
Y3JpcHQ+CkBAIC02NSw2ICs2Niw3IEBACiA8c2NyaXB0IHNyYz0iTGl0ZXJhbFR5cGVDaGVja2Vy
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJMb2dpY2FsTm90LmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJMb29wQ2hlY2tlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iTWFrZUFy
cmF5UmVmRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTWFrZVB0ckV4cHJl
c3Npb24uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ik5hbWVDb250ZXh0LmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJOYW1lUmVzb2x2ZXIuanMiPjwvc2NyaXB0PgpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCShyZXZpc2lvbiAyMjIwMzgpCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMTc0LDYg
KzIxNzQsMjE0IEBAIGZ1bmN0aW9uIFRFU1RfYXNzaWduVWludFRvSW50KCkKICAgICAgICAgKGUp
ID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5pbmRleE9mKCJUeXBlIG1p
c21hdGNoIGluIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uIikgIT0gLTEpOwogfQogCitmdW5jdGlv
biBURVNUX2J1aWxkQXJyYXlUaGVuU3VtSXQoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVw
KGAKKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludFs0Ml0gYXJy
YXk7CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCA0MjsgaSA9IGkgKyAxKQorICAg
ICAgICAgICAgICAgIGFycmF5W2ldID0gaW50KGkgKyA1KTsKKyAgICAgICAgICAgIGludCByZXN1
bHQ7CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCA0MjsgaSA9IGkgKyAxKQorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIGFycmF5W2ldOworICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNh
bGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgNDIgKiA1ICsgNDIgKiA0MSAvIDIp
OworfQorCitmdW5jdGlvbiBURVNUX2J1aWxkQXJyYXlUaGVuU3VtSXRVc2luZ0FycmF5UmVmZXJl
bmNlKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGludCBiYXIodGhy
ZWFkIGludFtdIGFycmF5KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7
IGkgPCA0MjsgaSA9IGkgKyAxKQorICAgICAgICAgICAgICAgIGFycmF5W2ldID0gaW50KGkgKyA1
KTsKKyAgICAgICAgICAgIGludCByZXN1bHQ7CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7
IGkgPCA0MjsgaSA9IGkgKyAxKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIGFy
cmF5W2ldOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBp
bnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50WzQyXSBhcnJheTsKKyAgICAgICAg
ICAgIHJldHVybiBiYXIoQGFycmF5KTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgNDIgKiA1ICsg
NDIgKiA0MSAvIDIpOworfQorCitmdW5jdGlvbiBURVNUX292ZXJyaWRlU3Vic2NyaXB0U3RydWN0
KCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHN0cnVjdCBGb28gewor
ICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICBpbnQgeTsKKyAgICAgICAgfQorICAgICAg
ICB0aHJlYWQgaW50XiBvcGVyYXRvciZbXSh0aHJlYWQgRm9vXiBmb28sIHVpbnQgaW5kZXgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSAwKQorICAgICAgICAgICAgICAgIHJl
dHVybiAmZm9vLT54OworICAgICAgICAgICAgaWYgKGluZGV4ID09IDEpCisgICAgICAgICAgICAg
ICAgcmV0dXJuICZmb28tPnk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQor
ICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vIGZvbzsKKyAgICAg
ICAgICAgIGZvby54ID0gNDk4OworICAgICAgICAgICAgZm9vLnkgPSAxOTsKKyAgICAgICAgICAg
IHJldHVybiBmb29bMF0gKyBmb29bMV07CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0lu
dChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIDQ5OCArIDE5
KTsKK30KKworZnVuY3Rpb24gVEVTVF9vdmVycmlkZVN1YnNjcmlwdFN0cnVjdEFuZERvU3RvcmVz
KCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHN0cnVjdCBGb28gewor
ICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICBpbnQgeTsKKyAgICAgICAgfQorICAgICAg
ICB0aHJlYWQgaW50XiBvcGVyYXRvciZbXSh0aHJlYWQgRm9vXiBmb28sIHVpbnQgaW5kZXgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSAwKQorICAgICAgICAgICAgICAgIHJl
dHVybiAmZm9vLT54OworICAgICAgICAgICAgaWYgKGluZGV4ID09IDEpCisgICAgICAgICAgICAg
ICAgcmV0dXJuICZmb28tPnk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQor
ICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vIGZvbzsKKyAgICAg
ICAgICAgIGZvb1swXSA9IDQ5ODsKKyAgICAgICAgICAgIGZvb1sxXSA9IDE5OworICAgICAgICAg
ICAgcmV0dXJuIGZvby54ICsgZm9vLnk7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0lu
dChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIDQ5OCArIDE5
KTsKK30KKworZnVuY3Rpb24gVEVTVF9vdmVycmlkZVN1YnNjcmlwdFN0cnVjdEFuZFVzZVBvaW50
ZXJzKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHN0cnVjdCBGb28g
eworICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICBpbnQgeTsKKyAgICAgICAgfQorICAg
ICAgICB0aHJlYWQgaW50XiBvcGVyYXRvciZbXSh0aHJlYWQgRm9vXiBmb28sIHVpbnQgaW5kZXgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSAwKQorICAgICAgICAgICAgICAg
IHJldHVybiAmZm9vLT54OworICAgICAgICAgICAgaWYgKGluZGV4ID09IDEpCisgICAgICAgICAg
ICAgICAgcmV0dXJuICZmb28tPnk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAg
fQorICAgICAgICBpbnQgYmFyKHRocmVhZCBGb29eIGZvbykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuICheZm9vKVswXSArICheZm9vKVsxXTsKKyAgICAgICAgfQorICAgICAgICBpbnQg
Zm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vIGZvbzsKKyAgICAgICAgICAgIGZvby54
ID0gNDk4OworICAgICAgICAgICAgZm9vLnkgPSAxOTsKKyAgICAgICAgICAgIHJldHVybiBiYXIo
JmZvbyk7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIDQ5OCArIDE5KTsKK30KKworZnVuY3Rpb24g
VEVTVF9vdmVycmlkZVN1YnNjcmlwdFN0cnVjdEFuZFVzZVBvaW50ZXJzSW5jb3JyZWN0bHkoKQor
eworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHN0
cnVjdCBGb28geworICAgICAgICAgICAgICAgIGludCB4OworICAgICAgICAgICAgICAgIGludCB5
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyZWFkIGludF4gb3BlcmF0b3ImW10odGhy
ZWFkIEZvb14gZm9vLCB1aW50IGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChpbmRleCA9PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJmZvby0+eDsKKyAg
ICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICZmb28tPnk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpbnQgYmFyKHRocmVhZCBGb29eIGZvbykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZm9vWzBdICsgZm9vWzFdOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRm9vIGZvbzsK
KyAgICAgICAgICAgICAgICBmb28ueCA9IDQ5ODsKKyAgICAgICAgICAgICAgICBmb28ueSA9IDE5
OworICAgICAgICAgICAgICAgIHJldHVybiBiYXIoJmZvbyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOworfQorCitm
dW5jdGlvbiBURVNUX21ha2VBcnJheVJlZkZyb21Mb2NhbCgpCit7CisgICAgbGV0IHByb2dyYW0g
PSBkb1ByZXAoYAorICAgICAgICBpbnQgYmFyKHRocmVhZCBpbnRbXSByZWYpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiByZWZbMF07CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbygp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB4ID0gNDg7CisgICAgICAgICAgICByZXR1cm4g
YmFyKEB4KTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgNDgpOworfQorCitmdW5jdGlvbiBURVNU
X21ha2VBcnJheVJlZkZyb21Qb2ludGVyKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChg
CisgICAgICAgIGludCBiYXIodGhyZWFkIGludFtdIHJlZikKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIHJlZlswXTsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmF6KHRocmVhZCBpbnRe
IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhcihAcHRyKTsKKyAgICAgICAg
fQorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHggPSA0ODsK
KyAgICAgICAgICAgIHJldHVybiBiYXooJngpOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hl
Y2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW10pLCA0OCk7
Cit9CisKK2Z1bmN0aW9uIFRFU1RfbWFrZUFycmF5UmVmRnJvbUFycmF5UmVmKCkKK3sKKyAgICBj
aGVja0ZhaWwoCisgICAgICAgICgpID0+IGRvUHJlcChgCisgICAgICAgICAgICBpbnQgYmFyKHRo
cmVhZCBpbnRbXSByZWYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
ZlswXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBiYXoodGhyZWFkIGludFtdIHB0
cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFyKEBwdHIpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaW50IHggPSA0ODsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmF6KEB4KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5
cGVFcnJvcik7Cit9CisKIGxldCBmaWx0ZXIgPSAvLiovOyAvLyBydW4gZXZlcnl0aGluZyBieSBk
ZWZhdWx0CiBpZiAodGhpc1siYXJndW1lbnRzIl0pIHsKICAgICBmb3IgKGxldCBpID0gMDsgaSA8
IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVmlzaXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9WaXNpdG9yLmpzCShyZXZpc2lvbiAyMjIwMzgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDE4IEBA
IGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgICAgIG5vZGUubFZhbHVl
LnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKKyAgICB2aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Np
b24obm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpOworICAgICAg
ICBpZiAobm9kZS5udW1FbGVtZW50cykKKyAgICAgICAgICAgIG5vZGUubnVtRWxlbWVudHMudmlz
aXQodGhpcyk7CisgICAgfQorICAgIAorICAgIHZpc2l0Q29udmVydFB0clRvQXJyYXlSZWZFeHBy
ZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKTsKKyAg
ICB9CisgICAgCiAgICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQogICAgIHsKICAgICAgICAgaWYg
KG5vZGUudmFyaWFibGUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320958</attachid>
            <date>2017-09-15 13:38:30 -0700</date>
            <delta_ts>2017-09-15 15:43:42 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31063</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjEwOCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDkzIEBACisyMDE3LTA5LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmF0aW9uYWxpemUgaG93IFdTTCdzIG9wZXJhdG9yJltdIHdvcmtzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY5NTgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFr
ZXMgb3BlcmF0b3ImW10gd29yayB3aXRoIG5vbi1hcnJheS1yZWYgdHlwZXMuIFRoZSB3YXkgdGhp
cyB3b3JrcyBpcyB0aGF0IGlmIHlvdSBkbyBiYXNlW2luZGV4XQorICAgICAgICB0aGVuIHdlIHBh
dHRlcm4gbWF0Y2ggYmFzZSdzIHR5cGUgYW5kIHByb2NlZWQgYWNjb3JkaW5nbHk6CisgICAgICAg
IAorICAgICAgICAgICAgSWYgYmFzZSdzIHR5cGUgaXMgVF46CisgICAgICAgICAgICAgICAgPT4g
UmVqZWN0CisgICAgICAgICAgICAKKyAgICAgICAgICAgIElmIGJhc2UncyB0eXBlIGlzIFRbXToK
KyAgICAgICAgICAgICAgICA9PiBBY2NlcHQKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSWYg
YmFzZSdzIHR5cGUgaXMgVFtjXToKKyAgICAgICAgICAgICAgICA9PiBXcmFwIGl0IHdpdGggYSBN
YWtlQXJyYXlSZWZFeHByZXNzaW9uIGFuZCBhY2NlcHQuCisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEFsbCBvdGhlciBjYXNlczoKKyAgICAgICAgICAgICAgICA9PiBXcmFwIGl0IHdpdGggYSBN
YWtlUHRyRXhwcmVzc2lvbiBhbmQgYWNjZXB0LgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtl
cyBpdCBwb3NzaWJsZSBmb3Igb3BlcmF0b3ImW10gdG8gd29yayB3aXRoIGx2YWx1ZXMuIEl0IGFs
c28gbWVhbnMgdGhhdCBvcGVyYXRvciZbXSBnZXRzIHRvCisgICAgICAgICJzZWUiIHRoZSB0ZW1w
b3JhcnkgdmFsdWVzIHdlIGNyZWF0ZSB2aWEgc25hcHNob3QoKSBpbiB0aGUgaW50ZXJwcmV0ZXIu
IFdlJ2xsIGhhdmUgdG8gZml4IHRoYXQsIGFuZCBJJ3ZlCisgICAgICAgIGZpbGVkIGJ1ZyAxNzY5
NzMgZm9yIHRoYXQuIE9uY2UgdGhhdCdzIGZpeGVkLCB0aGlzIHdpbGwgaGF2ZSB3ZWxsLWRlZmlu
ZWQgYmVoYXZpb3IsIHRob3VnaCB3aXRoIHRoZSB2ZXJ5CisgICAgICAgIHBlY3VsaWFyIGNhdmVh
dCB0aGF0IGFuIGV4cHJlc3Npb24gbGlrZSB0aGlzOgorICAgICAgICAKKyAgICAgICAgICAgICB0
b3RhbGx5Tm90QW5MVmFsdWUoKVs0Ml0KKyAgICAgICAgCisgICAgICAgIENvdWxkIGJlIHVzZWQg
dG8gZ2V0IGEgcG9pbnRlciB0byBhIG5vbi1sdmFsdWUuIEJ1dCB3ZSBjYW4gYmUgZXh0cmVtZWx5
IHByZWNpc2UgYWJvdXQgd2hhdCB0aGF0IG1lYW5zCisgICAgICAgIGFuZCBwcm9oaWJpdCBkYW5n
bGluZyBwb2ludGVycywgd2hpY2ggaXMga2luZGEgY3JhenkuCisgICAgICAgIAorICAgICAgICBJ
biBvcmRlciB0byBkbyB0aGlzLCBJIGhhZCB0byBtYWtlIE1ha2VBcnJheVJlZkV4cHJlc3Npb24g
d29yaywgc28gSSBkaWQgdGhhdCBhbmQgYWRkZWQgdGVzdHMgZm9yIGl0LgorCisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0FycmF5UmVmVHlwZS5qczoKKyAgICAgICAgKEFycmF5UmVmVHlwZS5wcm90b3R5
cGUudW5pZnlJbXBsKToKKyAgICAgICAgKEFycmF5UmVmVHlwZS5wcm90b3R5cGUudG9TdHJpbmcp
OgorICAgICAgICAoQXJyYXlSZWZUeXBlKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9BcnJheVR5cGUuanM6CisgICAgICAgIChBcnJheVR5cGUpOgorICAgICAgICAoQXJyYXlU
eXBlLnByb3RvdHlwZS5nZXQgbnVtRWxlbWVudHNWYWx1ZSk6CisgICAgICAgIChBcnJheVR5cGUu
cHJvdG90eXBlLmdldCBzaXplKToKKyAgICAgICAgKEFycmF5VHlwZS5wcm90b3R5cGUucG9wdWxh
dGVEZWZhdWx0VmFsdWUpOgorICAgICAgICAoQXJyYXlUeXBlLnByb3RvdHlwZS51bmlmeUltcGwp
OgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanM6CisgICAgICAg
ICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9u
LmpzOiBBZGRlZC4KKyAgICAgICAgKENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbik6Cisg
ICAgICAgIChDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24ucHJvdG90eXBlLmdldCBsVmFs
dWUpOgorICAgICAgICAoQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uLnByb3RvdHlwZS50
b1N0cmluZyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ3JlYXRlTGl0ZXJh
bC5qczoKKyAgICAgICAgKGNyZWF0ZUxpdGVyYWwuR2VuZXJpY0xpdGVyYWwud2l0aFR5cGUpOgor
ICAgICAgICAoY3JlYXRlTGl0ZXJhbC5HZW5lcmljTGl0ZXJhbC5wcm90b3R5cGUuZ2V0IGlzTGl0
ZXJhbCk6CisgICAgICAgIChjcmVhdGVMaXRlcmFsLkdlbmVyaWNMaXRlcmFsLnByb3RvdHlwZS51
bmlmeUltcGwpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0RvdEV4cHJlc3Np
b24uanM6CisgICAgICAgIChEb3RFeHByZXNzaW9uLnByb3RvdHlwZS5nZXQgYWRkcmVzc1NwYWNl
KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3IuanM6CisgICAg
ICAgIChFdmFsdWF0b3IucHJvdG90eXBlLnZpc2l0TWFrZUFycmF5UmVmRXhwcmVzc2lvbik6Cisg
ICAgICAgIChFdmFsdWF0b3IucHJvdG90eXBlLnZpc2l0Q29udmVydFB0clRvQXJyYXlSZWZFeHBy
ZXNzaW9uKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpz
OgorICAgICAgICAoSW50cmluc2ljcyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5qczogQWRkZWQuCisgICAgICAgIChNYWtlQXJyYXlS
ZWZFeHByZXNzaW9uKToKKyAgICAgICAgKE1ha2VBcnJheVJlZkV4cHJlc3Npb24ucHJvdG90eXBl
LmdldCBsVmFsdWUpOgorICAgICAgICAoTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5wcm90b3R5cGUu
YmVjb21lQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uKToKKyAgICAgICAgKE1ha2VBcnJh
eVJlZkV4cHJlc3Npb24ucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9NYWtlUHRyRXhwcmVzc2lvbi5qczoKKyAgICAgICAgKE1ha2VQdHJFeHBy
ZXNzaW9uLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgIChNYWtlUHRyRXhwcmVzc2lvbik6
CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHRyVHlwZS5qczoKKyAgICAgICAg
KFB0clR5cGUucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKFB0clR5cGUpOgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlZmVyZW5jZVR5cGUuanM6CisgICAgICAgIChS
ZWZlcmVuY2VUeXBlKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRl
ci5qczoKKyAgICAgICAgKFJld3JpdGVyLnByb3RvdHlwZS52aXNpdEFycmF5VHlwZSk6CisgICAg
ICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRNYWtlQXJyYXlSZWZFeHByZXNzaW9uKToKKyAg
ICAgICAgKFJld3JpdGVyLnByb3RvdHlwZS52aXNpdENvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVz
c2lvbik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5
LmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbDoKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzOgorICAgICAgICAoVEVTVF9idWls
ZEFycmF5VGhlblN1bUl0VXNpbmdBcnJheVJlZmVyZW5jZSk6CisgICAgICAgIChURVNUX292ZXJy
aWRlU3Vic2NyaXB0U3RydWN0KToKKyAgICAgICAgKFRFU1Rfb3ZlcnJpZGVTdWJzY3JpcHRTdHJ1
Y3RBbmRVc2VQb2ludGVycyk6CisgICAgICAgIChURVNUX292ZXJyaWRlU3Vic2NyaXB0U3RydWN0
QW5kVXNlUG9pbnRlcnNJbmNvcnJlY3RseSk6CisgICAgICAgIChURVNUX21ha2VBcnJheVJlZkZy
b21Qb2ludGVyKToKKyAgICAgICAgKFRFU1RfbWFrZUFycmF5UmVmRnJvbUFycmF5UmVmKToKKyAg
ICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzOgorICAgICAgICAoVmlz
aXRvci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERlY2wpOgorCiAyMDE3LTA5LTE0ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgV1NMIHNob3VsZCBzdXBwb3J0ICsr
LCAtLSwgKz0sIGFuZCBhbGwgb2YgdGhvc2UgdGhpbmdzCkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9BbGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvQWxsLmpzCShyZXZpc2lvbiAyMjIxMDgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9BbGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAgbG9hZCgi
Q2hlY2tlci5qcyIpOwogbG9hZCgiQ29tbWFFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJDb25zdGV4
cHJUeXBlUGFyYW1ldGVyLmpzIik7CiBsb2FkKCJDb250aW51ZS5qcyIpOworbG9hZCgiQ29udmVy
dFB0clRvQXJyYXlSZWZFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJEZXJlZmVyZW5jZUV4cHJlc3Np
b24uanMiKTsKIGxvYWQoIkRvV2hpbGVMb29wLmpzIik7CiBsb2FkKCJEb3RFeHByZXNzaW9uLmpz
Iik7CkBAIC04OSw2ICs5MCw3IEBAIGxvYWQoIkxleGVyVG9rZW4uanMiKTsKIGxvYWQoIkxpdGVy
YWxUeXBlQ2hlY2tlci5qcyIpOwogbG9hZCgiTG9naWNhbE5vdC5qcyIpOwogbG9hZCgiTG9vcENo
ZWNrZXIuanMiKTsKK2xvYWQoIk1ha2VBcnJheVJlZkV4cHJlc3Npb24uanMiKTsKIGxvYWQoIk1h
a2VQdHJFeHByZXNzaW9uLmpzIik7CiBsb2FkKCJOYW1lQ29udGV4dC5qcyIpOwogbG9hZCgiTmFt
ZVJlc29sdmVyLmpzIik7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJh
eVJlZlR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
QXJyYXlSZWZUeXBlLmpzCShyZXZpc2lvbiAyMjIxMDgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9BcnJheVJlZlR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE1ICsyOSwx
MiBAQAogY2xhc3MgQXJyYXlSZWZUeXBlIGV4dGVuZHMgUmVmZXJlbmNlVHlwZSB7CiAgICAgdW5p
ZnlJbXBsKHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpCiAgICAgewotICAgICAgICBpZiAob3Ro
ZXIgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLmFkZHJl
c3NTcGFjZSAhPSBvdGhlci5hZGRyZXNzU3BhY2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2Vv
ZiBBcnJheVR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IGlmICh0aGlzLmFkZHJlc3NTcGFjZSAhPSAidGhyZWFkIikKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBBcnJh
eVJlZlR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAg
aWYgKHRoaXMuYWRkcmVzc1NwYWNlICE9IG90aGVyLmFkZHJlc3NTcGFjZSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBl
LnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIuZWxlbWVudFR5cGUpOwogICAgIH0KICAg
ICAKQEAgLTQ1LDcgKzQyLDcgQEAgY2xhc3MgQXJyYXlSZWZUeXBlIGV4dGVuZHMgUmVmZXJlbmNl
VHlwZQogCiAgICAgdG9TdHJpbmcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuYWRkcmVz
c1NwYWNlICsgIiAiICsgdGhpcy5lbGVtZW50VHlwZSArICJbXSI7CisgICAgICAgIHJldHVybiB0
aGlzLmVsZW1lbnRUeXBlICsgIltdICIgKyB0aGlzLmFkZHJlc3NTcGFjZTsKICAgICB9CiB9CiAK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BcnJheVR5cGUuanMJKHJldmlz
aW9uIDIyMjEwOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FycmF5VHlwZS5q
cwkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogY2xhc3MgQXJyYXlUeXBlIGV4dGVu
ZHMgVHlwZSB7CiAgICAgY29uc3RydWN0b3Iob3JpZ2luLCBlbGVtZW50VHlwZSwgbnVtRWxlbWVu
dHMpCiAgICAgeworICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQorICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJudWxsIG51bUVsZW1lbnRzIik7CiAgICAgICAgIHN1cGVyKCk7CiAgICAgICAg
IHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKICAgICAgICAgdGhpcy5fZWxlbWVudFR5cGUgPSBlbGVt
ZW50VHlwZTsKQEAgLTM4LDYgKzQwLDEzIEBAIGNsYXNzIEFycmF5VHlwZSBleHRlbmRzIFR5cGUg
ewogICAgIGdldCBudW1FbGVtZW50cygpIHsgcmV0dXJuIHRoaXMuX251bUVsZW1lbnRzOyB9CiAg
ICAgZ2V0IGlzUHJpbWl0aXZlKCkgeyByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5pc1ByaW1pdGl2
ZTsgfQogICAgIAorICAgIGdldCBudW1FbGVtZW50c1ZhbHVlKCkKKyAgICB7CisgICAgICAgIGlm
ICghKHRoaXMubnVtRWxlbWVudHMuaXNMaXRlcmFsKSkKKyAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigibnVtRWxlbWVudHMgaXMgbm90IGEgbGl0ZXJhbDogIiArIHRoaXMubnVtRWxlbWVudHMp
OworICAgICAgICByZXR1cm4gdGhpcy5udW1FbGVtZW50cy52YWx1ZTsKKyAgICB9CisKICAgICB0
b1N0cmluZygpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZSArICJbIiAr
IHRoaXMubnVtRWxlbWVudHMgKyAiXSI7CkBAIC00NSwyMSArNTQsMjIgQEAgY2xhc3MgQXJyYXlU
eXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgCiAgICAgZ2V0IHNpemUoKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuc2l6ZSAqIHRoaXMubnVtRWxlbWVudHM7CisgICAgICAg
IHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnNpemUgKiB0aGlzLm51bUVsZW1lbnRzVmFsdWU7CiAg
ICAgfQogICAgIAotICAgIHVuaWZ5SW1wbCh1bmlmaWNhdG9uQ29udGV4dCwgb3RoZXIpCisgICAg
cG9wdWxhdGVEZWZhdWx0VmFsdWUoYnVmZmVyLCBvZmZzZXQpCiAgICAgewotICAgICAgICBpZiAo
b3RoZXIgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUpIHsKLSAgICAgICAgICAgIGlmIChvdGhlci5h
ZGRyZXNzU3BhY2UgIT0gInRocmVhZCIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBBcnJh
eVR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKCF0aGlzLm51bUVsZW1lbnRzLnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwg
b3RoZXIubnVtRWxlbWVudHMpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQorICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubnVtRWxlbWVudHNWYWx1ZTsg
KytpKQorICAgICAgICAgICAgdGhpcy5lbGVtZW50VHlwZS5wb3B1bGF0ZURlZmF1bHRWYWx1ZShi
dWZmZXIsIG9mZnNldCArIGkgKiB0aGlzLmVsZW1lbnRUeXBlLnNpemUpOworICAgIH0KKyAgICAK
KyAgICB1bmlmeUltcGwodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcikKKyAgICB7CisgICAgICAg
IGlmICghKG90aGVyIGluc3RhbmNlb2YgQXJyYXlUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmICghdGhpcy5udW1FbGVtZW50cy51bmlmeSh1bmlm
aWNhdGlvbkNvbnRleHQsIG90aGVyLm51bUVsZW1lbnRzKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnVuaWZ5KHVu
aWZpY2F0aW9uQ29udGV4dCwgb3RoZXIuZWxlbWVudFR5cGUpOwogICAgIH0KSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkocmV2aXNpb24gMjIyMTA4KQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkod29ya2luZyBjb3B5KQpA
QCAtMTA3LDggKzEwNywxNSBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAg
CiAgICAgdmlzaXRBcnJheVR5cGUobm9kZSkKICAgICB7CisgICAgICAgIG5vZGUuZWxlbWVudFR5
cGUudmlzaXQodGhpcyk7CisgICAgICAgIAogICAgICAgICBpZiAoIW5vZGUubnVtRWxlbWVudHMu
aXNDb25zdGV4cHIpCiAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdp
bi5vcmlnaW5TdHJpbmcsICJBcnJheSBsZW5ndGggbXVzdCBiZSBjb25zdGV4cHIiKTsKKyAgICAg
ICAgCisgICAgICAgIGxldCB0eXBlID0gbm9kZS5udW1FbGVtZW50cy52aXNpdCh0aGlzKTsKKyAg
ICAgICAgCisgICAgICAgIGlmICghdHlwZS5lcXVhbHNXaXRoQ29tbWl0KHRoaXMuX3Byb2dyYW0u
aW50cmluc2ljcy51aW50MzIpKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9k
ZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQXJyYXkgbGVuZ3RoIG11c3QgYmUgYSB1aW50MzIiKTsK
ICAgICB9CiAgICAgCiAgICAgdmlzaXRWYXJpYWJsZURlY2wobm9kZSkKQEAgLTE0NywxMyArMTU0
LDQxIEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICB2aXNpdE1ha2VQdHJF
eHByZXNzaW9uKG5vZGUpCiAgICAgewogICAgICAgICBpZiAoIW5vZGUubFZhbHVlLmlzTFZhbHVl
KQotICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3Ry
aW5nLCAiT3BlcmFuZCB0byBcXCBpcyBub3QgYW4gTFZhbHVlOiAiICsgbm9kZS5sVmFsdWUpOwor
ICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5n
LCAiT3BlcmFuZCB0byAmIGlzIG5vdCBhbiBMVmFsdWU6ICIgKyBub2RlLmxWYWx1ZSk7CiAgICAg
ICAgIAogICAgICAgICBsZXQgZWxlbWVudFR5cGUgPSBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKS51
bmlmeU5vZGU7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbmV3IFB0clR5cGUobm9kZS5vcmln
aW4sIG5vZGUubFZhbHVlLmFkZHJlc3NTcGFjZSwgZWxlbWVudFR5cGUpOwogICAgIH0KICAgICAK
KyAgICB2aXNpdE1ha2VBcnJheVJlZkV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxl
dCBlbGVtZW50VHlwZSA9IG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpLnVuaWZ5Tm9kZTsKKyAgICAg
ICAgaWYgKGVsZW1lbnRUeXBlIGluc3RhbmNlb2YgUHRyVHlwZSkgeworICAgICAgICAgICAgbm9k
ZS5iZWNvbWVDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgQXJyYXlSZWZUeXBlKG5vZGUub3JpZ2luLCBlbGVtZW50VHlwZS5hZGRyZXNzU3Bh
Y2UsIGVsZW1lbnRUeXBlLmVsZW1lbnRUeXBlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKCFub2RlLmxWYWx1ZS5pc0xWYWx1ZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlw
ZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIk9wZXJhbmQgdG8gQCBpcyBub3QgYW4g
TFZhbHVlOiAiICsgbm9kZS5sVmFsdWUpOworICAgICAgICAKKyAgICAgICAgaWYgKGVsZW1lbnRU
eXBlIGluc3RhbmNlb2YgQXJyYXlSZWZUeXBlKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBl
RXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW1nLCAiT3BlcmFuZCB0byBAIGlzIGFuIGFycmF5
IHJlZmVyZW5jZTogIiArIGVsZW1lbnRUeXBlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChlbGVt
ZW50VHlwZSBpbnN0YW5jZW9mIEFycmF5VHlwZSkgeworICAgICAgICAgICAgbm9kZS5udW1FbGVt
ZW50cyA9IGVsZW1lbnRUeXBlLm51bUVsZW1lbnRzOworICAgICAgICAgICAgZWxlbWVudFR5cGUg
PSBlbGVtZW50VHlwZS5lbGVtZW50VHlwZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBu
b2RlLm51bUVsZW1lbnRzID0gVWludExpdGVyYWwud2l0aFR5cGUobm9kZS5vcmlnaW4sIDEsIHRo
aXMuX3Byb2dyYW0uaW50cmluc2ljcy51aW50MzIpOworICAgICAgICAgICAgCisgICAgICAgIHJl
dHVybiBuZXcgQXJyYXlSZWZUeXBlKG5vZGUub3JpZ2luLCBub2RlLmxWYWx1ZS5hZGRyZXNzU3Bh
Y2UsIGVsZW1lbnRUeXBlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRDb252ZXJ0VG9BcnJheVJl
ZkV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiU2hvdWxk
IG5vdCBleGlzdCB5ZXQuIik7CisgICAgfQorICAgIAogICAgIHZpc2l0RG90RXhwcmVzc2lvbihu
b2RlKQogICAgIHsKICAgICAgICAgbGV0IHN0cnVjdFR5cGUgPSBub2RlLnN0cnVjdC52aXNpdCh0
aGlzKS51bmlmeU5vZGU7CkBAIC0yOTcsNiArMzMyLDI0IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5k
cyBWaXNpdG9yIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInZpc2l0b3IgcmV0
dXJuZWQgbnVsbCBmb3IgIiArIGFyZ3VtZW50KTsKICAgICAgICAgICAgIHJldHVybiBUeXBlUmVm
LndyYXAobmV3QXJndW1lbnQpOwogICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIC8vIEhl
cmUgd2UgbmVlZCB0byBoYW5kbGUgdGhlIGNhc2VzIHdoZXJlIG9wZXJhdG9yJltdIGlzIGNhbGxl
ZCB3aXRoIGEgdHlwZSB0aGF0IGlzbid0IHN1ZmZpY2llbnRseQorICAgICAgICAvLyByZWZlcmVu
Y2V5LgorICAgICAgICBpZiAobm9kZS5uYW1lID09ICJvcGVyYXRvciZbXSIpIHsKKyAgICAgICAg
ICAgIGxldCBhcmdUeXBlID0gYXJndW1lbnRUeXBlc1swXS51bmlmeU5vZGU7CisgICAgICAgICAg
ICBpZiAoYXJnVHlwZSBpbnN0YW5jZW9mIFB0clR5cGUpCisgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUG9pbnRlciBzdWJzY3Jp
cHQgaXMgbm90IHZhbGlkIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChhcmdUeXBl
IGluc3RhbmNlb2YgQXJyYXlUeXBlKSB7CisgICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExp
c3RbMF0gPSBuZXcgTWFrZUFycmF5UmVmRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5hcmd1
bWVudExpc3RbMF0pOworICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0WzBdLm51bUVs
ZW1lbnRzID0gYXJnVHlwZS5udW1FbGVtZW50czsKKyAgICAgICAgICAgICAgICBhcmd1bWVudFR5
cGVzWzBdID0gbmV3IEFycmF5UmVmVHlwZShub2RlLm9yaWdpbiwgInRocmVhZCIsIGFyZ1R5cGUu
ZWxlbWVudFR5cGUpOworICAgICAgICAgICAgfSBlbHNlIGlmICghKGFyZ1R5cGUgaW5zdGFuY2Vv
ZiBBcnJheVJlZlR5cGUpKSB7CisgICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3RbMF0g
PSBuZXcgTWFrZVB0ckV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUuYXJndW1lbnRMaXN0WzBd
KTsKKyAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVzWzBdID0gbmV3IFB0clR5cGUobm9kZS5v
cmlnaW4sICJ0aHJlYWQiLCBhcmd1bWVudFR5cGVzWzBdKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgbm9kZS5hcmd1bWVudFR5cGVzID0gYXJndW1lbnRUeXBl
czsKICAgICAgICAgaWYgKG5vZGUucmV0dXJuVHlwZSkKICAgICAgICAgICAgIG5vZGUucmV0dXJu
VHlwZS52aXNpdCh0aGlzKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Nv
bnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9Db252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24uanMJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ29udmVydFB0clRv
QXJyYXlSZWZFeHByZXNzaW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsK
KworY2xhc3MgQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lv
biB7CisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBsVmFsdWUpCisgICAgeworICAgICAgICBzdXBl
cihvcmlnaW4pOworICAgICAgICB0aGlzLl9sVmFsdWUgPSBsVmFsdWU7CisgICAgfQorICAgIAor
ICAgIGdldCBsVmFsdWUoKSB7IHJldHVybiB0aGlzLl9sVmFsdWU7IH0KKyAgICAKKyAgICB0b1N0
cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gIkAoIiArIHRoaXMubFZhbHVlICsgIikiOwor
ICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ3JlYXRlTGl0
ZXJhbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DcmVh
dGVMaXRlcmFsLmpzCShyZXZpc2lvbiAyMjIxMDgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9DcmVhdGVMaXRlcmFsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCwyMyBA
QCBmdW5jdGlvbiBjcmVhdGVMaXRlcmFsKGNvbmZpZykKICAgICAgICAgICAgIHRoaXMudHlwZSA9
IGNvbmZpZy5jcmVhdGVUeXBlLmNhbGwodGhpcywgb3JpZ2luLCB2YWx1ZSk7CiAgICAgICAgIH0K
ICAgICAgICAgCisgICAgICAgIHN0YXRpYyB3aXRoVHlwZShvcmlnaW4sIHZhbHVlLCB0eXBlKQor
ICAgICAgICB7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEdlbmVyaWNMaXRlcmFsKG9y
aWdpbiwgdmFsdWUpOworICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUeXBlUmVmLndyYXAodHlw
ZSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAogICAg
ICAgICBnZXQgdmFsdWUoKSB7IHJldHVybiB0aGlzLl92YWx1ZTsgfQogICAgICAgICBnZXQgaXND
b25zdGV4cHIoKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIGdldCBpc0xpdGVyYWwoKSB7IHJl
dHVybiB0cnVlOyB9CisgICAgICAgIAorICAgICAgICB1bmlmeUltcGwodW5pZmljYXRpb25Db250
ZXh0LCBvdGhlcikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2Vv
ZiBHZW5lcmljTGl0ZXJhbCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPT0gb3RoZXIudmFsdWU7CisgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIHRvU3RyaW5nKCkKICAgICAgICAgewpJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvRG90RXhwcmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpzCShyZXZpc2lvbiAyMjIxMDgpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3RFeHByZXNzaW9uLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIGNsYXNzIERvdEV4cHJlc3Npb24gZXh0ZW5kcyBFeHBy
ZXNzaW9uIHsKICAgICBnZXQgc3RydWN0KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0OyB9CiAgICAg
Z2V0IGZpZWxkTmFtZSgpIHsgcmV0dXJuIHRoaXMuX2ZpZWxkTmFtZTsgfQogICAgIGdldCBpc0xW
YWx1ZSgpIHsgcmV0dXJuIHRoaXMuc3RydWN0LmlzTFZhbHVlOyB9CisgICAgZ2V0IGFkZHJlc3NT
cGFjZSgpIHsgcmV0dXJuIHRoaXMuc3RydWN0LmFkZHJlc3NTcGFjZTsgfQogICAgIAogICAgIHRv
U3RyaW5nKCkKICAgICB7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFs
dWF0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZh
bHVhdG9yLmpzCShyZXZpc2lvbiAyMjIxMDgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9FdmFsdWF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsMTYgQEAgY2xh
c3MgRXZhbHVhdG9yIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHJldHVybiBFUHRyLmJveChu
b2RlLmxWYWx1ZS52aXNpdCh0aGlzKSk7CiAgICAgfQogICAgIAorICAgIHZpc2l0TWFrZUFycmF5
UmVmRXhwcmVzc2lvbihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVQdHIuYm94KG5ldyBF
QXJyYXlSZWYobm9kZS5sVmFsdWUudmlzaXQodGhpcyksIG5vZGUubnVtRWxlbWVudHMudmlzaXQo
dGhpcykubG9hZFZhbHVlKCkpKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRDb252ZXJ0UHRyVG9B
cnJheVJlZkV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBFUHRyLmJveChu
ZXcgRUFycmF5UmVmKG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpLmxvYWRWYWx1ZSgpLCAxKSk7Cisg
ICAgfQorICAgIAogICAgIHZpc2l0RG90RXhwcmVzc2lvbihub2RlKQogICAgIHsKICAgICAgICAg
bGV0IHN0cnVjdFB0ciA9IG5vZGUuc3RydWN0LnZpc2l0KHRoaXMpOwpJbmRleDogVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCShyZXZpc2lvbiAyMjIxMDgpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDQsNiArMTA0LDE4IEBAIGNsYXNzIEludHJpbnNpY3MgewogICAgICAgICAgICAg
fSk7CiAgICAgICAgIAogICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2
ZSBvcGVyYXRvciBpbnQzMjw+KHVpbnQzMikiLAorICAgICAgICAgICAgZnVuYyA9PiB7CisgICAg
ICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbdmFsdWVdKSA9PiBFUHRyLmJveCh2
YWx1ZS5sb2FkVmFsdWUoKSB8IDApOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAg
ICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSBvcGVyYXRvciB1aW50MzI8Pihp
bnQzMikiLAorICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgZnVuYy5pbXBs
ZW1lbnRhdGlvbiA9IChbdmFsdWVdKSA9PiBFUHRyLmJveCh2YWx1ZS5sb2FkVmFsdWUoKSA+Pj4g
MCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQoCiAg
ICAgICAgICAgICAibmF0aXZlIGludCBvcGVyYXRvcis8PihpbnQsaW50KSIsCiAgICAgICAgICAg
ICBmdW5jID0+IHsKICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFtsZWZ0
LCByaWdodF0pID0+CkBAIC0yNDksMTYgKzI2MSwxNiBAQCBjbGFzcyBJbnRyaW5zaWNzIHsKICAg
ICAgICAgfTsKICAgICAgICAgCiAgICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAi
bmF0aXZlIHRocmVhZCBUXiBvcGVyYXRvciZbXTxUPih0aHJlYWQgVFtdLHVpbnQpIiwKKyAgICAg
ICAgICAgICJuYXRpdmUgVF4gdGhyZWFkIG9wZXJhdG9yJltdPFQ+KFRbXSB0aHJlYWQsdWludCki
LAogICAgICAgICAgICAgYXJyYXlFbGVtZW50UHRyKTsKICAgICAgICAgdGhpcy5fbWFwLnNldCgK
LSAgICAgICAgICAgICJuYXRpdmUgdGhyZWFkZ3JvdXAgVF4gb3BlcmF0b3ImW108VDpwcmltaXRp
dmU+KHRocmVhZGdyb3VwIFRbXSx1aW50KSIsCisgICAgICAgICAgICAibmF0aXZlIFReIHRocmVh
ZGdyb3VwIG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZlPihUW10gdGhyZWFkZ3JvdXAsdWludCkiLAog
ICAgICAgICAgICAgYXJyYXlFbGVtZW50UHRyKTsKICAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAg
ICAgICAgICAgICJuYXRpdmUgZGV2aWNlIFReIG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZlPihkZXZp
Y2UgVFtdLHVpbnQpIiwKKyAgICAgICAgICAgICJuYXRpdmUgVF4gZGV2aWNlIG9wZXJhdG9yJltd
PFQ6cHJpbWl0aXZlPihUW10gZGV2aWNlLHVpbnQpIiwKICAgICAgICAgICAgIGFycmF5RWxlbWVu
dFB0cik7CiAgICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAibmF0aXZlIGNvbnN0
YW50IFReIG9wZXJhdG9yJltdPFQ6cHJpbWl0aXZlPihjb25zdGFudCBUW10sdWludCkiLAorICAg
ICAgICAgICAgIm5hdGl2ZSBUXiBjb25zdGFudCBvcGVyYXRvciZbXTxUOnByaW1pdGl2ZT4oVFtd
IGNvbnN0YW50LHVpbnQpIiwKICAgICAgICAgICAgIGFycmF5RWxlbWVudFB0cik7CiAgICAgfQog
ICAgIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTWFrZUFycmF5UmVmRXhw
cmVzc2lvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9N
YWtlQXJyYXlSZWZFeHByZXNzaW9uLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL01ha2VBcnJheVJlZkV4cHJlc3Npb24uanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBNYWtlQXJyYXlSZWZFeHByZXNzaW9uIGV4dGVu
ZHMgRXhwcmVzc2lvbiB7CisgICAgY29uc3RydWN0b3Iob3JpZ2luLCBsVmFsdWUpCisgICAgewor
ICAgICAgICBzdXBlcihvcmlnaW4pOworICAgICAgICB0aGlzLl9sVmFsdWUgPSBsVmFsdWU7Cisg
ICAgfQorICAgIAorICAgIGdldCBsVmFsdWUoKSB7IHJldHVybiB0aGlzLl9sVmFsdWU7IH0KKyAg
ICAKKyAgICBiZWNvbWVDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24oKQorICAgIHsKKyAg
ICAgICAgdGhpcy5fX3Byb3RvX18gPSBDb252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24ucHJv
dG90eXBlOworICAgIH0KKyAgICAKKyAgICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1
cm4gIkAiICsgKHRoaXMubnVtRWxlbWVudHMgPyAiPDwiICsgdGhpcy5udW1FbGVtZW50cyArICI+
PiIgOiAiIikgKyAiKCIgKyB0aGlzLmxWYWx1ZSArICIpIjsKKyAgICB9Cit9CisKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL01ha2VQdHJFeHByZXNzaW9uLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL01ha2VQdHJFeHByZXNzaW9uLmpz
CShyZXZpc2lvbiAyMjIxMDgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9NYWtl
UHRyRXhwcmVzc2lvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNiBAQCBjbGFzcyBN
YWtlUHRyRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3NpCiAgICAgCiAgICAgdG9TdHJpbmcoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuICImKCIgKyB0aGlzLnB0ciArICIpIjsKKyAgICAgICAgcmV0
dXJuICImKCIgKyB0aGlzLmxWYWx1ZSArICIpIjsKICAgICB9CiB9CkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9QdHJUeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanMJKHJldmlzaW9uIDIyMjEwOCkKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1B0clR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDcgKzM4LDcgQEAgY2xhc3MgUHRyVHlwZSBleHRlbmRzIFJlZmVyZW5jZVR5cGUgewogICAgIAog
ICAgIHRvU3RyaW5nKCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmFkZHJlc3NTcGFjZSAr
ICIgIiArIHRoaXMuZWxlbWVudFR5cGUgKyAiXiI7CisgICAgICAgIHJldHVybiB0aGlzLmVsZW1l
bnRUeXBlICsgIl4gIiArIHRoaXMuYWRkcmVzc1NwYWNlOwogICAgIH0KIH0KIApJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmVmZXJlbmNlVHlwZS5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZWZlcmVuY2VUeXBlLmpzCShyZXZpc2lv
biAyMjIxMDgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZWZlcmVuY2VUeXBl
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiBjbGFzcyBSZWZlcmVuY2VUeXBl
IGV4dGVuZHMgVHlwZSB7CiAgICAgY29uc3RydWN0b3Iob3JpZ2luLCBhZGRyZXNzU3BhY2UsIGVs
ZW1lbnRUeXBlKQogICAgIHsKKyAgICAgICAgaWYgKCFlbGVtZW50VHlwZSkKKyAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiTnVsbCBlbGVtZW50VHlwZSIpOwogICAgICAgICBzdXBlcigpOwog
ICAgICAgICB2YWxpZGF0ZUFkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpOwogICAgICAgICB0aGlz
Ll9vcmlnaW4gPSBvcmlnaW47CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9S
ZXdyaXRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9S
ZXdyaXRlci5qcwkocmV2aXNpb24gMjIyMTA4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUmV3cml0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsxNTcsNyBAQCBjbGFz
cyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JCYXNlIHsKICAgICAKICAgICB2aXNpdEFycmF5VHlw
ZShub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBBcnJheVR5cGUobm9kZS5vcmlnaW4s
IG5vZGUuZWxlbWVudFR5cGUudmlzaXQodGhpcykpOworICAgICAgICByZXR1cm4gbmV3IEFycmF5
VHlwZShub2RlLm9yaWdpbiwgbm9kZS5lbGVtZW50VHlwZS52aXNpdCh0aGlzKSwgbm9kZS5udW1F
bGVtZW50cy52aXNpdCh0aGlzKSk7CiAgICAgfQogICAgIAogICAgIHZpc2l0QXNzaWdubWVudChu
b2RlKQpAQCAtMTg5LDYgKzE4OSwxOSBAQCBjbGFzcyBSZXdyaXRlciBleHRlbmRzIFZpc2l0b3JC
YXNlIHsKICAgICAgICAgcmV0dXJuIG5ldyBNYWtlUHRyRXhwcmVzc2lvbihub2RlLm9yaWdpbiwg
bm9kZS5sVmFsdWUudmlzaXQodGhpcykpOwogICAgIH0KICAgICAKKyAgICB2aXNpdE1ha2VBcnJh
eVJlZkV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgTWFr
ZUFycmF5UmVmRXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5sVmFsdWUudmlzaXQodGhpcykp
OworICAgICAgICBpZiAobm9kZS5udW1FbGVtZW50cykKKyAgICAgICAgICAgIHJlc3VsdC5udW1F
bGVtZW50cyA9IG5vZGUubnVtRWxlbWVudHMudmlzaXQodGhpcyk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZpc2l0Q29udmVydFB0clRvQXJyYXlSZWZFeHByZXNz
aW9uKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IENvbnZlcnRQdHJUb0FycmF5UmVm
RXhwcmVzc2lvbihub2RlLm9yaWdpbiwgbm9kZS5sVmFsdWUudmlzaXQodGhpcykpOworICAgIH0K
KyAgICAKICAgICB2aXNpdFZhcmlhYmxlUmVmKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVz
dWx0ID0gbmV3IFZhcmlhYmxlUmVmKG5vZGUub3JpZ2luLCBub2RlLm5hbWUpOwpJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qcwkocmV2
aXNpb24gMjIyMTA4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRM
aWJyYXJ5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw5IEBAIHR5cGVkZWYgdWludCA9
IHVpbnQzMjsKIAogbmF0aXZlIHByaW1pdGl2ZSB0eXBlZGVmIGRvdWJsZTsKIAorbmF0aXZlIG9w
ZXJhdG9yIGludDMyKHVpbnQzMik7CituYXRpdmUgb3BlcmF0b3IgdWludDMyKGludDMyKTsKKwog
bmF0aXZlIGludCBvcGVyYXRvcisoaW50LCBpbnQpOwogbmF0aXZlIHVpbnQgb3BlcmF0b3IrKHVp
bnQsIHVpbnQpOwogaW50IG9wZXJhdG9yKysoaW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSArIDE7
IH0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJKHJldmlzaW9u
IDIyMjEwOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogPHNjcmlwdCBzcmM9IkNvbW1hRXhwcmVzc2lv
bi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ29uc3RleHByVHlwZVBhcmFtZXRlci5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ29udGludWUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9IkNvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iRG9XaGlsZUxvb3AuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkRvdEV4cHJlc3Np
b24uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkRlcmVmZXJlbmNlRXhwcmVzc2lvbi5qcyI+
PC9zY3JpcHQ+CkBAIC02Niw2ICs2Nyw3IEBACiA8c2NyaXB0IHNyYz0iTGl0ZXJhbFR5cGVDaGVj
a2VyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJMb2dpY2FsTm90LmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgc3JjPSJMb29wQ2hlY2tlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iTWFr
ZUFycmF5UmVmRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTWFrZVB0ckV4
cHJlc3Npb24uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ik5hbWVDb250ZXh0LmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJOYW1lUmVzb2x2ZXIuanMiPjwvc2NyaXB0PgpJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCShyZXZpc2lvbiAyMjIxMDgpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMzU4
LDYgKzIzNTgsMjE0IEBAIGZ1bmN0aW9uIFRFU1RfYXNzaWduVWludFRvSW50KCkKICAgICAgICAg
KGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5pbmRleE9mKCJUeXBl
IG1pc21hdGNoIGluIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uIikgIT0gLTEpOwogfQogCitmdW5j
dGlvbiBURVNUX2J1aWxkQXJyYXlUaGVuU3VtSXQoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9Q
cmVwKGAKKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludFs0Ml0g
YXJyYXk7CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCA0MjsgaSA9IGkgKyAxKQor
ICAgICAgICAgICAgICAgIGFycmF5W2ldID0gaW50KGkgKyA1KTsKKyAgICAgICAgICAgIGludCBy
ZXN1bHQ7CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCA0MjsgaSA9IGkgKyAxKQor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIGFycmF5W2ldOworICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0s
IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgNDIgKiA1ICsgNDIgKiA0MSAv
IDIpOworfQorCitmdW5jdGlvbiBURVNUX2J1aWxkQXJyYXlUaGVuU3VtSXRVc2luZ0FycmF5UmVm
ZXJlbmNlKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGludCBiYXIo
dGhyZWFkIGludFtdIGFycmF5KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9
IDA7IGkgPCA0MjsgaSA9IGkgKyAxKQorICAgICAgICAgICAgICAgIGFycmF5W2ldID0gaW50KGkg
KyA1KTsKKyAgICAgICAgICAgIGludCByZXN1bHQ7CisgICAgICAgICAgICBmb3IgKHVpbnQgaSA9
IDA7IGkgPCA0MjsgaSA9IGkgKyAxKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAr
IGFycmF5W2ldOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAg
ICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50WzQyXSBhcnJheTsKKyAgICAg
ICAgICAgIHJldHVybiBiYXIoQGFycmF5KTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNr
SW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgNDIgKiA1
ICsgNDIgKiA0MSAvIDIpOworfQorCitmdW5jdGlvbiBURVNUX292ZXJyaWRlU3Vic2NyaXB0U3Ry
dWN0KCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHN0cnVjdCBGb28g
eworICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICBpbnQgeTsKKyAgICAgICAgfQorICAg
ICAgICB0aHJlYWQgaW50XiBvcGVyYXRvciZbXSh0aHJlYWQgRm9vXiBmb28sIHVpbnQgaW5kZXgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSAwKQorICAgICAgICAgICAgICAg
IHJldHVybiAmZm9vLT54OworICAgICAgICAgICAgaWYgKGluZGV4ID09IDEpCisgICAgICAgICAg
ICAgICAgcmV0dXJuICZmb28tPnk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAg
fQorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vIGZvbzsKKyAg
ICAgICAgICAgIGZvby54ID0gNDk4OworICAgICAgICAgICAgZm9vLnkgPSAxOTsKKyAgICAgICAg
ICAgIHJldHVybiBmb29bMF0gKyBmb29bMV07CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVj
a0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIDQ5OCAr
IDE5KTsKK30KKworZnVuY3Rpb24gVEVTVF9vdmVycmlkZVN1YnNjcmlwdFN0cnVjdEFuZERvU3Rv
cmVzKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHN0cnVjdCBGb28g
eworICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICBpbnQgeTsKKyAgICAgICAgfQorICAg
ICAgICB0aHJlYWQgaW50XiBvcGVyYXRvciZbXSh0aHJlYWQgRm9vXiBmb28sIHVpbnQgaW5kZXgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSAwKQorICAgICAgICAgICAgICAg
IHJldHVybiAmZm9vLT54OworICAgICAgICAgICAgaWYgKGluZGV4ID09IDEpCisgICAgICAgICAg
ICAgICAgcmV0dXJuICZmb28tPnk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAg
fQorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vIGZvbzsKKyAg
ICAgICAgICAgIGZvb1swXSA9IDQ5ODsKKyAgICAgICAgICAgIGZvb1sxXSA9IDE5OworICAgICAg
ICAgICAgcmV0dXJuIGZvby54ICsgZm9vLnk7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVj
a0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIDQ5OCAr
IDE5KTsKK30KKworZnVuY3Rpb24gVEVTVF9vdmVycmlkZVN1YnNjcmlwdFN0cnVjdEFuZFVzZVBv
aW50ZXJzKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHN0cnVjdCBG
b28geworICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICBpbnQgeTsKKyAgICAgICAgfQor
ICAgICAgICB0aHJlYWQgaW50XiBvcGVyYXRvciZbXSh0aHJlYWQgRm9vXiBmb28sIHVpbnQgaW5k
ZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSAwKQorICAgICAgICAgICAg
ICAgIHJldHVybiAmZm9vLT54OworICAgICAgICAgICAgaWYgKGluZGV4ID09IDEpCisgICAgICAg
ICAgICAgICAgcmV0dXJuICZmb28tPnk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAg
ICAgfQorICAgICAgICBpbnQgYmFyKHRocmVhZCBGb29eIGZvbykKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuICheZm9vKVswXSArICheZm9vKVsxXTsKKyAgICAgICAgfQorICAgICAgICBp
bnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgRm9vIGZvbzsKKyAgICAgICAgICAgIGZv
by54ID0gNDk4OworICAgICAgICAgICAgZm9vLnkgPSAxOTsKKyAgICAgICAgICAgIHJldHVybiBi
YXIoJmZvbyk7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxs
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIDQ5OCArIDE5KTsKK30KKworZnVuY3Rp
b24gVEVTVF9vdmVycmlkZVN1YnNjcmlwdFN0cnVjdEFuZFVzZVBvaW50ZXJzSW5jb3JyZWN0bHko
KQoreworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAg
IHN0cnVjdCBGb28geworICAgICAgICAgICAgICAgIGludCB4OworICAgICAgICAgICAgICAgIGlu
dCB5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyZWFkIGludF4gb3BlcmF0b3ImW10o
dGhyZWFkIEZvb14gZm9vLCB1aW50IGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChpbmRleCA9PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJmZvby0+eDsK
KyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICZmb28tPnk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpbnQgYmFyKHRocmVhZCBGb29eIGZvbykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZm9vWzBdICsgZm9vWzFdOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRm9vIGZv
bzsKKyAgICAgICAgICAgICAgICBmb28ueCA9IDQ5ODsKKyAgICAgICAgICAgICAgICBmb28ueSA9
IDE5OworICAgICAgICAgICAgICAgIHJldHVybiBiYXIoJmZvbyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOworfQor
CitmdW5jdGlvbiBURVNUX21ha2VBcnJheVJlZkZyb21Mb2NhbCgpCit7CisgICAgbGV0IHByb2dy
YW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQgYmFyKHRocmVhZCBpbnRbXSByZWYpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiByZWZbMF07CisgICAgICAgIH0KKyAgICAgICAgaW50IGZv
bygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB4ID0gNDg7CisgICAgICAgICAgICByZXR1
cm4gYmFyKEB4KTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNh
bGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgNDgpOworfQorCitmdW5jdGlvbiBU
RVNUX21ha2VBcnJheVJlZkZyb21Qb2ludGVyKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJl
cChgCisgICAgICAgIGludCBiYXIodGhyZWFkIGludFtdIHJlZikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIHJlZlswXTsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmF6KHRocmVhZCBp
bnReIHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhcihAcHRyKTsKKyAgICAg
ICAgfQorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHggPSA0
ODsKKyAgICAgICAgICAgIHJldHVybiBiYXooJngpOworICAgICAgICB9CisgICAgYCk7CisgICAg
Y2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW10pLCA0
OCk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfbWFrZUFycmF5UmVmRnJvbUFycmF5UmVmKCkKK3sKKyAg
ICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRvUHJlcChgCisgICAgICAgICAgICBpbnQgYmFy
KHRocmVhZCBpbnRbXSByZWYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlZlswXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBiYXoodGhyZWFkIGludFtd
IHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFyKEBwdHIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGZvbygpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaW50IHggPSA0ODsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmF6KEB4KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2Yg
V1R5cGVFcnJvcik7Cit9CisKIGxldCBmaWx0ZXIgPSAvLiovOyAvLyBydW4gZXZlcnl0aGluZyBi
eSBkZWZhdWx0CiBpZiAodGhpc1siYXJndW1lbnRzIl0pIHsKICAgICBmb3IgKGxldCBpID0gMDsg
aSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvVmlzaXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9WaXNpdG9yLmpzCShyZXZpc2lvbiAyMjIxMDgpCisrKyBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDE4
IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgICAgIG5vZGUubFZh
bHVlLnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKKyAgICB2aXNpdE1ha2VBcnJheVJlZkV4cHJl
c3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUubFZhbHVlLnZpc2l0KHRoaXMpOworICAg
ICAgICBpZiAobm9kZS5udW1FbGVtZW50cykKKyAgICAgICAgICAgIG5vZGUubnVtRWxlbWVudHMu
dmlzaXQodGhpcyk7CisgICAgfQorICAgIAorICAgIHZpc2l0Q29udmVydFB0clRvQXJyYXlSZWZF
eHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICBub2RlLmxWYWx1ZS52aXNpdCh0aGlzKTsK
KyAgICB9CisgICAgCiAgICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQogICAgIHsKICAgICB9Cg==
</data>
<flag name="review"
          id="341017"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
      

    </bug>

</bugzilla>