<?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>157163</bug_id>
          
          <creation_ts>2016-04-28 23:03:29 -0700</creation_ts>
          <short_desc>First step in using &quot;enum class&quot; instead of &quot;String&quot; for enumerations in DOM</short_desc>
          <delta_ts>2016-05-01 16:37:01 -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>Bindings</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1188514</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-28 23:03:29 -0700</bug_when>
    <thetext>First step in using &quot;enum class&quot; instead of &quot;String&quot; for enumerations in DOM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188541</commentid>
    <comment_count>1</comment_count>
      <attachid>277681</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-29 00:28:13 -0700</bug_when>
    <thetext>Created attachment 277681
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188709</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-29 10:52:06 -0700</bug_when>
    <thetext>Chris, my next patch also deals with some cases of optional enum values too. Started working on it and will rebase once this is landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188729</commentid>
    <comment_count>3</comment_count>
      <attachid>277681</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-29 11:26:44 -0700</bug_when>
    <thetext>Comment on attachment 277681
Patch

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

r=me with a few comments.

&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:51
&gt; +    &quot;int&quot; =&gt; 1,

Hmm. There is not such thing in Web IDL.

&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:58
&gt; +    &quot;unsigned int&quot; =&gt; 1,

Hmm. There is not such thing in Web IDL.

&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:66
&gt; +my %stringTypeHash = ( &quot;DOMString&quot; =&gt; 1 );

Seems like we may want to get rid of this hash at some point.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:834
&gt; +sub EnumerationClassName {

I think we usually use &quot;Get&quot; prefix for such routines in the bindings generator.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:839
&gt; +sub EnumerationValueName {

I think we usually use &quot;Get&quot; prefix for such routines in the bindings generator.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:845
&gt; +sub EnumerationImplementationContent

I think we usually use &quot;Get&quot; prefix for such routines in the bindings generator.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:863
&gt; +        $result .= &quot;    static NeverDestroyed&lt;String&gt; values[] = {\n&quot;;

Just to confirm, is this really meant to be an array of NeverDestroyed&lt;String&gt; or a NeverDestroyed of an array of Strings (i.e. NeverDestroyed&lt;String[]&gt;) ?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:874
&gt; +                # Keep the style checker happy. Not sure I still love this style guideline.

I don&apos;t think we usually worry about style of the generated bindings. I would have kept the generator code simpler and ignored the style checker warning but it&apos;s your call.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:879
&gt; +        $result .= &quot;    ASSERT(static_cast&lt;size_t&gt;(enumerationValue) &lt; WTF_ARRAY_LENGTH(values));\n&quot;;

Should this be an ASSERT_WITH_SECURITY_IMPLICATIONS?

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:97
&gt; +    static NeverDestroyed&lt;String&gt; values[] = {

Shouldn&apos;t this use const String?

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:2294
&gt; +    TestEnumType nativeValue = enumerationValueTestEnumType(value.toWTFString(state)).value();

This seems wrong since the function returns an Optional&lt;TestEnumType&gt; but I am guessing you are planning to address this in a follow up?

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:2297
&gt;      if (nativeValue != &quot;&quot; &amp;&amp; nativeValue != &quot;EnumValue1&quot; &amp;&amp; nativeValue != &quot;EnumValue2&quot; &amp;&amp; nativeValue != &quot;EnumValue3&quot;)

Well, this is wrong too :)

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:3361
&gt; +    Optional nativeValue = enumerationValueOptional(value.toWTFString(state)).value();

Optional?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188745</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-29 12:16:01 -0700</bug_when>
    <thetext>FYI, the expected Web IDL [1] behavior when the JS is passing a string that is not a valid enum value is:
* For non-readonly attribute assignment:
-&gt; Ignore the assignment, do not throw

* For operation parameters:
-&gt; Throw a TypeError

I believe our bindings already behave correctly.

[1] http://heycam.github.io/webidl/#dfn-enumeration-value</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188994</commentid>
    <comment_count>5</comment_count>
      <attachid>277681</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-29 21:12:40 -0700</bug_when>
    <thetext>Comment on attachment 277681
Patch

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

&gt;&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:51
&gt;&gt; +    &quot;int&quot; =&gt; 1,
&gt; 
&gt; Hmm. There is not such thing in Web IDL.

Yes, I plan to delete &quot;int&quot; and &quot;unsigned int&quot; after changing the small number of uses to &quot;long&quot; and &quot;unsigned long&quot;.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:66
&gt;&gt; +my %stringTypeHash = ( &quot;DOMString&quot; =&gt; 1 );
&gt; 
&gt; Seems like we may want to get rid of this hash at some point.

I thought the same thing.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:863
&gt;&gt; +        $result .= &quot;    static NeverDestroyed&lt;String&gt; values[] = {\n&quot;;
&gt; 
&gt; Just to confirm, is this really meant to be an array of NeverDestroyed&lt;String&gt; or a NeverDestroyed of an array of Strings (i.e. NeverDestroyed&lt;String[]&gt;) ?

It’s an array of NeverDestroyed&lt;String&gt;, but that amounts to the same thing. Since the strings have no destructors, the array doesn’t have one either. I think either would work OK.

I probably would have made the entire array NeverDestroyed, but I don’t know how, and since this should work too, then I’m happy.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:874
&gt;&gt; +                # Keep the style checker happy. Not sure I still love this style guideline.
&gt; 
&gt; I don&apos;t think we usually worry about style of the generated bindings. I would have kept the generator code simpler and ignored the style checker warning but it&apos;s your call.

For now I’d prefer to to leave it like this, just because I like the &quot;style&quot; bubble to be green rather than explaining to myself why it’s not. I can take this out if I teach the style checker to not look at the files in WebCore/bindings/scripts/test, so I should probably come back and do that.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:879
&gt;&gt; +        $result .= &quot;    ASSERT(static_cast&lt;size_t&gt;(enumerationValue) &lt; WTF_ARRAY_LENGTH(values));\n&quot;;
&gt; 
&gt; Should this be an ASSERT_WITH_SECURITY_IMPLICATIONS?

Not sure. I am not an expert on when to use that. For what it’s worth, it’s an unlikely assertion to fail; illegal enumeration values are possible in theory but there’s no obvious way they’d be generated.

&gt;&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:97
&gt;&gt; +    static NeverDestroyed&lt;String&gt; values[] = {
&gt; 
&gt; Shouldn&apos;t this use const String?

Yes, it could use const. I think we could either make the entire array const or make the array value type be &quot;const String&quot;. Not sure which is better.

&gt;&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:2294
&gt;&gt; +    TestEnumType nativeValue = enumerationValueTestEnumType(value.toWTFString(state)).value();
&gt; 
&gt; This seems wrong since the function returns an Optional&lt;TestEnumType&gt; but I am guessing you are planning to address this in a follow up?

Yes; I have already addressed it in my next patch.

&gt;&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:2297
&gt;&gt;      if (nativeValue != &quot;&quot; &amp;&amp; nativeValue != &quot;EnumValue1&quot; &amp;&amp; nativeValue != &quot;EnumValue2&quot; &amp;&amp; nativeValue != &quot;EnumValue3&quot;)
&gt; 
&gt; Well, this is wrong too :)

Exactly, agreed. Fix coming soon.

&gt;&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:3361
&gt;&gt; +    Optional nativeValue = enumerationValueOptional(value.toWTFString(state)).value();
&gt; 
&gt; Optional?

That’s the name of the test enum in TestObj.idl. I’d figure out how to deal with this if we actually needed an enum by this name, but we don’t yet, so I am not going to worry about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188998</commentid>
    <comment_count>6</comment_count>
      <attachid>277681</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-29 21:14:47 -0700</bug_when>
    <thetext>Comment on attachment 277681
Patch

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

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:834
&gt;&gt; +sub EnumerationClassName {
&gt; 
&gt; I think we usually use &quot;Get&quot; prefix for such routines in the bindings generator.

Not sure I want to respect that, since it’s not how we do things elsewhere in WebKit. But I guess I will do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189004</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-29 21:20:49 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; FYI, the expected Web IDL [1] behavior when the JS is passing a string that
&gt; is not a valid enum value is:
&gt; * For non-readonly attribute assignment:
&gt; -&gt; Ignore the assignment, do not throw
&gt; 
&gt; * For operation parameters:
&gt; -&gt; Throw a TypeError
&gt; 
&gt; I believe our bindings already behave correctly.
&gt; 
&gt; [1] http://heycam.github.io/webidl/#dfn-enumeration-value

Yes, I noticed that when working on my next patch. I wrote a FIXME about it being wrong, and then looked it up and realized *I* was wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189018</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-29 22:08:38 -0700</bug_when>
    <thetext>Committed r200288: &lt;http://trac.webkit.org/changeset/200288&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189182</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-05-01 01:06:08 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Committed r200288: &lt;http://trac.webkit.org/changeset/200288&gt;

It broke the Apple Windows build, see build.webkit.org for details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189239</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-01 13:58:31 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Committed r200288: &lt;http://trac.webkit.org/changeset/200288&gt;
&gt; 
&gt; It broke the Apple Windows build, see build.webkit.org for details.

Landed a speculative build fix in &lt;http://trac.webkit.org/changeset/200310&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189249</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-01 15:21:19 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; Committed r200288: &lt;http://trac.webkit.org/changeset/200288&gt;
&gt; &gt; 
&gt; &gt; It broke the Apple Windows build, see build.webkit.org for details.
&gt; 
&gt; Landed a speculative build fix in &lt;http://trac.webkit.org/changeset/200310&gt;.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189258</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-01 16:34:33 -0700</bug_when>
    <thetext>Was the issue that Windows has a different version of perl?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189262</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-01 16:37:01 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Was the issue that Windows has a different version of perl?

Very likely since we were getting perl warnings on windows only.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277681</attachid>
            <date>2016-04-29 00:28:13 -0700</date>
            <delta_ts>2016-04-29 21:12:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157163-20160429002845.patch</filename>
            <type>text/plain</type>
            <size>61653</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwMjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
ZDg1NjhlY2VlMTYyMDA0NzQ4MDY4YmZmNjJjMzY2NzYyODJlMGQwLi5jNDdlMWY1OTM2YWEzZGFj
Mjg5Njc5M2Y5YTczMWRmYjAzZDJiMTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAxNi0wNC0yOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgRmlyc3Qgc3RlcCBpbiB1c2luZyAiZW51bSBjbGFzcyIgaW5zdGVhZCBvZiAiU3Ry
aW5nIiBmb3IgZW51bWVyYXRpb25zIGluIERPTQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MTYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAgIChKU0M6
OmpzU3RyaW5nV2l0aENhY2hlKTogRGVsZXRlZCB1bm5lZWRlZCBvdmVybG9hZCBmb3IgQXRvbWlj
U3RyaW5nLgorCiAyMDE2LTA0LTI4ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIHVudXNlZCBib29sIHBhcmFtZXRlciBpbiBDb2RlQ2FjaGU6
OmdldEdsb2JhbENvZGVCbG9jawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGYxOTExNmNlOTk4ZTI5ODY4MDgwN2Nh
NjQwNDRhMGZhYmU4ZTMxMWUuLjNhMzA2M2FlOTFiODU1Yzc4ODBkMmNkNDkyYTRjYmM2ZjZlZGFl
ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAxNi0wNC0yOCAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgRmlyc3Qgc3RlcCBpbiB1c2luZyAiZW51bSBj
bGFzcyIgaW5zdGVhZCBvZiAiU3RyaW5nIiBmb3IgZW51bWVyYXRpb25zIGluIERPTQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MTYzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRz
IHRoZSBiYXNpYyBzdXBwb3J0IGZvciB1c2luZyAiZW51bSBjbGFzcyIgdG8gaW1wbGVtZW50IGVu
dW1lcmF0aW9ucworICAgICAgICBpbiB0aGUgQysrIERPTS4gVGhpcyBpcyBlbm91Z2ggc28gd2Ug
Y2FuIHVzZSBpdCBmb3Igb25lIGNhc2UsIGJ1dCBub3QgZW5vdWdoIGZvcgorICAgICAgICBvdGhl
cnMuIEZvciBleGFtcGxlLCBpdCBjb3JyZWN0bHkgZ2VuZXJhdGVzIGNvZGUgdG8gZ2V0IGFuIGF0
dHJpYnV0ZSwgYnV0IGxpa2VseQorICAgICAgICBkb2VzIG5vdCBjb3JyZWN0bHkgZ2VuZXJhdGUg
Y29kZSB0byBzZXQgYW4gYXR0cmlidXRlIG9yIGNhbGwgYSBmdW5jdGlvbiB3aXRoIGFuCisgICAg
ICAgIGFyZ3VtZW50IHR5cGUgdGhhdCBpcyB0aGUgbmV3IHN0eWxlIG9mIGVudW0uCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG06IENsZWFuZWQgdXAgdGhlIGZv
cm1hdHRpbmcgb2YgdGhlIGhhc2hlcworICAgICAgICBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmaWxl
LiBBZGRlZCBhIG5ldyBvbmUgbmFtZWQgc3RyaW5nQmFzZWRFbnVtZXJhdGlvbkhhc2gKKyAgICAg
ICAgYW5kIGEgY29tbWVudCBleHBsYWluaW5nIHRoYXQgd2UgbmVlZCB0byBldmVudHVhbGx5IG1h
a2UgaXQgZW1wdHkuCisgICAgICAgIChQcm9jZXNzRG9jdW1lbnQpOiBQYXNzIHRoZSBlbnVtZXJh
dGlvbnMgaW50byB0aGUgR2VuZXJhdGVJbnRlcmZhY2UgZnVuY3Rpb24uCisgICAgICAgIChJc1N0
cmluZ0Jhc2VkRW51bVR5cGUpOiBBZGRlZC4gUmV0dXJucyAxIGZvciB0aGUgb2xkLXN0eWxlIHN0
cmluZy1iYXNlZCBlbnVtZXJhdGlvbnMsCisgICAgICAgIGFzIG9wcG9zZWQgdG8gZW51bWVyYXRp
b25zIHdlIHVzZSAiZW51bSBjbGFzcyIgZm9yLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUludGVyZmFjZSk6IFRha2Ug
dGhlIGVudW1lcmF0aW9ucyBhcmd1bWVudCBhbmQgcGFzcyBpdCBhbG9uZyB0byB0aGUKKyAgICAg
ICAgZnVuY3Rpb25zIHRoYXQgZ2VuZXJhdGUgaGVhZGVycyBhbmQgaW1wbGVtZW50YXRpb24gZmls
ZXMuCisgICAgICAgIChFbnVtZXJhdGlvbkNsYXNzTmFtZSk6IEFkZGVkLiBNYXBzIGZyb20gYW4g
ZW51bWVyYXRpb24gdHlwZSBuYW1lIGFzIHNlZW4KKyAgICAgICAgaW4gdGhlIElETCBmaWxlIHRv
IHRoZSBlbnVtZXJhdGlvbiBjbGFzcyBuYW1lIHVzZWQgaW4gdGhlIEMrKyBET00gaW1wbGVtZW50
YXRpb24uCisgICAgICAgIChFbnVtZXJhdGlvblZhbHVlTmFtZSk6IEFkZGVkLiBNYXBzIGZyb20g
YW4gYW51bWVyYXRpb24gc3RyaW5nIHZhbHVlIGFzIHNlZW4KKyAgICAgICAgaW4gdGhlIElETCBm
aWxlIHRvIGFuIGVudW1lcmF0aW9uIHZhbHVlIG5hbWUgdXNlZCBpbiB0aGUgQysrIERPTSBpbXBs
ZW1lbnRhdGluby4KKyAgICAgICAgKEVudW1lcmF0aW9uSW1wbGVtZW50YXRpb25Db250ZW50KTog
QWRkZWQuIEdlbmVyYXRlcyBhIHN0cmluZyB3aXRoIGFsbCB0aGUgY29udGVudAorICAgICAgICBu
ZWVkZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIGZpbGUgdG8gZGVmaW5lIHRoZSBoZWxwZXIgZnVu
Y3Rpb25zIGZvciBlbnVtZXJhdGlvbnMuCisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6IFR3ZWFr
LgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6IEFkZGVkIGNhbGwgdG8gRW51bWVy
YXRpb25JbXBsZW1lbnRhdGlvbkNvbnRlbnQuCisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnND
aGVjayk6IFVzZSB0b1dURlN0cmluZyBpbnN0ZWFkIG9mIHRvU3RyaW5nL3ZhbHVlLCB3aGljaCBp
cyBhCisgICAgICAgIGxvbmdlciB3YXkgb2Ygd3JpdGluZyBvdXQgdGhlIHNhbWUgdGhpbmcuCisg
ICAgICAgIChHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyKTogVHdlYWsuCisgICAgICAgIChHZW5lcmF0
ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24pOiBBZGRlZCBjYWxsIHRvIEVudW1lcmF0aW9uSW1wbGVt
ZW50YXRpb25Db250ZW50LgorICAgICAgICAoR2V0TmF0aXZlVHlwZSk6IENvbnRpbnVlIHRvIHJl
dHVybiBTdHJpbmcgZm9yIHN0cmluZy1iYXNlZCBlbnVtIHR5cGVzLCBidXQgZm9yCisgICAgICAg
IG90aGVyIGVudW0gdHlwZXMsIHJldHVybiB0aGUgcmVzdWx0IG9mIEVudW1lcmF0aW9uQ2xhc3NO
YW1lIGluc3RlYWQuCisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOiBVc2UgdG9XVEZTdHJpbmcg
aW5zdGVhZCBvZiB0b1N0cmluZy92YWx1ZSAoc2VlIGFib3ZlKSwgY29udmVydAorICAgICAgICB0
byBhIHN0cmluZyBvbmx5IGZvciBzdHJpbmctYmFzZWQgZW51bSB0eXBlcywgYW5kIGFkZCBhIHBy
ZWxpbWluYXJ5LCBwcm9iYWJseSBub3QKKyAgICAgICAgeWV0IHdvcmtpbmcsIHZlcnNpb24gb2Yg
dGhlIGNvZGUgZm9yIG5vbi1zdHJpbmctYmFzZWQgZW51bSB0eXBlcy4gV2lsbCBmaW5pc2ggdGhp
cworICAgICAgICBpbiB0aGUgbmV4dCBwYXRjaCB3aGVuIHdlIGFyZSB0cnlpbmcgdG8gdXNlIG9u
ZSBvZiB0aGUgbmV3IGVudW1lcmF0aW9ucyBmb3IgYSBzZXR0ZXIKKyAgICAgICAgb3IgYSBmdW5j
dGlvbiBhcmd1bWVudC4KKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6IENhbGwgdGhlIHN0cmlu
Z1ZhbHVlIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYW4gZW51bWVyYXRpb24gdmFsdWUKKyAgICAgICAg
aW50byBhIHN0cmluZyB3aGVuIGl0J3Mgbm90IGEgc3RyaW5nLWJhc2VkIGVudW1lcmF0aW9uLgor
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVj
dC5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5vZGUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwOgorICAgICAgICBSZWdlbmVyYXRlZC4KKwor
ICAgICAgICAqIGNzcy9Gb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZTo6
c3RhdHVzKTogVXBkYXRlZCB0byByZXR1cm4gZW51bSB2YWx1ZXMgcmF0aGVyIHRoYW4gc3RyaW5n
cy4KKworICAgICAgICAqIGNzcy9Gb250RmFjZS5oOiBSZW1vdmVkIHVubmVlZGVkIGZvcndhcmQg
ZGVjbGFyYXRpb24gb2YgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUuCisgICAgICAgIEFkZGVkIGVu
dW0gY2xhc3MgZm9yIEZvbnRGYWNlTG9hZFN0YXR1cywgd2l0aCBuYW1lcyB0aGF0IG1hdGNoIHRo
ZSBuYW1lcyBmcm9tIHRoZQorICAgICAgICBlbnVtZXJhdGlvbiBpbiB0aGUgSURMLCBidXQgd2l0
aCBvdXIgc3RhbmRhcmQgZW51bSBjYXBpdGFsaXphdGlvbiBzdHlsZS4gQ2hhbmdlZAorICAgICAg
ICB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBzdGF0dXMgZnVuY3Rpb24gdG8gRm9udEZhY2VMb2Fk
U3RhdHVzLgorCiAyMDE2LTA0LTI5ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYu
Y2Fub24uZnI+CiAKICAgICAgICAgRHJvcCBbVXNlUG9pbnRlcnNFdmVuRm9yTm9uTnVsbGFibGVP
YmplY3RBcmd1bWVudHNdIGZyb20gTWVkaWFTdHJlYW0gaW50ZXJmYWNlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKaW5kZXggMmJkYWRmMDgxZTRhNTVmNmMwYTQ0ZjE1
ZWVhZGZmZWI5NmM0ZjkxNy4uNjA4MmY2N2IwNGMxODE4MTE5NDA4MjM0ZGM1YWRjMGY0ZmJiMjY1
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCkBAIC02NTMsMTEg
KzY1Myw2IEBAIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQogICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNo
ZVNsb3dDYXNlKHZtLCAqc3RyaW5nSW1wbCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNTdHJpbmcq
IGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXRvbWljU3RyaW5nJiBz
KQotewotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBzLnN0cmluZygpKTsKLX0K
LQogQUxXQVlTX0lOTElORSBib29sIEpTU3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3IucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3IucG0KaW5kZXggMjQ4NTM3Yzg2NmUzYTM0ZTQxZTcxY2ZlYjM0MGYzOTFjNGZhNDE3ZS4uNjNk
NmM3OTE2NDBjYTU2ZGE5YTYzZjU0NjhhNDk2NTlhZGJiODk2MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQpAQCAtNDQsMzMgKzQ0LDU1
IEBAIG15ICRjb2RlR2VuZXJhdG9yID0gMDsKIAogbXkgJHZlcmJvc2UgPSAwOwogCi1teSAlbnVt
ZXJpY1R5cGVIYXNoID0gKCJpbnQiID0+IDEsICJzaG9ydCIgPT4gMSwgImxvbmciID0+IDEsICJs
b25nIGxvbmciID0+IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICJ1bnNpZ25lZCBpbnQiID0+
IDEsICJ1bnNpZ25lZCBzaG9ydCIgPT4gMSwKLSAgICAgICAgICAgICAgICAgICAgICAgInVuc2ln
bmVkIGxvbmciID0+IDEsICJ1bnNpZ25lZCBsb25nIGxvbmciID0+IDEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICJmbG9hdCIgPT4gMSwgImRvdWJsZSIgPT4gMSwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ1bnJlc3RyaWN0ZWQgZmxvYXQiID0+IDEsICJ1bnJlc3RyaWN0ZWQgZG91YmxlIiA9
PiAxLAotICAgICAgICAgICAgICAgICAgICAgICAiYnl0ZSIgPT4gMSwgIm9jdGV0IiA9PiAxKTsK
K215ICVudW1lcmljVHlwZUhhc2ggPSAoCisgICAgImJ5dGUiID0+IDEsCisgICAgImRvdWJsZSIg
PT4gMSwKKyAgICAiZmxvYXQiID0+IDEsCisgICAgImludCIgPT4gMSwKKyAgICAibG9uZyBsb25n
IiA9PiAxLAorICAgICJsb25nIiA9PiAxLAorICAgICJvY3RldCIgPT4gMSwKKyAgICAic2hvcnQi
ID0+IDEsCisgICAgInVucmVzdHJpY3RlZCBkb3VibGUiID0+IDEsCisgICAgInVucmVzdHJpY3Rl
ZCBmbG9hdCIgPT4gMSwKKyAgICAidW5zaWduZWQgaW50IiA9PiAxLAorICAgICJ1bnNpZ25lZCBs
b25nIGxvbmciID0+IDEsCisgICAgInVuc2lnbmVkIGxvbmciID0+IDEsCisgICAgInVuc2lnbmVk
IHNob3J0IiA9PiAxLAorKTsKIAotbXkgJXByaW1pdGl2ZVR5cGVIYXNoID0gKCAiYm9vbGVhbiIg
PT4gMSwgInZvaWQiID0+IDEsICJEYXRlIiA9PiAxKTsKK215ICVwcmltaXRpdmVUeXBlSGFzaCA9
ICggImJvb2xlYW4iID0+IDEsICJ2b2lkIiA9PiAxLCAiRGF0ZSIgPT4gMSApOwogCi1teSAlc3Ry
aW5nVHlwZUhhc2ggPSAoIkRPTVN0cmluZyIgPT4gMSk7CitteSAlc3RyaW5nVHlwZUhhc2ggPSAo
ICJET01TdHJpbmciID0+IDEgKTsKIAogIyBXZWJDb3JlIHR5cGVzIHVzZWQgZGlyZWN0bHkgaW4g
SURMIGZpbGVzLgogbXkgJXdlYkNvcmVUeXBlSGFzaCA9ICgKKyAgICAiRGljdGlvbmFyeSIgPT4g
MSwKICAgICAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiA9PiAxLAotICAgICJEaWN0aW9uYXJ5IiA9
PiAxCiApOwogCiBteSAlZW51bVR5cGVIYXNoID0gKCk7CiAKLW15ICVub25Qb2ludGVyVHlwZUhh
c2ggPSAoIkRPTVRpbWVTdGFtcCIgPT4gMSk7Ci0KLW15ICVzdmdBdHRyaWJ1dGVzSW5IVE1MSGFz
aCA9ICgiY2xhc3MiID0+IDEsICJpZCIgPT4gMSwgIm9uYWJvcnQiID0+IDEsICJvbmNsaWNrIiA9
PiAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbmVycm9yIiA9PiAxLCAib25s
b2FkIiA9PiAxLCAib25tb3VzZWRvd24iID0+IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIm9ubW91c2VlbnRlciIgPT4gMSwgIm9ubW91c2VsZWF2ZSIgPT4gMSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAib25tb3VzZW1vdmUiID0+IDEsICJvbm1vdXNlb3V0IiA9
PiAxLCAib25tb3VzZW92ZXIiID0+IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Im9ubW91c2V1cCIgPT4gMSwgIm9ucmVzaXplIiA9PiAxLCAib25zY3JvbGwiID0+IDEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9udW5sb2FkIiA9PiAxKTsKK215ICVub25Qb2lu
dGVyVHlwZUhhc2ggPSAoICJET01UaW1lU3RhbXAiID0+IDEgKTsKKworbXkgJXN2Z0F0dHJpYnV0
ZXNJbkhUTUxIYXNoID0gKAorICAgICJjbGFzcyIgPT4gMSwKKyAgICAiaWQiID0+IDEsCisgICAg
Im9uYWJvcnQiID0+IDEsCisgICAgIm9uY2xpY2siID0+IDEsCisgICAgIm9uZXJyb3IiID0+IDEs
CisgICAgIm9ubG9hZCIgPT4gMSwKKyAgICAib25tb3VzZWRvd24iID0+IDEsCisgICAgIm9ubW91
c2VlbnRlciIgPT4gMSwKKyAgICAib25tb3VzZWxlYXZlIiA9PiAxLAorICAgICJvbm1vdXNlbW92
ZSIgPT4gMSwKKyAgICAib25tb3VzZW91dCIgPT4gMSwKKyAgICAib25tb3VzZW92ZXIiID0+IDEs
CisgICAgIm9ubW91c2V1cCIgPT4gMSwKKyAgICAib25yZXNpemUiID0+IDEsCisgICAgIm9uc2Ny
b2xsIiA9PiAxLAorICAgICJvbnVubG9hZCIgPT4gMSwKKyk7CiAKIG15ICVzdmdUeXBlTmVlZGlu
Z1RlYXJPZmYgPSAoCiAgICAgIlNWR0FuZ2xlIiA9PiAiU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR0Fu
Z2xlPiIsCkBAIC05NCw2ICsxMTYsNDggQEAgbXkgJXN2Z1R5cGVXaXRoV3JpdGFibGVQcm9wZXJ0
aWVzTmVlZGluZ1RlYXJPZmYgPSAoCiAgICAgIlNWR01hdHJpeCIgPT4gMQogKTsKIAorIyBGSVhN
RTogUmVtb3ZlIGVhY2ggZW51bSBmcm9tIHRoaXMgaGFzaCBhcyB3ZSBjb252ZXJ0IGl0IGZyb20g
dGhlIHN0cmluZy1iYXNlZAorIyBlbnVtZXJhdGlvbiB0byB1c2luZyBhbiBhY3R1YWwgZW51bSBj
bGFzcyBpbiB0aGUgQysrLiBPbmNlIHRoYXQgaXMgZG9uZSwgd2Ugc2hvdWxkCisjIHJlbW92ZSB0
aGlzIGhhc2ggYW5kIHRoZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGl0LgorbXkgJXN0cmluZ0Jhc2Vk
RW51bWVyYXRpb25IYXNoID0gKAorICAgICJBcHBlbmRNb2RlIiA9PiAxLAorICAgICJBdWRpb0Nv
bnRleHRTdGF0ZSIgPT4gMSwKKyAgICAiQXV0b0ZpbGxCdXR0b25UeXBlIiA9PiAxLAorICAgICJD
YWNoZVBvbGljeSIgPT4gMSwKKyAgICAiQ2FudmFzV2luZGluZ1J1bGUiID0+IDEsCisgICAgIkRl
dmljZVR5cGUiID0+IDEsCisgICAgIkVuZE9mU3RyZWFtRXJyb3IiID0+IDEsCisgICAgIkZvbnRG
YWNlU2V0TG9hZFN0YXR1cyIgPT4gMSwKKyAgICAiSURCQ3Vyc29yRGlyZWN0aW9uIiA9PiAxLAor
ICAgICJJREJSZXF1ZXN0UmVhZHlTdGF0ZSIgPT4gMSwKKyAgICAiSURCVHJhbnNhY3Rpb25Nb2Rl
IiA9PiAxLAorICAgICJJbWFnZVNtb290aGluZ1F1YWxpdHkiID0+IDEsCisgICAgIktleVR5cGUi
ID0+IDEsCisgICAgIktleVVzYWdlIiA9PiAxLAorICAgICJNZWRpYUNvbnRyb2xFdmVudCIgPT4g
MSwKKyAgICAiTWVkaWFEZXZpY2VLaW5kIiA9PiAxLAorICAgICJNZWRpYVNlc3Npb25JbnRlcnJ1
cHRpbmdDYXRlZ29yeSIgPT4gMSwKKyAgICAiTWVkaWFTZXNzaW9uS2luZCIgPT4gMSwKKyAgICAi
TWVkaWFTdHJlYW1UcmFja1N0YXRlIiA9PiAxLAorICAgICJPdmVyU2FtcGxlVHlwZSIgPT4gMSwK
KyAgICAiUGFnZU92ZXJsYXlUeXBlIiA9PiAxLAorICAgICJSVENCdW5kbGVQb2xpY3lFbnVtIiA9
PiAxLAorICAgICJSVENJY2VUcmFuc3BvcnRQb2xpY3lFbnVtIiA9PiAxLAorICAgICJSZWZlcnJl
clBvbGljeSIgPT4gMSwKKyAgICAiUmVxdWVzdENhY2hlIiA9PiAxLAorICAgICJSZXF1ZXN0Q3Jl
ZGVudGlhbHMiID0+IDEsCisgICAgIlJlcXVlc3REZXN0aW5hdGlvbiIgPT4gMSwKKyAgICAiUmVx
dWVzdE1vZGUiID0+IDEsCisgICAgIlJlcXVlc3RSZWRpcmVjdCIgPT4gMSwKKyAgICAiUmVxdWVz
dFR5cGUiID0+IDEsCisgICAgIlJlc291cmNlTG9hZFByaW9yaXR5IiA9PiAxLAorICAgICJSZXNw
b25zZVR5cGUiID0+IDEsCisgICAgIlRleHRUcmFja0tpbmQiID0+IDEsCisgICAgIlRleHRUcmFj
a01vZGUiID0+IDEsCisgICAgIlZpZGVvUHJlc2VudGF0aW9uTW9kZSIgPT4gMSwKKyAgICAiWE1M
SHR0cFJlcXVlc3RSZXNwb25zZVR5cGUiID0+IDEsCispOworCiAjIENhY2hlIG9mIElETCBmaWxl
IHBhdGhuYW1lcy4KIG15ICRpZGxGaWxlczsKIG15ICRjYWNoZWRJbnRlcmZhY2VzID0ge307CkBA
IC0xNDEsNyArMjA1LDkgQEAgc3ViIFByb2Nlc3NEb2N1bWVudAogICAgIG15ICRpbnRlcmZhY2Vz
ID0gJHVzZURvY3VtZW50LT5pbnRlcmZhY2VzOwogICAgIGZvcmVhY2ggbXkgJGludGVyZmFjZSAo
QCRpbnRlcmZhY2VzKSB7CiAgICAgICAgIHByaW50ICJHZW5lcmF0aW5nICR1c2VHZW5lcmF0b3Ig
YmluZGluZ3MgY29kZSBmb3IgSURMIGludGVyZmFjZSBcIiIgLiAkaW50ZXJmYWNlLT5uYW1lIC4g
IlwiLi4uXG4iIGlmICR2ZXJib3NlOwotICAgICAgICAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVJ
bnRlcmZhY2UoJGludGVyZmFjZSwgJGRlZmluZXMpOworICAgICAgICAjIEZJWE1FOiBSZXBlYXRp
bmcgZWFjaCBlbnVtZXJhdGlvbiBmb3IgZXZlcnkgaW50ZXJmYWNlIHdvdWxkIG5vdCB3b3JrIGlm
IHdlIGFjdHVhbGx5IHdlcmUgdXNpbmcKKyAgICAgICAgIyBtdWx0aXBsZSBpbnRlcmZhY2VzIHBl
ciBmaWxlLCBidXQgd2UgYXJlbid0LCBzbyB0aGlzIGlzIGZpbmUgZm9yIG5vdy4KKyAgICAgICAg
JGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlSW50ZXJmYWNlKCRpbnRlcmZhY2UsICRkZWZpbmVzLCAk
dXNlRG9jdW1lbnQtPmVudW1lcmF0aW9ucyk7CiAgICAgICAgICRjb2RlR2VuZXJhdG9yLT5Xcml0
ZURhdGEoJGludGVyZmFjZSwgJHVzZU91dHB1dERpciwgJHVzZU91dHB1dEhlYWRlcnNEaXIpOwog
ICAgIH0KIH0KQEAgLTMzNSw2ICs0MDEsMTYgQEAgc3ViIElzU3RyaW5nVHlwZQogICAgIHJldHVy
biAwOwogfQogCitzdWIgSXNTdHJpbmdCYXNlZEVudW1UeXBlCit7CisgICAgbXkgJG9iamVjdCA9
IHNoaWZ0OworICAgIG15ICR0eXBlID0gc2hpZnQ7CisKKyAgICByZXR1cm4gMCBpZiAhJG9iamVj
dC0+SXNFbnVtVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuIDEgaWYgZXhpc3RzICRzdHJpbmdCYXNl
ZEVudW1lcmF0aW9uSGFzaHskdHlwZX07CisgICAgcmV0dXJuIDA7Cit9CisKIHN1YiBJc0VudW1U
eXBlCiB7CiAgICAgbXkgJG9iamVjdCA9IHNoaWZ0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCAxMDZlNjVkN2I5MTY4ODgw
Nzc2Njg3NzY5MzJjNTBjNjYxNzJhMDZkLi41YzI2NWU0NDQ2Yjg5NDJiNGM3NjhlNWE4Zjk5NTc1
Y2Y4YWVjNjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQpAQCAtMTIzLDE2ICsxMjMsMTcgQEAgc3ViIEdlbmVyYXRlSW50ZXJm
YWNlCiAgICAgbXkgJG9iamVjdCA9IHNoaWZ0OwogICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsK
ICAgICBteSAkZGVmaW5lcyA9IHNoaWZ0OworICAgIG15ICRlbnVtZXJhdGlvbnMgPSBzaGlmdDsK
IAogICAgICRjb2RlR2VuZXJhdG9yLT5MaW5rT3ZlcmxvYWRlZEZ1bmN0aW9ucygkaW50ZXJmYWNl
KTsKIAogICAgICMgU3RhcnQgYWN0dWFsIGdlbmVyYXRpb24KICAgICBpZiAoJGludGVyZmFjZS0+
aXNDYWxsYmFjaykgewogICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUNhbGxiYWNrSGVhZGVyKCRp
bnRlcmZhY2UpOwotICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRp
b24oJGludGVyZmFjZSk7CisgICAgICAgICRvYmplY3QtPkdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1l
bnRhdGlvbigkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zKTsKICAgICB9IGVsc2UgewogICAgICAg
ICAkb2JqZWN0LT5HZW5lcmF0ZUhlYWRlcigkaW50ZXJmYWNlKTsKLSAgICAgICAgJG9iamVjdC0+
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbigkaW50ZXJmYWNlKTsKKyAgICAgICAgJG9iamVjdC0+R2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbigkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zKTsKICAgICB9CiB9
CiAKQEAgLTgzMCwxMCArODMxLDcxIEBAIHN1YiBHZXRJbXBsQ2xhc3NOYW1lCiAgICAgcmV0dXJu
ICRuYW1lOwogfQogCitzdWIgRW51bWVyYXRpb25DbGFzc05hbWUgeworICAgIG15ICgkbmFtZSkg
PSBAXzsKKyAgICByZXR1cm4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJG5hbWUpOworfTsK
Kworc3ViIEVudW1lcmF0aW9uVmFsdWVOYW1lIHsKKyAgICBteSAoJG5hbWUpID0gQF87CisgICAg
cmV0dXJuICJFbXB0eVN0cmluZyIgaWYgJG5hbWUgZXEgIiI7CisgICAgcmV0dXJuICRjb2RlR2Vu
ZXJhdG9yLT5XS191Y2ZpcnN0KCRuYW1lKTsKK307CisKK3N1YiBFbnVtZXJhdGlvbkltcGxlbWVu
dGF0aW9uQ29udGVudAoreworICAgIG15ICgkZW51bWVyYXRpb25zKSA9IEBfOworCisgICAgbXkg
JHJlc3VsdCA9ICIiOworICAgIGZvcmVhY2ggbXkgJGVudW1lcmF0aW9uIChAJGVudW1lcmF0aW9u
cykgeworICAgICAgICBteSAkbmFtZSA9ICRlbnVtZXJhdGlvbi0+bmFtZTsKKyAgICAgICAgbmV4
dCBpZiAkY29kZUdlbmVyYXRvci0+SXNTdHJpbmdCYXNlZEVudW1UeXBlKCRuYW1lKTsKKworICAg
ICAgICBteSAkY2xhc3NOYW1lID0gRW51bWVyYXRpb25DbGFzc05hbWUoJG5hbWUpOworCisgICAg
ICAgICMgRGVjbGFyZSB0aGVzZSBpbnN0ZWFkIG9mIHVzaW5nICJzdGF0aWMiIGJlY2F1c2UgdGhl
c2UgZnVuY3Rpb25zIG1heSBiZSB1bnVzZWQKKyAgICAgICAgIyBhbmQgd2UgZG9uJ3Qgd2FudCB0
byBnZXQgd2FybmluZ3MgYWJvdXQgdW51c2VkIHN0YXRpYyBmdW5jdGlvbnMuCisgICAgICAgICRy
ZXN1bHQgLj0gImNvbnN0IFN0cmluZyYgc3RyaW5nVmFsdWUoJGNsYXNzTmFtZSk7XG4iOworICAg
ICAgICAkcmVzdWx0IC49ICJPcHRpb25hbDwkY2xhc3NOYW1lPiBlbnVtZXJhdGlvblZhbHVlJGNs
YXNzTmFtZShjb25zdCBTdHJpbmcmKTtcblxuIjsKKworICAgICAgICAkcmVzdWx0IC49ICJjb25z
dCBTdHJpbmcmIHN0cmluZ1ZhbHVlKCRjbGFzc05hbWUgZW51bWVyYXRpb25WYWx1ZSlcbiI7Cisg
ICAgICAgICRyZXN1bHQgLj0gIntcbiI7CisgICAgICAgICRyZXN1bHQgLj0gIiAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiB2YWx1ZXNbXSA9IHtcbiI7CisgICAgICAgIGZvcmVhY2gg
bXkgJHZhbHVlIChAeyRlbnVtZXJhdGlvbi0+dmFsdWVzfSkgeworICAgICAgICAgICAgJHJlc3Vs
dCAuPSAiICAgICAgICBBU0NJSUxpdGVyYWwoXCIkdmFsdWVcIiksXG4iOworICAgICAgICB9Cisg
ICAgICAgICRyZXN1bHQgLj0gIiAgICB9O1xuIjsKKyAgICAgICAgbXkgJGluZGV4ID0gMDsKKyAg
ICAgICAgZm9yZWFjaCBteSAkdmFsdWUgKEB7JGVudW1lcmF0aW9uLT52YWx1ZXN9KSB7CisgICAg
ICAgICAgICBteSAkZW51bWVyYXRpb25WYWx1ZU5hbWUgPSBFbnVtZXJhdGlvblZhbHVlTmFtZSgk
dmFsdWUpOworICAgICAgICAgICAgaWYgKCRpbmRleCkgeworICAgICAgICAgICAgICAgICRyZXN1
bHQgLj0gIiAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oJGNsYXNzTmFtZTo6
JGVudW1lcmF0aW9uVmFsdWVOYW1lKSA9PSAkaW5kZXgsIFwiJGNsYXNzTmFtZTo6JGVudW1lcmF0
aW9uVmFsdWVOYW1lIGlzIG5vdCAkaW5kZXggYXMgZXhwZWN0ZWRcIik7XG4iOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAjIEtlZXAgdGhlIHN0eWxlIGNoZWNrZXIgaGFw
cHkuIE5vdCBzdXJlIEkgc3RpbGwgbG92ZSB0aGlzIHN0eWxlIGd1aWRlbGluZS4KKyAgICAgICAg
ICAgICAgICAkcmVzdWx0IC49ICIgICAgc3RhdGljX2Fzc2VydCghc3RhdGljX2Nhc3Q8c2l6ZV90
PigkY2xhc3NOYW1lOjokZW51bWVyYXRpb25WYWx1ZU5hbWUpLCBcIiRjbGFzc05hbWU6OiRlbnVt
ZXJhdGlvblZhbHVlTmFtZSBpcyBub3QgJGluZGV4IGFzIGV4cGVjdGVkXCIpO1xuIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICRpbmRleCsrOworICAgICAgICB9CisgICAgICAgICRyZXN1
bHQgLj0gIiAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKSA8
IFdURl9BUlJBWV9MRU5HVEgodmFsdWVzKSk7XG4iOworICAgICAgICAkcmVzdWx0IC49ICIgICAg
cmV0dXJuIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXTtcbiI7
CisgICAgICAgICRyZXN1bHQgLj0gIn1cblxuIjsKKworICAgICAgICAkcmVzdWx0IC49ICJPcHRp
b25hbDwkY2xhc3NOYW1lPiBlbnVtZXJhdGlvblZhbHVlJGNsYXNzTmFtZShjb25zdCBTdHJpbmcm
IHN0cmluZ1ZhbHVlKVxuIjsKKyAgICAgICAgJHJlc3VsdCAuPSAie1xuIjsKKyAgICAgICAgZm9y
ZWFjaCBteSAkdmFsdWUgKEB7JGVudW1lcmF0aW9uLT52YWx1ZXN9KSB7CisgICAgICAgICAgICBt
eSAkZW51bWVyYXRpb25WYWx1ZU5hbWUgPSBFbnVtZXJhdGlvblZhbHVlTmFtZSgkdmFsdWUpOwor
ICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAgIGlmIChzdHJpbmdWYWx1ZSA9PSBcIiR2YWx1ZVwi
KVxuIjsKKyAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgcmV0dXJuICRjbGFzc05hbWU6
OiRlbnVtZXJhdGlvblZhbHVlTmFtZTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgJHJlc3VsdCAu
PSAiICAgIHJldHVybiBOdWxsb3B0O1xuIjsKKyAgICAgICAgJHJlc3VsdCAuPSAifVxuXG4iOwor
ICAgIH0KKyAgICByZXR1cm4gJHJlc3VsdDsKK30KKwogc3ViIEdlbmVyYXRlSGVhZGVyCiB7Ci0g
ICAgbXkgJG9iamVjdCA9IHNoaWZ0OwotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKKyAgICBt
eSAoJG9iamVjdCwgJGludGVyZmFjZSkgPSBAXzsKIAogICAgIG15ICRpbnRlcmZhY2VOYW1lID0g
JGludGVyZmFjZS0+bmFtZTsKICAgICBteSAkY2xhc3NOYW1lID0gIkpTJGludGVyZmFjZU5hbWUi
OwpAQCAtMTc5Niw3ICsxODU4LDcgQEAgc3ViIEdldEluZGV4ZWRHZXR0ZXJFeHByZXNzaW9uCiAK
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiB7Ci0gICAgbXkgKCRvYmplY3QsICRpbnRlcmZh
Y2UpID0gQF87CisgICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMpID0g
QF87CiAKICAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRpbnRlcmZhY2UtPm5hbWU7CiAgICAgbXkg
JGNsYXNzTmFtZSA9ICJKUyRpbnRlcmZhY2VOYW1lIjsKQEAgLTE4MjgsNiArMTg5MCw4IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbnVzaW5n
IG5hbWVzcGFjZSBKU0M7XG5cbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAibmFtZXNwYWNl
IFdlYkNvcmUge1xuXG4iKTsKIAorICAgIHB1c2goQGltcGxDb250ZW50LCBFbnVtZXJhdGlvbklt
cGxlbWVudGF0aW9uQ29udGVudCgkZW51bWVyYXRpb25zKSk7CisKICAgICBteSBAZnVuY3Rpb25z
ID0gQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9OwogICAgIHB1c2goQGZ1bmN0aW9ucywgQHskaW50
ZXJmYWNlLT5pdGVyYWJsZS0+ZnVuY3Rpb25zfSkgaWYgJGludGVyZmFjZS0+aXRlcmFibGU7CiAK
QEAgLTM1ODksNyArMzY1Myw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoJHthcmdWYWx1ZX0uaXNVbmRl
ZmluZWQoKSlcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAg
ICAgJG5hbWUgPSBBU0NJSUxpdGVyYWwoIiAuICRwYXJhbWV0ZXItPmRlZmF1bHQgLiAiKTtcbiIp
OwogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBlbHNlIHtcbiIpOwot
ICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgJG5hbWUgPSBzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoJGFyZ3NJbmRleCkudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShz
dGF0ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAg
ICRuYW1lID0gc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KCRhcmdzSW5kZXgpLnRvV1RGU3RyaW5n
KHN0YXRlKTtcbiIpOwogICAgICAgICAgICAgICAgICYkZXhjZXB0aW9uQ2hlY2soIiAgICAiKTsK
ICAgICAgICAgICAgICAgICAmJGVudW1WYWx1ZUNoZWNrKCIgICAgIik7CiAgICAgICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOwpAQCAtMzcwNyw4ICszNzcxLDcgQEAg
c3ViIEdlbmVyYXRlUmV0dXJuUGFyYW1ldGVycwogCiBzdWIgR2VuZXJhdGVDYWxsYmFja0hlYWRl
cgogewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7
CisgICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2UpID0gQF87CiAKICAgICBteSAkaW50ZXJmYWNl
TmFtZSA9ICRpbnRlcmZhY2UtPm5hbWU7CiAgICAgbXkgJGNsYXNzTmFtZSA9ICJKUyRpbnRlcmZh
Y2VOYW1lIjsKQEAgLTM3OTIsNyArMzg1NSw3IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVy
CiAKIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24KIHsKLSAgICBteSAoJG9iamVj
dCwgJGludGVyZmFjZSkgPSBAXzsKKyAgICBteSAoJG9iamVjdCwgJGludGVyZmFjZSwgJGVudW1l
cmF0aW9ucykgPSBAXzsKIAogICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGludGVyZmFjZS0+bmFt
ZTsKICAgICBteSAkdmlzaWJsZUludGVyZmFjZU5hbWUgPSAkY29kZUdlbmVyYXRvci0+R2V0Vmlz
aWJsZUludGVyZmFjZU5hbWUoJGludGVyZmFjZSk7CkBAIC0zODA5LDYgKzM4NzIsOCBAQCBzdWIg
R2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJc
bnVzaW5nIG5hbWVzcGFjZSBKU0M7XG5cbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAibmFt
ZXNwYWNlIFdlYkNvcmUge1xuXG4iKTsKIAorICAgIHB1c2goQGltcGxDb250ZW50LCBFbnVtZXJh
dGlvbkltcGxlbWVudGF0aW9uQ29udGVudCgkZW51bWVyYXRpb25zKSk7CisKICAgICAjIENvbnN0
cnVjdG9yCiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiR7Y2xhc3NOYW1l
fShKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpXG4i
KTsKICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxiYWNrTmVl
ZHNPcGVyYXRvckVxdWFsIn0pIHsKQEAgLTQxNjUsNyArNDIzMCw4IEBAIHN1YiBHZXROYXRpdmVU
eXBlCiAgICAgbXkgJGFycmF5T3JTZXF1ZW5jZVR5cGUgPSAkYXJyYXlUeXBlIHx8ICRzZXF1ZW5j
ZVR5cGU7CiAKICAgICByZXR1cm4gIlZlY3RvcjwiIC4gR2V0TmF0aXZlVmVjdG9ySW5uZXJUeXBl
KCRhcnJheU9yU2VxdWVuY2VUeXBlKSAuICI+IiBpZiAkYXJyYXlPclNlcXVlbmNlVHlwZTsKLSAg
ICByZXR1cm4gIlN0cmluZyIgaWYgJGNvZGVHZW5lcmF0b3ItPklzRW51bVR5cGUoJHR5cGUpOwor
ICAgIHJldHVybiAiU3RyaW5nIiBpZiAkY29kZUdlbmVyYXRvci0+SXNTdHJpbmdCYXNlZEVudW1U
eXBlKCR0eXBlKTsKKyAgICByZXR1cm4gRW51bWVyYXRpb25DbGFzc05hbWUoJHR5cGUpIGlmICRj
b2RlR2VuZXJhdG9yLT5Jc0VudW1UeXBlKCR0eXBlKTsKIAogICAgICMgRm9yIGFsbCBvdGhlciB0
eXBlcywgdGhlIG5hdGl2ZSB0eXBlIGlzIGEgcG9pbnRlciB3aXRoIHNhbWUgdHlwZSBuYW1lIGFz
IHRoZSBJREwgdHlwZS4KICAgICByZXR1cm4gIiR7dHlwZX0qIjsKQEAgLTQyODIsNyArNDM0OCw3
IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICAgICAgcmV0dXJuICJ2YWx1ZVRvU3RyaW5nV2l0
aFVuZGVmaW5lZE9yTnVsbENoZWNrKHN0YXRlLCAkdmFsdWUpIiBpZiAkc2lnbmF0dXJlLT5pc051
bGxhYmxlOwogICAgICAgICByZXR1cm4gIiR2YWx1ZS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWlj
U3RyaW5nKHN0YXRlKSIgaWYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkF0b21p
Y1N0cmluZyJ9OwogCi0gICAgICAgIHJldHVybiAiJHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFs
dWUoc3RhdGUpIjsKKyAgICAgICAgcmV0dXJuICIkdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpIjsK
ICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgImFueSIpIHsKQEAgLTQzMjgsOCArNDM5NCwxMSBA
QCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAgICAgIHJldHVybiAidG9OYXRpdmVBcnJheTwiIC4g
R2V0TmF0aXZlVmVjdG9ySW5uZXJUeXBlKCRhcnJheU9yU2VxdWVuY2VUeXBlKSAuICI+KHN0YXRl
LCAkdmFsdWUpIjsKICAgICB9CiAKKyAgICByZXR1cm4gIiR2YWx1ZS50b1dURlN0cmluZyhzdGF0
ZSkiIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ0Jhc2VkRW51bVR5cGUoJHR5cGUpOworCiAg
ICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0VudW1UeXBlKCR0eXBlKSkgewotICAgICAgICByZXR1
cm4gIiR2YWx1ZS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKSI7CisgICAgICAgIG15ICRj
bGFzc05hbWUgPSBFbnVtZXJhdGlvbkNsYXNzTmFtZSgkdHlwZSk7CisgICAgICAgIHJldHVybiAi
ZW51bWVyYXRpb25WYWx1ZSRjbGFzc05hbWUoJHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKSkudmFs
dWUoKSI7CiAgICAgfQogCiAgICAgIyBEZWZhdWx0LCBhc3N1bWUgYXV0b2dlbmVyYXRlZCB0eXBl
IGNvbnZlcnNpb24gcm91dGluZXMKQEAgLTQzODAsNiArNDQ0OSw3IEBAIHN1YiBOYXRpdmVUb0pT
VmFsdWUKIAogICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNFbnVtVHlwZSgkdHlwZSkpIHsKICAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxydW50aW1lL0pTU3RyaW5nLmg+IiwgJGNvbmRpdGlv
bmFsKTsKKyAgICAgICAgJHZhbHVlID0gInN0cmluZ1ZhbHVlKCR2YWx1ZSkiIHVubGVzcyAkY29k
ZUdlbmVyYXRvci0+SXNTdHJpbmdCYXNlZEVudW1UeXBlKCR0eXBlKTsKICAgICAgICAgcmV0dXJu
ICJqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgJHZhbHVlKSI7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9N
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RBY3RpdmVET01PYmplY3QuY3BwCmluZGV4IGZlMTJjN2U5ZjM0MDNiYjEyM2UxMjhkMjMwMmYw
ZGRlNDQ4OWRkYTIuLjcwYzU0YjZlZmI3N2NiOWFmOGJjMTI2ODE1MTBhNGE5NDJiNWJjYmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RB
Y3RpdmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0yMjIsNyArMjIyLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVG
dW5jdGlvblBvc3RNZXNzYWdlKEUKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9T
dHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgU3RyaW5nIG1lc3NhZ2UgPSBzdGF0ZS0+
YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGltcGwucG9zdE1lc3NhZ2UobWVzc2FnZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1
c3RvbU5hbWVkR2V0dGVyLmNwcAppbmRleCBiNTU4ZWNlMjRjZTZlNjBmODAyZWZiYjAwN2JiNjBk
ZDBkYTNiNWQ1Li5mZDc0OTNmNjFiZWNlZWE0NDg3YWQzM2NmMDM5MzY4OTA3MTM5ZjBiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKQEAgLTE5Myw3ICsxOTMsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90
eXBlRnVuY3Rpb25Bbm90aGVyRnVuYwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKLSAgICBTdHJpbmcgc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIFN0cmluZyBzdHIgPSBzdGF0ZS0+YXJndW1l
bnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwuYW5vdGhlckZ1bmN0aW9uKHN0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3Qu
Y3BwCmluZGV4IDczNzQ5YmZhN2I0ZGQ5NThiZGJkMzg5NDcyM2E4NjM4NDI3N2Q3YTcuLjBjZjA1
ZGI2YmZiNjgwMjlmNjliODhjZWYyYjJmNjU0ZWFjN2FiZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxP
YmplY3QuY3BwCkBAIC0yMTQsNyArMjE0LDcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RS
ZWd1bGFyQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXMKICAg
ICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RHbG9iYWxPYmpl
Y3QiLCAicmVndWxhckF0dHJpYnV0ZSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5n
KHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRv
V1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0UmVndWxhckF0dHJpYnV0ZShu
YXRpdmVWYWx1ZSk7CkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1YK
ICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RHbG9iYWxP
YmplY3QiLCAiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOwogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZh
bHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIFN0cmluZyBuYXRpdmVWYWx1
ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0RW5hYmxl
ZEF0UnVudGltZUF0dHJpYnV0ZShuYXRpdmVWYWx1ZSk7CkBAIC0yNTYsNyArMjU2LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0
aW9uUmVndWxhck9wZXJhdGlvbigKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7Ci0gICAgU3RyaW5nIHRlc3RQYXJhbSA9IHN0YXRlLT5hcmd1bWVudCgwKS50
b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBTdHJpbmcgdGVzdFBhcmFtID0gc3Rh
dGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLnJlZ3VsYXJPcGVyYXRpb24odGVzdFBhcmFtKTsKQEAgLTI3
NCw3ICsyNzQsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lTwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBTdHJpbmcgdGVzdFBhcmFtID0gc3Rh
dGUtPmFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIFN0cmlu
ZyB0ZXN0UGFyYW0gPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuZW5hYmxlZEF0UnVudGltZU9w
ZXJhdGlvbih0ZXN0UGFyYW0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAppbmRleCA4OWY0ZDg1OWNi
MDM3MDI5NDk4NjBhMzZkYjQyNzY2MTNlYWJlMjhhLi5kYTY4ZTFiNmQ0YTQ4MTdmNzJkNTdlYzNh
YmMzMTczZGNiYzcyMDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcApAQCAtMjI4LDEwICsyMjgs
MTAgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXgKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIFN0cmluZyBzdHIxID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvU3RyaW5nKHN0
YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIFN0cmluZyBzdHIxID0gc3RhdGUtPmFyZ3VtZW50KDAp
LnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAg
ICBTdHJpbmcgc3RyMiA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gQVNDSUlM
aXRlcmFsKCJkZWZhdWx0U3RyaW5nIikgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9T
dHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgU3RyaW5nIHN0cjIgPSBzdGF0ZS0+YXJn
dW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgiZGVmYXVsdFN0cmluZyIpIDog
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0ID0gY2FzdGVkVGhpcy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwpAQCAtNjMyLDcgKzYz
Miw3IEBAIGJvb2wgSlNUZXN0SW50ZXJmYWNlOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsCiBib29sIHNldEpTVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwotICAgIFN0cmluZyBu
YXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIFN0
cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IFRlc3RJbnRlcmZhY2U6OnNldEltcGxlbWVudHNTdGF0aWNBdHRyKG5hdGl2ZVZhbHVlKTsKQEAg
LTY1MSw3ICs2NTEsNyBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZQogICAgICAgICByZXR1cm4g
dGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRz
U3RyMiIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3Rh
dGUpOworICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGltcGwuc2V0SW1wbGVtZW50c1N0cjIobmF0aXZlVmFsdWUpOwpAQCAtNjk4
LDcgKzY5OCw3IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlCiBib29sIHNldEpTVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
ICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAg
U3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7
CisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c2V0U3VwcGxlbWVudGFsU3RhdGlj
QXR0cihuYXRpdmVWYWx1ZSk7CkBAIC03MTcsNyArNzE3LDcgQEAgYm9vbCBzZXRKU1Rlc3RJbnRl
cmZhY2VTdXBwbGVtZW50YWxTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWwKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJ
bnRlcmZhY2UiLCAic3VwcGxlbWVudGFsU3RyMiIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRv
U3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVt
ZW50YWw6OnNldFN1cHBsZW1lbnRhbFN0cjIoaW1wbCwgbmF0aXZlVmFsdWUpOwpAQCAtNzk1LDcg
Kzc5NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJv
dG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aG9kMihFCiAgICAgYXV0byogY29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFN0cmluZyBzdHJBcmcgPSBz
dGF0ZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgU3Ry
aW5nIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0
T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDEpKTsKQEAgLTg2Myw3ICs4NjMsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0
aW9uU3VwcGxlbWVudGFsTWV0aG9kMgogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBTdHJpbmcgc3RyQXJnID0gc3RhdGUtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIFN0cmluZyBzdHJBcmcg
PSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFw
cGVkKHN0YXRlLT5hcmd1bWVudCgxKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5j
cHAKaW5kZXggNDliZDE3N2NkNjBiN2VhMDA4MjZlODRjNjM0MThhMGQ0ZmU0YmMwYy4uMjdhZmEz
OWUzMjMzMGFlNDhkZGRjMjk2NzM5NGFjZmJjYzAxZDNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yLmNwcApAQCAtODYsMTMgKzg2LDEzIEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rv
cjo6CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTdHJpbmcgc3RyMSA9
IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBT
dHJpbmcgc3RyMSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgU3RyaW5nIHN0cjIgPSBzdGF0ZS0+YXJn
dW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgiZGVmYXVsdFN0cmluZyIpIDog
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUp
OworICAgIFN0cmluZyBzdHIyID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBB
U0NJSUxpdGVyYWwoImRlZmF1bHRTdHJpbmciKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgx
KS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0g
ICAgU3RyaW5nIHN0cjMgPSBzdGF0ZS0+YXJndW1lbnQoMikuaXNVbmRlZmluZWQoKSA/IFN0cmlu
ZygpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUo
c3RhdGUpOworICAgIFN0cmluZyBzdHIzID0gc3RhdGUtPmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVk
KCkgPyBTdHJpbmcoKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b1dURlN0cmluZyhz
dGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgUmVmUHRyPFRlc3RO
YW1lZENvbnN0cnVjdG9yPiBvYmplY3QgPSBUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Y3JlYXRlRm9y
SlNDb25zdHJ1Y3RvcigqY2FzdGVkVGhpcy0+ZG9jdW1lbnQoKSwgc3RyMSwgc3RyMiwgc3RyMywg
ZWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5vZGUuY3BwCmluZGV4IDU1MmY3MTdhZThlMTk3MTk4ZmE1NjM0ZjQxNzFlOWE4NjRi
MWE1YzcuLjc2MzM4OTdlYTdmNzY0MWIyZjg1YzRjZjI5NjYzOWQ3OTg2MDE3YzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9k
ZS5jcHAKQEAgLTE2NSw3ICsxNjUsNyBAQCBib29sIHNldEpTVGVzdE5vZGVOYW1lKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdQogICAgICAg
ICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE5vZGUiLCAibmFtZSIp
OwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIFN0
cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOwor
ICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGltcGwuc2V0TmFtZShuYXRpdmVWYWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYy5jcHAKaW5kZXggOGMyOWM0YjY4N2ViZDc4NWMxYWQzNjc2NmQ3NmUwZDljMzM2NWU1
ZS4uOTk3OGIxZWJjNjI5OWQ1NDRmMzRkMjg2MmQyYTZjMTFmNGRkY2U5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWlu
aXN0aWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcApAQCAtMzUyLDcgKzM1Miw3IEBAIGJvb2wgc2V0SlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUs
ICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0ciIp
OwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIFN0
cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOwor
ICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGltcGwuc2V0Tm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIobmF0aXZlVmFsdWUp
OwpAQCAtMzY5LDcgKzM2OSw3IEBAIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRl
dGVybWluaXN0aWNFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuCiAgICAgICAgIHJl
dHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIs
ICJub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVl
LnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9
IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Tm9uZGV0ZXJt
aW5pc3RpY0V4Y2VwdGlvbkF0dHIobmF0aXZlVmFsdWUpOwpAQCAtMzg2LDcgKzM4Niw3IEBAIGJv
b2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRp
b25BdHRyKEV4ZWNTdGF0ZSogc3RhCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljR2V0dGVy
RXhjZXB0aW9uQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+
dmFsdWUoc3RhdGUpOworICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5n
KHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Tm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2Vw
dGlvbkF0dHIobmF0aXZlVmFsdWUpOwpAQCAtNDA0LDcgKzQwNCw3IEBAIGJvb2wgc2V0SlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNT
dGF0ZSogc3RhCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFs
dWUudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgU3RyaW5nIG5hdGl2ZVZhbHVl
ID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROb25kZXRl
cm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cihuYXRpdmVWYWx1ZSwgZWMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApp
bmRleCBkOThkNjZkOGRlMzFmMmQxMmVlNDlhMjIyNjVlYzExOTcxYzhiYTA0Li40NTJjODJmZDk2
YTVjZGFjZmQ5YWFhNjI4MjA4MjZlZWNlMzgyYjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApAQCAtODksNiArODks
NzAgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjb25z
dCBTdHJpbmcmIHN0cmluZ1ZhbHVlKFRlc3RFbnVtVHlwZSk7CitPcHRpb25hbDxUZXN0RW51bVR5
cGU+IGVudW1lcmF0aW9uVmFsdWVUZXN0RW51bVR5cGUoY29uc3QgU3RyaW5nJik7CisKK2NvbnN0
IFN0cmluZyYgc3RyaW5nVmFsdWUoVGVzdEVudW1UeXBlIGVudW1lcmF0aW9uVmFsdWUpCit7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gdmFsdWVzW10gPSB7CisgICAgICAgIEFT
Q0lJTGl0ZXJhbCgiIiksCisgICAgICAgIEFTQ0lJTGl0ZXJhbCgiRW51bVZhbHVlMSIpLAorICAg
ICAgICBBU0NJSUxpdGVyYWwoIkVudW1WYWx1ZTIiKSwKKyAgICAgICAgQVNDSUlMaXRlcmFsKCJF
bnVtVmFsdWUzIiksCisgICAgfTsKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGF0aWNfY2FzdDxzaXpl
X3Q+KFRlc3RFbnVtVHlwZTo6RW1wdHlTdHJpbmcpLCAiVGVzdEVudW1UeXBlOjpFbXB0eVN0cmlu
ZyBpcyBub3QgMCBhcyBleHBlY3RlZCIpOworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8
c2l6ZV90PihUZXN0RW51bVR5cGU6OkVudW1WYWx1ZTEpID09IDEsICJUZXN0RW51bVR5cGU6OkVu
dW1WYWx1ZTEgaXMgbm90IDEgYXMgZXhwZWN0ZWQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRp
Y19jYXN0PHNpemVfdD4oVGVzdEVudW1UeXBlOjpFbnVtVmFsdWUyKSA9PSAyLCAiVGVzdEVudW1U
eXBlOjpFbnVtVmFsdWUyIGlzIG5vdCAyIGFzIGV4cGVjdGVkIik7CisgICAgc3RhdGljX2Fzc2Vy
dChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RFbnVtVHlwZTo6RW51bVZhbHVlMykgPT0gMywgIlRl
c3RFbnVtVHlwZTo6RW51bVZhbHVlMyBpcyBub3QgMyBhcyBleHBlY3RlZCIpOworICAgIEFTU0VS
VChzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpIDwgV1RGX0FSUkFZX0xFTkdU
SCh2YWx1ZXMpKTsKKyAgICByZXR1cm4gdmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVy
YXRpb25WYWx1ZSldOworfQorCitPcHRpb25hbDxUZXN0RW51bVR5cGU+IGVudW1lcmF0aW9uVmFs
dWVUZXN0RW51bVR5cGUoY29uc3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSkKK3sKKyAgICBpZiAoc3Ry
aW5nVmFsdWUgPT0gIiIpCisgICAgICAgIHJldHVybiBUZXN0RW51bVR5cGU6OkVtcHR5U3RyaW5n
OworICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiRW51bVZhbHVlMSIpCisgICAgICAgIHJldHVybiBU
ZXN0RW51bVR5cGU6OkVudW1WYWx1ZTE7CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJFbnVtVmFs
dWUyIikKKyAgICAgICAgcmV0dXJuIFRlc3RFbnVtVHlwZTo6RW51bVZhbHVlMjsKKyAgICBpZiAo
c3RyaW5nVmFsdWUgPT0gIkVudW1WYWx1ZTMiKQorICAgICAgICByZXR1cm4gVGVzdEVudW1UeXBl
OjpFbnVtVmFsdWUzOworICAgIHJldHVybiBOdWxsb3B0OworfQorCitjb25zdCBTdHJpbmcmIHN0
cmluZ1ZhbHVlKE9wdGlvbmFsKTsKK09wdGlvbmFsPE9wdGlvbmFsPiBlbnVtZXJhdGlvblZhbHVl
T3B0aW9uYWwoY29uc3QgU3RyaW5nJik7CisKK2NvbnN0IFN0cmluZyYgc3RyaW5nVmFsdWUoT3B0
aW9uYWwgZW51bWVyYXRpb25WYWx1ZSkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3Ry
aW5nPiB2YWx1ZXNbXSA9IHsKKyAgICAgICAgQVNDSUlMaXRlcmFsKCIiKSwKKyAgICAgICAgQVND
SUlMaXRlcmFsKCJPcHRpb25hbFZhbHVlMSIpLAorICAgICAgICBBU0NJSUxpdGVyYWwoIk9wdGlv
bmFsVmFsdWUyIiksCisgICAgICAgIEFTQ0lJTGl0ZXJhbCgiT3B0aW9uYWxWYWx1ZTMiKSwKKyAg
ICB9OworICAgIHN0YXRpY19hc3NlcnQoIXN0YXRpY19jYXN0PHNpemVfdD4oT3B0aW9uYWw6OkVt
cHR5U3RyaW5nKSwgIk9wdGlvbmFsOjpFbXB0eVN0cmluZyBpcyBub3QgMCBhcyBleHBlY3RlZCIp
OworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihPcHRpb25hbDo6T3B0aW9u
YWxWYWx1ZTEpID09IDEsICJPcHRpb25hbDo6T3B0aW9uYWxWYWx1ZTEgaXMgbm90IDEgYXMgZXhw
ZWN0ZWQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oT3B0aW9uYWw6
Ok9wdGlvbmFsVmFsdWUyKSA9PSAyLCAiT3B0aW9uYWw6Ok9wdGlvbmFsVmFsdWUyIGlzIG5vdCAy
IGFzIGV4cGVjdGVkIik7CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KE9w
dGlvbmFsOjpPcHRpb25hbFZhbHVlMykgPT0gMywgIk9wdGlvbmFsOjpPcHRpb25hbFZhbHVlMyBp
cyBub3QgMyBhcyBleHBlY3RlZCIpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGVu
dW1lcmF0aW9uVmFsdWUpIDwgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpKTsKKyAgICByZXR1cm4g
dmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSldOworfQorCitPcHRp
b25hbDxPcHRpb25hbD4gZW51bWVyYXRpb25WYWx1ZU9wdGlvbmFsKGNvbnN0IFN0cmluZyYgc3Ry
aW5nVmFsdWUpCit7CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICIiKQorICAgICAgICByZXR1cm4g
T3B0aW9uYWw6OkVtcHR5U3RyaW5nOworICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiT3B0aW9uYWxW
YWx1ZTEiKQorICAgICAgICByZXR1cm4gT3B0aW9uYWw6Ok9wdGlvbmFsVmFsdWUxOworICAgIGlm
IChzdHJpbmdWYWx1ZSA9PSAiT3B0aW9uYWxWYWx1ZTIiKQorICAgICAgICByZXR1cm4gT3B0aW9u
YWw6Ok9wdGlvbmFsVmFsdWUyOworICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiT3B0aW9uYWxWYWx1
ZTMiKQorICAgICAgICByZXR1cm4gT3B0aW9uYWw6Ok9wdGlvbmFsVmFsdWUzOworICAgIHJldHVy
biBOdWxsb3B0OworfQorCiAvLyBGdW5jdGlvbnMKIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUp
CkBAIC05ODIsNyArMTA0Niw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVudW1BdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvCiAgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImVudW1BdHRyIik7
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5lbnVtQXR0cigpKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBzdHJpbmdWYWx1
ZShpbXBsLmVudW1BdHRyKCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CiB9CiAKQEAgLTIxMzksNyArMjIwMyw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJp
YnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKCiAgICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImF0dHJp
YnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZShzdGF0ZSwgaW1wbC5hdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSgpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBzdHJpbmdWYWx1ZShpbXBsLmF0
dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CiB9CiAKQEAgLTIxOTcsNyArMjI2MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkCiBib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoc3RhdGUp
LT52YWx1ZShzdGF0ZSk7CisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJp
bmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgVGVzdE9iajo6c2V0U3RhdGljU3RyaW5nQXR0cihuYXRp
dmVWYWx1ZSk7CkBAIC0yMjI3LDcgKzIyOTEsNyBAQCBib29sIHNldEpTVGVzdE9iakVudW1BdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVgog
ICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJl
bnVtQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUo
c3RhdGUpOworICAgIFRlc3RFbnVtVHlwZSBuYXRpdmVWYWx1ZSA9IGVudW1lcmF0aW9uVmFsdWVU
ZXN0RW51bVR5cGUodmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpKS52YWx1ZSgpOwogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaWYgKG5hdGl2ZVZhbHVlICE9ICIiICYmIG5hdGl2ZVZhbHVlICE9ICJFbnVtVmFsdWUxIiAm
JiBuYXRpdmVWYWx1ZSAhPSAiRW51bVZhbHVlMiIgJiYgbmF0aXZlVmFsdWUgIT0gIkVudW1WYWx1
ZTMiKQpAQCAtMjM5OSw3ICsyNDYzLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEoKICAgICAg
ICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaW5n
QXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3Rh
dGUpOworICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGltcGwuc2V0U3RyaW5nQXR0cihuYXRpdmVWYWx1ZSk7CkBAIC0yNTAxLDcg
KzI1NjUsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogICAgICAgICByZXR1cm4gdGhyb3dT
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgU3Ry
aW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7Cisg
ICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIsIG5hdGl2ZVZhbHVlKTsKQEAgLTI1Njks
NyArMjYzMyw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuCiAgICAgICAgIHJldHVybiB0aHJv
d1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZFVSTEF0dHIiKTsK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBTdHJp
bmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAg
ICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciwgbmF0aXZlVmFsdWUpOwpAQCAtMjU4Niw3ICsy
NjUwLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwKICAgICAgICAgcmV0dXJuIHRocm93U2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOwog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIFN0cmlu
ZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAg
IFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0ciwgbmF0aXZlVmFsdWUpOwpAQCAtMjYz
Nyw3ICsyNzAxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWwKICAgICAgICAgcmV0dXJuIHRo
cm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tVVJM
QXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3Rh
dGUpOworICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0ciwgbmF0aXZlVmFsdWUpOwpA
QCAtMjY1NSw3ICsyNzE5LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXMKICAgICAgICAgcmV0
dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiZW5hYmxlZEF0UnVu
dGltZUF0dHJpYnV0ZSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+
dmFsdWUoc3RhdGUpOworICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5n
KHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShu
YXRpdmVWYWx1ZSk7CkBAIC0yNzYyLDcgKzI4MjYsNyBAQCBib29sIHNldEpTVGVzdE9ialN0cmlu
Z0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
CiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwg
InN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUu
dG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0g
dmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbihuYXRpdmVWYWx1ZSk7CkBAIC0yNzgwLDcgKzI4NDQsNyBAQCBi
b29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU3RyaW5nIG5hdGl2
ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgU3RyaW5n
IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1w
bC5zZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihuYXRpdmVWYWx1ZSwgZWMpOwpAQCAt
MzI5NCw3ICszMzU4LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRF
bnVtVHlwZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgICAgICByZXR1cm4g
dGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJhdHRyaWJ1dGVXaXRoUmVz
ZXJ2ZWRFbnVtVHlwZSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKHN0YXRlKS0+
dmFsdWUoc3RhdGUpOworICAgIE9wdGlvbmFsIG5hdGl2ZVZhbHVlID0gZW51bWVyYXRpb25WYWx1
ZU9wdGlvbmFsKHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKSkudmFsdWUoKTsKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGlmIChuYXRpdmVWYWx1ZSAhPSAiIiAmJiBuYXRpdmVWYWx1ZSAhPSAiT3B0aW9uYWxWYWx1ZTEi
ICYmIG5hdGl2ZVZhbHVlICE9ICJPcHRpb25hbFZhbHVlMiIgJiYgbmF0aXZlVmFsdWUgIT0gIk9w
dGlvbmFsVmFsdWUzIikKQEAgLTMzMTQsNyArMzM3OCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUHV0
Rm9yd2FyZHNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlCiAgICAgfQogICAgIFJlZjxUZXN0Tm9kZT4gZm9yd2FyZGVkSW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKS5wdXRGb3J3YXJkc0F0dHJpYnV0ZSgpOwogICAgIGF1dG8mIGltcGwgPSBmb3J3
YXJkZWRJbXBsLmdldCgpOwotICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvU3RyaW5n
KHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIFN0cmluZyBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRv
V1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TmFtZShuYXRpdmVWYWx1ZSk7
CkBAIC0zMzM0LDcgKzMzOTgsNyBAQCBib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFi
bGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdAogICAgIGlmICgh
Zm9yd2FyZGVkSW1wbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1dG8mIGltcGwgPSAq
Zm9yd2FyZGVkSW1wbDsKLSAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhz
dGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dU
RlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE5hbWUobmF0aXZlVmFsdWUpOwpA
QCAtMzM2Nyw3ICszNDMxLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgU3RyaW5nIHRlc3RQYXJh
bSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAg
ICBTdHJpbmcgdGVzdFBhcmFtID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRl
KTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1
bnRpbWVPcGVyYXRpb24odGVzdFBhcmFtKTsKQEAgLTM0MzksNyArMzUwMyw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9k
V2l0aEFyZ3MoRXhlY1N0CiAgICAgaW50IGxvbmdBcmcgPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgIFN0cmluZyBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9TdHJpbmco
c3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgU3RyaW5nIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVu
dCgxKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgVGVzdE9iaiogb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3Vt
ZW50KDIpKTsKQEAgLTM0NzYsNyArMzU0MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3MoRXhlY1N0CiAg
ICAgaW50OF90IGJ5dGVBcmcgPSB0b0ludDgoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9y
bWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgU3Ry
aW5nIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0
YXRlKTsKKyAgICBTdHJpbmcgc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5n
KHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBUZXN0T2JqKiBv
YmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMikpOwpAQCAtMzUx
Myw3ICszNTc3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFyZ3MoRXhlY1MKICAgICB1aW50OF90IG9jdGV0
QXJnID0gdG9VSW50OChzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9u
KTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBTdHJpbmcgc3RyQXJnID0g
c3RhdGUtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIFN0
cmluZyBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVz
dE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CkBAIC0zNTUwLDcgKzM2MTQsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TG9uZ01ldGhvZFdpdGhBcmdzKEV4ZWNTdAogICAgIGludCBsb25nQXJnID0gdG9JbnQzMihzdGF0
ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKLSAgICBTdHJpbmcgc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEp
LnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIFN0cmluZyBzdHJBcmcgPSBzdGF0
ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0
YXRlLT5hcmd1bWVudCgyKSk7CkBAIC0zNTg3LDcgKzM2NTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2JqTWV0aG9kV2l0aEFyZ3Mo
RXhlY1N0YQogICAgIGludCBsb25nQXJnID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
LSAgICBTdHJpbmcgc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKHN0YXRlKS0+
dmFsdWUoc3RhdGUpOworICAgIFN0cmluZyBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9X
VEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFRl
c3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7
CkBAIC0zNzMwLDcgKzM3OTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZwogICAgIGlmIChz
dGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSkKICAgICAgICAgZW51bUFyZyA9IEFTQ0lJ
TGl0ZXJhbCgiRW51bVZhbHVlMSIpOwogICAgIGVsc2UgewotICAgICAgICBlbnVtQXJnID0gc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOwor
ICAgICAgICBlbnVtQXJnID0gc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5n
KHN0YXRlKTsKICAgICAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAg
ICBpZiAoZW51bUFyZyAhPSAiIiAmJiBlbnVtQXJnICE9ICJFbnVtVmFsdWUxIiAmJiBlbnVtQXJn
ICE9ICJFbnVtVmFsdWUyIiAmJiBlbnVtQXJnICE9ICJFbnVtVmFsdWUzIikKQEAgLTM3NTEsNyAr
MzgxNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzCiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBTdHJpbmcgc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIFN0cmluZyBzdHJBcmcgPSBzdGF0ZS0+YXJn
dW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5h
cmd1bWVudCgxKSk7CkBAIC0zODYwLDcgKzM5MjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHJpdmF0ZU1ldGhvZChFeGVjU3RhdGUq
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIFN0
cmluZyBhcmd1bWVudCA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVl
KHN0YXRlKTsKKyAgICBTdHJpbmcgYXJndW1lbnQgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZT
dHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwucHJpdmF0ZU1ldGhvZChh
cmd1bWVudCkpOwpAQCAtNDEzMiw3ICs0MTk2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZygK
ICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm1l
dGhvZFdpdGhPcHRpb25hbFN0cmluZyIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7Ci0gICAgU3RyaW5nIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1Vu
ZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJp
bmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgU3RyaW5nIHN0ciA9IHN0YXRlLT5hcmd1bWVu
dCgwKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKHN0cik7CkBAIC00MTYyLDcgKzQyMjYs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQQogICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQW5kRGVm
YXVsdFZhbHVlIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBK
U1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBTdHJpbmcgc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBB
U0NJSUxpdGVyYWwoImZvbyIpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5n
KHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIFN0cmluZyBzdHIgPSBzdGF0ZS0+YXJndW1lbnQo
MCkuaXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgiZm9vIikgOiBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQW5kRGVmYXVsdFZhbHVl
KHN0cik7CkBAIC00MTkyLDcgKzQyNTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSQogICAg
ICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9k
V2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
UyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBTdHJpbmcgc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0
cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBTdHJpbmcgc3RyID0gc3RhdGUtPmFyZ3Vt
ZW50KDApLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGwoc3RyKTsKQEAgLTQyMjIs
NyArNDI4Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJCiAgICAgICAgIHJldHVybiB0aHJv
d1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoT3B0aW9uYWxTdHJp
bmdJc0VtcHR5U3RyaW5nIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRU
aGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBTdHJpbmcgc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVk
KCkgPyBlbXB0eVN0cmluZygpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5n
KHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIFN0cmluZyBzdHIgPSBzdGF0ZS0+YXJndW1lbnQo
MCkuaXNVbmRlZmluZWQoKSA/IGVtcHR5U3RyaW5nKCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0eVN0cmluZyhzdHIpOwpA
QCAtNDYwMCw3ICs0NjY0LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxKEV4ZWNTdGEKICAgICBUZXN0T2Jq
KiBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMCkpOwogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFN0cmluZyBzdHJBcmcgPSBzdGF0ZS0+
YXJndW1lbnQoMSkudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgU3RyaW5nIHN0
ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKG9iakFyZywg
c3RyQXJnKTsKQEAgLTQ2MzcsNyArNDcwMSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMyhFeGVjU3RhCiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIFN0cmlu
ZyBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0
ZSk7CisgICAgU3RyaW5nIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhz
dGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9h
ZGVkTWV0aG9kKHN0ckFyZyk7CkBAIC00Nzc1LDcgKzQ4MzksNyBAQCBzdGF0aWMgaW5saW5lIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEx
KEV4ZWNTdAogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
LSAgICBTdHJpbmcgc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+
dmFsdWUoc3RhdGUpOworICAgIFN0cmluZyBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9X
VEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwub3ZlcmxvYWRlZE1ldGhvZChzdHJBcmcpOwpAQCAtNDkzNiw3ICs1MDAwLDcgQEAgc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZDEyKEV4ZWMKIHsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIFN0cmluZyB0eXBlID0gc3RhdGUtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIFN0cmluZyB0eXBl
ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kMSh0eXBlKTsK
QEAgLTUxNjQsNyArNTIyOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MyhFeGVjU3RhdGUqIHN0YXRlCiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIFN0cmluZyB2YWx1ZSA9
IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBT
dHJpbmcgdmFsdWUgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuY29udmVydDModmFsdWUpOwpA
QCAtNTIzNSw3ICs1Mjk5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblN0cmljdEZ1bmN0aW9uKEV4ZWNTdGF0ZSoKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFN0cmluZyBzdHIgPSBzdGF0ZS0+YXJndW1lbnQo
MCkudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgU3RyaW5nIHN0ciA9IHN0YXRl
LT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgZmxvYXQgYSA9IHN0YXRlLT5hcmd1bWVudCgxKS50b0Zsb2F0KHN0YXRl
KTsKQEAgLTUzMTQsNyArNTM3OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY1N0cmluZ01ldGhvZChFeGVjCiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIFN0cmluZyBoZWFk
ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAg
IFN0cmluZyBoZWFkID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBWZWN0b3I8U3RyaW5nPiB0YWlsID0g
dG9OYXRpdmVBcmd1bWVudHM8U3RyaW5nPihzdGF0ZSwgMSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKaW5kZXggNGU2OWI1ZmJhNzRlNGNjMTg1NDZmYjk4
N2FjZWFiMDU2ZTg4OTlmNC4uMjQ5YjZhMWUyN2RhMjE1ZGUxYmQwNTljN2U2NDdlOWIzMjg1MzJm
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcApAQCAt
MTEwLDcgKzExMCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczQoRXhlY1N0YXRlKiBzCiAgICAgYXV0byogY2FzdGVk
VGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihz
dGF0ZS0+Y2FsbGVlKCkpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgU3RyaW5nIHN0cmluZyA9IHN0YXRlLT5hcmd1
bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBTdHJpbmcgc3RyaW5n
ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBSZWZQdHI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+
IG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoc3RyaW5nKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
dmVycmlkZUJ1aWx0aW5zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAppbmRleCAyOTllZTQxZTA4YmQ1N2QxYTVj
MzE3MjdlYjIxNjE3N2Q4NTgxYjIxLi43OWI4MjBiNzJiZGYxZGVjMWYxNjYyN2Y5ZjMyMjAxOThh
NTViOGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCkBAIC0yMDAsNyAr
MjAwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPdmVycmlkZUJ1aWx0
aW5zUHJvdG90eXBlRnVuY3Rpb25OYW1lZEl0ZW0oRXgKICAgICAgICAgcmV0dXJuIHRocm93VGhp
c1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T3ZlcnJpZGVCdWlsdGlucyIsICJuYW1lZEl0ZW0iKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE92ZXJyaWRl
QnVpbHRpbnM6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBTdHJpbmcgbmFtZSA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8g
QVNDSUlMaXRlcmFsKCJ0ZXN0IikgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJp
bmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZS0+YXJndW1l
bnQoMCkuaXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgidGVzdCIpIDogc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLm5hbWVkSXRlbShuYW1lKSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5
cGVkZWZzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RUeXBlZGVmcy5jcHAKaW5kZXggODMxNjJlNGZmZTc0MTg2NDVmNTRlYjI4OGI1ZTI5NmJjZmZj
YTI2MC4uYmUxNDUwY2Q5ODlmNGE0ZWNjZTgwN2VkYmY1ZDRjOGY0NzBmMzRhNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
VHlwZWRlZnMuY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGUK
ICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3Iq
PihzdGF0ZS0+Y2FsbGVlKCkpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgU3RyaW5nIGhlbGxvID0gc3RhdGUtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dmFsdWUoc3RhdGUpOworICAgIFN0cmluZyBoZWxs
byA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNPYmplY3Qo
KSkKQEAgLTQyMyw3ICs0MjMsNyBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldp
dGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVgogICAgICAgICBy
ZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgInN0cmlu
Z0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJp
bmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUu
dG9XVEZTdHJpbmcoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbihuYXRpdmVWYWx1ZSk7CkBAIC00NDEsNyArNDQxLDcgQEAgYm9vbCBzZXRK
U1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1YKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTdHJpbmcgbmF0aXZlVmFsdWUg
PSB2YWx1ZS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBTdHJpbmcgbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFN0
cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKG5hdGl2ZVZhbHVlLCBlYyk7CkBAIC00ODksNyAr
NDg5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3Rv
dHlwZUZ1bmN0aW9uU2V0U2hhZG93KEV4ZWNTdGF0ZSoKICAgICBmbG9hdCBibHVyID0gc3RhdGUt
PmFyZ3VtZW50KDIpLnRvRmxvYXQoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotICAgIFN0cmluZyBjb2xvciA9IHN0YXRlLT5hcmd1bWVudCgzKS5pc1VuZGVmaW5lZCgp
ID8gU3RyaW5nKCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMykudG9TdHJpbmcoc3RhdGUp
LT52YWx1ZShzdGF0ZSk7CisgICAgU3RyaW5nIGNvbG9yID0gc3RhdGUtPmFyZ3VtZW50KDMpLmlz
VW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgzKS50b1dU
RlN0cmluZyhzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgT3B0
aW9uYWw8ZmxvYXQ+IGFscGhhID0gc3RhdGUtPmFyZ3VtZW50KDQpLmlzVW5kZWZpbmVkKCkgPyBP
cHRpb25hbDxmbG9hdD4oKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCg0KS50b0Zsb2F0KHN0
YXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuY3BwCmluZGV4IDZiNzU2YjgzMGU5MTY3MzZkZDMzNWE2
YjZjMjVmNzljY2U5NDUwZWUuLjE3M2E1ODJiMTY5NGYzZDJjMGFjODExNjg4ZTI0MjA5NWNiYmNh
MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcApAQCAtMzE3LDIyICszMTcsMjIgQEAgU3RyaW5n
IEZvbnRGYWNlOjpmZWF0dXJlU2V0dGluZ3MoKSBjb25zdAogICAgIHJldHVybiBsaXN0LT5jc3NU
ZXh0KCk7CiB9CiAKLVN0cmluZyBGb250RmFjZTo6c3RhdHVzKCkgY29uc3QKK0ZvbnRGYWNlTG9h
ZFN0YXR1cyBGb250RmFjZTo6c3RhdHVzKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fYmFja2lu
Zy0+c3RhdHVzKCkpIHsKICAgICBjYXNlIENTU0ZvbnRGYWNlOjpTdGF0dXM6OlBlbmRpbmc6Ci0g
ICAgICAgIHJldHVybiBTdHJpbmcoInVubG9hZGVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CisgICAgICAgIHJldHVybiBGb250RmFjZUxvYWRTdGF0dXM6OlVubG9hZGVkOwogICAg
IGNhc2UgQ1NTRm9udEZhY2U6OlN0YXR1czo6TG9hZGluZzoKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygibG9hZGluZyIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICByZXR1
cm4gRm9udEZhY2VMb2FkU3RhdHVzOjpMb2FkaW5nOwogICAgIGNhc2UgQ1NTRm9udEZhY2U6OlN0
YXR1czo6VGltZWRPdXQ6Ci0gICAgICAgIHJldHVybiBTdHJpbmcoImVycm9yIiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHJldHVybiBGb250RmFjZUxvYWRTdGF0dXM6
OkVycm9yOwogICAgIGNhc2UgQ1NTRm9udEZhY2U6OlN0YXR1czo6U3VjY2VzczoKLSAgICAgICAg
cmV0dXJuIFN0cmluZygibG9hZGVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Cisg
ICAgICAgIHJldHVybiBGb250RmFjZUxvYWRTdGF0dXM6OkxvYWRlZDsKICAgICBjYXNlIENTU0Zv
bnRGYWNlOjpTdGF0dXM6OkZhaWx1cmU6Ci0gICAgICAgIHJldHVybiBTdHJpbmcoImVycm9yIiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgICAgIHJldHVybiBGb250RmFjZUxv
YWRTdGF0dXM6OkVycm9yOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gU3RyaW5nKCJlcnJvciIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAg
IHJldHVybiBGb250RmFjZUxvYWRTdGF0dXM6OkVycm9yOwogfQogCiB2b2lkIEZvbnRGYWNlOjpm
b250U3RhdGVDaGFuZ2VkKENTU0ZvbnRGYWNlJiBmYWNlLCBDU1NGb250RmFjZTo6U3RhdHVzLCBD
U1NGb250RmFjZTo6U3RhdHVzIG5ld1N0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0ZvbnRGYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuaAppbmRleCBmY2Zj
OWI3NTdjMGI3ZWIzODdhNWQ5MjRkNmYwZGY2NmUyMmFiNjMyLi4yYjJhOTRiYmM5OWMyMjA1OTBj
OGU3NWZlYTZkMDdiOTQ4ZjMwMDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9u
dEZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuaApAQCAtMzYsMTYgKzM2
LDE0IEBACiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAotbmFtZXNwYWNlIERlcHJlY2F0ZWQgewotY2xhc3MgU2NyaXB0VmFsdWU7Ci19
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTRm9udEZhY2U7CiBjbGFzcyBDU1NW
YWx1ZTsKIGNsYXNzIERpY3Rpb25hcnk7CiAKK2VudW0gY2xhc3MgRm9udEZhY2VMb2FkU3RhdHVz
IHsgVW5sb2FkZWQsIExvYWRpbmcsIExvYWRlZCwgRXJyb3IgfTsKKwogY2xhc3MgRm9udEZhY2Ug
ZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250RmFjZT4sIHB1YmxpYyBDU1NGb250RmFjZTo6
Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEZvbnRGYWNlPiBjcmVhdGUoSlND
OjpFeGVjU3RhdGUmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBmYW1p
bHksIEpTQzo6SlNWYWx1ZSBzb3VyY2UsIGNvbnN0IERpY3Rpb25hcnkmIGRlc2NyaXB0b3JzLCBF
eGNlcHRpb25Db2RlJik7CkBAIC02Nyw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgdW5p
Y29kZVJhbmdlKCkgY29uc3Q7CiAgICAgU3RyaW5nIHZhcmlhbnQoKSBjb25zdDsKICAgICBTdHJp
bmcgZmVhdHVyZVNldHRpbmdzKCkgY29uc3Q7Ci0gICAgU3RyaW5nIHN0YXR1cygpIGNvbnN0Owor
ICAgIEZvbnRGYWNlTG9hZFN0YXR1cyBzdGF0dXMoKSBjb25zdDsKIAogICAgIHR5cGVkZWYgRE9N
UHJvbWlzZTxGb250RmFjZSYsIERPTUNvcmVFeGNlcHRpb24mPiBQcm9taXNlOwogICAgIFByb21p
c2UmIHByb21pc2UoKSB7IHJldHVybiBtX3Byb21pc2U7IH0K
</data>
<flag name="review"
          id="301825"
          type_id="1"
          status="+"
          setter="cdumez"
    />
    <flag name="commit-queue"
          id="301827"
          type_id="3"
          status="-"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>