<?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>151901</bug_id>
          
          <creation_ts>2015-12-04 18:06:51 -0800</creation_ts>
          <short_desc>FTL B3 should be able to make JS-&gt;JS calls</short_desc>
          <delta_ts>2015-12-07 11:18:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>151808</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1146532</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-04 18:06:51 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146533</commentid>
    <comment_count>1</comment_count>
      <attachid>266694</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-04 18:07:30 -0800</bug_when>
    <thetext>Created attachment 266694
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146645</commentid>
    <comment_count>2</comment_count>
      <attachid>266720</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-05 11:12:14 -0800</bug_when>
    <thetext>Created attachment 266720
work in progress

Getting close to done.

I refactored a bunch of stuff that was making this unnecessarily weird to write.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146663</commentid>
    <comment_count>3</comment_count>
      <attachid>266725</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-05 21:28:58 -0800</bug_when>
    <thetext>Created attachment 266725
it compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146687</commentid>
    <comment_count>4</comment_count>
      <attachid>266732</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-06 11:13:48 -0800</bug_when>
    <thetext>Created attachment 266732
more

Previously it compiled because I didn&apos;t set FTL_USES_B3. :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146692</commentid>
    <comment_count>5</comment_count>
      <attachid>266734</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-06 12:53:44 -0800</bug_when>
    <thetext>Created attachment 266734
moar</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146703</commentid>
    <comment_count>6</comment_count>
      <attachid>266737</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-06 14:53:12 -0800</bug_when>
    <thetext>Created attachment 266737
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146704</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-06 14:54:11 -0800</bug_when>
    <thetext>Attachment 266737 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:3417:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3444:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3489:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3524:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3562:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3622:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3650:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3674:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3740:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3744:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3769:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3795:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3820:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3848:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3870:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3902:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3948:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3988:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3991:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4024:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4027:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4060:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4097:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4130:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4204:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4207:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4241:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4279:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4317:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4390:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4420:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4455:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4496:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4542:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4545:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4576:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4679:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:4851:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:4872:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:4909:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:5423:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:5435:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:8049:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:8066:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3StackmapGenerationParams.cpp:51:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3StackmapGenerationParams.cpp:52:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3StackmapGenerationParams.cpp:53:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOSRExit.cpp:87:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOSRExit.cpp:113:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOSRExit.cpp:114:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3StackmapGenerationParams.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 51 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146913</commentid>
    <comment_count>8</comment_count>
      <attachid>266737</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-12-07 11:11:39 -0800</bug_when>
    <thetext>Comment on attachment 266737
the patch

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

r=me

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:4855
&gt; +        // Make sure that the callee goes into GPR0.

I would say why this is and not that you&apos;re doing this b/c the code below is duplicate of this comment. i.e, the virtual call trampoline expects callee in regT0

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:4858
&gt; +        // Make this easy for ourselves: this adds a stack argument.

I don&apos;t think this comment is needed.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:4865
&gt; +        // Now put things into the stack.

I don&apos;t think this comment is needed.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:4886
&gt; +                // FIXME: If we were handling exceptions, then at this point we would ask our descriptor
&gt; +                // to prepare and then we would modify the OSRExit data structure inside the
&gt; +                // OSRExitHandle to link it up to this call.

Do we have a bug number for this?
If so, we should link to it here.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:5451
&gt; +        // Make sure that the effects are as we want.

Again, I think this comment is a bit redundant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146916</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-07 11:18:51 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/193640</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266694</attachid>
            <date>2015-12-04 18:07:30 -0800</date>
            <delta_ts>2015-12-05 11:12:14 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22441</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24g
MTkzNDgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ4LDYgKzE0OCwxNiBAQCB2b2lkKiBQcm9jZWR1cmU6OmFkZERhdGFT
ZWN0aW9uKHNpemVfdCBzCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordW5zaWduZWQgUHJvY2Vk
dXJlOjpjYWxsQXJnQXJlYVNpemUoKSBjb25zdAoreworICAgIHJldHVybiBjb2RlKCkuY2FsbEFy
Z0FyZWFTaXplKCk7Cit9CisKK3ZvaWQgUHJvY2VkdXJlOjpyZXF1ZXN0Q2FsbEFyZ0FyZWFTaXpl
KHVuc2lnbmVkIHNpemUpCit7CisgICAgY29kZSgpLnJlcXVlc3RDYWxsQXJnQXJlYVNpemUoc2l6
ZSk7Cit9CisKIHVuc2lnbmVkIFByb2NlZHVyZTo6ZnJhbWVTaXplKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gY29kZSgpLmZyYW1lU2l6ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHJvY2VkdXJlLmgJKHJldmlzaW9uIDE5MzQ4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsOSArMjIxLDE0IEBAIHB1Ymxp
YzoKICAgICAvLyB0aGF0IEFQSSwgdGhlbiB5b3UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0
aGlzLgogICAgIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPiByZWxlYXNlQnlwcm9k
dWN0cygpIHsgcmV0dXJuIFdURjo6bW92ZShtX2J5cHJvZHVjdHMpOyB9CiAKKyAgICAvLyBUaGlz
IGdpdmVzIHlvdSBkaXJlY3QgYWNjZXNzIHRvIENvZGUuIEhvd2V2ZXIsIHRoZSBpZGVhIGlzIHRo
YXQgY2xpZW50cyBvZiBCMyBzaG91bGRuJ3QgaGF2ZSB0bworICAgIC8vIGNhbGwgdGhpcy4gU28s
IFByb2NlZHVyZSBoYXMgc29tZSBtZXRob2RzIChiZWxvdykgdGhhdCBleHBvc2Ugc29tZSBBaXI6
OkNvZGUgZnVuY3Rpb25hbGl0eS4KICAgICBjb25zdCBBaXI6OkNvZGUmIGNvZGUoKSBjb25zdCB7
IHJldHVybiAqbV9jb2RlOyB9CiAgICAgQWlyOjpDb2RlJiBjb2RlKCkgeyByZXR1cm4gKm1fY29k
ZTsgfQogCisgICAgdW5zaWduZWQgY2FsbEFyZ0FyZWFTaXplKCkgY29uc3Q7CisgICAgdm9pZCBy
ZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKHVuc2lnbmVkIHNpemUpOworCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdW5zaWduZWQgZnJhbWVTaXplKCkgY29uc3Q7CiAgICAgY29uc3QgUmVnaXN0ZXJBdE9m
ZnNldExpc3QmIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSBjb25zdDsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAkocmV2aXNpb24gMTkzNDgwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC04NCw2ICs4NCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gY2hpbGRyZW4oKS5hcHBlbmQoKS4g
VGhhdCB3aWxsIHdvcmsgZmluZSwgYnV0IGl0J3Mgbm90IHJlY29tbWVuZGVkLgogICAgIHZvaWQg
YXBwZW5kKGNvbnN0IENvbnN0cmFpbmVkVmFsdWUmKTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZlY3RvclR5cGU+CisgICAgdm9pZCBhcHBlbmRWZWN0b3IoY29uc3QgVmVjdG9yVHlwZSYgdmVj
dG9yKQorICAgIHsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB2YWx1ZSA6IHZlY3RvcikKKyAg
ICAgICAgICAgIGFwcGVuZCh2YWx1ZSk7CisgICAgfQorCiAgICAgLy8gSGVscGVyIGZvciBhcHBl
bmRpbmcgY29sZCBhbnkncy4gVGhpcyBvZnRlbiB1c2VkIGJ5IGNsaWVudHMgdG8gaW1wbGVtZW50
IE9TUi4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgogICAgIHZvaWQgYXBwZW5k
Q29sZEFueXMoY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWVSZXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZVJlcC5oCShyZXZpc2lvbiAxOTM0ODApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw5IEBACiAK
ICNpbmNsdWRlICJGUFJJbmZvLmgiCiAjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIkpT
Q0pTVmFsdWUuaCIKICNpbmNsdWRlICJSZWcuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIu
aCIKICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CkBAIC0xMTQsNiArMTE2LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2tBcmd1bWVudChWaXJ0dWFs
UmVnaXN0ZXIgcmVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YWNrQXJndW1lbnQocmVnLm9m
ZnNldCgpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgfQorCiAgICAgc3RhdGljIFZh
bHVlUmVwIGNvbnN0YW50KGludDY0X3QgdmFsdWUpCiAgICAgewogICAgICAgICBWYWx1ZVJlcCBy
ZXN1bHQ7CkBAIC0yMDEsNiArMjA4LDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxkb3VibGU+KHZhbHVlKCkpOwogICAgIH0KIAorICAgIFZhbHVlUmVwIHdpdGhPZmZz
ZXQoaW50cHRyX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgICAgIHJldHVybiBzdGFjayhvZmZzZXRGcm9tRlAo
KSArIG9mZnNldCk7CisgICAgICAgIGNhc2UgU3RhY2tBcmd1bWVudDoKKyAgICAgICAgICAgIHJl
dHVybiBzdGFja0FyZ3VtZW50KG9mZnNldEZyb21TUCgpICsgb2Zmc2V0KTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorICAgIH0KKwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCiBwcml2
YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHJldmlzaW9uIDE5MzQ4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODI4LDE0ICs0ODI4LDk1
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QoKQogICAgIHsK
KyAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKKyAgICAgICAgaW50IG51bUFyZ3MgPSBub2Rl
LT5udW1DaGlsZHJlbigpIC0gMTsKKworICAgICAgICBMVmFsdWUganNDYWxsZWUgPSBsb3dKU1Zh
bHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworCiAjaWYgRlRMX1VTRVNfQjMKLSAg
ICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSB8fCAhdmVyYm9zZUNvbXBpbGF0
aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgQ1JBU0goKTsKLSNlbHNlCi0gICAgICAgIGludCBu
dW1BcmdzID0gbV9ub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKKyAgICAgICAgdW5zaWduZWQgZnJh
bWVTaXplID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bUFyZ3M7CisgICAgICAg
IHVuc2lnbmVkIGFsaWduZWRGcmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgZnJhbWVTaXplKTsKKworICAgICAgICAvLyBKUy0+SlMg
Y2FsbGluZyBjb252ZW50aW9uIHJlcXVpcmVzIHRoYXQgdGhlIGNhbGxlciBhbGxvd3MgdGhpcyBt
dWNoIHNwYWNlIG9uIHRvcCBvZiBzdGFjayB0bworICAgICAgICAvLyBnZXQgdHJhc2hlZCBieSB0
aGUgY2FsbGVlLCBldmVuIGlmIG5vdCBhbGwgb2YgdGhhdCBzcGFjZSBpcyB1c2VkIHRvIHBhc3Mg
YXJndW1lbnRzLiBXZSB0ZWxsCisgICAgICAgIC8vIEIzIHRoaXMgZXhwbGljaXRseSBmb3IgdHdv
IHJlYXNvbnM6CisgICAgICAgIC8vCisgICAgICAgIC8vIC0gV2Ugd2lsbCBvbmx5IHBhc3MgZnJh
bWVTaXplIHdvcnRoIG9mIHN0dWZmLgorICAgICAgICAvLyAtIFRoZSB0cmFzaGVkIHN0YWNrIGd1
YXJhbnRlZSBpcyBsb2dpY2FsbHkgc2VwYXJhdGUgZnJvbSB0aGUgYWN0IG9mIHBhc3NpbmcgYXJn
dW1lbnRzLCBzbyB3ZQorICAgICAgICAvLyAgIHNob3VsZG4ndCByZWx5IG9uIEFpciB0byBpbmZl
ciB0aGUgdHJhc2hlZCBzdGFjayBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgYXJndW1lbnRzIGl0IGVu
ZHMKKyAgICAgICAgLy8gICB1cCBzZWVpbmcuCisgICAgICAgIG1fcHJvYy5yZXF1ZXN0Q2FsbEFy
Z0FyZWFTaXplKGFsaWduZWRGcmFtZVNpemUpOworCisgICAgICAgIC8vIENvbGxlY3QgdGhlIGFy
Z3VtZW50cywgc2luY2UgdGhpcyBjYW4gZ2VuZXJhdGUgY29kZSBhbmQgd2Ugd2FudCB0byBnZW5l
cmF0ZSBpdCBiZWZvcmUgd2UgZW1pdAorICAgICAgICAvLyB0aGUgY2FsbC4KKyAgICAgICAgVmVj
dG9yPENvbnN0cmFpbmVkVmFsdWU+IGFyZ3VtZW50czsKKworICAgICAgICAvLyBNYWtlIHRoaXMg
ZWFzeSBmb3Igb3Vyc2VsdmVzLgorICAgICAgICBhdXRvIGFkZEFyZ3VtZW50ID0gWyZdIChMVmFs
dWUgdmFsdWUsIGNvbnN0IFZhbHVlUmVwJiByZXApIHsKKyAgICAgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQoQ29uc3RyYWluZWRWYWx1ZSh2YWx1ZSwgcmVwKSk7CisgICAgICAgIH07CisKKyAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGNhbGxlZSBnb2VzIGludG8gR1BSMC4KKyAgICAgICAg
YWRkQXJndW1lbnQoanNDYWxsZWUsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmVnVDApKTsKKwor
ICAgICAgICAvLyBOb3cgcHV0IHRoaW5ncyBpbnRvIHRoZSBzdGFjay4KKyAgICAgICAgYWRkQXJn
dW1lbnQoanNDYWxsZWUsIFZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KFZpcnR1YWxSZWdpc3RlcihK
U1N0YWNrOjpDYWxsZWUpKSk7CisgICAgICAgIGFkZEFyZ3VtZW50KAorICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihudW1BcmdzKSwKKyAgICAgICAgICAgIFZhbHVlUmVwOjpzdGFja0FyZ3Vt
ZW50KFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkud2l0aE9mZnNldChQ
YXlsb2FkT2Zmc2V0KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Bcmdz
OyArK2kpIHsKKyAgICAgICAgICAgIGFkZEFyZ3VtZW50KAorICAgICAgICAgICAgICAgIGxvd0pT
VmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxICsgaSkpLAorICAgICAgICAgICAgICAg
IFZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7
CisgICAgICAgIH0KKworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291
dC5wYXRjaHBvaW50KEludDY0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kVmVjdG9yKGFy
Z3VtZW50cyk7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3Jv
U2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVn
aXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOworICAgICAgICBwYXRjaHBv
aW50LT5yZXN1bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gY29kZU9yaWdpbkRlc2Ny
aXB0aW9uT2ZDYWxsU2l0ZSgpOworICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICAgICAgWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAg
ICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IHN0YXRlLT5qaXRDb2RlLT5j
b21tb24tPmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoY29kZU9yaWdpbik7CisKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogSWYgd2Ugd2VyZSBoYW5kbGluZyBleGNlcHRpb25zLCB0aGVuIGF0IHRo
aXMgcG9pbnQgd2Ugd291bGQgYXNrIG91ciBkZXNjcmlwdG9yCisgICAgICAgICAgICAgICAgLy8g
dG8gcHJlcGFyZSBhbmQgdGhlbiB3ZSB3b3VsZCBtb2RpZnkgdGhlIE9TUkV4aXQgZGF0YSBzdHJ1
Y3R1cmUgaW5zaWRlIHRoZQorICAgICAgICAgICAgICAgIC8vIE9TUkV4aXRIYW5kbGUgdG8gbGlu
ayBpdCB1cCB0byB0aGlzIGNhbGwuCisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXI6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4
LmJpdHMoKSksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1
YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworCisgICAgICAgICAgICAgICAg
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBzdGF0ZS0+Y29kZUJsb2NrKCktPmFkZENhbGxM
aW5rSW5mbygpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIg
dGFyZ2V0VG9DaGVjazsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1Bh
dGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgdGFyZ2V0VG9DaGVjaywKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsKKworICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOworCisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOworCisgICAgICAgICAgICAgICAg
c2xvd1BhdGgubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7
CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogCi0gICAgICAgIExWYWx1ZSBqc0Nh
bGxlZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKTsKKyAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA6IENhbGxM
aW5rSW5mbzo6Q2FsbCwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGlj
LCBHUFJJbmZvOjpyZWdUMCk7CiAKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogTmVlZCBzb21l
IGxpbmsgdGFzay4KKyAgICAgICAgICAgIH0pOworCisgICAgICAgIHNldEpTVmFsdWUocGF0Y2hw
b2ludCk7CisjZWxzZQogICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFja21hcElE
cysrOwogCiAgICAgICAgIHVuc2lnbmVkIGZyYW1lU2l6ZSA9IEpTU3RhY2s6OkNhbGxGcmFtZUhl
YWRlclNpemUgKyBudW1BcmdzOwpAQCAtNDg0OSw3ICs0OTMwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgYXJndW1lbnRzLmFwcGVuZChqc0NhbGxlZSk7IC8vIGNhbGxlZSAtPiBzdGFjawogICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50NjQobnVtQXJncykpOyAvLyBhcmd1bWVu
dCBjb3VudCBhbmQgemVyb3MgZm9yIHRoZSB0YWcKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1BcmdzOyArK2kpCi0gICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGxvd0pTVmFsdWUo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEgKyBpKSkpOworICAgICAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSArIGkpKSk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYWRkaW5nOyArK2kpCiAgICAgICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0LmludDY0KSk7CiAKQEAgLTQ4NjMs
NyArNDk0NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbCht
X291dC5pbnQ2NCwgbV9vdXQucGF0Y2hwb2ludEludDY0SW50cmluc2ljKCksIGFyZ3VtZW50cyk7
CiAgICAgICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTVdlYktp
dEpTQ2FsbENvbnYpOwogICAgICAgICAKLSAgICAgICAgbV9mdGxTdGF0ZS5qc0NhbGxzLmFwcGVu
ZChKU0NhbGwoc3RhY2ttYXBJRCwgbV9ub2RlLCBjb2RlT3JpZ2luRGVzY3JpcHRpb25PZkNhbGxT
aXRlKCkpKTsKKyAgICAgICAgbV9mdGxTdGF0ZS5qc0NhbGxzLmFwcGVuZChKU0NhbGwoc3RhY2tt
YXBJRCwgbm9kZSwgY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpKSk7CiAgICAgICAg
IAogICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOwogI2VuZGlmCkBAIC05MjEzLDYgKzkyOTQsNyBA
QCBwcml2YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24pOwogICAgIH0K
IAorI2lmICFGVExfVVNFU19CMwogICAgIHZvaWQgYXBwZW5kT1NSRXhpdEFyZ3VtZW50c0ZvclBh
dGNocG9pbnRJZldpbGxDYXRjaEV4Y2VwdGlvbihTdGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBFeGNlcHRpb25UeXBlIGV4Y2VwdGlvblR5cGUsIHVuc2lnbmVkIG9mZnNldE9mRXhpdEFy
Z3VtZW50cykKICAgICB7CiAgICAgICAgIENvZGVPcmlnaW4gb3BDYXRjaE9yaWdpbjsKQEAgLTky
MzMsNiArOTMxNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBidWlsZEV4aXRBcmd1bWVudHMo
ZXhpdERlc2NyaXB0b3IsIGV4aXREZXNjcmlwdG9ySW1wbCwgbm9WYWx1ZSgpLCBvZmZzZXRPZkV4
aXRBcmd1bWVudHMpOwogICAgICAgICBhcmd1bWVudHMuYXBwZW5kVmVjdG9yKGZyZXNoTGlzdCk7
CiAgICAgfQorI2VuZGlmIC8vICFGVExfVVNFU19CMwogCiAgICAgYm9vbCBlbWl0QnJhbmNoVG9P
U1JFeGl0SWZXaWxsQ2F0Y2hFeGNlcHRpb24oTFZhbHVlIGhhZEV4Y2VwdGlvbikKICAgICB7CkBA
IC05MjUxLDYgKzkzMzQsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fYmxvY2tzLmdl
dChibG9jayk7CiAgICAgfQogCisKKyNpZiBGVExfVVNFU19CMworICAgIE9TUkV4aXREZXNjcmlw
dG9yKiBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9k
ZSogaGlnaFZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZtX2Z0bFN0YXRlLmppdENvZGUt
Pm9zckV4aXREZXNjcmlwdG9ycy5hbGxvYygKKyAgICAgICAgICAgIGxvd1ZhbHVlLmZvcm1hdCgp
LCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKKyAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCks
CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2Fscygp
KTsKKyAgICB9CisjZWxzZSAvLyBGVExfVVNFU19CMwogICAgIE9TUkV4aXREZXNjcmlwdG9yKiBh
cHBlbmRPU1JFeGl0RGVzY3JpcHRvcihFeGl0S2luZCBraW5kLCBFeGNlcHRpb25UeXBlIGV4Y2Vw
dGlvblR5cGUsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIE5vZGVP
cmlnaW4gb3JpZ2luKQogICAgIHsKICAgICAgICAgT1NSRXhpdERlc2NyaXB0b3ImIHJlc3VsdCA9
IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0b3JzLmFsbG9jKApAQCAtOTI2MSw2
ICs5MzU0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGtpbmQsIG9yaWdpbi5mb3JFeGl0LCBv
cmlnaW4uc2VtYW50aWMsIGV4Y2VwdGlvblR5cGUpOwogICAgICAgICByZXR1cm4gJnJlc3VsdDsK
ICAgICB9CisjZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAKICAgICB2b2lkIGFwcGVuZE9TUkV4
aXQoCiAgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2Rl
KiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uLCAKQEAgLTkzMjgsOSArOTQyMiw3IEBA
IHByaXZhdGU6CiAjaWYgRlRMX1VTRVNfQjMKICAgICB2b2lkIGJsZXNzU3BlY3VsYXRpb24oQjM6
OkNoZWNrVmFsdWUqIHZhbHVlLCBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1
ZSwgTm9kZSogaGlnaFZhbHVlLCBOb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBpc0V4Y2VwdGlvbkhh
bmRsZXIgPSBmYWxzZSkKICAgICB7Ci0gICAgICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVz
Y3JpcHRvciA9IGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKAotICAgICAgICAgICAga2luZCwgaXNF
eGNlcHRpb25IYW5kbGVyID8gRXhjZXB0aW9uVHlwZTo6Q0NhbGxFeGNlcHRpb24gOiBFeGNlcHRp
b25UeXBlOjpOb25lLCBsb3dWYWx1ZSwKLSAgICAgICAgICAgIGhpZ2hWYWx1ZSwgb3JpZ2luKTsK
KyAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yID0gYXBwZW5kT1NSRXhp
dERlc2NyaXB0b3IobG93VmFsdWUsIGhpZ2hWYWx1ZSk7CiAgICAgICAgIE9TUkV4aXREZXNjcmlw
dG9ySW1wbCogZXhpdERlc2NyaXB0b3JJbXBsID0gJm1fZnRsU3RhdGUub3NyRXhpdERlc2NyaXB0
b3JJbXBscy5sYXN0KCk7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB2YWx1
ZS0+bnVtQ2hpbGRyZW4oKTsKQEAgLTkzMzksNyArOTQzMSw4IEBAIHByaXZhdGU6CiAgICAgICAg
IFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOwogICAgICAgICB2YWx1ZS0+c2V0R2VuZXJhdG9y
KAogICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgZXhpdERlc2NyaXB0
b3ItPmVtaXRPU1JFeGl0KCpzdGF0ZSwgZXhpdERlc2NyaXB0b3JJbXBsLCBqaXQsIHBhcmFtcywg
b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBleGl0RGVzY3JpcHRvci0+ZW1pdE9TUkV4aXQoCisg
ICAgICAgICAgICAgICAgICAgICpzdGF0ZSwga2luZCwgb3JpZ2luLCBqaXQsIHBhcmFtcywgb2Zm
c2V0LCBpc0V4Y2VwdGlvbkhhbmRsZXIpOwogICAgICAgICAgICAgfSk7CiAgICAgfQogI2VuZGlm
CkBAIC05NDc1LDYgKzk1NjgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgU3RhY2ttYXBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgY29uc3QgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb24qPiYgbWFwLAogICAgICAgICBOb2RlKiBub2RlKQogICAgIHsKKyAgICAgICAg
Ly8gTk9URTogSW4gRlRMLT5CMywgd2UgY2Fubm90IGdlbmVyYXRlIGNvZGUgaGVyZSwgYmVjYXVz
ZSBtX291dHB1dCBpcyBwb3NpdGlvbmVkIGFmdGVyIHRoZQorICAgICAgICAvLyBzdGFja21hcCB2
YWx1ZS4gTGlrZSBhbGwgdmFsdWVzLCB0aGUgc3RhY2ttYXAgdmFsdWUgY2Fubm90IHVzZSBhIGNo
aWxkIHRoYXQgaXMgZGVmaW5lZCBhZnRlcgorICAgICAgICAvLyBpdC4KKyAgICAgICAgCiAgICAg
ICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgQVNTRVJUKG5vZGUt
Pmhhc1Jlc3VsdCgpKTsKIApAQCAtOTUyMiwxMCArOTYxOSwxNSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRTdHJpY3RJbnQ1
MiwgdmFsdWUudmFsdWUoKSk7CiAgICAgICAgIAogICAgICAgICB2YWx1ZSA9IG1fYm9vbGVhblZh
bHVlcy5nZXQobm9kZSk7CisjaWYgRlRMX1VTRVNfQjMKKyAgICAgICAgaWYgKGlzVmFsaWQodmFs
dWUpKQorICAgICAgICAgICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERhdGFGb3Jt
YXRCb29sZWFuLCB2YWx1ZS52YWx1ZSgpKTsKKyNlbHNlIC8vIEZUTF9VU0VTX0IzCiAgICAgICAg
IGlmIChpc1ZhbGlkKHZhbHVlKSkgewogICAgICAgICAgICAgTFZhbHVlIHZhbHVlVG9QYXNzID0g
bV9vdXQuemVyb0V4dCh2YWx1ZS52YWx1ZSgpLCBtX291dC5pbnQzMik7CiAgICAgICAgICAgICBy
ZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEJvb2xlYW4sIHZhbHVlVG9Q
YXNzKTsKICAgICAgICAgfQorI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgIAogICAgICAg
ICB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQobm9kZSk7CiAgICAgICAgIGlmIChpc1ZhbGlk
KHZhbHVlKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAko
cmV2aXNpb24gMTkzNDgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTcgKzY1LDIxIEBAIHZvaWQgT1NSRXhpdERlc2Ny
aXB0b3I6OnZhbGlkYXRlUmVmZXJlbmMKIAogI2lmIEZUTF9VU0VTX0IzCiBSZWZQdHI8T1NSRXhp
dEhhbmRsZT4gT1NSRXhpdERlc2NyaXB0b3I6OmVtaXRPU1JFeGl0KAotICAgIFN0YXRlJiBzdGF0
ZSwgT1NSRXhpdERlc2NyaXB0b3JJbXBsKiBleGl0RGVzY3JpcHRvckltcGwsIENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcywgdW5zaWduZWQg
b2Zmc2V0KQorICAgIFN0YXRlJiBzdGF0ZSwgRXhpdEtpbmQgZXhpdEtpbmQsIGNvbnN0IE5vZGVP
cmlnaW4mIG5vZGVPcmlnaW4sIENDYWxsSGVscGVycyYgaml0LAorICAgIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zLCB1bnNpZ25lZCBvZmZzZXQsIGJvb2wgaXNFeGNlcHRp
b25IYW5kbGVyKQogewotICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBoYW5kbGUgPSBwcmVwYXJl
T1NSRXhpdEhhbmRsZShzdGF0ZSwgZXhpdERlc2NyaXB0b3JJbXBsLCBwYXJhbXMsIG9mZnNldCk7
CisgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRsZSA9CisgICAgICAgIHByZXBhcmVPU1JF
eGl0SGFuZGxlKHN0YXRlLCBleGl0S2luZCwgbm9kZU9yaWdpbiwgcGFyYW1zLCBvZmZzZXQsIGlz
RXhjZXB0aW9uSGFuZGxlcik7CiAgICAgaGFuZGxlLT5lbWl0RXhpdFRodW5rKGppdCk7CiAgICAg
cmV0dXJuIGhhbmRsZTsKIH0KIAogUmVmUHRyPE9TUkV4aXRIYW5kbGU+IE9TUkV4aXREZXNjcmlw
dG9yOjplbWl0T1NSRXhpdExhdGVyKAotICAgIFN0YXRlJiBzdGF0ZSwgT1NSRXhpdERlc2NyaXB0
b3JJbXBsKiBleGl0RGVzY3JpcHRvckltcGwsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zLCB1bnNpZ25lZCBvZmZzZXQpCisgICAgU3RhdGUmIHN0YXRlLCBFeGl0S2luZCBl
eGl0S2luZCwgY29uc3QgTm9kZU9yaWdpbiYgbm9kZU9yaWdpbiwKKyAgICBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcywgdW5zaWduZWQgb2Zmc2V0LCBib29sIGlzRXhjZXB0
aW9uSGFuZGxlcikKIHsKLSAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gaGFuZGxlID0gcHJlcGFy
ZU9TUkV4aXRIYW5kbGUoc3RhdGUsIGV4aXREZXNjcmlwdG9ySW1wbCwgcGFyYW1zLCBvZmZzZXQp
OworICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBoYW5kbGUgPQorICAgICAgICBwcmVwYXJlT1NS
RXhpdEhhbmRsZShzdGF0ZSwgZXhpdEtpbmQsIG5vZGVPcmlnaW4sIHBhcmFtcywgb2Zmc2V0LCBp
c0V4Y2VwdGlvbkhhbmRsZXIpOwogICAgIHBhcmFtcy5jb250ZXh0LT5sYXRlUGF0aHMuYXBwZW5k
KAogICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPEFpcjo6R2VuZXJhdGlvbkNvbnRleHQ6OkxhdGVQ
YXRoRnVuY3Rpb24+KAogICAgICAgICAgICAgW2hhbmRsZV0gKENDYWxsSGVscGVycyYgaml0LCBB
aXI6OkdlbmVyYXRpb25Db250ZXh0JikgewpAQCAtODUsMzMgKzg5LDQyIEBAIFJlZlB0cjxPU1JF
eGl0SGFuZGxlPiBPU1JFeGl0RGVzY3JpcHRvcjoKIH0KIAogUmVmUHRyPE9TUkV4aXRIYW5kbGU+
IE9TUkV4aXREZXNjcmlwdG9yOjpwcmVwYXJlT1NSRXhpdEhhbmRsZSgKLSAgICBTdGF0ZSYgc3Rh
dGUsIE9TUkV4aXREZXNjcmlwdG9ySW1wbCogZXhpdERlc2NyaXB0b3JJbXBsLCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcywgdW5zaWduZWQgb2Zmc2V0KQorICAgIFN0YXRl
JiBzdGF0ZSwgRXhpdEtpbmQgZXhpdEtpbmQsIGNvbnN0IE5vZGVPcmlnaW4mIG5vZGVPcmlnaW4s
CisgICAgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMsIHVuc2lnbmVkIG9m
ZnNldCwgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIpCiB7CiAgICAgdW5zaWduZWQgaW5kZXggPSBz
dGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsKLSAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4g
aGFuZGxlID0gYWRvcHRSZWYoCi0gICAgICAgIG5ldyBPU1JFeGl0SGFuZGxlKGluZGV4LCBzdGF0
ZS5qaXRDb2RlLT5vc3JFeGl0LmFsbG9jKHRoaXMsICpleGl0RGVzY3JpcHRvckltcGwpKSk7Cisg
ICAgT1NSRXhpdCYgZXhpdCA9IHN0YXRlLmppdENvZGUtPm9zckV4aXQuYWxsb2MoCisgICAgICAg
IHRoaXMsIGV4aXRLaW5kLCBub2RlT3JpZ2luLmZvckV4aXQsIG5vZGVPcmlnaW4uc2VtYW50aWMs
IGlzRXhjZXB0aW9uSGFuZGxlcik7CisgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRsZSA9
IGFkb3B0UmVmKG5ldyBPU1JFeGl0SGFuZGxlKGluZGV4LCBleGl0KSk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gb2Zmc2V0OyBpIDwgcGFyYW1zLnJlcHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGhh
bmRsZS0+ZXhpdC5tX3ZhbHVlUmVwcy5hcHBlbmQocGFyYW1zLnJlcHNbaV0pOwotICAgIGhhbmRs
ZS0+ZXhpdC5tX3ZhbHVlUmVwcy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBleGl0Lm1fdmFsdWVS
ZXBzLmFwcGVuZChwYXJhbXMucmVwc1tpXSk7CisgICAgZXhpdC5tX3ZhbHVlUmVwcy5zaHJpbmtU
b0ZpdCgpOwogICAgIHJldHVybiBoYW5kbGU7CiB9CiAjZW5kaWYgLy8gRlRMX1VTRVNfQjMKIAor
I2lmIEZUTF9VU0VTX0IzCiBPU1JFeGl0OjpPU1JFeGl0KAotICAgIE9TUkV4aXREZXNjcmlwdG9y
KiBkZXNjcmlwdG9yLCBPU1JFeGl0RGVzY3JpcHRvckltcGwmIGV4aXREZXNjcmlwdG9ySW1wbAot
I2lmICFGVExfVVNFU19CMwotICAgICwgdWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleAotI2Vu
ZGlmIC8vICFGVExfVVNFU19CMwotICAgICkKKyAgICBPU1JFeGl0RGVzY3JpcHRvciogZGVzY3Jp
cHRvciwKKyAgICBFeGl0S2luZCBleGl0S2luZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwKKyAgICBib29sIGlzRXhjZXB0aW9uSGFu
ZGxlcikKKyAgICA6IE9TUkV4aXRCYXNlKGV4aXRLaW5kLCBjb2RlT3JpZ2luLCBjb2RlT3JpZ2lu
Rm9yRXhpdFByb2ZpbGUpCisgICAgLCBtX2Rlc2NyaXB0b3IoZGVzY3JpcHRvcikKK3sKKyAgICBt
X2lzRXhjZXB0aW9uSGFuZGxlciA9IGlzRXhjZXB0aW9uSGFuZGxlcjsKK30KKyNlbHNlIC8vIEZU
TF9VU0VTX0IzCitPU1JFeGl0OjpPU1JFeGl0KAorICAgIE9TUkV4aXREZXNjcmlwdG9yKiBkZXNj
cmlwdG9yLCBPU1JFeGl0RGVzY3JpcHRvckltcGwmIGV4aXREZXNjcmlwdG9ySW1wbCwKKyAgICB1
aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4KQogICAgIDogT1NSRXhpdEJhc2UoZXhpdERlc2Ny
aXB0b3JJbXBsLm1fa2luZCwgZXhpdERlc2NyaXB0b3JJbXBsLm1fY29kZU9yaWdpbiwgZXhpdERl
c2NyaXB0b3JJbXBsLm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlKQogICAgICwgbV9kZXNjcmlw
dG9yKGRlc2NyaXB0b3IpCi0jaWYgIUZUTF9VU0VTX0IzCiAgICAgLCBtX3N0YWNrbWFwUmVjb3Jk
SW5kZXgoc3RhY2ttYXBSZWNvcmRJbmRleCkKLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKICAgICAs
IG1fZXhjZXB0aW9uVHlwZShleGl0RGVzY3JpcHRvckltcGwubV9leGNlcHRpb25UeXBlKQogewog
ICAgIG1faXNFeGNlcHRpb25IYW5kbGVyID0gZXhpdERlc2NyaXB0b3JJbXBsLm1fZXhjZXB0aW9u
VHlwZSAhPSBFeGNlcHRpb25UeXBlOjpOb25lOwogfQorI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAK
IENvZGVMb2NhdGlvbkp1bXAgT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxv
Y2sqIGZ0bENvZGVCbG9jaykgY29uc3QKIHsKQEAgLTE5Niw3ICsyMDksNiBAQCB2b2lkIE9TUkV4
aXQ6OnJlY292ZXJSZWdpc3RlcnNGcm9tU3BpbGxTCiAgICAgICAgIH0KICAgICB9CiB9Ci0jZW5k
aWYgLy8gIUZUTF9VU0VTX0IzCiAKIGJvb2wgT1NSRXhpdDo6d2lsbEFycml2ZUF0RXhpdEZyb21J
bmRpcmVjdEV4Y2VwdGlvbkNoZWNrKCkgY29uc3QKIHsKQEAgLTI2MCw2ICsyNzIsNyBAQCBib29s
IE9TUkV4aXQ6Om5lZWRzUmVnaXN0ZXJSZWNvdmVyeU9uR2VuCiAgICAgLy8gcmVjb3ZlciB0aGUg
c3BpbGxlZCByZWdpc3RlcnMuCiAgICAgcmV0dXJuIG1fZXhjZXB0aW9uVHlwZSA9PSBFeGNlcHRp
b25UeXBlOjpKU0NhbGw7CiB9CisjZW5kaWYgLy8gIUZUTF9VU0VTX0IzCiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpGVEwKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmgJKHJldmlzaW9uIDE5MzQ4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQjNWYWx1
ZVJlcC5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmls
ZS5oIgorI2luY2x1ZGUgIkRGR05vZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdPU1JFeGl0QmFz
ZS5oIgogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGVkVHlwZXMuaCIKICNpbmNsdWRlICJGVExFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIgpAQCAtNjEsNyArNjIsOSBAQCBuYW1lc3BhY2Ug
RlRMIHsKIAogY2xhc3MgU3RhdGU7CiBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3JJbXBsOworc3Ry
dWN0IE9TUkV4aXRIYW5kbGU7CiAKKyNpZiAhRlRMX1VTRVNfQjMKIGVudW0gY2xhc3MgRXhjZXB0
aW9uVHlwZSA6IHVpbnQ4X3QgewogICAgIE5vbmUsCiAgICAgQ0NhbGxFeGNlcHRpb24sCkBAIC03
NSw2ICs3OCw3IEBAIGVudW0gY2xhc3MgRXhjZXB0aW9uVHlwZSA6IHVpbnQ4X3QgewogfTsKIAog
Ym9vbCBleGNlcHRpb25UeXBlV2lsbEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKEV4
Y2VwdGlvblR5cGUpOworI2VuZGlmIC8vICFGVExfVVNFU19CMwogCiBzdHJ1Y3QgT1NSRXhpdERl
c2NyaXB0b3IgewogICAgIE9TUkV4aXREZXNjcmlwdG9yKApAQCAtMTA1LDcgKzEwOSw4IEBAIHN0
cnVjdCBPU1JFeGl0RGVzY3JpcHRvciB7CiAgICAgLy8gb24gdGhlIGdyb3VuZC4gSXQgY29udGFp
bnMgaW5mb3JtYXRpb24gdGhhdCBpcyBtb3N0bHkgbm90IHVzZWZ1bCBpZiB5b3UgdXNlIHRoaXMg
QVBJLCBzaW5jZSBhZnRlcgogICAgIC8vIHRoaXMgY2FsbCwgdGhlIE9TUkV4aXQgaXMgc2ltcGx5
IHJlYWR5IHRvIGdvLgogICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBlbWl0T1NSRXhpdCgKLSAg
ICAgICAgU3RhdGUmLCBPU1JFeGl0RGVzY3JpcHRvckltcGwqLCBDQ2FsbEhlbHBlcnMmLCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICAg
ICAgU3RhdGUmLCBFeGl0S2luZCwgY29uc3QgTm9kZU9yaWdpbiYsIENDYWxsSGVscGVycyYsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLAorICAgICAgICB1bnNpZ25lZCBvZmZz
ZXQsIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyID0gZmFsc2UpOwogCiAgICAgLy8gSW4gc29tZSBj
YXNlcyB5b3Ugd2FudCBhbiBPU1JFeGl0IHRvIGNvbWUgaW50byBleGlzdGVuY2UsIGJ1dCB5b3Ug
ZG9uJ3Qgd2FudCB0byBlbWl0IGl0IHJpZ2h0IG5vdy4KICAgICAvLyBUaGlzIHdpbGwgZW1pdCB0
aGUgT1NSIGV4aXQgaW4gYSBsYXRlIHBhdGguIFlvdSBjYW4ndCBiZSBzdXJlIGV4YWN0bHkgd2hl
biB0aGF0IHdpbGwgaGFwcGVuLCBidXQKQEAgLTExNiwxNiArMTIxLDE5IEBAIHN0cnVjdCBPU1JF
eGl0RGVzY3JpcHRvciB7CiAgICAgLy8gaGF2ZSBhIHBsYWNlIHRvIGp1bXAgdG8gZm9yIE9TUiBl
eGl0LiBJdCBkb2Vzbid0IGNhcmUgd2hlcmUgdGhhdCBPU1IgZXhpdCBpcyBlbWl0dGVkIHNvIGxv
bmcgYXMgaXQKICAgICAvLyBldmVudHVhbGx5IGdldHMgYWNjZXNzIHRvIGl0cyBsYWJlbC4KICAg
ICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gZW1pdE9TUkV4aXRMYXRlcigKLSAgICAgICAgU3RhdGUm
LCBPU1JFeGl0RGVzY3JpcHRvckltcGwqLCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICAgICAgU3RhdGUmLCBFeGl0S2luZCwgY29uc3Qg
Tm9kZU9yaWdpbiYsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLCB1bnNpZ25l
ZCBvZmZzZXQsCisgICAgICAgIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyID0gZmFsc2UpOwogCiAg
ICAgLy8gVGhpcyBpcyB0aGUgbG93LWxldmVsIGludGVyZmFjZS4gSXQgd2lsbCBjcmVhdGUgYSBo
YW5kbGUgcmVwcmVzZW50aW5nIHRoZSBkZXNpcmUgdG8gZW1pdCBjb2RlIGZvcgogICAgIC8vIGFu
IE9TUiBleGl0LiBZb3UgY2FuIGNhbGwgT1NSRXhpdEhhbmRsZTo6ZW1pdEV4aXRUaHVuaygpIG9u
Y2UgeW91IGhhdmUgYSBwbGFjZSB0byBlbWl0IGl0LiBOb3RlCiAgICAgLy8gdGhhdCB0aGUgYWJv
dmUgdHdvIEFQSXMgYXJlIHdyaXR0ZW4gaW4gdGVybXMgb2YgdGhpcyBhbmQgT1NSRXhpdEhhbmRs
ZTo6ZW1pdEV4aXRUaHVuaygpLgogICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBwcmVwYXJlT1NS
RXhpdEhhbmRsZSgKLSAgICAgICAgU3RhdGUmLCBPU1JFeGl0RGVzY3JpcHRvckltcGwqLCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICAg
ICAgU3RhdGUmLCBFeGl0S2luZCwgY29uc3QgTm9kZU9yaWdpbiYsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmLCB1bnNpZ25lZCBvZmZzZXQsCisgICAgICAgIGJvb2wgaXNFeGNl
cHRpb25IYW5kbGVyID0gZmFsc2UpOwogI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiB9OwogCisjaWYg
IUZUTF9VU0VTX0IzCiBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3JJbXBsIHsKICAgICBPU1JFeGl0
RGVzY3JpcHRvckltcGwoRXhpdEtpbmQga2luZCwgQ29kZU9yaWdpbiBleGl0T3JpZ2luLCBDb2Rl
T3JpZ2luIGZvckV4aXRQcm9maWxlLCBFeGNlcHRpb25UeXBlIGV4Y2VwdGlvblR5cGUpCiAgICAg
ICAgIDogbV9raW5kKGtpbmQpCkBAIC0xNDIsMTMgKzE1MCwxNiBAQCBzdHJ1Y3QgT1NSRXhpdERl
c2NyaXB0b3JJbXBsIHsKICAgICBDb2RlT3JpZ2luIG1fc2VtYW50aWNDb2RlT3JpZ2luRm9yQ2Fs
bEZyYW1lSGVhZGVyOwogICAgIEhhbmRsZXJJbmZvIG1fYmFzZWxpbmVFeGNlcHRpb25IYW5kbGVy
OwogfTsKKyNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKIAogc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMg
REZHOjpPU1JFeGl0QmFzZSB7CiAgICAgT1NSRXhpdCgKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0
b3IqLCBPU1JFeGl0RGVzY3JpcHRvckltcGwmCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgICAgICwg
dWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleAotI2VuZGlmIC8vICFGVExfVVNFU19CMworICAg
ICAgICBPU1JFeGl0RGVzY3JpcHRvciosCisjaWYgRlRMX1VTRVNfQjMKKyAgICAgICAgRXhpdEtp
bmQsIENvZGVPcmlnaW4sIENvZGVPcmlnaW4gY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBib29s
IGlzRXhjZXB0aW9uSGFuZGxlcgorI2Vsc2UgLy8gRlRMX1VTRVNfQjMKKyAgICAgICAgT1NSRXhp
dERlc2NyaXB0b3JJbXBsJiwgdWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleAorI2VuZGlmIC8v
IEZUTF9VU0VTX0IzCiAgICAgICAgICk7CiAKICAgICBPU1JFeGl0RGVzY3JpcHRvciogbV9kZXNj
cmlwdG9yOwpAQCAtMTYyLDggKzE3Myw4IEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIERGRzo6
T1NSRXhpdEJhc2UKICAgICB1bnNpZ25lZCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQ7CiAgICAgLy8g
T2Zmc2V0IHdpdGhpbiBTdGFja21hcDo6cmVjb3JkcwogICAgIHVpbnQzMl90IG1fc3RhY2ttYXBS
ZWNvcmRJbmRleDsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAgIEV4Y2VwdGlvblR5cGUgbV9l
eGNlcHRpb25UeXBlOworI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAKICAgICBSZWdpc3RlclNldCBy
ZWdpc3RlcnNUb1ByZXNlcnZlRm9yQ2FsbFRoYXRNaWdodFRocm93OwogCkBAIC0xNzcsMTIgKzE4
OCwxMiBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBERkc6Ok9TUkV4aXRCYXNlCiAgICAgdm9p
ZCBnYXRoZXJSZWdpc3RlcnNUb1NwaWxsRm9yQ2FsbElmRXhjZXB0aW9uKFN0YWNrTWFwcyYsIFN0
YWNrTWFwczo6UmVjb3JkJik7CiAgICAgdm9pZCBzcGlsbFJlZ2lzdGVyc1RvU3BpbGxTbG90KEND
YWxsSGVscGVycyYsIGludDMyX3Qgc3RhY2tTcGlsbFNsb3QpOwogICAgIHZvaWQgcmVjb3ZlclJl
Z2lzdGVyc0Zyb21TcGlsbFNsb3QoQ0NhbGxIZWxwZXJzJiBqaXQsIGludDMyX3Qgc3RhY2tTcGls
bFNsb3QpOwotI2VuZGlmIC8vICFGVExfVVNFU19CMwogCiAgICAgYm9vbCB3aWxsQXJyaXZlQXRP
U1JFeGl0RnJvbUdlbmVyaWNVbndpbmQoKSBjb25zdDsKICAgICBib29sIHdpbGxBcnJpdmVBdEV4
aXRGcm9tSW5kaXJlY3RFeGNlcHRpb25DaGVjaygpIGNvbnN0OwogICAgIGJvb2wgd2lsbEFycml2
ZUF0T1NSRXhpdEZyb21DYWxsT3BlcmF0aW9uKCkgY29uc3Q7CiAgICAgYm9vbCBuZWVkc1JlZ2lz
dGVyUmVjb3ZlcnlPbkdlbmVyaWNVbndpbmRPU1JFeGl0UGF0aCgpIGNvbnN0OworI2VuZGlmIC8v
ICFGVExfVVNFU19CMwogfTsKIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0
ZS5oCShyZXZpc2lvbiAxOTM0ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsOSBAQCBwdWJsaWM6CiAgICAgVmVj
dG9yPEpTVGFpbENhbGw+IGpzVGFpbENhbGxzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBjb2RlU2Vj
dGlvbk5hbWVzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBkYXRhU2VjdGlvbk5hbWVzOworI2lmICFG
VExfVVNFU19CMwogICAgIFNlZ21lbnRlZFZlY3RvcjxPU1JFeGl0RGVzY3JpcHRvckltcGw+IG9z
ckV4aXREZXNjcmlwdG9ySW1wbHM7CisjZW5kaWYgLy8gIUZUTF9VU0VTX0IzCiAgICAgdm9pZCog
dW53aW5kRGF0YVNlY3Rpb247CiAgICAgc2l6ZV90IHVud2luZERhdGFTZWN0aW9uU2l6ZTsKICAg
ICBSZWZQdHI8RGF0YVNlY3Rpb24+IHN0YWNrbWFwc1NlY3Rpb247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266720</attachid>
            <date>2015-12-05 11:12:14 -0800</date>
            <delta_ts>2015-12-05 21:28:58 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>68223</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTM0ODApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzA0LDYgKzMwNCw4IEBACiAJCTBGMzM4RTFDMUJGMjg2
RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxODFCRjI4NkVBMDAxM0M4OEYgLyogQjNC
bG9ja0luc2VydGlvblNldC5oICovOyB9OwogCQkwRjMzOEUxRDFCRjI4NkVBMDAxM0M4OEYgLyog
QjNMb3dlck1hY3Jvcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjMzOEUxOTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAgKi87
IH07CiAJCTBGMzM4RTFFMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxQTFCRjI4NkVB
MDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oICovOyB9OworCQkwRjMzRkNGNzFDMTM2RTI1MDAz
MjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzM0ZDRjUxQzEzNkUyNTAwMzIzRjY3IC8q
IEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcCAqLzsgfTsKKwkJMEYzM0ZDRjgxQzEzNkUy
NTAwMzIzRjY3IC8qIEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzRkNGNjFDMTM2RTI1MDAzMjNGNjcg
LyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCAqLzsgfTsKIAkJMEYzNEIxNDkxNkQ0MjAx
MDAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQu
Y3BwICovOyB9OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDgxNkQ0
MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgfTsKIAkJMEYzNzMwOEMxQzBCRDI5MTAw
MDUyQkZBIC8qIEIzUGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzNzMwOEExQzBCRDI5MTAwMDUyQkZBIC8qIEIzUGhpQ2hpbGRy
ZW4uY3BwICovOyB9OwpAQCAtMjQwMCw2ICsyNDAyLDggQEAKIAkJMEYzMzhFMTgxQkYyODZFQTAw
MTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNCbG9ja0luc2VydGlvblNldC5oOyBwYXRoID0gYjMvQjNCbG9ja0luc2VydGlv
blNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMzOEUxOTFCRjI4NkVBMDAx
M0M4OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0xvd2VyTWFjcm9zLmNwcDsgcGF0aCA9IGIzL0IzTG93ZXJNYWNyb3MuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMzOEUxQTFCRjI4NkVBMDAxM0M4OEYgLyog
QjNMb3dlck1hY3Jvcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0xvd2Vy
TWFjcm9zLmg7IHBhdGggPSBiMy9CM0xvd2VyTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMzNGQ0Y1MUMxMzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcy5jcHA7IHBhdGggPSBiMy9CM1N0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzNGQ0Y2MUMxMzZFMjUw
MDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oOyBwYXRoID0gYjMv
QjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZH
VXNlS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ4MTZENDIw
MEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMzczMDhBMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVu
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGhpQ2hpbGRyZW4u
Y3BwOyBwYXRoID0gYjMvQjNQaGlDaGlsZHJlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC00NjI4LDYgKzQ2MzIsOCBAQAogCQkJCTBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLywKIAkJCQkwRkVDODVCNzFCRTE0NjJGMDA4MEZGNzQg
LyogQjNSZWR1Y2VTdHJlbmd0aC5jcHAgKi8sCiAJCQkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0
IC8qIEIzUmVkdWNlU3RyZW5ndGguaCAqLywKKwkJCQkwRjMzRkNGNTFDMTM2RTI1MDAzMjNGNjcg
LyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwICovLAorCQkJCTBGMzNGQ0Y2MUMxMzZF
MjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oICovLAogCQkJCTBGRUM4
NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8sCiAJCQkJMEZF
Qzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggKi8sCiAJCQkJMEYz
MzhERUYxQkU5M0FEMTAwMTNDODhGIC8qIEIzU3RhY2ttYXBWYWx1ZS5jcHAgKi8sCkBAIC02OTc0
LDYgKzY5ODAsNyBAQAogCQkJCTBGRDNFNDAyMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk5OEVENjc1MUJFRDc2OEMwMEREODAxNyAvKiBSZW1vdGVD
b250cm9sbGFibGVUYXJnZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMzNGQ0Y4MUMxMzZFMjUw
MDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRkI5MjE4MTZEMDJFQjIwMDU1QTVEQiAvKiBERkdBbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ2MTUzNENCQUYwMDBGOTQ1NiAvKiBERkdBcmd1bWVu
dFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTg0OTEsNiArODQ5OCw3IEBACiAJCQkJMEY4
Rjk0M0MxNjY3NjMxMzAwRDYxOTcxIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMxMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21tb25JZGVu
dGlmaWVycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjMzRkNGNzFDMTM2RTI1MDAzMjNGNjcg
LyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcw
OUYyRjIxN0EwQUMyQTAwNTEyRTk4IC8qIENvbW1vblNsb3dQYXRocy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk2NTUzQTMzMTE3QTFGMUVFMDA4Q0Y2RjMgLyogQ29tbW9uU2xvd1BhdGhzRXhjZXB0
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0U1QTNBNzE3OTc0MzJEMDBFODkzQzAgLyog
Q29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5MzQ4MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwOCwxMyArMjA4LDcgQEAgQ0NhbGxIZWxwZXJzOjpKdW1wIENoZWNrU3BlY2lhbDo6Z2Vu
ZXJhdAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zIHBh
cmFtczsKLSAgICAgICAgICAgICAgICBwYXJhbXMudmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgICAg
ICAgICBwYXJhbXMucmVwcyA9IHJlcHM7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnVzZWRSZWdp
c3RlcnMgPSB2YWx1ZS0+bV91c2VkUmVnaXN0ZXJzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5j
b250ZXh0ID0gJmNvbnRleHQ7Ci0KLSAgICAgICAgICAgICAgICB2YWx1ZS0+bV9nZW5lcmF0b3It
PnJ1bihqaXQsIHBhcmFtcyk7CisgICAgICAgICAgICAgICAgdmFsdWUtPm1fZ2VuZXJhdG9yLT5y
dW4oaml0LCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXModmFsdWUsIHJlcHMsIGNvbnRleHQpKTsK
ICAgICAgICAgICAgIH0pKTsKIAogICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsgLy8g
QXMgZmFyIGFzIEFpciB0aGlua3MsIHdlIGFyZSBub3QgYSB0ZXJtaW5hbC4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJKHJldmlz
aW9uIDE5MzQ4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVj
aWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDEzICsxMDcsNyBAQCBDQ2FsbEhlbHBlcnM6
Okp1bXAgUGF0Y2hwb2ludFNwZWNpYWw6OmdlCiAgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFy
ZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3Nbb2Zmc2V0KytdKSk7CiAgICAgYXBwZW5kUmVwc0lt
cGwoY29udGV4dCwgb2Zmc2V0LCBpbnN0LCByZXBzKTsKICAgICAKLSAgICBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMgcGFyYW1zOwotICAgIHBhcmFtcy52YWx1ZSA9IHZhbHVlOwotICAgIHBhcmFt
cy5yZXBzID0gcmVwczsKLSAgICBwYXJhbXMudXNlZFJlZ2lzdGVycyA9IHZhbHVlLT5tX3VzZWRS
ZWdpc3RlcnM7Ci0gICAgcGFyYW1zLmNvbnRleHQgPSAmY29udGV4dDsKLQotICAgIHZhbHVlLT5t
X2dlbmVyYXRvci0+cnVuKGppdCwgcGFyYW1zKTsKKyAgICB2YWx1ZS0+bV9nZW5lcmF0b3ItPnJ1
bihqaXQsIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyh2YWx1ZSwgcmVwcywgY29udGV4dCkpOwog
CiAgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAxOTM0ODApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgs
NiArMTQ4LDE2IEBAIHZvaWQqIFByb2NlZHVyZTo6YWRkRGF0YVNlY3Rpb24oc2l6ZV90IHMKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCit1bnNpZ25lZCBQcm9jZWR1cmU6OmNhbGxBcmdBcmVhU2l6
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvZGUoKS5jYWxsQXJnQXJlYVNpemUoKTsKK30KKwor
dm9pZCBQcm9jZWR1cmU6OnJlcXVlc3RDYWxsQXJnQXJlYVNpemUodW5zaWduZWQgc2l6ZSkKK3sK
KyAgICBjb2RlKCkucmVxdWVzdENhbGxBcmdBcmVhU2l6ZShzaXplKTsKK30KKwogdW5zaWduZWQg
UHJvY2VkdXJlOjpmcmFtZVNpemUoKSBjb25zdAogewogICAgIHJldHVybiBjb2RlKCkuZnJhbWVT
aXplKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNp
b24gMTkzNDgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIyMSw5ICsyMjEsMTQgQEAgcHVibGljOgogICAgIC8vIHRoYXQgQVBJ
LCB0aGVuIHlvdSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMuCiAgICAgc3RkOjp1bmlx
dWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdHM+IHJlbGVhc2VCeXByb2R1Y3RzKCkgeyByZXR1cm4gV1RG
Ojptb3ZlKG1fYnlwcm9kdWN0cyk7IH0KIAorICAgIC8vIFRoaXMgZ2l2ZXMgeW91IGRpcmVjdCBh
Y2Nlc3MgdG8gQ29kZS4gSG93ZXZlciwgdGhlIGlkZWEgaXMgdGhhdCBjbGllbnRzIG9mIEIzIHNo
b3VsZG4ndCBoYXZlIHRvCisgICAgLy8gY2FsbCB0aGlzLiBTbywgUHJvY2VkdXJlIGhhcyBzb21l
IG1ldGhvZHMgKGJlbG93KSB0aGF0IGV4cG9zZSBzb21lIEFpcjo6Q29kZSBmdW5jdGlvbmFsaXR5
LgogICAgIGNvbnN0IEFpcjo6Q29kZSYgY29kZSgpIGNvbnN0IHsgcmV0dXJuICptX2NvZGU7IH0K
ICAgICBBaXI6OkNvZGUmIGNvZGUoKSB7IHJldHVybiAqbV9jb2RlOyB9CiAKKyAgICB1bnNpZ25l
ZCBjYWxsQXJnQXJlYVNpemUoKSBjb25zdDsKKyAgICB2b2lkIHJlcXVlc3RDYWxsQXJnQXJlYVNp
emUodW5zaWduZWQgc2l6ZSk7CisKICAgICBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBmcmFt
ZVNpemUoKSBjb25zdDsKICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgY2FsbGVlU2F2
ZVJlZ2lzdGVycygpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwVmFsdWUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBB
aXI7CisKK1Byb2NlZHVyZSYgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjpwcm9jKCkKK3sKKyAg
ICByZXR1cm4gbV9jb250ZXh0LmNvZGUtPnByb2MoKTsKK30KKworU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMoCisgICAgU3RhY2ttYXBWYWx1ZSogdmFs
dWUsIFZlY3RvcjxWYWx1ZVJlcD4mJiByZXBzLCBBaXI6OkdlbmVyYXRpb25Db250ZXh0JiBjb250
ZXh0KQorICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICAsIG1fcmVwcyhXVEY6Om1vdmUocmVwcykp
CisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKK3sKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrbWFwR2VuZXJhdGlv
blBhcmFtc19oCisjZGVmaW5lIEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zX2gKKworI2lmIEVO
QUJsRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisjaW5jbHVkZSAiUmVnaXN0
ZXJTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENoZWNr
U3BlY2lhbDsKK2NsYXNzIFBhdGNocG9pbnRTcGVjaWFsOworY2xhc3MgUHJvY2VkdXJlOworY2xh
c3MgU3RhY2ttYXBWYWx1ZTsKK25hbWVzcGFjZSBBaXIgeworc3RydWN0IEdlbmVyYXRpb25Db250
ZXh0OworfSAvLyBuYW1lc3BhY2UgQWlyCisKK2NsYXNzIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyB7CitwdWJsaWM6CisgICAgLy8gVGhpcyBpcyB0aGUgc3RhY2ttYXAgdmFsdWUgdGhhdCB3ZSdy
ZSBnZW5lcmF0aW5nLgorICAgIFN0YWNrbWFwVmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZTsgfQorICAgIAorICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSBhY3R1YWwgdmFsdWUg
cmVwcmVzZW50YXRpb25zIHRoYXQgd2VyZSBjaG9zZW4uIFRoaXMgaXMgdXN1YWxseSBkaWZmZXJl
bnQKKyAgICAvLyBmcm9tIHRoZSBjb25zdHJhaW50cyB3ZSBzdXBwbGllZC4KKyAgICBjb25zdCBW
ZWN0b3I8VmFsdWVSZXA+JiByZXBzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBzOyB9OworCisgICAg
Ly8gVXN1YWxseSB3ZSB3aXNoIHRvIGFjY2VzcyB0aGUgcmVwcy4gV2UgbWFrZSB0aGlzIGVhc3kg
YnkgbWFraW5nIG91cnNlbHZlcyBhcHBlYXIgdG8gYmUgYQorICAgIC8vIGNvbGxlY3Rpb24gb2Yg
cmVwcy4KKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9yZXBzLnNpemUoKTsg
fQorICAgIGNvbnN0IFZhbHVlUmVwJiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV9yZXBzW2luZGV4XTsgfQorICAgIGNvbnN0IFZhbHVlUmVwJiBvcGVyYXRvcltdKHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICBWZWN0b3I8VmFsdWVSZXA+
Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVwcy5iZWdpbigpOyB9
CisgICAgVmVjdG9yPFZhbHVlUmVwPjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gbV9yZXBzLmVuZCgpOyB9CisgICAgCisgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhlIHJlZ2lz
dGVycyB0aGF0IHdlcmUgdXNlZC4KKyAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUtPm1fdXNlZFJlZ2lzdGVyczsgfTsKKworICAgIC8v
IFRoaXMgaXMgcHJvdmlkZWQgZm9yIGNvbnZlbmllbmNlOyBpdCBtZWFucyB0aGF0IHlvdSBkb24n
dCBoYXZlIHRvIGNhcHR1cmUgaXQgaWYgeW91IGRvbid0IHdhbnQgdG8uCisgICAgUHJvY2VkdXJl
JiBwcm9jKCk7CisgICAgCisgICAgLy8gVGhlIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQgZ2l2ZXMg
eW91IGV2ZW4gbW9yZSBwb3dlci4KKyAgICBBaXI6OkdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0
KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBD
aGVja1NwZWNpYWw7CisgICAgZnJpZW5kIGNsYXNzIFBhdGNocG9pbnRTcGVjaWFsOworICAgIAor
ICAgIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyhTdGFja21hcFZhbHVlKiwgVmVjdG9yPFZhbHVl
UmVwPiYmIHJlcHMsIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmKTsKKworICAgIFN0YWNrbWFwVmFs
dWUqIG1fdmFsdWU7CisgICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CisgICAgQWlyOjpHZW5l
cmF0aW9uQ29udGV4dCYgbV9jb250ZXh0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFja21hcEdlbmVy
YXRpb25QYXJhbXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBWYWx1ZS5oCShyZXZpc2lvbiAxOTM0ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDI2ICszNyw3IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCi1jbGFzcyBTdGFja21hcFZhbHVlOwotCi1u
YW1lc3BhY2UgQWlyIHsKLXN0cnVjdCBHZW5lcmF0aW9uQ29udGV4dDsKLX0KLQotc3RydWN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyB7Ci0gICAgLy8gVGhpcyBpcyB0aGUgc3RhY2ttYXAgdmFs
dWUgdGhhdCB3ZSdyZSBnZW5lcmF0aW5nLgotICAgIFN0YWNrbWFwVmFsdWUqIHZhbHVlOwotICAg
IAotICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSBhY3R1YWwgdmFsdWUgcmVwcmVzZW50YXRpb25z
IHRoYXQgd2VyZSBjaG9zZW4uIFRoaXMgaXMgdXN1YWxseSBkaWZmZXJlbnQKLSAgICAvLyBmcm9t
IHRoZSBjb25zdHJhaW50cyB3ZSBzdXBwbGllZC4KLSAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7
Ci0gICAgCi0gICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhlIHJlZ2lzdGVycyB0aGF0IHdlcmUgdXNl
ZC4KLSAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzOwotCi0gICAgLy8gVGhlIEFpcjo6R2Vu
ZXJhdGlvbkNvbnRleHQgZ2l2ZXMgeW91IGV2ZW4gbW9yZSBwb3dlci4KLSAgICBBaXI6OkdlbmVy
YXRpb25Db250ZXh0KiBjb250ZXh0OwotfTsKK3N0cnVjdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXM7CiAKIHR5cGVkZWYgdm9pZCBTdGFja21hcEdlbmVyYXRvckZ1bmN0aW9uKENDYWxsSGVscGVy
cyYsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpOwogdHlwZWRlZiBTaGFyZWRUYXNr
PFN0YWNrbWFwR2VuZXJhdG9yRnVuY3Rpb24+IFN0YWNrbWFwR2VuZXJhdG9yOwpAQCAtODQsNiAr
NjUsMTMgQEAgcHVibGljOgogICAgIC8vIGNoaWxkcmVuKCkuYXBwZW5kKCkuIFRoYXQgd2lsbCB3
b3JrIGZpbmUsIGJ1dCBpdCdzIG5vdCByZWNvbW1lbmRlZC4KICAgICB2b2lkIGFwcGVuZChjb25z
dCBDb25zdHJhaW5lZFZhbHVlJik7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBl
PgorICAgIHZvaWQgYXBwZW5kVmVjdG9yKGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvcikKKyAgICB7
CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgdmFsdWUgOiB2ZWN0b3IpCisgICAgICAgICAgICBh
cHBlbmQodmFsdWUpOworICAgIH0KKwogICAgIC8vIEhlbHBlciBmb3IgYXBwZW5kaW5nIGNvbGQg
YW55J3MuIFRoaXMgb2Z0ZW4gdXNlZCBieSBjbGllbnRzIHRvIGltcGxlbWVudCBPU1IuCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KICAgICB2b2lkIGFwcGVuZENvbGRBbnlzKGNv
bnN0IFZlY3RvclR5cGUmIHZlY3RvcikKQEAgLTI4Niw2ICsyNzQsNyBAQCBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBDaGVja1NwZWNpYWw7CiAgICAgZnJpZW5kIGNsYXNzIFBhdGNocG9pbnRT
cGVjaWFsOwogICAgIGZyaWVuZCBjbGFzcyBTdGFja21hcFNwZWNpYWw7CisgICAgZnJpZW5kIHN0
cnVjdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM7CiAgICAgCiAgICAgVmVjdG9yPFZhbHVlUmVw
PiBtX3JlcHM7CiAgICAgUmVmUHRyPFN0YWNrbWFwR2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2aXNpb24gMTkzNDgwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsOSBAQAogCiAjaW5jbHVkZSAiRlBSSW5mby5oIgogI2luY2x1ZGUgIkdQUklu
Zm8uaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUmVnLmgiCisjaW5jbHVk
ZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewpAQCAtMTE0LDYgKzExNiwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgc3RhdGljIFZhbHVlUmVwIHN0
YWNrQXJndW1lbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGFja0FyZ3VtZW50KHJlZy5vZmZzZXQoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAg
IH0KKwogICAgIHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFudChpbnQ2NF90IHZhbHVlKQogICAgIHsK
ICAgICAgICAgVmFsdWVSZXAgcmVzdWx0OwpAQCAtMjAxLDYgKzIwOCwxOCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8ZG91YmxlPih2YWx1ZSgpKTsKICAgICB9CiAKKyAg
ICBWYWx1ZVJlcCB3aXRoT2Zmc2V0KGludHB0cl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgICAgICByZXR1cm4g
c3RhY2sob2Zmc2V0RnJvbUZQKCkgKyBvZmZzZXQpOworICAgICAgICBjYXNlIFN0YWNrQXJndW1l
bnQ6CisgICAgICAgICAgICByZXR1cm4gc3RhY2tBcmd1bWVudChvZmZzZXRGcm9tU1AoKSArIG9m
ZnNldCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgIH0KKyAgICB9CisKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90
ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
Y3BwCShyZXZpc2lvbiAxOTM0ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQxMywxMSArMzQxMywxMSBAQCB2b2lkIHRlc3RTaW1w
bGVQYXRjaHBvaW50KCkKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsm
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFy
YW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMyk7
Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKLSAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtcy5yZXBzWzFd
LmdwcigpLCBwYXJhbXMucmVwc1syXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBh
cmFtc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1sxXS5pc0dQUigpKTsK
KyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGFkZDMy
KGppdCwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7
CiAgICAgICAgIH0pOwogICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIHBhdGNocG9pbnQpOwogCkBAIC0zNDQwLDExICszNDQwLDExIEBAIHZv
aWQgdGVzdFNpbXBsZVBhdGNocG9pbnRXaXRob3V0T3VwdXRDbG8KICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwcy5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sw
XS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwot
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHgwMGZmMDBm
ZiksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKLSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKDB4MDBmZjAwZmYpLCBwYXJhbXMucmVwc1sxXS5ncHIoKSk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDIpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zWzBdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzFdLmlzR1BSKCkp
OworICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHgwMGZm
MDBmZiksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigweDAwZmYwMGZmKSwgcGFyYW1zWzFdLmdwcigpKTsKICAgICAgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4MDBmZjAwZmYpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMHgwMGZmMDBmZiksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAg
IH0pOwpAQCAtMzQ4NSwxMiArMzQ4NSwxMiBAQCB2b2lkIHRlc3RTaW1wbGVQYXRjaHBvaW50V2l0
aE91cHV0Q2xvYmJlCiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDMpOwot
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBD
SEVDSyhwYXJhbXMucmVwc1sxXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0Lm1vdmUocGFyYW1zLnJlcHNbMV0uZ3By
KCksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKLSAgICAgICAgICAgIGppdC5hZGQ2NChwYXJhbXMu
cmVwc1syXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1swXS5pc0dQUigp
KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1sxXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENI
RUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKHBhcmFtc1sxXS5n
cHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgICAgIGppdC5hZGQ2NChwYXJhbXNbMl0u
Z3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAKICAgICAgICAgICAgIGNsb2JiZXJBbGwuZm9yRWFj
aChbJl0gKFJlZyByZWcpIHsKICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigweDAwZmYwMGZmKSwgcmVnLmdwcigpKTsKQEAgLTM1MjAsMTEgKzM1MjAs
MTEgQEAgdm9pZCB0ZXN0U2ltcGxlUGF0Y2hwb2ludFdpdGhvdXRPdXB1dENsbwogICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAyKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5yZXBzWzBdLmlzRlBSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNG
UFIoKSk7Ci0gICAgICAgICAgICBqaXQubW92ZVplcm9Ub0RvdWJsZShwYXJhbXMucmVwc1swXS5m
cHIoKSk7Ci0gICAgICAgICAgICBqaXQubW92ZVplcm9Ub0RvdWJsZShwYXJhbXMucmVwc1sxXS5m
cHIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDIpOworICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zWzBdLmlzRlBSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzFd
LmlzRlBSKCkpOworICAgICAgICAgICAgaml0Lm1vdmVaZXJvVG9Eb3VibGUocGFyYW1zWzBdLmZw
cigpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlWmVyb1RvRG91YmxlKHBhcmFtc1sxXS5mcHIoKSk7
CiAgICAgICAgICAgICBqaXQubW92ZVplcm9Ub0RvdWJsZShGUFJJbmZvOjphcmd1bWVudEZQUjAp
OwogICAgICAgICAgICAgaml0Lm1vdmVaZXJvVG9Eb3VibGUoRlBSSW5mbzo6YXJndW1lbnRGUFIx
KTsKICAgICAgICAgfSk7CkBAIC0zNTU4LDExICszNTU4LDExIEBAIHZvaWQgdGVzdFNpbXBsZVBh
dGNocG9pbnRXaXRoT3VwdXRDbG9iYmUKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAg
ICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXpl
KCkgPT0gMyk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0ZQUigpKTsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzRlBSKCkpOwotICAgICAgICAgICAgQ0hF
Q0socGFyYW1zLnJlcHNbMl0uaXNGUFIoKSk7Ci0gICAgICAgICAgICBqaXQuYWRkRG91YmxlKHBh
cmFtcy5yZXBzWzFdLmZwcigpLCBwYXJhbXMucmVwc1syXS5mcHIoKSwgcGFyYW1zLnJlcHNbMF0u
ZnByKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsKKyAgICAgICAg
ICAgIENIRUNLKHBhcmFtc1swXS5pc0ZQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1sx
XS5pc0ZQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0ZQUigpKTsKKyAgICAg
ICAgICAgIGppdC5hZGREb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMl0uZnByKCksIHBh
cmFtc1swXS5mcHIoKSk7CiAKICAgICAgICAgICAgIGNsb2JiZXJBbGwuZm9yRWFjaChbJl0gKFJl
ZyByZWcpIHsKICAgICAgICAgICAgICAgICBqaXQubW92ZVplcm9Ub0RvdWJsZShyZWcuZnByKCkp
OwpAQCAtMzU5MCwxMCArMzU5MCwxMCBAQCB2b2lkIHRlc3RQYXRjaHBvaW50V2l0aEVhcmx5Q2xv
YmJlcigpCiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJFYXJseShSZWdpc3RlclNldChyZWdp
c3RlclRvQ2xvYmJlcikpOwogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAg
ICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIENIRUNLKChwYXJhbXMucmVwc1sxXS5n
cHIoKSA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjApID09IGFyZzFJbkFyZ0dQUik7Ci0gICAgICAg
ICAgICAgICAgQ0hFQ0soKHBhcmFtcy5yZXBzWzJdLmdwcigpID09IEdQUkluZm86OmFyZ3VtZW50
R1BSMSkgPT0gYXJnMkluQXJnR1BSKTsKKyAgICAgICAgICAgICAgICBDSEVDSygocGFyYW1zWzFd
LmdwcigpID09IEdQUkluZm86OmFyZ3VtZW50R1BSMCkgPT0gYXJnMUluQXJnR1BSKTsKKyAgICAg
ICAgICAgICAgICBDSEVDSygocGFyYW1zWzJdLmdwcigpID09IEdQUkluZm86OmFyZ3VtZW50R1BS
MSkgPT0gYXJnMkluQXJnR1BSKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBh
ZGQzMihqaXQsIHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJhbXMucmVwc1syXS5ncHIoKSwgcGFy
YW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAgIGFkZDMyKGppdCwgcGFyYW1zWzFd
LmdwcigpLCBwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgICAgICAgICB9
KTsKIAogICAgICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLCBwYXRjaHBvaW50KTsKQEAgLTM2MTgsMTYgKzM2MTgsMTYgQEAgdm9pZCB0ZXN0
UGF0Y2hwb2ludENhbGxBcmcoKQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAg
ICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9
PSAzKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOwotICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNTdGFjaygpKTsKLSAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzWzJdLmlzU3RhY2soKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6
ZSgpID09IDMpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlzR1BSKCkpOworICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zWzFdLmlzU3RhY2soKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJh
bXNbMl0uaXNTdGFjaygpKTsKICAgICAgICAgICAgIGppdC5sb2FkMzIoCi0gICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBwYXJh
bXMucmVwc1sxXS5vZmZzZXRGcm9tRlAoKSksCi0gICAgICAgICAgICAgICAgcGFyYW1zLnJlcHNb
MF0uZ3ByKCkpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgcGFyYW1zWzFdLm9mZnNldEZyb21GUCgpKSwKKyAgICAgICAg
ICAgICAgICBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICAgICAgaml0LmFkZDMyKAotICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgcGFyYW1zLnJlcHNbMl0ub2Zmc2V0RnJvbUZQKCkpLAotICAgICAgICAgICAgICAgIHBhcmFt
cy5yZXBzWzBdLmdwcigpKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHBhcmFtc1syXS5vZmZzZXRGcm9tRlAoKSksCisg
ICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpKTsKICAgICAgICAgfSk7CiAgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2lu
dCk7CiAKQEAgLTM2NDYsMTEgKzM2NDYsMTEgQEAgdm9pZCB0ZXN0UGF0Y2hwb2ludEZpeGVkUmVn
aXN0ZXIoKQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
ICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2go
aml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKLSAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHNbMV0gPT0gVmFsdWVSZXAoR1BSSW5mbzo6cmVnVDApKTsKLSAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5yZXBzWzJdID09IFZhbHVlUmVwKEdQUkluZm86OnJlZ1QxKSk7Ci0gICAg
ICAgICAgICBhZGQzMihqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgcGFyYW1z
LnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsK
KyAgICAgICAgICAgIENIRUNLKHBhcmFtc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtc1sxXSA9PSBWYWx1ZVJlcChHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICAgICAgQ0hF
Q0socGFyYW1zWzJdID09IFZhbHVlUmVwKEdQUkluZm86OnJlZ1QxKSk7CisgICAgICAgICAgICBh
ZGQzMihqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgcGFyYW1zWzBdLmdwcigp
KTsKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7CiAKQEAgLTM2NzAsMTEgKzM2NzAsMTEgQEAg
dm9pZCB0ZXN0UGF0Y2hwb2ludEFueShWYWx1ZVJlcCByZXApCiAgICAgICAgIFsmXSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAg
ICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGpp
dCk7CiAgICAgICAgICAgICAvLyBXZSBzaG91bGRuJ3QgaGF2ZSBzcGlsbGVkIHRoZSBpbnB1dHMs
IHNvIHdlIGFzc2VydCB0aGF0IHRoZXkncmUgaW4gcmVnaXN0ZXJzLgotICAgICAgICAgICAgQ0hF
Q0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDMpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJl
cHNbMF0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS5pc0dQUigp
KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAg
ICAgYWRkMzIoaml0LCBwYXJhbXMucmVwc1sxXS5ncHIoKSwgcGFyYW1zLnJlcHNbMl0uZ3ByKCks
IHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkg
PT0gMyk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMF0uaXNHUFIoKSk7CisgICAgICAgICAg
ICBDSEVDSyhwYXJhbXNbMV0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0u
aXNHUFIoKSk7CisgICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1z
WzJdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICB9KTsKICAgICByb290LT5hcHBl
bmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsK
IApAQCAtMzcwNCwxNiArMzcwNCwxNiBAQCB2b2lkIHRlc3RQYXRjaHBvaW50TG90c09mTGF0ZUFu
eXMoKQogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAgLy8gV2Ugc2hvdWxkbid0
IGhhdmUgc3BpbGxlZCB0aGUgaW5wdXRzLCBzbyB3ZSBhc3NlcnQgdGhhdCB0aGV5J3JlIGluIHJl
Z2lzdGVycy4KLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSB0aGluZ3Mu
c2l6ZSgpICsgMSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsK
LSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBwYXJh
bXMucmVwc1swXS5ncHIoKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
cGFyYW1zLnJlcHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnJl
cHNbaV0uaXNHUFIoKSkgewotICAgICAgICAgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1tp
XSAhPSBwYXJhbXMucmVwc1swXSk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGQzMihwYXJh
bXMucmVwc1tpXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgQ0hF
Q0socGFyYW1zLnNpemUoKSA9PSB0aGluZ3Muc2l6ZSgpICsgMSk7CisgICAgICAgICAgICBDSEVD
SyhwYXJhbXNbMF0uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigwKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCBwYXJhbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBp
ZiAocGFyYW1zW2ldLmlzR1BSKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ0hFQ0socGFyYW1z
W2ldICE9IHBhcmFtc1swXSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGQzMihwYXJhbXNb
aV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbaV0uaXNTdGFjaygpKTsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgcGFyYW1zLnJlcHNbaV0ub2Zmc2V0RnJvbUZQKCkpLCBwYXJhbXMu
cmVwc1swXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgIENIRUNLKHBhcmFtc1tpXS5pc1N0
YWNrKCkpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBwYXJhbXNbaV0ub2Zmc2V0RnJvbUZQKCkp
LCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgfSk7CkBAIC0zNzM2LDE0ICszNzM2LDE0IEBAIHZvaWQgdGVzdFBhdGNocG9pbnRBbnlJ
bW0oVmFsdWVSZXAgcmVwKQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAg
WyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAz
KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOwotICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwc1syXS5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNb
Ml0udmFsdWUoKSA9PSA0Mik7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDMp
OworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hF
Q0socGFyYW1zWzFdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzQ29u
c3RhbnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0udmFsdWUoKSA9PSA0Mik7CiAg
ICAgICAgICAgICBqaXQuYWRkMzIoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocGFyYW1zLnJlcHNbMl0udmFsdWUoKSkpLAot
ICAgICAgICAgICAgICAgIHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJhbXMucmVwc1swXS5ncHIo
KSk7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4ocGFyYW1zWzJdLnZhbHVlKCkpKSwKKyAgICAgICAgICAgICAgICBwYXJhbXNb
MV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgICAgIH0pOwogICAgIHJvb3QtPmFwcGVu
ZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHBhdGNocG9pbnQpOwog
CkBAIC0zNzY1LDExICszNzY1LDExIEBAIHZvaWQgdGVzdFBhdGNocG9pbnRNYW55SW1tcygpCiAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnNCwgVmFsdWVSZXA6Oldh
cm1BbnkpKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0Nh
bGxIZWxwZXJzJiwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIENI
RUNLKHBhcmFtcy5yZXBzWzBdID09IFZhbHVlUmVwOjpjb25zdGFudCg0MikpOwotICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0gPT0gVmFsdWVSZXA6OmNvbnN0YW50KDQzKSk7Ci0gICAg
ICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXSA9PSBWYWx1ZVJlcDo6Y29uc3RhbnQoNDMwMDAw
MDAwMDAwMDBsbCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10gPT0gVmFsdWVS
ZXA6OmNvbnN0YW50KGJpdHdpc2VfY2FzdDxpbnQ2NF90Pig0Mi41KSkpOworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1swXSA9
PSBWYWx1ZVJlcDo6Y29uc3RhbnQoNDIpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1sxXSA9
PSBWYWx1ZVJlcDo6Y29uc3RhbnQoNDMpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXSA9
PSBWYWx1ZVJlcDo6Y29uc3RhbnQoNDMwMDAwMDAwMDAwMDBsbCkpOworICAgICAgICAgICAgQ0hF
Q0socGFyYW1zWzNdID09IFZhbHVlUmVwOjpjb25zdGFudChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4o
NDIuNSkpKTsKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4o
CiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCkBAIC0zNzkxLDExICszNzkxLDExIEBA
IHZvaWQgdGVzdFBhdGNocG9pbnRXaXRoUmVnaXN0ZXJSZXN1bHQoKQogICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBz
WzBdID09IFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6bm9uQXJnR1BSMCkpOwotICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwc1syXS5pc0dQUigpKTsKLSAgICAgICAgICAgIGFkZDMyKGppdCwgcGFyYW1zLnJlcHNbMV0u
Z3ByKCksIHBhcmFtcy5yZXBzWzJdLmdwcigpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMyk7CisgICAgICAgICAgICBDSEVDSyhwYXJh
bXNbMF0gPT0gVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpub25BcmdHUFIwKSk7CisgICAgICAgICAg
ICBDSEVDSyhwYXJhbXNbMV0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0u
aXNHUFIoKSk7CisgICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1z
WzJdLmdwcigpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICAgICAgfSk7CiAgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2lu
dCk7CiAKQEAgLTM4MTYsMTIgKzM4MTYsMTIgQEAgdm9pZCB0ZXN0UGF0Y2hwb2ludFdpdGhTdGFj
a0FyZ3VtZW50UmVzdQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsK
LSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdID09IFZhbHVlUmVwOjpzdGFjaygtc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KHByb2MuZnJhbWVTaXplKCkpKSk7Ci0gICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwc1sxXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBz
WzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0LnN0b3JlMzIocGFyYW1zLnJlcHNbMV0uZ3By
KCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyLCAwKSk7Ci0gICAgICAgICAgICBqaXQuYWRkMzIocGFyYW1zLnJlcHNbMl0uZ3ByKCksIEND
YWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAw
KSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDMpOworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zWzBdID09IFZhbHVlUmVwOjpzdGFjaygtc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KHByb2MuZnJhbWVTaXplKCkpKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMV0uaXNHUFIo
KSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBq
aXQuc3RvcmUzMihwYXJhbXNbMV0uZ3ByKCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAwKSk7CisgICAgICAgICAgICBqaXQuYWRkMzIo
cGFyYW1zWzJdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFj
a1BvaW50ZXJSZWdpc3RlciwgMCkpOwogICAgICAgICB9KTsKICAgICByb290LT5hcHBlbmROZXc8
Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKIApAQCAt
Mzg0NCwxMyArMzg0NCwxMyBAQCB2b2lkIHRlc3RQYXRjaHBvaW50V2l0aEFueVJlc3VsdCgpCiAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDMpOwotICAgICAgICAgICAgQ0hF
Q0socGFyYW1zLnJlcHNbMF0uaXNTdGFjaygpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzWzFdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIo
KSk7Ci0gICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJhbXMu
cmVwc1syXS5ncHIoKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1swXS5pc1N0YWNrKCkpOwor
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzFdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgYWRkMzIoaml0LCBwYXJhbXNbMV0uZ3By
KCksIHBhcmFtc1syXS5ncHIoKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgaml0LmNv
bnZlcnRJbnQzMlRvRG91YmxlKEdQUkluZm86OnJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAg
ICAgICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHBhcmFtcy5yZXBzWzBdLm9mZnNl
dEZyb21GUCgpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdU
MCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBwYXJh
bXNbMF0ub2Zmc2V0RnJvbUZQKCkpKTsKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7CiAKQEAg
LTM4NjYsNyArMzg2Niw3IEBAIHZvaWQgdGVzdFNpbXBsZUNoZWNrKCkKICAgICBjaGVjay0+c2V0
R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnJlcHMuc2l6ZSgpID09IDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9
PSAxKTsKIAogICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHdvcmsgYmVjYXVzZSBh
IGZ1bmN0aW9uIHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBoYXZlIGNhbGxlZQogICAgICAgICAg
ICAgLy8gc2F2ZXMuCkBAIC0zODk4LDcgKzM4OTgsNyBAQCB2b2lkIHRlc3RDaGVja0xlc3NUaGFu
KCkKICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDEpOworICAgICAgICAgICAgQ0hF
Q0socGFyYW1zLnNpemUoKSA9PSAxKTsKIAogICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYWx3
YXlzIHdvcmsgYmVjYXVzZSBhIGZ1bmN0aW9uIHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBoYXZl
IGNhbGxlZQogICAgICAgICAgICAgLy8gc2F2ZXMuCkBAIC0zOTQ0LDcgKzM5NDQsNyBAQCB2b2lk
IHRlc3RDaGVja01lZ2FDb21ibygpCiAgICAgY2hlY2stPnNldEdlbmVyYXRvcigKICAgICAgICAg
WyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAx
KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMSk7CiAKICAgICAgICAgICAg
IC8vIFRoaXMgc2hvdWxkIGFsd2F5cyB3b3JrIGJlY2F1c2UgYSBmdW5jdGlvbiB0aGlzIHNpbXBs
ZSBzaG91bGQgbmV2ZXIgaGF2ZSBjYWxsZWUKICAgICAgICAgICAgIC8vIHNhdmVzLgpAQCAtMzk4
NCwxMSArMzk4NCwxMSBAQCB2b2lkIHRlc3RDaGVja0FkZEltbSgpCiAgICAgY2hlY2tBZGQtPnNl
dEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBh
cmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJd
LmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXNDb25zdGFudCgp
KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLnZhbHVlKCkgPT0gNDIpOwotICAg
ICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gNCk7
CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVD
SyhwYXJhbXNbM10uaXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1szXS52
YWx1ZSgpID09IDQyKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJh
bXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmNvbnZlcnRJ
bnQzMlRvRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQyKSwgRlBSSW5mbzo6ZnBS
ZWdUMSk7CiAgICAgICAgICAgICBqaXQuYWRkRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUklu
Zm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBA
IC00MDIwLDExICs0MDIwLDExIEBAIHZvaWQgdGVzdENoZWNrQWRkSW1tQ29tbXV0ZSgpCiAgICAg
Y2hlY2tBZGQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIENIRUNLKHBh
cmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10u
aXNDb25zdGFudCgpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLnZhbHVlKCkg
PT0gNDIpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBz
WzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5z
aXplKCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7CisgICAg
ICAgICAgICBDSEVDSyhwYXJhbXNbM10uaXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtc1szXS52YWx1ZSgpID09IDQyKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJU
b0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAg
aml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQyKSwg
RlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuYWRkRG91YmxlKEZQUkluZm86OmZw
UmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVw
aWxvZ3VlKCk7CkBAIC00MDU2LDExICs0MDU2LDExIEBAIHZvaWQgdGVzdENoZWNrQWRkSW1tU29t
ZVJlZ2lzdGVyKCkKICAgICBjaGVja0FkZC0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
ewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOwotICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwc1szXS5pc0dQUigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJU
b0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAg
ICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbM10uZ3ByKCksIEZQUklu
Zm86OmZwUmVnVDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSA0KTsKKyAg
ICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBh
cmFtc1szXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShw
YXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZl
cnRJbnQzMlRvRG91YmxlKHBhcmFtc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAg
ICAgICAgICBqaXQuYWRkRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDAp
OwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBq
aXQucmV0KCk7CkBAIC00MDkzLDExICs0MDkzLDExIEBAIHZvaWQgdGVzdENoZWNrQWRkKCkKICAg
ICBjaGVja0FkZC0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOwotICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sz
XS5pc0dQUigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMu
cmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBqaXQuY29udmVy
dEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbM10uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOwor
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1szXS5pc0dQUigp
KTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCks
IEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91Ymxl
KHBhcmFtc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuYWRk
RG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAg
aml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7CkBAIC00
MTI2LDExICs0MTI2LDExIEBAIHZvaWQgdGVzdENoZWNrQWRkNjQoKQogICAgIGNoZWNrQWRkLT5z
ZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sy
XS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkpOwot
ICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigp
LCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0RvdWJs
ZShwYXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBD
SEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlz
R1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzR1BSKCkpOworICAgICAgICAg
ICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBS
ZWdUMCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1zWzNdLmdw
cigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5hZGREb3VibGUoRlBSSW5m
bzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQyMDAsMTEgKzQyMDAs
MTEgQEAgdm9pZCB0ZXN0Q2hlY2tTdWJJbW0oKQogICAgIGNoZWNrU3ViLT5zZXRHZW5lcmF0b3Io
CiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5z
aXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsK
LSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzQ29uc3RhbnQoKSk7Ci0gICAgICAg
ICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS52YWx1ZSgpID09IDQyKTsKLSAgICAgICAgICAgIGpp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBS
ZWdUMCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNd
LmlzQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbM10udmFsdWUoKSA9PSA0
Mik7CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zWzJdLmdwcigp
LCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJs
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMig0MiksIEZQUkluZm86OmZwUmVnVDEpOwogICAg
ICAgICAgICAgaml0LnN1YkRvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1Qw
KTsKICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtNDIzNywxMSAr
NDIzNywxMSBAQCB2b2lkIHRlc3RDaGVja1N1YkJhZEltbSgpCiAgICAgY2hlY2tTdWItPnNldEdl
bmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5yZXBzLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlz
R1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXNDb25zdGFudCgpKTsK
LSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLnZhbHVlKCkgPT0gYmFkSW1tKTsKLSAg
ICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwg
RlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQp
OworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hF
Q0socGFyYW1zWzNdLmlzQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbM10u
dmFsdWUoKSA9PSBiYWRJbW0pOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91Ymxl
KHBhcmFtc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuY29u
dmVydEludDMyVG9Eb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYmFkSW1tKSwgRlBS
SW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuc3ViRG91YmxlKEZQUkluZm86OmZwUmVn
VDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7CkBAIC00Mjc1LDExICs0Mjc1LDExIEBAIHZvaWQgdGVzdENoZWNrU3ViKCkKICAgICBj
aGVja1N1Yi0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOwotICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS5p
c0dQUigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVw
c1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBqaXQuY29udmVydElu
dDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbM10uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOworICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBh
cmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1szXS5pc0dQUigpKTsK
KyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQ
UkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBh
cmFtc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuc3ViRG91
YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0
LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7CkBAIC00MzEz
LDExICs0MzEzLDExIEBAIHZvaWQgdGVzdENoZWNrU3ViNjQoKQogICAgIGNoZWNrU3ViLT5zZXRH
ZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5p
c0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkpOwotICAg
ICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0RvdWJsZShw
YXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBDSEVD
SyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BS
KCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzR1BSKCkpOworICAgICAgICAgICAg
aml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdU
MCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1zWzNdLmdwcigp
LCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5zdWJEb3VibGUoRlBSSW5mbzo6
ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQzODYsOSArNDM4Niw5IEBA
IHZvaWQgdGVzdENoZWNrTmVnKCkKICAgICBjaGVja05lZy0+c2V0R2VuZXJhdG9yKAogICAgICAg
ICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFs
bG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09
IDMpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAg
ICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3ByKCksIEZQUklu
Zm86OmZwUmVnVDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsKKyAg
ICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5jb252
ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOwogICAg
ICAgICAgICAgaml0Lm5lZ2F0ZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJl
Z1QwKTsKICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgICAgICAg
ICAgaml0LnJldCgpOwpAQCAtNDQxNiw5ICs0NDE2LDkgQEAgdm9pZCB0ZXN0Q2hlY2tOZWc2NCgp
CiAgICAgY2hlY2tOZWctPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKLSAgICAgICAgICAgIENI
RUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2
NFRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMyk7CisgICAgICAgICAgICBDSEVDSyhwYXJh
bXNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFy
YW1zWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5uZWdhdGVE
b3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBq
aXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQ0
NTEsMTEgKzQ0NTEsMTEgQEAgdm9pZCB0ZXN0Q2hlY2tNdWwoKQogICAgIGNoZWNrTXVsLT5zZXRH
ZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5p
c0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkpOwotICAg
ICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShw
YXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBDSEVD
SyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BS
KCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzR1BSKCkpOworICAgICAgICAgICAg
aml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdU
MCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zWzNdLmdwcigp
LCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5tdWxEb3VibGUoRlBSSW5mbzo6
ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQ0OTIsMTEgKzQ0OTIsMTEg
QEAgdm9pZCB0ZXN0Q2hlY2tNdWxNZW1vcnkoKQogICAgIGNoZWNrTXVsLT5zZXRHZW5lcmF0b3Io
CiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5z
aXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsK
LSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkpOwotICAgICAgICAgICAg
aml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpm
cFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVw
c1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMu
c2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzR1BSKCkpOworICAgICAgICAgICAgaml0LmNvbnZl
cnRJbnQzMlRvRG91YmxlKHBhcmFtc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAg
ICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zWzNdLmdwcigpLCBGUFJJbmZv
OjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5tdWxEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwg
RlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
KTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQ1MzgsMTEgKzQ1MzgsMTEgQEAgdm9pZCB0
ZXN0Q2hlY2tNdWwyKCkKICAgICBjaGVja011bC0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOwot
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBD
SEVDSyhwYXJhbXMucmVwc1szXS5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnJlcHNbM10udmFsdWUoKSA9PSAyKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJU
b0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAg
ICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1z
WzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzQ29uc3RhbnQoKSk7
CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbM10udmFsdWUoKSA9PSAyKTsKKyAgICAgICAgICAg
IGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVn
VDApOwogICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKDIpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5tdWxE
b3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBq
aXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTQ1NzIsMTEgKzQ1NzIsMTEgQEAgdm9pZCB0
ZXN0Q2hlY2tNdWw2NCgpCiAgICAgY2hlY2tNdWwtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsK
LSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnJlcHNbM10uaXNHUFIoKSk7Ci0gICAgICAgICAgICBqaXQuY29udmVydElu
dDY0VG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwotICAg
ICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzNdLmdwcigpLCBG
UFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gNCk7
CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVD
SyhwYXJhbXNbM10uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3Vi
bGUocGFyYW1zWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5j
b252ZXJ0SW50NjRUb0RvdWJsZShwYXJhbXNbM10uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOwog
ICAgICAgICAgICAgaml0Lm11bERvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJl
Z1QwKTsKICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgICAgICAg
ICAgaml0LnJldCgpOwpAQCAtNDY3NSw5ICs0Njc1LDkgQEAgdm9pZCBnZW5lcmljVGVzdENvbXBh
cmUoCiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgICAgIFsmXSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9
PSAxKTsKLSAgICAgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKLSAg
ICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgcGFy
YW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkg
PT0gMSk7CisgICAgICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlzR1BSKCkpOworICAgICAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBwYXJhbXNb
MF0uZ3ByKCkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIHRoZW5DYXNlLT5hcHBlbmROZXc8
Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJ
KHJldmlzaW9uIDE5MzQ4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRl
ICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKQEAgLTQ4Mjgs
MTQgKzQ4MjksOTkgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcGlsZUNhbGxPckNvbnN0cnVj
dCgpCiAgICAgeworICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOworICAgICAgICBpbnQgbnVt
QXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOworCisgICAgICAgIExWYWx1ZSBqc0NhbGxl
ZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisKICNpZiBGVExf
VVNFU19CMwotICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpIHx8ICF2ZXJi
b3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICBDUkFTSCgpOwotI2Vsc2UKLSAg
ICAgICAgaW50IG51bUFyZ3MgPSBtX25vZGUtPm51bUNoaWxkcmVuKCkgLSAxOworICAgICAgICB1
bnNpZ25lZCBmcmFtZVNpemUgPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtQXJn
czsKKyAgICAgICAgdW5zaWduZWQgYWxpZ25lZEZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBmcmFtZVNpemUpOworCisgICAgICAg
IC8vIEpTLT5KUyBjYWxsaW5nIGNvbnZlbnRpb24gcmVxdWlyZXMgdGhhdCB0aGUgY2FsbGVyIGFs
bG93cyB0aGlzIG11Y2ggc3BhY2Ugb24gdG9wIG9mIHN0YWNrIHRvCisgICAgICAgIC8vIGdldCB0
cmFzaGVkIGJ5IHRoZSBjYWxsZWUsIGV2ZW4gaWYgbm90IGFsbCBvZiB0aGF0IHNwYWNlIGlzIHVz
ZWQgdG8gcGFzcyBhcmd1bWVudHMuIFdlIHRlbGwKKyAgICAgICAgLy8gQjMgdGhpcyBleHBsaWNp
dGx5IGZvciB0d28gcmVhc29uczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBXZSB3aWxsIG9u
bHkgcGFzcyBmcmFtZVNpemUgd29ydGggb2Ygc3R1ZmYuCisgICAgICAgIC8vIC0gVGhlIHRyYXNo
ZWQgc3RhY2sgZ3VhcmFudGVlIGlzIGxvZ2ljYWxseSBzZXBhcmF0ZSBmcm9tIHRoZSBhY3Qgb2Yg
cGFzc2luZyBhcmd1bWVudHMsIHNvIHdlCisgICAgICAgIC8vICAgc2hvdWxkbid0IHJlbHkgb24g
QWlyIHRvIGluZmVyIHRoZSB0cmFzaGVkIHN0YWNrIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBhcmd1
bWVudHMgaXQgZW5kcworICAgICAgICAvLyAgIHVwIHNlZWluZy4KKyAgICAgICAgbV9wcm9jLnJl
cXVlc3RDYWxsQXJnQXJlYVNpemUoYWxpZ25lZEZyYW1lU2l6ZSk7CisKKyAgICAgICAgLy8gQ29s
bGVjdCB0aGUgYXJndW1lbnRzLCBzaW5jZSB0aGlzIGNhbiBnZW5lcmF0ZSBjb2RlIGFuZCB3ZSB3
YW50IHRvIGdlbmVyYXRlIGl0IGJlZm9yZSB3ZSBlbWl0CisgICAgICAgIC8vIHRoZSBjYWxsLgor
ICAgICAgICBWZWN0b3I8Q29uc3RyYWluZWRWYWx1ZT4gYXJndW1lbnRzOworCisgICAgICAgIC8v
IE1ha2UgdGhpcyBlYXN5IGZvciBvdXJzZWx2ZXMuCisgICAgICAgIGF1dG8gYWRkQXJndW1lbnQg
PSBbJl0gKExWYWx1ZSB2YWx1ZSwgY29uc3QgVmFsdWVSZXAmIHJlcCkgeworICAgICAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHZhbHVlLCByZXApKTsKKyAgICAgICAg
fTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgY2FsbGVlIGdvZXMgaW50byBHUFIw
LgorICAgICAgICBhZGRBcmd1bWVudChqc0NhbGxlZSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpy
ZWdUMCkpOworCisgICAgICAgIC8vIE5vdyBwdXQgdGhpbmdzIGludG8gdGhlIHN0YWNrLgorICAg
ICAgICBhZGRBcmd1bWVudChqc0NhbGxlZSwgVmFsdWVSZXA6OnN0YWNrQXJndW1lbnQoVmlydHVh
bFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSkpKTsKKyAgICAgICAgYWRkQXJndW1lbnQoCisgICAg
ICAgICAgICBtX291dC5jb25zdEludDMyKG51bUFyZ3MpLAorICAgICAgICAgICAgVmFsdWVSZXA6
OnN0YWNrQXJndW1lbnQoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKS53
aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bUFyZ3M7ICsraSkgeworICAgICAgICAgICAgYWRkQXJndW1lbnQoCisgICAgICAgICAg
ICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEgKyBpKSksCisgICAg
ICAgICAgICAgICAgVmFsdWVSZXA6OnN0YWNrQXJndW1lbnQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoaSkpKTsKKyAgICAgICAgfQorCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IG1fb3V0LnBhdGNocG9pbnQoSW50NjQpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmRWZWN0b3IoYXJndW1lbnRzKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3Rl
clNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBwYXRjaHBvaW50LT5jbG9i
YmVyTGF0ZShSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisgICAg
ICAgIHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQgPSBWYWx1ZVJlcDo6cmVnKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBjb2Rl
T3JpZ2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCk7CisgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZt
X2Z0bFN0YXRlOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAg
ICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgeworICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9
IHN0YXRlLT5qaXRDb2RlLT5jb21tb24tPmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoY29kZU9yaWdp
bik7CisKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSWYgd2Ugd2VyZSBoYW5kbGluZyBleGNl
cHRpb25zLCB0aGVuIGF0IHRoaXMgcG9pbnQgd2Ugd291bGQgYXNrIG91ciBkZXNjcmlwdG9yCisg
ICAgICAgICAgICAgICAgLy8gdG8gcHJlcGFyZSBhbmQgdGhlbiB3ZSB3b3VsZCBtb2RpZnkgdGhl
IE9TUkV4aXQgZGF0YSBzdHJ1Y3R1cmUgaW5zaWRlIHRoZQorICAgICAgICAgICAgICAgIC8vIE9T
UkV4aXRIYW5kbGUgdG8gbGluayBpdCB1cCB0byB0aGlzIGNhbGwuCisKKyAgICAgICAgICAgICAg
ICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXI6OlRydXN0ZWRJ
bW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwor
CisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBzdGF0ZS0+Y29k
ZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgdGFyZ2V0
VG9DaGVjaywKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KDApKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOworCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOwor
CisgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKworICAgICAgICAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxs
ID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogCi0g
ICAgICAgIExWYWx1ZSBqc0NhbGxlZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDApKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbCgKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86
OkNvbnN0cnVjdCA6IENhbGxMaW5rSW5mbzo6Q2FsbCwKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+b3JpZ2luLnNlbWFudGljLCBHUFJJbmZvOjpyZWdUMCk7CiAKKyAgICAgICAgICAgICAgICBq
aXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MigtcGFyYW1zLnByb2MoKS5mcmFtZVNpemUoKSksCisgICAgICAgICAgICAgICAgICAgIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBOZWVkIHNvbWUgbGluayB0YXNrLgorICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKKyNlbHNlCiAg
ICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CiAKICAgICAgICAg
dW5zaWduZWQgZnJhbWVTaXplID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bUFy
Z3M7CkBAIC00ODQ5LDcgKzQ5MzUsNyBAQCBwcml2YXRlOgogICAgICAgICBhcmd1bWVudHMuYXBw
ZW5kKGpzQ2FsbGVlKTsgLy8gY2FsbGVlIC0+IHN0YWNrCiAgICAgICAgIGFyZ3VtZW50cy5hcHBl
bmQobV9vdXQuY29uc3RJbnQ2NChudW1BcmdzKSk7IC8vIGFyZ3VtZW50IGNvdW50IGFuZCB6ZXJv
cyBmb3IgdGhlIHRhZwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUFyZ3M7ICsraSkK
LSAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMSArIGkpKSk7CisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGxvd0pT
VmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxICsgaSkpKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHBhZGRpbmc7ICsraSkKICAgICAgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQoZ2V0VW5kZWYobV9vdXQuaW50NjQpKTsKIApAQCAtNDg2Myw3ICs0OTQ5LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKG1fb3V0LmludDY0LCBtX291
dC5wYXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKICAgICAgICAgc2V0SW5z
dHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNV2ViS2l0SlNDYWxsQ29udik7CiAg
ICAgICAgIAotICAgICAgICBtX2Z0bFN0YXRlLmpzQ2FsbHMuYXBwZW5kKEpTQ2FsbChzdGFja21h
cElELCBtX25vZGUsIGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKSkpOworICAgICAg
ICBtX2Z0bFN0YXRlLmpzQ2FsbHMuYXBwZW5kKEpTQ2FsbChzdGFja21hcElELCBub2RlLCBjb2Rl
T3JpZ2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCkpKTsKICAgICAgICAgCiAgICAgICAgIHNldEpT
VmFsdWUoY2FsbCk7CiAjZW5kaWYKQEAgLTc5MDEsNyArNzk4Nyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIHJlc3VsdC0+c2V0R2VuZXJhdG9yKAogICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAg
ICAgICAgICBWZWN0b3I8TG9jYXRpb24+IGxvY2F0aW9uczsKLSAgICAgICAgICAgICAgICBmb3Ig
KGNvbnN0IEIzOjpWYWx1ZVJlcCYgcmVwIDogcGFyYW1zLnJlcHMpCisgICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBCMzo6VmFsdWVSZXAmIHJlcCA6IHBhcmFtcykKICAgICAgICAgICAgICAgICAg
ICAgbG9jYXRpb25zLmFwcGVuZChMb2NhdGlvbjo6Zm9yVmFsdWVSZXAocmVwKSk7CiAKICAgICAg
ICAgICAgICAgICBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IGdlbmVyYXRvciA9IGZ1
bmN0b3IobG9jYXRpb25zKTsKQEAgLTc5MDksMTIgKzc5OTUsMTIgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVtcCA9IGpp
dC5wYXRjaGFibGVKdW1wKCk7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBk
b25lID0gaml0LmxhYmVsKCk7CiAKLSAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVn
aXN0ZXJzID0gcGFyYW1zLnVzZWRSZWdpc3RlcnM7CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJT
ZXQgdXNlZFJlZ2lzdGVycyA9IHBhcmFtcy51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogQXMgcGFydCBvZiBoYW5kbGluZyBleGNlcHRpb25zLCB3ZSBuZWVkIHRv
IGNyZWF0ZSBhIGNvbmNyZXRlIE9TUkV4aXQgaGVyZS4KICAgICAgICAgICAgICAgICAvLyBEb2lu
ZyBzbyBzaG91bGQgYXV0b21hZ2ljYWxseSByZWdpc3RlciBsYXRlIHBhdGhzIHRoYXQgZW1pdCBl
eGl0IHRodW5rcy4KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBwYXJhbXMuY29u
dGV4dC0+bGF0ZVBhdGhzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBwYXJhbXMuY29udGV4dCgp
LmxhdGVQYXRocy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYXJlZFRhc2s8
QWlyOjpHZW5lcmF0aW9uQ29udGV4dDo6TGF0ZVBhdGhGdW5jdGlvbj4oCiAgICAgICAgICAgICAg
ICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBBaXI6OkdlbmVyYXRpb25Db250ZXh0
JikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKQEAgLTkyMTMsNiArOTI5OSw3IEBAIHByaXZhdGU6
CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbik7CiAgICAgfQogCisjaWYgIUZU
TF9VU0VTX0IzCiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0QXJndW1lbnRzRm9yUGF0Y2hwb2ludElm
V2lsbENhdGNoRXhjZXB0aW9uKFN0YWNrbWFwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIEV4Y2Vw
dGlvblR5cGUgZXhjZXB0aW9uVHlwZSwgdW5zaWduZWQgb2Zmc2V0T2ZFeGl0QXJndW1lbnRzKQog
ICAgIHsKICAgICAgICAgQ29kZU9yaWdpbiBvcENhdGNoT3JpZ2luOwpAQCAtOTIzMyw2ICs5MzIw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVzY3Jp
cHRvciwgZXhpdERlc2NyaXB0b3JJbXBsLCBub1ZhbHVlKCksIG9mZnNldE9mRXhpdEFyZ3VtZW50
cyk7CiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmRWZWN0b3IoZnJlc2hMaXN0KTsKICAgICB9Cisj
ZW5kaWYgLy8gIUZUTF9VU0VTX0IzCiAKICAgICBib29sIGVtaXRCcmFuY2hUb09TUkV4aXRJZldp
bGxDYXRjaEV4Y2VwdGlvbihMVmFsdWUgaGFkRXhjZXB0aW9uKQogICAgIHsKQEAgLTkyNTEsNiAr
OTMzOSwxNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9ibG9ja3MuZ2V0KGJsb2NrKTsK
ICAgICB9CiAKKworI2lmIEZUTF9VU0VTX0IzCisgICAgT1NSRXhpdERlc2NyaXB0b3IqIGFwcGVu
ZE9TUkV4aXREZXNjcmlwdG9yKEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gJm1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERl
c2NyaXB0b3JzLmFsbG9jKAorICAgICAgICAgICAgbG93VmFsdWUuZm9ybWF0KCksIG1fZ3JhcGgu
bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdoVmFsdWUpLAorICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAg
ICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkpOworICAgIH0K
KyNlbHNlIC8vIEZUTF9VU0VTX0IzCiAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGFwcGVuZE9TUkV4
aXREZXNjcmlwdG9yKEV4aXRLaW5kIGtpbmQsIEV4Y2VwdGlvblR5cGUgZXhjZXB0aW9uVHlwZSwg
Rm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTm9kZU9yaWdpbiBvcmln
aW4pCiAgICAgewogICAgICAgICBPU1JFeGl0RGVzY3JpcHRvciYgcmVzdWx0ID0gbV9mdGxTdGF0
ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuYWxsb2MoCkBAIC05MjYxLDYgKzkzNTksNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAga2luZCwgb3JpZ2luLmZvckV4aXQsIG9yaWdpbi5zZW1h
bnRpYywgZXhjZXB0aW9uVHlwZSk7CiAgICAgICAgIHJldHVybiAmcmVzdWx0OwogICAgIH0KKyNl
bmRpZiAvLyBGVExfVVNFU19CMwogICAgIAogICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKICAgICAg
ICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1
ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24sIApAQCAtOTMyOCw5ICs5NDI3LDcgQEAgcHJpdmF0ZToK
ICNpZiBGVExfVVNFU19CMwogICAgIHZvaWQgYmxlc3NTcGVjdWxhdGlvbihCMzo6Q2hlY2tWYWx1
ZSogdmFsdWUsIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBo
aWdoVmFsdWUsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGlzRXhjZXB0aW9uSGFuZGxlciA9IGZh
bHNlKQogICAgIHsKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yID0g
YXBwZW5kT1NSRXhpdERlc2NyaXB0b3IoCi0gICAgICAgICAgICBraW5kLCBpc0V4Y2VwdGlvbkhh
bmRsZXIgPyBFeGNlcHRpb25UeXBlOjpDQ2FsbEV4Y2VwdGlvbiA6IEV4Y2VwdGlvblR5cGU6Ok5v
bmUsIGxvd1ZhbHVlLAotICAgICAgICAgICAgaGlnaFZhbHVlLCBvcmlnaW4pOworICAgICAgICBP
U1JFeGl0RGVzY3JpcHRvciogZXhpdERlc2NyaXB0b3IgPSBhcHBlbmRPU1JFeGl0RGVzY3JpcHRv
cihsb3dWYWx1ZSwgaGlnaFZhbHVlKTsKICAgICAgICAgT1NSRXhpdERlc2NyaXB0b3JJbXBsKiBl
eGl0RGVzY3JpcHRvckltcGwgPSAmbV9mdGxTdGF0ZS5vc3JFeGl0RGVzY3JpcHRvckltcGxzLmxh
c3QoKTsKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHZhbHVlLT5udW1DaGls
ZHJlbigpOwpAQCAtOTMzOSw3ICs5NDM2LDggQEAgcHJpdmF0ZToKICAgICAgICAgU3RhdGUqIHN0
YXRlID0gJm1fZnRsU3RhdGU7CiAgICAgICAgIHZhbHVlLT5zZXRHZW5lcmF0b3IoCiAgICAgICAg
ICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBleGl0RGVzY3JpcHRvci0+ZW1pdE9T
UkV4aXQoKnN0YXRlLCBleGl0RGVzY3JpcHRvckltcGwsIGppdCwgcGFyYW1zLCBvZmZzZXQpOwor
ICAgICAgICAgICAgICAgIGV4aXREZXNjcmlwdG9yLT5lbWl0T1NSRXhpdCgKKyAgICAgICAgICAg
ICAgICAgICAgKnN0YXRlLCBraW5kLCBvcmlnaW4sIGppdCwgcGFyYW1zLCBvZmZzZXQsIGlzRXhj
ZXB0aW9uSGFuZGxlcik7CiAgICAgICAgICAgICB9KTsKICAgICB9CiAjZW5kaWYKQEAgLTk0NzUs
NiArOTU3MywxMCBAQCBwcml2YXRlOgogICAgICAgICBTdGFja21hcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBjb25zdCBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
bio+JiBtYXAsCiAgICAgICAgIE5vZGUqIG5vZGUpCiAgICAgeworICAgICAgICAvLyBOT1RFOiBJ
biBGVEwtPkIzLCB3ZSBjYW5ub3QgZ2VuZXJhdGUgY29kZSBoZXJlLCBiZWNhdXNlIG1fb3V0cHV0
IGlzIHBvc2l0aW9uZWQgYWZ0ZXIgdGhlCisgICAgICAgIC8vIHN0YWNrbWFwIHZhbHVlLiBMaWtl
IGFsbCB2YWx1ZXMsIHRoZSBzdGFja21hcCB2YWx1ZSBjYW5ub3QgdXNlIGEgY2hpbGQgdGhhdCBp
cyBkZWZpbmVkIGFmdGVyCisgICAgICAgIC8vIGl0LgorICAgICAgICAKICAgICAgICAgQVNTRVJU
KG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICBBU1NFUlQobm9kZS0+aGFzUmVzdWx0
KCkpOwogCkBAIC05NTIyLDEwICs5NjI0LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1
cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdFN0cmljdEludDUyLCB2YWx1ZS52
YWx1ZSgpKTsKICAgICAgICAgCiAgICAgICAgIHZhbHVlID0gbV9ib29sZWFuVmFsdWVzLmdldChu
b2RlKTsKKyNpZiBGVExfVVNFU19CMworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAg
ICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEJvb2xlYW4s
IHZhbHVlLnZhbHVlKCkpOworI2Vsc2UgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgaWYgKGlzVmFs
aWQodmFsdWUpKSB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWVUb1Bhc3MgPSBtX291dC56ZXJv
RXh0KHZhbHVlLnZhbHVlKCksIG1fb3V0LmludDMyKTsKICAgICAgICAgICAgIHJldHVybiBleGl0
QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0Qm9vbGVhbiwgdmFsdWVUb1Bhc3MpOwogICAg
ICAgICB9CisjZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgCiAgICAgICAgIHZhbHVlID0g
bV9qc1ZhbHVlVmFsdWVzLmdldChub2RlKTsKICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCShyZXZpc2lvbiAx
OTM0ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSwxOCArNjUsMjIgQEAgdm9pZCBPU1JFeGl0RGVzY3JpcHRvcjo6dmFs
aWRhdGVSZWZlcmVuYwogCiAjaWYgRlRMX1VTRVNfQjMKIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBP
U1JFeGl0RGVzY3JpcHRvcjo6ZW1pdE9TUkV4aXQoCi0gICAgU3RhdGUmIHN0YXRlLCBPU1JFeGl0
RGVzY3JpcHRvckltcGwqIGV4aXREZXNjcmlwdG9ySW1wbCwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zLCB1bnNpZ25lZCBvZmZzZXQpCisg
ICAgU3RhdGUmIHN0YXRlLCBFeGl0S2luZCBleGl0S2luZCwgY29uc3QgTm9kZU9yaWdpbiYgbm9k
ZU9yaWdpbiwgQ0NhbGxIZWxwZXJzJiBqaXQsCisgICAgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMsIHVuc2lnbmVkIG9mZnNldCwgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIp
CiB7Ci0gICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRsZSA9IHByZXBhcmVPU1JFeGl0SGFu
ZGxlKHN0YXRlLCBleGl0RGVzY3JpcHRvckltcGwsIHBhcmFtcywgb2Zmc2V0KTsKKyAgICBSZWZQ
dHI8T1NSRXhpdEhhbmRsZT4gaGFuZGxlID0KKyAgICAgICAgcHJlcGFyZU9TUkV4aXRIYW5kbGUo
c3RhdGUsIGV4aXRLaW5kLCBub2RlT3JpZ2luLCBwYXJhbXMsIG9mZnNldCwgaXNFeGNlcHRpb25I
YW5kbGVyKTsKICAgICBoYW5kbGUtPmVtaXRFeGl0VGh1bmsoaml0KTsKICAgICByZXR1cm4gaGFu
ZGxlOwogfQogCiBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gT1NSRXhpdERlc2NyaXB0b3I6OmVtaXRP
U1JFeGl0TGF0ZXIoCi0gICAgU3RhdGUmIHN0YXRlLCBPU1JFeGl0RGVzY3JpcHRvckltcGwqIGV4
aXREZXNjcmlwdG9ySW1wbCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMs
IHVuc2lnbmVkIG9mZnNldCkKKyAgICBTdGF0ZSYgc3RhdGUsIEV4aXRLaW5kIGV4aXRLaW5kLCBj
b25zdCBOb2RlT3JpZ2luJiBub2RlT3JpZ2luLAorICAgIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zLCB1bnNpZ25lZCBvZmZzZXQsIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVy
KQogewotICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBoYW5kbGUgPSBwcmVwYXJlT1NSRXhpdEhh
bmRsZShzdGF0ZSwgZXhpdERlc2NyaXB0b3JJbXBsLCBwYXJhbXMsIG9mZnNldCk7Ci0gICAgcGFy
YW1zLmNvbnRleHQtPmxhdGVQYXRocy5hcHBlbmQoCisgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+
IGhhbmRsZSA9CisgICAgICAgIHByZXBhcmVPU1JFeGl0SGFuZGxlKHN0YXRlLCBleGl0S2luZCwg
bm9kZU9yaWdpbiwgcGFyYW1zLCBvZmZzZXQsIGlzRXhjZXB0aW9uSGFuZGxlcik7CisgICAgcGFy
YW1zLmNvbnRleHQoKS5sYXRlUGF0aHMuYXBwZW5kKAogICAgICAgICBjcmVhdGVTaGFyZWRUYXNr
PEFpcjo6R2VuZXJhdGlvbkNvbnRleHQ6OkxhdGVQYXRoRnVuY3Rpb24+KAogICAgICAgICAgICAg
W2hhbmRsZV0gKENDYWxsSGVscGVycyYgaml0LCBBaXI6OkdlbmVyYXRpb25Db250ZXh0Jikgewog
ICAgICAgICAgICAgICAgIGhhbmRsZS0+ZW1pdEV4aXRUaHVuayhqaXQpOwpAQCAtODUsMzMgKzg5
LDQyIEBAIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBPU1JFeGl0RGVzY3JpcHRvcjoKIH0KIAogUmVm
UHRyPE9TUkV4aXRIYW5kbGU+IE9TUkV4aXREZXNjcmlwdG9yOjpwcmVwYXJlT1NSRXhpdEhhbmRs
ZSgKLSAgICBTdGF0ZSYgc3RhdGUsIE9TUkV4aXREZXNjcmlwdG9ySW1wbCogZXhpdERlc2NyaXB0
b3JJbXBsLCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcywgdW5zaWduZWQg
b2Zmc2V0KQorICAgIFN0YXRlJiBzdGF0ZSwgRXhpdEtpbmQgZXhpdEtpbmQsIGNvbnN0IE5vZGVP
cmlnaW4mIG5vZGVPcmlnaW4sCisgICAgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMsIHVuc2lnbmVkIG9mZnNldCwgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIpCiB7CiAgICAg
dW5zaWduZWQgaW5kZXggPSBzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsKLSAgICBSZWZQ
dHI8T1NSRXhpdEhhbmRsZT4gaGFuZGxlID0gYWRvcHRSZWYoCi0gICAgICAgIG5ldyBPU1JFeGl0
SGFuZGxlKGluZGV4LCBzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFsbG9jKHRoaXMsICpleGl0RGVz
Y3JpcHRvckltcGwpKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gb2Zmc2V0OyBpIDwgcGFyYW1z
LnJlcHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGhhbmRsZS0+ZXhpdC5tX3ZhbHVlUmVwcy5hcHBl
bmQocGFyYW1zLnJlcHNbaV0pOwotICAgIGhhbmRsZS0+ZXhpdC5tX3ZhbHVlUmVwcy5zaHJpbmtU
b0ZpdCgpOworICAgIE9TUkV4aXQmIGV4aXQgPSBzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFsbG9j
KAorICAgICAgICB0aGlzLCBleGl0S2luZCwgbm9kZU9yaWdpbi5mb3JFeGl0LCBub2RlT3JpZ2lu
LnNlbWFudGljLCBpc0V4Y2VwdGlvbkhhbmRsZXIpOworICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxl
PiBoYW5kbGUgPSBhZG9wdFJlZihuZXcgT1NSRXhpdEhhbmRsZShpbmRleCwgZXhpdCkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IG9mZnNldDsgaSA8IHBhcmFtcy5zaXplKCk7ICsraSkKKyAgICAg
ICAgZXhpdC5tX3ZhbHVlUmVwcy5hcHBlbmQocGFyYW1zW2ldKTsKKyAgICBleGl0Lm1fdmFsdWVS
ZXBzLnNocmlua1RvRml0KCk7CiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KICNlbmRpZiAvLyBGVExf
VVNFU19CMwogCisjaWYgRlRMX1VTRVNfQjMKIE9TUkV4aXQ6Ok9TUkV4aXQoCi0gICAgT1NSRXhp
dERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIE9TUkV4aXREZXNjcmlwdG9ySW1wbCYgZXhpdERlc2Ny
aXB0b3JJbXBsCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgLCB1aW50MzJfdCBzdGFja21hcFJlY29y
ZEluZGV4Ci0jZW5kaWYgLy8gIUZUTF9VU0VTX0IzCi0gICAgKQorICAgIE9TUkV4aXREZXNjcmlw
dG9yKiBkZXNjcmlwdG9yLAorICAgIEV4aXRLaW5kIGV4aXRLaW5kLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIENvZGVPcmlnaW4gY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAorICAgIGJvb2wgaXNF
eGNlcHRpb25IYW5kbGVyKQorICAgIDogT1NSRXhpdEJhc2UoZXhpdEtpbmQsIGNvZGVPcmlnaW4s
IGNvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSkKKyAgICAsIG1fZGVzY3JpcHRvcihkZXNjcmlwdG9y
KQoreworICAgIG1faXNFeGNlcHRpb25IYW5kbGVyID0gaXNFeGNlcHRpb25IYW5kbGVyOworfQor
I2Vsc2UgLy8gRlRMX1VTRVNfQjMKK09TUkV4aXQ6Ok9TUkV4aXQoCisgICAgT1NSRXhpdERlc2Ny
aXB0b3IqIGRlc2NyaXB0b3IsIE9TUkV4aXREZXNjcmlwdG9ySW1wbCYgZXhpdERlc2NyaXB0b3JJ
bXBsLAorICAgIHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgpCiAgICAgOiBPU1JFeGl0QmFz
ZShleGl0RGVzY3JpcHRvckltcGwubV9raW5kLCBleGl0RGVzY3JpcHRvckltcGwubV9jb2RlT3Jp
Z2luLCBleGl0RGVzY3JpcHRvckltcGwubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUpCiAgICAg
LCBtX2Rlc2NyaXB0b3IoZGVzY3JpcHRvcikKLSNpZiAhRlRMX1VTRVNfQjMKICAgICAsIG1fc3Rh
Y2ttYXBSZWNvcmRJbmRleChzdGFja21hcFJlY29yZEluZGV4KQotI2VuZGlmIC8vICFGVExfVVNF
U19CMwogICAgICwgbV9leGNlcHRpb25UeXBlKGV4aXREZXNjcmlwdG9ySW1wbC5tX2V4Y2VwdGlv
blR5cGUpCiB7CiAgICAgbV9pc0V4Y2VwdGlvbkhhbmRsZXIgPSBleGl0RGVzY3JpcHRvckltcGwu
bV9leGNlcHRpb25UeXBlICE9IEV4Y2VwdGlvblR5cGU6Ok5vbmU7CiB9CisjZW5kaWYgLy8gRlRM
X1VTRVNfQjMKIAogQ29kZUxvY2F0aW9uSnVtcCBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBh
dGNoKENvZGVCbG9jayogZnRsQ29kZUJsb2NrKSBjb25zdAogewpAQCAtMTk2LDcgKzIwOSw2IEBA
IHZvaWQgT1NSRXhpdDo6cmVjb3ZlclJlZ2lzdGVyc0Zyb21TcGlsbFMKICAgICAgICAgfQogICAg
IH0KIH0KLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKIAogYm9vbCBPU1JFeGl0Ojp3aWxsQXJyaXZl
QXRFeGl0RnJvbUluZGlyZWN0RXhjZXB0aW9uQ2hlY2soKSBjb25zdAogewpAQCAtMjYwLDYgKzI3
Miw3IEBAIGJvb2wgT1NSRXhpdDo6bmVlZHNSZWdpc3RlclJlY292ZXJ5T25HZW4KICAgICAvLyBy
ZWNvdmVyIHRoZSBzcGlsbGVkIHJlZ2lzdGVycy4KICAgICByZXR1cm4gbV9leGNlcHRpb25UeXBl
ID09IEV4Y2VwdGlvblR5cGU6OkpTQ2FsbDsKIH0KKyNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkV4aXQuaAkocmV2aXNpb24gMTkzNDgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJCM1ZhbHVlUmVwLmgiCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRG
R0V4aXRQcm9maWxlLmgiCisjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRG
R09TUkV4aXRCYXNlLmgiCiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5oIgogI2luY2x1
ZGUgIkZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgiCkBAIC02MSw3ICs2Miw5IEBA
IG5hbWVzcGFjZSBGVEwgewogCiBjbGFzcyBTdGF0ZTsKIHN0cnVjdCBPU1JFeGl0RGVzY3JpcHRv
ckltcGw7CitzdHJ1Y3QgT1NSRXhpdEhhbmRsZTsKIAorI2lmICFGVExfVVNFU19CMwogZW51bSBj
bGFzcyBFeGNlcHRpb25UeXBlIDogdWludDhfdCB7CiAgICAgTm9uZSwKICAgICBDQ2FsbEV4Y2Vw
dGlvbiwKQEAgLTc1LDYgKzc4LDcgQEAgZW51bSBjbGFzcyBFeGNlcHRpb25UeXBlIDogdWludDhf
dCB7CiB9OwogCiBib29sIGV4Y2VwdGlvblR5cGVXaWxsQXJyaXZlQXRPU1JFeGl0RnJvbUdlbmVy
aWNVbndpbmQoRXhjZXB0aW9uVHlwZSk7CisjZW5kaWYgLy8gIUZUTF9VU0VTX0IzCiAKIHN0cnVj
dCBPU1JFeGl0RGVzY3JpcHRvciB7CiAgICAgT1NSRXhpdERlc2NyaXB0b3IoCkBAIC0xMDUsNyAr
MTA5LDggQEAgc3RydWN0IE9TUkV4aXREZXNjcmlwdG9yIHsKICAgICAvLyBvbiB0aGUgZ3JvdW5k
LiBJdCBjb250YWlucyBpbmZvcm1hdGlvbiB0aGF0IGlzIG1vc3RseSBub3QgdXNlZnVsIGlmIHlv
dSB1c2UgdGhpcyBBUEksIHNpbmNlIGFmdGVyCiAgICAgLy8gdGhpcyBjYWxsLCB0aGUgT1NSRXhp
dCBpcyBzaW1wbHkgcmVhZHkgdG8gZ28uCiAgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGVtaXRP
U1JFeGl0KAotICAgICAgICBTdGF0ZSYsIE9TUkV4aXREZXNjcmlwdG9ySW1wbCosIENDYWxsSGVs
cGVycyYsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLCB1bnNpZ25lZCBvZmZz
ZXQpOworICAgICAgICBTdGF0ZSYsIEV4aXRLaW5kLCBjb25zdCBOb2RlT3JpZ2luJiwgQ0NhbGxI
ZWxwZXJzJiwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYsCisgICAgICAgIHVu
c2lnbmVkIG9mZnNldCwgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIgPSBmYWxzZSk7CiAKICAgICAv
LyBJbiBzb21lIGNhc2VzIHlvdSB3YW50IGFuIE9TUkV4aXQgdG8gY29tZSBpbnRvIGV4aXN0ZW5j
ZSwgYnV0IHlvdSBkb24ndCB3YW50IHRvIGVtaXQgaXQgcmlnaHQgbm93LgogICAgIC8vIFRoaXMg
d2lsbCBlbWl0IHRoZSBPU1IgZXhpdCBpbiBhIGxhdGUgcGF0aC4gWW91IGNhbid0IGJlIHN1cmUg
ZXhhY3RseSB3aGVuIHRoYXQgd2lsbCBoYXBwZW4sIGJ1dApAQCAtMTE2LDE2ICsxMjEsMTkgQEAg
c3RydWN0IE9TUkV4aXREZXNjcmlwdG9yIHsKICAgICAvLyBoYXZlIGEgcGxhY2UgdG8ganVtcCB0
byBmb3IgT1NSIGV4aXQuIEl0IGRvZXNuJ3QgY2FyZSB3aGVyZSB0aGF0IE9TUiBleGl0IGlzIGVt
aXR0ZWQgc28gbG9uZyBhcyBpdAogICAgIC8vIGV2ZW50dWFsbHkgZ2V0cyBhY2Nlc3MgdG8gaXRz
IGxhYmVsLgogICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBlbWl0T1NSRXhpdExhdGVyKAotICAg
ICAgICBTdGF0ZSYsIE9TUkV4aXREZXNjcmlwdG9ySW1wbCosIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmLCB1bnNpZ25lZCBvZmZzZXQpOworICAgICAgICBTdGF0ZSYsIEV4aXRL
aW5kLCBjb25zdCBOb2RlT3JpZ2luJiwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYsIHVuc2lnbmVkIG9mZnNldCwKKyAgICAgICAgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIgPSBm
YWxzZSk7CiAKICAgICAvLyBUaGlzIGlzIHRoZSBsb3ctbGV2ZWwgaW50ZXJmYWNlLiBJdCB3aWxs
IGNyZWF0ZSBhIGhhbmRsZSByZXByZXNlbnRpbmcgdGhlIGRlc2lyZSB0byBlbWl0IGNvZGUgZm9y
CiAgICAgLy8gYW4gT1NSIGV4aXQuIFlvdSBjYW4gY2FsbCBPU1JFeGl0SGFuZGxlOjplbWl0RXhp
dFRodW5rKCkgb25jZSB5b3UgaGF2ZSBhIHBsYWNlIHRvIGVtaXQgaXQuIE5vdGUKICAgICAvLyB0
aGF0IHRoZSBhYm92ZSB0d28gQVBJcyBhcmUgd3JpdHRlbiBpbiB0ZXJtcyBvZiB0aGlzIGFuZCBP
U1JFeGl0SGFuZGxlOjplbWl0RXhpdFRodW5rKCkuCiAgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+
IHByZXBhcmVPU1JFeGl0SGFuZGxlKAotICAgICAgICBTdGF0ZSYsIE9TUkV4aXREZXNjcmlwdG9y
SW1wbCosIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLCB1bnNpZ25lZCBvZmZz
ZXQpOworICAgICAgICBTdGF0ZSYsIEV4aXRLaW5kLCBjb25zdCBOb2RlT3JpZ2luJiwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYsIHVuc2lnbmVkIG9mZnNldCwKKyAgICAgICAg
Ym9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIgPSBmYWxzZSk7CiAjZW5kaWYgLy8gRlRMX1VTRVNfQjMK
IH07CiAKKyNpZiAhRlRMX1VTRVNfQjMKIHN0cnVjdCBPU1JFeGl0RGVzY3JpcHRvckltcGwgewog
ICAgIE9TUkV4aXREZXNjcmlwdG9ySW1wbChFeGl0S2luZCBraW5kLCBDb2RlT3JpZ2luIGV4aXRP
cmlnaW4sIENvZGVPcmlnaW4gZm9yRXhpdFByb2ZpbGUsIEV4Y2VwdGlvblR5cGUgZXhjZXB0aW9u
VHlwZSkKICAgICAgICAgOiBtX2tpbmQoa2luZCkKQEAgLTE0MiwxMyArMTUwLDE2IEBAIHN0cnVj
dCBPU1JFeGl0RGVzY3JpcHRvckltcGwgewogICAgIENvZGVPcmlnaW4gbV9zZW1hbnRpY0NvZGVP
cmlnaW5Gb3JDYWxsRnJhbWVIZWFkZXI7CiAgICAgSGFuZGxlckluZm8gbV9iYXNlbGluZUV4Y2Vw
dGlvbkhhbmRsZXI7CiB9OworI2VuZGlmIC8vICFGVExfVVNFU19CMwogCiBzdHJ1Y3QgT1NSRXhp
dCA6IHB1YmxpYyBERkc6Ok9TUkV4aXRCYXNlIHsKICAgICBPU1JFeGl0KAotICAgICAgICBPU1JF
eGl0RGVzY3JpcHRvciosIE9TUkV4aXREZXNjcmlwdG9ySW1wbCYKLSNpZiAhRlRMX1VTRVNfQjMK
LSAgICAgICAgLCB1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4Ci0jZW5kaWYgLy8gIUZUTF9V
U0VTX0IzCisgICAgICAgIE9TUkV4aXREZXNjcmlwdG9yKiwKKyNpZiBGVExfVVNFU19CMworICAg
ICAgICBFeGl0S2luZCwgQ29kZU9yaWdpbiwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luRm9yRXhpdFBy
b2ZpbGUsIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyCisjZWxzZSAvLyBGVExfVVNFU19CMworICAg
ICAgICBPU1JFeGl0RGVzY3JpcHRvckltcGwmLCB1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4
CisjZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgKTsKIAogICAgIE9TUkV4aXREZXNjcmlw
dG9yKiBtX2Rlc2NyaXB0b3I7CkBAIC0xNjIsOCArMTczLDggQEAgc3RydWN0IE9TUkV4aXQgOiBw
dWJsaWMgREZHOjpPU1JFeGl0QmFzZQogICAgIHVuc2lnbmVkIG1fcGF0Y2hhYmxlQ29kZU9mZnNl
dDsKICAgICAvLyBPZmZzZXQgd2l0aGluIFN0YWNrbWFwOjpyZWNvcmRzCiAgICAgdWludDMyX3Qg
bV9zdGFja21hcFJlY29yZEluZGV4OwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgRXhjZXB0
aW9uVHlwZSBtX2V4Y2VwdGlvblR5cGU7CisjZW5kaWYgLy8gRlRMX1VTRVNfQjMKIAogICAgIFJl
Z2lzdGVyU2V0IHJlZ2lzdGVyc1RvUHJlc2VydmVGb3JDYWxsVGhhdE1pZ2h0VGhyb3c7CiAKQEAg
LTE3NywxMiArMTg4LDEyIEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIERGRzo6T1NSRXhpdEJh
c2UKICAgICB2b2lkIGdhdGhlclJlZ2lzdGVyc1RvU3BpbGxGb3JDYWxsSWZFeGNlcHRpb24oU3Rh
Y2tNYXBzJiwgU3RhY2tNYXBzOjpSZWNvcmQmKTsKICAgICB2b2lkIHNwaWxsUmVnaXN0ZXJzVG9T
cGlsbFNsb3QoQ0NhbGxIZWxwZXJzJiwgaW50MzJfdCBzdGFja1NwaWxsU2xvdCk7CiAgICAgdm9p
ZCByZWNvdmVyUmVnaXN0ZXJzRnJvbVNwaWxsU2xvdChDQ2FsbEhlbHBlcnMmIGppdCwgaW50MzJf
dCBzdGFja1NwaWxsU2xvdCk7Ci0jZW5kaWYgLy8gIUZUTF9VU0VTX0IzCiAKICAgICBib29sIHdp
bGxBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJpY1Vud2luZCgpIGNvbnN0OwogICAgIGJvb2wgd2ls
bEFycml2ZUF0RXhpdEZyb21JbmRpcmVjdEV4Y2VwdGlvbkNoZWNrKCkgY29uc3Q7CiAgICAgYm9v
bCB3aWxsQXJyaXZlQXRPU1JFeGl0RnJvbUNhbGxPcGVyYXRpb24oKSBjb25zdDsKICAgICBib29s
IG5lZWRzUmVnaXN0ZXJSZWNvdmVyeU9uR2VuZXJpY1Vud2luZE9TUkV4aXRQYXRoKCkgY29uc3Q7
CisjZW5kaWYgLy8gIUZUTF9VU0VTX0IzCiB9OwogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YXRlLmgJKHJldmlzaW9uIDE5MzQ4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw5IEBAIHB1Ymxp
YzoKICAgICBWZWN0b3I8SlNUYWlsQ2FsbD4ganNUYWlsQ2FsbHM7CiAgICAgVmVjdG9yPENTdHJp
bmc+IGNvZGVTZWN0aW9uTmFtZXM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGRhdGFTZWN0aW9uTmFt
ZXM7CisjaWYgIUZUTF9VU0VTX0IzCiAgICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXREZXNjcmlw
dG9ySW1wbD4gb3NyRXhpdERlc2NyaXB0b3JJbXBsczsKKyNlbmRpZiAvLyAhRlRMX1VTRVNfQjMK
ICAgICB2b2lkKiB1bndpbmREYXRhU2VjdGlvbjsKICAgICBzaXplX3QgdW53aW5kRGF0YVNlY3Rp
b25TaXplOwogICAgIFJlZlB0cjxEYXRhU2VjdGlvbj4gc3RhY2ttYXBzU2VjdGlvbjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266725</attachid>
            <date>2015-12-05 21:28:58 -0800</date>
            <delta_ts>2015-12-06 11:13:48 -0800</delta_ts>
            <desc>it compiles!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>69664</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTM1MzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzA0LDYgKzMwNCw4IEBACiAJCTBGMzM4RTFDMUJGMjg2
RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxODFCRjI4NkVBMDAxM0M4OEYgLyogQjNC
bG9ja0luc2VydGlvblNldC5oICovOyB9OwogCQkwRjMzOEUxRDFCRjI4NkVBMDAxM0M4OEYgLyog
QjNMb3dlck1hY3Jvcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjMzOEUxOTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAgKi87
IH07CiAJCTBGMzM4RTFFMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxQTFCRjI4NkVB
MDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oICovOyB9OworCQkwRjMzRkNGNzFDMTM2RTI1MDAz
MjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzM0ZDRjUxQzEzNkUyNTAwMzIzRjY3IC8q
IEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcCAqLzsgfTsKKwkJMEYzM0ZDRjgxQzEzNkUy
NTAwMzIzRjY3IC8qIEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzRkNGNjFDMTM2RTI1MDAzMjNGNjcg
LyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCAqLzsgfTsKIAkJMEYzNEIxNDkxNkQ0MjAx
MDAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQu
Y3BwICovOyB9OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDgxNkQ0
MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgfTsKIAkJMEYzNzMwOEMxQzBCRDI5MTAw
MDUyQkZBIC8qIEIzUGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzNzMwOEExQzBCRDI5MTAwMDUyQkZBIC8qIEIzUGhpQ2hpbGRy
ZW4uY3BwICovOyB9OwpAQCAtMjQwMCw2ICsyNDAyLDggQEAKIAkJMEYzMzhFMTgxQkYyODZFQTAw
MTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNCbG9ja0luc2VydGlvblNldC5oOyBwYXRoID0gYjMvQjNCbG9ja0luc2VydGlv
blNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMzOEUxOTFCRjI4NkVBMDAx
M0M4OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0xvd2VyTWFjcm9zLmNwcDsgcGF0aCA9IGIzL0IzTG93ZXJNYWNyb3MuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMzOEUxQTFCRjI4NkVBMDAxM0M4OEYgLyog
QjNMb3dlck1hY3Jvcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0xvd2Vy
TWFjcm9zLmg7IHBhdGggPSBiMy9CM0xvd2VyTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMzNGQ0Y1MUMxMzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcy5jcHA7IHBhdGggPSBiMy9CM1N0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzNGQ0Y2MUMxMzZFMjUw
MDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oOyBwYXRoID0gYjMv
QjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZH
VXNlS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ4MTZENDIw
MEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMzczMDhBMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVu
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGhpQ2hpbGRyZW4u
Y3BwOyBwYXRoID0gYjMvQjNQaGlDaGlsZHJlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC00NjI5LDYgKzQ2MzMsOCBAQAogCQkJCTBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLywKIAkJCQkwRkVDODVCNzFCRTE0NjJGMDA4MEZGNzQg
LyogQjNSZWR1Y2VTdHJlbmd0aC5jcHAgKi8sCiAJCQkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0
IC8qIEIzUmVkdWNlU3RyZW5ndGguaCAqLywKKwkJCQkwRjMzRkNGNTFDMTM2RTI1MDAzMjNGNjcg
LyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwICovLAorCQkJCTBGMzNGQ0Y2MUMxMzZF
MjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oICovLAogCQkJCTBGRUM4
NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8sCiAJCQkJMEZF
Qzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggKi8sCiAJCQkJMEYz
MzhERUYxQkU5M0FEMTAwMTNDODhGIC8qIEIzU3RhY2ttYXBWYWx1ZS5jcHAgKi8sCkBAIC02OTc2
LDYgKzY5ODIsNyBAQAogCQkJCTBGRDNFNDAyMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk5OEVENjc1MUJFRDc2OEMwMEREODAxNyAvKiBSZW1vdGVD
b250cm9sbGFibGVUYXJnZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMzNGQ0Y4MUMxMzZFMjUw
MDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRkI5MjE4MTZEMDJFQjIwMDU1QTVEQiAvKiBERkdBbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ2MTUzNENCQUYwMDBGOTQ1NiAvKiBERkdBcmd1bWVu
dFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTg0OTMsNiArODUwMCw3IEBACiAJCQkJMEY4
Rjk0M0MxNjY3NjMxMzAwRDYxOTcxIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMxMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21tb25JZGVu
dGlmaWVycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjMzRkNGNzFDMTM2RTI1MDAzMjNGNjcg
LyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcw
OUYyRjIxN0EwQUMyQTAwNTEyRTk4IC8qIENvbW1vblNsb3dQYXRocy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk2NTUzQTMzMTE3QTFGMUVFMDA4Q0Y2RjMgLyogQ29tbW9uU2xvd1BhdGhzRXhjZXB0
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0U1QTNBNzE3OTc0MzJEMDBFODkzQzAgLyog
Q29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5MzUzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWlyR2Vu
ZXJhdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUg
IkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0yMDgsMTMgKzIwOSw3IEBA
IENDYWxsSGVscGVyczo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXQKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7Ci0gICAgICAgICAgICAg
ICAgcGFyYW1zLnZhbHVlID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnJlcHMgPSBy
ZXBzOwotICAgICAgICAgICAgICAgIHBhcmFtcy51c2VkUmVnaXN0ZXJzID0gdmFsdWUtPm1fdXNl
ZFJlZ2lzdGVyczsKLSAgICAgICAgICAgICAgICBwYXJhbXMuY29udGV4dCA9ICZjb250ZXh0Owot
Ci0gICAgICAgICAgICAgICAgdmFsdWUtPm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBwYXJhbXMpOwor
ICAgICAgICAgICAgICAgIHZhbHVlLT5tX2dlbmVyYXRvci0+cnVuKGppdCwgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zKHZhbHVlLCByZXBzLCBjb250ZXh0KSk7CiAgICAgICAgICAgICB9KSk7CiAK
ICAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7IC8vIEFzIGZhciBhcyBBaXIgdGhpbmtz
LCB3ZSBhcmUgbm90IGEgdGVybWluYWwuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQYXRjaHBvaW50U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTM1MzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWly
R2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cy5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgewpAQCAtMTA3LDEzICsxMDgsNyBAQCBDQ2FsbEhlbHBlcnM6Okp1bXAgUGF0Y2hw
b2ludFNwZWNpYWw6OmdlCiAgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5j
b2RlLCBpbnN0LmFyZ3Nbb2Zmc2V0KytdKSk7CiAgICAgYXBwZW5kUmVwc0ltcGwoY29udGV4dCwg
b2Zmc2V0LCBpbnN0LCByZXBzKTsKICAgICAKLSAgICBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMg
cGFyYW1zOwotICAgIHBhcmFtcy52YWx1ZSA9IHZhbHVlOwotICAgIHBhcmFtcy5yZXBzID0gcmVw
czsKLSAgICBwYXJhbXMudXNlZFJlZ2lzdGVycyA9IHZhbHVlLT5tX3VzZWRSZWdpc3RlcnM7Ci0g
ICAgcGFyYW1zLmNvbnRleHQgPSAmY29udGV4dDsKLQotICAgIHZhbHVlLT5tX2dlbmVyYXRvci0+
cnVuKGppdCwgcGFyYW1zKTsKKyAgICB2YWx1ZS0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyh2YWx1ZSwgcmVwcywgY29udGV4dCkpOwogCiAgICAgcmV0dXJu
IENDYWxsSGVscGVyczo6SnVtcCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAxOTM1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNiArMTQ4LDE2IEBA
IHZvaWQqIFByb2NlZHVyZTo6YWRkRGF0YVNlY3Rpb24oc2l6ZV90IHMKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCit1bnNpZ25lZCBQcm9jZWR1cmU6OmNhbGxBcmdBcmVhU2l6ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGNvZGUoKS5jYWxsQXJnQXJlYVNpemUoKTsKK30KKwordm9pZCBQcm9jZWR1
cmU6OnJlcXVlc3RDYWxsQXJnQXJlYVNpemUodW5zaWduZWQgc2l6ZSkKK3sKKyAgICBjb2RlKCku
cmVxdWVzdENhbGxBcmdBcmVhU2l6ZShzaXplKTsKK30KKwogdW5zaWduZWQgUHJvY2VkdXJlOjpm
cmFtZVNpemUoKSBjb25zdAogewogICAgIHJldHVybiBjb2RlKCkuZnJhbWVTaXplKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMTkzNTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIyMSw5ICsyMjEsMTQgQEAgcHVibGljOgogICAgIC8vIHRoYXQgQVBJLCB0aGVuIHlvdSBk
b24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMuCiAgICAgc3RkOjp1bmlxdWVfcHRyPE9wYXF1
ZUJ5cHJvZHVjdHM+IHJlbGVhc2VCeXByb2R1Y3RzKCkgeyByZXR1cm4gV1RGOjptb3ZlKG1fYnlw
cm9kdWN0cyk7IH0KIAorICAgIC8vIFRoaXMgZ2l2ZXMgeW91IGRpcmVjdCBhY2Nlc3MgdG8gQ29k
ZS4gSG93ZXZlciwgdGhlIGlkZWEgaXMgdGhhdCBjbGllbnRzIG9mIEIzIHNob3VsZG4ndCBoYXZl
IHRvCisgICAgLy8gY2FsbCB0aGlzLiBTbywgUHJvY2VkdXJlIGhhcyBzb21lIG1ldGhvZHMgKGJl
bG93KSB0aGF0IGV4cG9zZSBzb21lIEFpcjo6Q29kZSBmdW5jdGlvbmFsaXR5LgogICAgIGNvbnN0
IEFpcjo6Q29kZSYgY29kZSgpIGNvbnN0IHsgcmV0dXJuICptX2NvZGU7IH0KICAgICBBaXI6OkNv
ZGUmIGNvZGUoKSB7IHJldHVybiAqbV9jb2RlOyB9CiAKKyAgICB1bnNpZ25lZCBjYWxsQXJnQXJl
YVNpemUoKSBjb25zdDsKKyAgICB2b2lkIHJlcXVlc3RDYWxsQXJnQXJlYVNpemUodW5zaWduZWQg
c2l6ZSk7CisKICAgICBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBmcmFtZVNpemUoKSBjb25z
dDsKICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgY2FsbGVlU2F2ZVJlZ2lzdGVycygp
IGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29k
ZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiQjNTdGFj
a21hcFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBu
YW1lc3BhY2UgQWlyOworCitjb25zdCBSZWdpc3RlclNldCYgU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zOjp1c2VkUmVnaXN0ZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92YWx1ZS0+bV91c2Vk
UmVnaXN0ZXJzOworfQorCitQcm9jZWR1cmUmIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczo6cHJv
YygpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC5jb2RlLT5wcm9jKCk7Cit9CisKK1N0YWNrbWFw
R2VuZXJhdGlvblBhcmFtczo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zKAorICAgIFN0YWNrbWFw
VmFsdWUqIHZhbHVlLCBjb25zdCBWZWN0b3I8VmFsdWVSZXA+JiByZXBzLCBBaXI6OkdlbmVyYXRp
b25Db250ZXh0JiBjb250ZXh0KQorICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICAsIG1fcmVwcyhy
ZXBzKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCit7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja21hcEdlbmVy
YXRpb25QYXJhbXNfaAorI2RlZmluZSBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtc19oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorI2luY2x1ZGUgIlJl
Z2lzdGVyU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBD
aGVja1NwZWNpYWw7CitjbGFzcyBQYXRjaHBvaW50U3BlY2lhbDsKK2NsYXNzIFByb2NlZHVyZTsK
K2NsYXNzIFN0YWNrbWFwVmFsdWU7CituYW1lc3BhY2UgQWlyIHsKK3N0cnVjdCBHZW5lcmF0aW9u
Q29udGV4dDsKK30gLy8gbmFtZXNwYWNlIEFpcgorCitjbGFzcyBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMgeworcHVibGljOgorICAgIC8vIFRoaXMgaXMgdGhlIHN0YWNrbWFwIHZhbHVlIHRoYXQg
d2UncmUgZ2VuZXJhdGluZy4KKyAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICAvLyBUaGlzIHRlbGxzIHlvdSB0aGUgYWN0dWFsIHZh
bHVlIHJlcHJlc2VudGF0aW9ucyB0aGF0IHdlcmUgY2hvc2VuLiBUaGlzIGlzIHVzdWFsbHkgZGlm
ZmVyZW50CisgICAgLy8gZnJvbSB0aGUgY29uc3RyYWludHMgd2Ugc3VwcGxpZWQuCisgICAgY29u
c3QgVmVjdG9yPFZhbHVlUmVwPiYgcmVwcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwczsgfTsKKwor
ICAgIC8vIFVzdWFsbHkgd2Ugd2lzaCB0byBhY2Nlc3MgdGhlIHJlcHMuIFdlIG1ha2UgdGhpcyBl
YXN5IGJ5IG1ha2luZyBvdXJzZWx2ZXMgYXBwZWFyIHRvIGJlIGEKKyAgICAvLyBjb2xsZWN0aW9u
IG9mIHJlcHMuCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwcy5zaXpl
KCk7IH0KKyAgICBjb25zdCBWYWx1ZVJlcCYgYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVwc1tpbmRleF07IH0KKyAgICBjb25zdCBWYWx1ZVJlcCYgb3BlcmF0b3JbXSh1bnNp
Z25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgVmVjdG9yPFZhbHVl
UmVwPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3JlcHMuYmVnaW4o
KTsgfQorICAgIFZlY3RvcjxWYWx1ZVJlcD46OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVwcy5lbmQoKTsgfQorICAgIAorICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSBy
ZWdpc3RlcnMgdGhhdCB3ZXJlIHVzZWQuCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdp
c3RlcnMoKSBjb25zdDsKKworICAgIC8vIFRoaXMgaXMgcHJvdmlkZWQgZm9yIGNvbnZlbmllbmNl
OyBpdCBtZWFucyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGNhcHR1cmUgaXQgaWYgeW91IGRvbid0
IHdhbnQgdG8uCisgICAgUHJvY2VkdXJlJiBwcm9jKCk7CisgICAgCisgICAgLy8gVGhlIEFpcjo6
R2VuZXJhdGlvbkNvbnRleHQgZ2l2ZXMgeW91IGV2ZW4gbW9yZSBwb3dlci4KKyAgICBBaXI6Okdl
bmVyYXRpb25Db250ZXh0JiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9OworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDaGVja1NwZWNpYWw7CisgICAgZnJpZW5kIGNsYXNzIFBh
dGNocG9pbnRTcGVjaWFsOworICAgIAorICAgIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyhTdGFj
a21hcFZhbHVlKiwgY29uc3QgVmVjdG9yPFZhbHVlUmVwPiYgcmVwcywgQWlyOjpHZW5lcmF0aW9u
Q29udGV4dCYpOworCisgICAgU3RhY2ttYXBWYWx1ZSogbV92YWx1ZTsKKyAgICBWZWN0b3I8VmFs
dWVSZXA+IG1fcmVwczsKKyAgICBBaXI6OkdlbmVyYXRpb25Db250ZXh0JiBtX2NvbnRleHQ7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHJldmlzaW9uIDE5MzUzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsMjYgKzM3LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CiAKLWNsYXNzIFN0YWNrbWFwVmFsdWU7Ci0KLW5hbWVzcGFjZSBBaXIgewotc3RydWN0IEdlbmVy
YXRpb25Db250ZXh0OwotfQotCi1zdHJ1Y3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zIHsKLSAg
ICAvLyBUaGlzIGlzIHRoZSBzdGFja21hcCB2YWx1ZSB0aGF0IHdlJ3JlIGdlbmVyYXRpbmcuCi0g
ICAgU3RhY2ttYXBWYWx1ZSogdmFsdWU7Ci0gICAgCi0gICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhl
IGFjdHVhbCB2YWx1ZSByZXByZXNlbnRhdGlvbnMgdGhhdCB3ZXJlIGNob3Nlbi4gVGhpcyBpcyB1
c3VhbGx5IGRpZmZlcmVudAotICAgIC8vIGZyb20gdGhlIGNvbnN0cmFpbnRzIHdlIHN1cHBsaWVk
LgotICAgIFZlY3RvcjxWYWx1ZVJlcD4gcmVwczsKLSAgICAKLSAgICAvLyBUaGlzIHRlbGxzIHlv
dSB0aGUgcmVnaXN0ZXJzIHRoYXQgd2VyZSB1c2VkLgotICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdp
c3RlcnM7Ci0KLSAgICAvLyBUaGUgQWlyOjpHZW5lcmF0aW9uQ29udGV4dCBnaXZlcyB5b3UgZXZl
biBtb3JlIHBvd2VyLgotICAgIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQqIGNvbnRleHQ7Ci19Owor
Y2xhc3MgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOwogCiB0eXBlZGVmIHZvaWQgU3RhY2ttYXBH
ZW5lcmF0b3JGdW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKTsKIHR5cGVkZWYgU2hhcmVkVGFzazxTdGFja21hcEdlbmVyYXRvckZ1bmN0aW9uPiBT
dGFja21hcEdlbmVyYXRvcjsKQEAgLTg0LDYgKzY1LDEzIEBAIHB1YmxpYzoKICAgICAvLyBjaGls
ZHJlbigpLmFwcGVuZCgpLiBUaGF0IHdpbGwgd29yayBmaW5lLCBidXQgaXQncyBub3QgcmVjb21t
ZW5kZWQuCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgQ29uc3RyYWluZWRWYWx1ZSYpOwogCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KKyAgICB2b2lkIGFwcGVuZFZlY3Rvcihjb25z
dCBWZWN0b3JUeXBlJiB2ZWN0b3IpCisgICAgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHZh
bHVlIDogdmVjdG9yKQorICAgICAgICAgICAgYXBwZW5kKHZhbHVlKTsKKyAgICB9CisKICAgICAv
LyBIZWxwZXIgZm9yIGFwcGVuZGluZyBjb2xkIGFueSdzLiBUaGlzIG9mdGVuIHVzZWQgYnkgY2xp
ZW50cyB0byBpbXBsZW1lbnQgT1NSLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+
CiAgICAgdm9pZCBhcHBlbmRDb2xkQW55cyhjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpCkBAIC0y
ODUsNiArMjczLDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ2hl
Y2tTcGVjaWFsOwogICAgIGZyaWVuZCBjbGFzcyBQYXRjaHBvaW50U3BlY2lhbDsKKyAgICBmcmll
bmQgY2xhc3MgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOwogICAgIGZyaWVuZCBjbGFzcyBTdGFj
a21hcFNwZWNpYWw7CiAgICAgCiAgICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlzaW9uIDE5MzUzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDcgKzMwLDkgQEAKIAogI2luY2x1ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRlICJHUFJJbmZvLmgi
CisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlJlZy5oIgorI2luY2x1ZGUgIlZp
cnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKQEAgLTExNCw2ICsxMTYsMTEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFja0Fy
Z3VtZW50KFZpcnR1YWxSZWdpc3RlciByZWcpCisgICAgeworICAgICAgICByZXR1cm4gc3RhY2tB
cmd1bWVudChyZWcub2Zmc2V0KCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICB9CisK
ICAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoaW50NjRfdCB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIFZhbHVlUmVwIHJlc3VsdDsKQEAgLTIwMSw2ICsyMDgsMTggQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUoKSk7CiAgICAgfQogCisgICAgVmFs
dWVSZXAgd2l0aE9mZnNldChpbnRwdHJfdCBvZmZzZXQpCisgICAgeworICAgICAgICBzd2l0Y2gg
KGtpbmQoKSkgeworICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICAgICAgcmV0dXJuIHN0YWNr
KG9mZnNldEZyb21GUCgpICsgb2Zmc2V0KTsKKyAgICAgICAgY2FzZSBTdGFja0FyZ3VtZW50Ogor
ICAgICAgICAgICAgcmV0dXJuIHN0YWNrQXJndW1lbnQob2Zmc2V0RnJvbVNQKCkgKyBvZmZzZXQp
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9
CisgICAgfQorCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAko
cmV2aXNpb24gMTkzNTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJCM01lbW9yeVZhbHVl
LmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKICNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVl
LmgiCisjaW5jbHVkZSAiQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCIKICNpbmNsdWRlICJC
M1N3aXRjaFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKICNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgpAQCAtMzQxMywxMSArMzQxNCwxMSBAQCB2b2lkIHRlc3RTaW1wbGVQ
YXRjaHBvaW50KCkKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMyk7Ci0g
ICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENI
RUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJl
cHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtcy5yZXBzWzFdLmdw
cigpLCBwYXJhbXMucmVwc1syXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFt
c1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1sxXS5pc0dQUigpKTsKKyAg
ICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGFkZDMyKGpp
dCwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAg
ICAgICAgIH0pOwogICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVy
biwgT3JpZ2luKCksIHBhdGNocG9pbnQpOwogCkBAIC0zNDQwLDExICszNDQxLDExIEBAIHZvaWQg
dGVzdFNpbXBsZVBhdGNocG9pbnRXaXRob3V0T3VwdXRDbG8KICAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwcy5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5p
c0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwotICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHgwMGZmMDBmZiks
IHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKLSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDB4MDBmZjAwZmYpLCBwYXJhbXMucmVwc1sxXS5ncHIoKSk7CisgICAg
ICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDIpOworICAgICAgICAgICAgQ0hFQ0socGFy
YW1zWzBdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzFdLmlzR1BSKCkpOwor
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHgwMGZmMDBm
ZiksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigweDAwZmYwMGZmKSwgcGFyYW1zWzFdLmdwcigpKTsKICAgICAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4MDBmZjAwZmYpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoMHgwMGZmMDBmZiksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAgIH0p
OwpAQCAtMzQ4NSwxMiArMzQ4NiwxMiBAQCB2b2lkIHRlc3RTaW1wbGVQYXRjaHBvaW50V2l0aE91
cHV0Q2xvYmJlCiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
ewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDMpOwotICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwc1sxXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBz
WzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0Lm1vdmUocGFyYW1zLnJlcHNbMV0uZ3ByKCks
IHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKLSAgICAgICAgICAgIGppdC5hZGQ2NChwYXJhbXMucmVw
c1syXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1swXS5pc0dQUigpKTsK
KyAgICAgICAgICAgIENIRUNLKHBhcmFtc1sxXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKHBhcmFtc1sxXS5ncHIo
KSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgICAgIGppdC5hZGQ2NChwYXJhbXNbMl0uZ3By
KCksIHBhcmFtc1swXS5ncHIoKSk7CiAKICAgICAgICAgICAgIGNsb2JiZXJBbGwuZm9yRWFjaChb
Jl0gKFJlZyByZWcpIHsKICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigweDAwZmYwMGZmKSwgcmVnLmdwcigpKTsKQEAgLTM1MjAsMTEgKzM1MjEsMTEg
QEAgdm9pZCB0ZXN0U2ltcGxlUGF0Y2hwb2ludFdpdGhvdXRPdXB1dENsbwogICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENI
RUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAyKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzWzBdLmlzRlBSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNGUFIo
KSk7Ci0gICAgICAgICAgICBqaXQubW92ZVplcm9Ub0RvdWJsZShwYXJhbXMucmVwc1swXS5mcHIo
KSk7Ci0gICAgICAgICAgICBqaXQubW92ZVplcm9Ub0RvdWJsZShwYXJhbXMucmVwc1sxXS5mcHIo
KSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDIpOworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zWzBdLmlzRlBSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzFdLmlz
RlBSKCkpOworICAgICAgICAgICAgaml0Lm1vdmVaZXJvVG9Eb3VibGUocGFyYW1zWzBdLmZwcigp
KTsKKyAgICAgICAgICAgIGppdC5tb3ZlWmVyb1RvRG91YmxlKHBhcmFtc1sxXS5mcHIoKSk7CiAg
ICAgICAgICAgICBqaXQubW92ZVplcm9Ub0RvdWJsZShGUFJJbmZvOjphcmd1bWVudEZQUjApOwog
ICAgICAgICAgICAgaml0Lm1vdmVaZXJvVG9Eb3VibGUoRlBSSW5mbzo6YXJndW1lbnRGUFIxKTsK
ICAgICAgICAgfSk7CkBAIC0zNTU4LDExICszNTU5LDExIEBAIHZvaWQgdGVzdFNpbXBsZVBhdGNo
cG9pbnRXaXRoT3VwdXRDbG9iYmUKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAg
ICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
YWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkg
PT0gMyk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0ZQUigpKTsKLSAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzRlBSKCkpOwotICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHNbMl0uaXNGUFIoKSk7Ci0gICAgICAgICAgICBqaXQuYWRkRG91YmxlKHBhcmFt
cy5yZXBzWzFdLmZwcigpLCBwYXJhbXMucmVwc1syXS5mcHIoKSwgcGFyYW1zLnJlcHNbMF0uZnBy
KCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAg
IENIRUNLKHBhcmFtc1swXS5pc0ZQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1sxXS5p
c0ZQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0ZQUigpKTsKKyAgICAgICAg
ICAgIGppdC5hZGREb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMl0uZnByKCksIHBhcmFt
c1swXS5mcHIoKSk7CiAKICAgICAgICAgICAgIGNsb2JiZXJBbGwuZm9yRWFjaChbJl0gKFJlZyBy
ZWcpIHsKICAgICAgICAgICAgICAgICBqaXQubW92ZVplcm9Ub0RvdWJsZShyZWcuZnByKCkpOwpA
QCAtMzU5MCwxMCArMzU5MSwxMCBAQCB2b2lkIHRlc3RQYXRjaHBvaW50V2l0aEVhcmx5Q2xvYmJl
cigpCiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJFYXJseShSZWdpc3RlclNldChyZWdpc3Rl
clRvQ2xvYmJlcikpOwogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICAg
ICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIENIRUNLKChwYXJhbXMucmVwc1sxXS5ncHIo
KSA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjApID09IGFyZzFJbkFyZ0dQUik7Ci0gICAgICAgICAg
ICAgICAgQ0hFQ0soKHBhcmFtcy5yZXBzWzJdLmdwcigpID09IEdQUkluZm86OmFyZ3VtZW50R1BS
MSkgPT0gYXJnMkluQXJnR1BSKTsKKyAgICAgICAgICAgICAgICBDSEVDSygocGFyYW1zWzFdLmdw
cigpID09IEdQUkluZm86OmFyZ3VtZW50R1BSMCkgPT0gYXJnMUluQXJnR1BSKTsKKyAgICAgICAg
ICAgICAgICBDSEVDSygocGFyYW1zWzJdLmdwcigpID09IEdQUkluZm86OmFyZ3VtZW50R1BSMSkg
PT0gYXJnMkluQXJnR1BSKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhZGQz
MihqaXQsIHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJhbXMucmVwc1syXS5ncHIoKSwgcGFyYW1z
LnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAgIGFkZDMyKGppdCwgcGFyYW1zWzFdLmdw
cigpLCBwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgICAgICAgICB9KTsK
IAogICAgICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCBwYXRjaHBvaW50KTsKQEAgLTM2MTgsMTYgKzM2MTksMTYgQEAgdm9pZCB0ZXN0UGF0
Y2hwb2ludENhbGxBcmcoKQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAg
WyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAz
KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOwotICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNTdGFjaygpKTsKLSAgICAgICAgICAgIENIRUNLKHBh
cmFtcy5yZXBzWzJdLmlzU3RhY2soKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgp
ID09IDMpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlzR1BSKCkpOworICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zWzFdLmlzU3RhY2soKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNb
Ml0uaXNTdGFjaygpKTsKICAgICAgICAgICAgIGppdC5sb2FkMzIoCi0gICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBwYXJhbXMu
cmVwc1sxXS5vZmZzZXRGcm9tRlAoKSksCi0gICAgICAgICAgICAgICAgcGFyYW1zLnJlcHNbMF0u
Z3ByKCkpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgcGFyYW1zWzFdLm9mZnNldEZyb21GUCgpKSwKKyAgICAgICAgICAg
ICAgICBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICAgICAgaml0LmFkZDMyKAotICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
cGFyYW1zLnJlcHNbMl0ub2Zmc2V0RnJvbUZQKCkpLAotICAgICAgICAgICAgICAgIHBhcmFtcy5y
ZXBzWzBdLmdwcigpKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHBhcmFtc1syXS5vZmZzZXRGcm9tRlAoKSksCisgICAg
ICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpKTsKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7
CiAKQEAgLTM2NDYsMTEgKzM2NDcsMTEgQEAgdm9pZCB0ZXN0UGF0Y2hwb2ludEZpeGVkUmVnaXN0
ZXIoKQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKLSAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnJlcHNbMV0gPT0gVmFsdWVSZXAoR1BSSW5mbzo6cmVnVDApKTsKLSAgICAgICAgICAgIENI
RUNLKHBhcmFtcy5yZXBzWzJdID09IFZhbHVlUmVwKEdQUkluZm86OnJlZ1QxKSk7Ci0gICAgICAg
ICAgICBhZGQzMihqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgcGFyYW1zLnJl
cHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsKKyAg
ICAgICAgICAgIENIRUNLKHBhcmFtc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBh
cmFtc1sxXSA9PSBWYWx1ZVJlcChHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zWzJdID09IFZhbHVlUmVwKEdQUkluZm86OnJlZ1QxKSk7CisgICAgICAgICAgICBhZGQz
MihqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgcGFyYW1zWzBdLmdwcigpKTsK
ICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7CiAKQEAgLTM2NzAsMTEgKzM2NzEsMTEgQEAgdm9p
ZCB0ZXN0UGF0Y2hwb2ludEFueShWYWx1ZVJlcCByZXApCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAg
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
CiAgICAgICAgICAgICAvLyBXZSBzaG91bGRuJ3QgaGF2ZSBzcGlsbGVkIHRoZSBpbnB1dHMsIHNv
IHdlIGFzc2VydCB0aGF0IHRoZXkncmUgaW4gcmVnaXN0ZXJzLgotICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHMuc2l6ZSgpID09IDMpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNb
MF0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS5pc0dQUigpKTsK
LSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAg
YWRkMzIoaml0LCBwYXJhbXMucmVwc1sxXS5ncHIoKSwgcGFyYW1zLnJlcHNbMl0uZ3ByKCksIHBh
cmFtcy5yZXBzWzBdLmdwcigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0g
Myk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMF0uaXNHUFIoKSk7CisgICAgICAgICAgICBD
SEVDSyhwYXJhbXNbMV0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNH
UFIoKSk7CisgICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJd
LmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICB9KTsKICAgICByb290LT5hcHBlbmRO
ZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKIApA
QCAtMzcwNCwxNiArMzcwNSwxNiBAQCB2b2lkIHRlc3RQYXRjaHBvaW50TG90c09mTGF0ZUFueXMo
KQogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAgLy8gV2Ugc2hvdWxkbid0IGhh
dmUgc3BpbGxlZCB0aGUgaW5wdXRzLCBzbyB3ZSBhc3NlcnQgdGhhdCB0aGV5J3JlIGluIHJlZ2lz
dGVycy4KLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSB0aGluZ3Muc2l6
ZSgpICsgMSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKLSAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBwYXJhbXMu
cmVwc1swXS5ncHIoKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcGFy
YW1zLnJlcHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnJlcHNb
aV0uaXNHUFIoKSkgewotICAgICAgICAgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1tpXSAh
PSBwYXJhbXMucmVwc1swXSk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGQzMihwYXJhbXMu
cmVwc1tpXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnNpemUoKSA9PSB0aGluZ3Muc2l6ZSgpICsgMSk7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXNbMF0uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigwKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBwYXJhbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAo
cGFyYW1zW2ldLmlzR1BSKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ0hFQ0socGFyYW1zW2ld
ICE9IHBhcmFtc1swXSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGQzMihwYXJhbXNbaV0u
Z3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbaV0uaXNTdGFjaygpKTsKLSAgICAgICAg
ICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgcGFyYW1zLnJlcHNbaV0ub2Zmc2V0RnJvbUZQKCkpLCBwYXJhbXMucmVw
c1swXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgIENIRUNLKHBhcmFtc1tpXS5pc1N0YWNr
KCkpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBwYXJhbXNbaV0ub2Zmc2V0RnJvbUZQKCkpLCBw
YXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgfSk7CkBAIC0zNzM2LDE0ICszNzM3LDE0IEBAIHZvaWQgdGVzdFBhdGNocG9pbnRBbnlJbW0o
VmFsdWVSZXAgcmVwKQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsK
LSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOwotICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwc1syXS5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0u
dmFsdWUoKSA9PSA0Mik7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDMpOwor
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zWzFdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzQ29uc3Rh
bnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0udmFsdWUoKSA9PSA0Mik7CiAgICAg
ICAgICAgICBqaXQuYWRkMzIoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocGFyYW1zLnJlcHNbMl0udmFsdWUoKSkpLAotICAg
ICAgICAgICAgICAgIHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJhbXMucmVwc1swXS5ncHIoKSk7
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4ocGFyYW1zWzJdLnZhbHVlKCkpKSwKKyAgICAgICAgICAgICAgICBwYXJhbXNbMV0u
Z3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgICAgIH0pOwogICAgIHJvb3QtPmFwcGVuZE5l
dzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHBhdGNocG9pbnQpOwogCkBA
IC0zNzY1LDExICszNzY2LDExIEBAIHZvaWQgdGVzdFBhdGNocG9pbnRNYW55SW1tcygpCiAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnNCwgVmFsdWVSZXA6Oldhcm1B
bnkpKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxI
ZWxwZXJzJiwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzWzBdID09IFZhbHVlUmVwOjpjb25zdGFudCg0MikpOwotICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnJlcHNbMV0gPT0gVmFsdWVSZXA6OmNvbnN0YW50KDQzKSk7Ci0gICAgICAg
ICAgICBDSEVDSyhwYXJhbXMucmVwc1syXSA9PSBWYWx1ZVJlcDo6Y29uc3RhbnQoNDMwMDAwMDAw
MDAwMDBsbCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10gPT0gVmFsdWVSZXA6
OmNvbnN0YW50KGJpdHdpc2VfY2FzdDxpbnQ2NF90Pig0Mi41KSkpOworICAgICAgICAgICAgQ0hF
Q0socGFyYW1zLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1swXSA9PSBW
YWx1ZVJlcDo6Y29uc3RhbnQoNDIpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1sxXSA9PSBW
YWx1ZVJlcDo6Y29uc3RhbnQoNDMpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXSA9PSBW
YWx1ZVJlcDo6Y29uc3RhbnQoNDMwMDAwMDAwMDAwMDBsbCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zWzNdID09IFZhbHVlUmVwOjpjb25zdGFudChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oNDIu
NSkpKTsKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCiAg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCkBAIC0zNzkxLDExICszNzkyLDExIEBAIHZv
aWQgdGVzdFBhdGNocG9pbnRXaXRoUmVnaXN0ZXJSZXN1bHQoKQogICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBh
cmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBd
ID09IFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6bm9uQXJnR1BSMCkpOwotICAgICAgICAgICAgQ0hF
Q0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVw
c1syXS5pc0dQUigpKTsKLSAgICAgICAgICAgIGFkZDMyKGppdCwgcGFyYW1zLnJlcHNbMV0uZ3By
KCksIHBhcmFtcy5yZXBzWzJdLmdwcigpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMyk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNb
MF0gPT0gVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpub25BcmdHUFIwKSk7CisgICAgICAgICAgICBD
SEVDSyhwYXJhbXNbMV0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNH
UFIoKSk7CisgICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJd
LmdwcigpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7
CiAKQEAgLTM4MTYsMTIgKzM4MTcsMTIgQEAgdm9pZCB0ZXN0UGF0Y2hwb2ludFdpdGhTdGFja0Fy
Z3VtZW50UmVzdQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0
Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdID09IFZhbHVlUmVwOjpzdGFjaygtc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KHByb2MuZnJhbWVTaXplKCkpKSk7Ci0gICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwc1sxXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJd
LmlzR1BSKCkpOwotICAgICAgICAgICAgaml0LnN0b3JlMzIocGFyYW1zLnJlcHNbMV0uZ3ByKCks
IENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
LCAwKSk7Ci0gICAgICAgICAgICBqaXQuYWRkMzIocGFyYW1zLnJlcHNbMl0uZ3ByKCksIENDYWxs
SGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAwKSk7
CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDMpOworICAgICAgICAgICAgQ0hF
Q0socGFyYW1zWzBdID09IFZhbHVlUmVwOjpzdGFjaygtc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHBy
b2MuZnJhbWVTaXplKCkpKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMV0uaXNHUFIoKSk7
CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQu
c3RvcmUzMihwYXJhbXNbMV0uZ3ByKCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAwKSk7CisgICAgICAgICAgICBqaXQuYWRkMzIocGFy
YW1zWzJdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgMCkpOwogICAgICAgICB9KTsKICAgICByb290LT5hcHBlbmROZXc8Q29u
dHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKIApAQCAtMzg0
NCwxMyArMzg0NSwxMyBAQCB2b2lkIHRlc3RQYXRjaHBvaW50V2l0aEFueVJlc3VsdCgpCiAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDMpOwotICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHNbMF0uaXNTdGFjaygpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBz
WzFdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7
Ci0gICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJhbXMucmVw
c1syXS5ncHIoKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNp
emUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1swXS5pc1N0YWNrKCkpOworICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zWzFdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFy
YW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgYWRkMzIoaml0LCBwYXJhbXNbMV0uZ3ByKCks
IHBhcmFtc1syXS5ncHIoKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgaml0LmNvbnZl
cnRJbnQzMlRvRG91YmxlKEdQUkluZm86OnJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAg
ICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHBhcmFtcy5yZXBzWzBdLm9mZnNldEZy
b21GUCgpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBwYXJhbXNb
MF0ub2Zmc2V0RnJvbUZQKCkpKTsKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7CiAKQEAgLTM4
NjYsNyArMzg2Nyw3IEBAIHZvaWQgdGVzdFNpbXBsZUNoZWNrKCkKICAgICBjaGVjay0+c2V0R2Vu
ZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnJlcHMuc2l6ZSgpID09IDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAx
KTsKIAogICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHdvcmsgYmVjYXVzZSBhIGZ1
bmN0aW9uIHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBoYXZlIGNhbGxlZQogICAgICAgICAgICAg
Ly8gc2F2ZXMuCkBAIC0zODk4LDcgKzM4OTksNyBAQCB2b2lkIHRlc3RDaGVja0xlc3NUaGFuKCkK
ICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDEpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnNpemUoKSA9PSAxKTsKIAogICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlz
IHdvcmsgYmVjYXVzZSBhIGZ1bmN0aW9uIHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBoYXZlIGNh
bGxlZQogICAgICAgICAgICAgLy8gc2F2ZXMuCkBAIC0zOTQ0LDcgKzM5NDUsNyBAQCB2b2lkIHRl
c3RDaGVja01lZ2FDb21ibygpCiAgICAgY2hlY2stPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAxKTsK
KyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMSk7CiAKICAgICAgICAgICAgIC8v
IFRoaXMgc2hvdWxkIGFsd2F5cyB3b3JrIGJlY2F1c2UgYSBmdW5jdGlvbiB0aGlzIHNpbXBsZSBz
aG91bGQgbmV2ZXIgaGF2ZSBjYWxsZWUKICAgICAgICAgICAgIC8vIHNhdmVzLgpAQCAtMzk4NCwx
MSArMzk4NSwxMSBAQCB2b2lkIHRlc3RDaGVja0FkZEltbSgpCiAgICAgY2hlY2tBZGQtPnNldEdl
bmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5yZXBzLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlz
R1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXNDb25zdGFudCgpKTsK
LSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLnZhbHVlKCkgPT0gNDIpOwotICAgICAg
ICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJ
bmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gNCk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXNbM10uaXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1szXS52YWx1
ZSgpID09IDQyKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNb
Ml0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQz
MlRvRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQyKSwgRlBSSW5mbzo6ZnBSZWdU
MSk7CiAgICAgICAgICAgICBqaXQuYWRkRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86
OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC00
MDIwLDExICs0MDIxLDExIEBAIHZvaWQgdGVzdENoZWNrQWRkSW1tQ29tbXV0ZSgpCiAgICAgY2hl
Y2tBZGQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXND
b25zdGFudCgpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLnZhbHVlKCkgPT0g
NDIpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzJd
LmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXpl
KCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7CisgICAgICAg
ICAgICBDSEVDSyhwYXJhbXNbM10uaXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIENIRUNLKHBh
cmFtc1szXS52YWx1ZSgpID09IDQyKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0Rv
dWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0
LmNvbnZlcnRJbnQzMlRvRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQyKSwgRlBS
SW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuYWRkRG91YmxlKEZQUkluZm86OmZwUmVn
VDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7CkBAIC00MDU2LDExICs0MDU3LDExIEBAIHZvaWQgdGVzdENoZWNrQWRkSW1tU29tZVJl
Z2lzdGVyKCkKICAgICBjaGVja0FkZC0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewog
ICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChq
aXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOwotICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwc1szXS5pc0dQUigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0Rv
dWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAg
ICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbM10uZ3ByKCksIEZQUkluZm86
OmZwUmVnVDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSA0KTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFt
c1szXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJh
bXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZlcnRJ
bnQzMlRvRG91YmxlKHBhcmFtc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAg
ICAgICBqaXQuYWRkRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwog
ICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBqaXQu
cmV0KCk7CkBAIC00MDkzLDExICs0MDk0LDExIEBAIHZvaWQgdGVzdENoZWNrQWRkKCkKICAgICBj
aGVja0FkZC0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOwotICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS5p
c0dQUigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVw
c1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBqaXQuY29udmVydElu
dDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbM10uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOworICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBh
cmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1szXS5pc0dQUigpKTsK
KyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQ
UkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBh
cmFtc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuYWRkRG91
YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0
LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7CkBAIC00MTI2
LDExICs0MTI3LDExIEBAIHZvaWQgdGVzdENoZWNrQWRkNjQoKQogICAgIGNoZWNrQWRkLT5zZXRH
ZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5p
c0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkpOwotICAg
ICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0RvdWJsZShw
YXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBDSEVD
SyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BS
KCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzR1BSKCkpOworICAgICAgICAgICAg
aml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdU
MCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1zWzNdLmdwcigp
LCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5hZGREb3VibGUoRlBSSW5mbzo6
ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQyMDAsMTEgKzQyMDEsMTEg
QEAgdm9pZCB0ZXN0Q2hlY2tTdWJJbW0oKQogICAgIGNoZWNrU3ViLT5zZXRHZW5lcmF0b3IoCiAg
ICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXpl
KCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzQ29uc3RhbnQoKSk7Ci0gICAgICAgICAg
ICBDSEVDSyhwYXJhbXMucmVwc1szXS52YWx1ZSgpID09IDQyKTsKLSAgICAgICAgICAgIGppdC5j
b252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdU
MCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlz
Q29uc3RhbnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbM10udmFsdWUoKSA9PSA0Mik7
CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zWzJdLmdwcigpLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMig0MiksIEZQUkluZm86OmZwUmVnVDEpOwogICAgICAg
ICAgICAgaml0LnN1YkRvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsK
ICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtNDIzNywxMSArNDIz
OCwxMSBAQCB2b2lkIHRlc3RDaGVja1N1YkJhZEltbSgpCiAgICAgY2hlY2tTdWItPnNldEdlbmVy
YXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BS
KCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXNDb25zdGFudCgpKTsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLnZhbHVlKCkgPT0gYmFkSW1tKTsKLSAgICAg
ICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBS
SW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOwor
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zWzNdLmlzQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbM10udmFs
dWUoKSA9PSBiYWRJbW0pOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBh
cmFtc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuY29udmVy
dEludDMyVG9Eb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYmFkSW1tKSwgRlBSSW5m
bzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuc3ViRG91YmxlKEZQUkluZm86OmZwUmVnVDEs
IEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KCk7CkBAIC00Mjc1LDExICs0Mjc2LDExIEBAIHZvaWQgdGVzdENoZWNrU3ViKCkKICAgICBjaGVj
a1N1Yi0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS5pc0dQ
UigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1sy
XS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBqaXQuY29udmVydEludDMy
VG9Eb3VibGUocGFyYW1zLnJlcHNbM10uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOworICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFt
c1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1szXS5pc0dQUigpKTsKKyAg
ICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUklu
Zm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFt
c1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuc3ViRG91Ymxl
KEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7CkBAIC00MzEzLDEx
ICs0MzE0LDExIEBAIHZvaWQgdGVzdENoZWNrU3ViNjQoKQogICAgIGNoZWNrU3ViLT5zZXRHZW5l
cmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQ
UigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkpOwotICAgICAg
ICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJ
bmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0RvdWJsZShwYXJh
bXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkp
OworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzR1BSKCkpOworICAgICAgICAgICAgaml0
LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7
CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1zWzNdLmdwcigpLCBG
UFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5zdWJEb3VibGUoRlBSSW5mbzo6ZnBS
ZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQzODYsOSArNDM4Nyw5IEBAIHZv
aWQgdGVzdENoZWNrTmVnKCkKICAgICBjaGVja05lZy0+c2V0R2VuZXJhdG9yKAogICAgICAgICBb
Jl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDMp
OwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAg
ICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3ByKCksIEZQUkluZm86
OmZwUmVnVDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0
SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOwogICAgICAg
ICAgICAgaml0Lm5lZ2F0ZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1Qw
KTsKICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgICAgICAgICAg
aml0LnJldCgpOwpAQCAtNDQxNiw5ICs0NDE3LDkgQEAgdm9pZCB0ZXN0Q2hlY2tOZWc2NCgpCiAg
ICAgY2hlY2tOZWctPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKLSAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRv
RG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMyk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNb
Ml0uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1z
WzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5uZWdhdGVEb3Vi
bGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQu
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQ0NTEs
MTEgKzQ0NTIsMTEgQEAgdm9pZCB0ZXN0Q2hlY2tNdWwoKQogICAgIGNoZWNrTXVsLT5zZXRHZW5l
cmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQ
UigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkpOwotICAgICAg
ICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJ
bmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJh
bXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkp
OworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzR1BSKCkpOworICAgICAgICAgICAgaml0
LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7
CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zWzNdLmdwcigpLCBG
UFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5tdWxEb3VibGUoRlBSSW5mbzo6ZnBS
ZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQ0OTIsMTEgKzQ0OTMsMTEgQEAg
dm9pZCB0ZXN0Q2hlY2tNdWxNZW1vcnkoKQogICAgIGNoZWNrTXVsLT5zZXRHZW5lcmF0b3IoCiAg
ICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXpl
KCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0
LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJl
Z1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1sz
XS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6
ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzR1BSKCkpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJ
bnQzMlRvRG91YmxlKHBhcmFtc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAg
ICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zWzNdLmdwcigpLCBGUFJJbmZvOjpm
cFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5tdWxEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBS
SW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsK
ICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQ1MzgsMTEgKzQ1MzksMTEgQEAgdm9pZCB0ZXN0
Q2hlY2tNdWwyKCkKICAgICBjaGVja011bC0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
ewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOwotICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwc1szXS5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnJlcHNbM10udmFsdWUoKSA9PSAyKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0Rv
dWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAg
ICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJd
LmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzQ29uc3RhbnQoKSk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXNbM10udmFsdWUoKSA9PSAyKTsKKyAgICAgICAgICAgIGpp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDAp
OwogICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDIpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5tdWxEb3Vi
bGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQu
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTQ1NzIsMTEgKzQ1NzMsMTEgQEAgdm9pZCB0ZXN0
Q2hlY2tNdWw2NCgpCiAgICAgY2hlY2tNdWwtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0
Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hF
Q0socGFyYW1zLnJlcHNbM10uaXNHUFIoKSk7Ci0gICAgICAgICAgICBqaXQuY29udmVydEludDY0
VG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwotICAgICAg
ICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzNdLmdwcigpLCBGUFJJ
bmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gNCk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXNbM10uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUo
cGFyYW1zWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5jb252
ZXJ0SW50NjRUb0RvdWJsZShwYXJhbXNbM10uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOwogICAg
ICAgICAgICAgaml0Lm11bERvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1Qw
KTsKICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgICAgICAgICAg
aml0LnJldCgpOwpAQCAtNDY3NSw5ICs0Njc2LDkgQEAgdm9pZCBnZW5lcmljVGVzdENvbXBhcmUo
CiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgICAgIFsmXSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOwotICAgICAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAx
KTsKLSAgICAgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKLSAgICAg
ICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgcGFyYW1z
LnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0g
MSk7CisgICAgICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlzR1BSKCkpOworICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBwYXJhbXNbMF0u
Z3ByKCkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIHRoZW5DYXNlLT5hcHBlbmROZXc8Q29u
dHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJl
dmlzaW9uIDE5MzUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJB
aXJHZW5lcmF0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKQEAgLTQ4MjgsMTQg
KzQ4MjksMTA5IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3Qo
KQogICAgIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKKyAgICAgICAgaW50IG51bUFy
Z3MgPSBub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKKworICAgICAgICBMVmFsdWUganNDYWxsZWUg
PSBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworCiAjaWYgRlRMX1VT
RVNfQjMKLSAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSB8fCAhdmVyYm9z
ZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgQ1JBU0goKTsKLSNlbHNlCi0gICAg
ICAgIGludCBudW1BcmdzID0gbV9ub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKKyAgICAgICAgdW5z
aWduZWQgZnJhbWVTaXplID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bUFyZ3M7
CisgICAgICAgIHVuc2lnbmVkIGFsaWduZWRGcmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgZnJhbWVTaXplKTsKKworICAgICAgICAv
LyBKUy0+SlMgY2FsbGluZyBjb252ZW50aW9uIHJlcXVpcmVzIHRoYXQgdGhlIGNhbGxlciBhbGxv
d3MgdGhpcyBtdWNoIHNwYWNlIG9uIHRvcCBvZiBzdGFjayB0bworICAgICAgICAvLyBnZXQgdHJh
c2hlZCBieSB0aGUgY2FsbGVlLCBldmVuIGlmIG5vdCBhbGwgb2YgdGhhdCBzcGFjZSBpcyB1c2Vk
IHRvIHBhc3MgYXJndW1lbnRzLiBXZSB0ZWxsCisgICAgICAgIC8vIEIzIHRoaXMgZXhwbGljaXRs
eSBmb3IgdHdvIHJlYXNvbnM6CisgICAgICAgIC8vCisgICAgICAgIC8vIC0gV2Ugd2lsbCBvbmx5
IHBhc3MgZnJhbWVTaXplIHdvcnRoIG9mIHN0dWZmLgorICAgICAgICAvLyAtIFRoZSB0cmFzaGVk
IHN0YWNrIGd1YXJhbnRlZSBpcyBsb2dpY2FsbHkgc2VwYXJhdGUgZnJvbSB0aGUgYWN0IG9mIHBh
c3NpbmcgYXJndW1lbnRzLCBzbyB3ZQorICAgICAgICAvLyAgIHNob3VsZG4ndCByZWx5IG9uIEFp
ciB0byBpbmZlciB0aGUgdHJhc2hlZCBzdGFjayBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgYXJndW1l
bnRzIGl0IGVuZHMKKyAgICAgICAgLy8gICB1cCBzZWVpbmcuCisgICAgICAgIG1fcHJvYy5yZXF1
ZXN0Q2FsbEFyZ0FyZWFTaXplKGFsaWduZWRGcmFtZVNpemUpOworCisgICAgICAgIC8vIENvbGxl
Y3QgdGhlIGFyZ3VtZW50cywgc2luY2UgdGhpcyBjYW4gZ2VuZXJhdGUgY29kZSBhbmQgd2Ugd2Fu
dCB0byBnZW5lcmF0ZSBpdCBiZWZvcmUgd2UgZW1pdAorICAgICAgICAvLyB0aGUgY2FsbC4KKyAg
ICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVmFsdWU+IGFyZ3VtZW50czsKKworICAgICAgICAvLyBN
YWtlIHRoaXMgZWFzeSBmb3Igb3Vyc2VsdmVzLgorICAgICAgICBhdXRvIGFkZEFyZ3VtZW50ID0g
WyZdIChMVmFsdWUgdmFsdWUsIGNvbnN0IFZhbHVlUmVwJiByZXApIHsKKyAgICAgICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZSh2YWx1ZSwgcmVwKSk7CisgICAgICAgIH07
CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGNhbGxlZSBnb2VzIGludG8gR1BSMC4K
KyAgICAgICAgYWRkQXJndW1lbnQoanNDYWxsZWUsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmVn
VDApKTsKKworICAgICAgICAvLyBOb3cgcHV0IHRoaW5ncyBpbnRvIHRoZSBzdGFjay4KKyAgICAg
ICAgYWRkQXJndW1lbnQoanNDYWxsZWUsIFZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KFZpcnR1YWxS
ZWdpc3RlcihKU1N0YWNrOjpDYWxsZWUpKSk7CisgICAgICAgIGFkZEFyZ3VtZW50KAorICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQzMihudW1BcmdzKSwKKyAgICAgICAgICAgIFZhbHVlUmVwOjpz
dGFja0FyZ3VtZW50KFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkud2l0
aE9mZnNldChQYXlsb2FkT2Zmc2V0KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1BcmdzOyArK2kpIHsKKyAgICAgICAgICAgIGFkZEFyZ3VtZW50KAorICAgICAgICAgICAg
ICAgIGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxICsgaSkpLAorICAgICAg
ICAgICAgICAgIFZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGkpKSk7CisgICAgICAgIH0KKworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBtX291dC5wYXRjaHBvaW50KEludDY0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5k
VmVjdG9yKGFyZ3VtZW50cyk7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJT
ZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJl
ckxhdGUoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOworICAgICAg
ICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gY29kZU9y
aWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpOworICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9m
dGxTdGF0ZTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICAgICAg
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKKyAgICAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBz
dGF0ZS0+aml0Q29kZS0+Y29tbW9uLT5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4p
OworCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElmIHdlIHdlcmUgaGFuZGxpbmcgZXhjZXB0
aW9ucywgdGhlbiBhdCB0aGlzIHBvaW50IHdlIHdvdWxkIGFzayBvdXIgZGVzY3JpcHRvcgorICAg
ICAgICAgICAgICAgIC8vIHRvIHByZXBhcmUgYW5kIHRoZW4gd2Ugd291bGQgbW9kaWZ5IHRoZSBP
U1JFeGl0IGRhdGEgc3RydWN0dXJlIGluc2lkZSB0aGUKKyAgICAgICAgICAgICAgICAvLyBPU1JF
eGl0SGFuZGxlIHRvIGxpbmsgaXQgdXAgdG8gdGhpcyBjYWxsLgorCisgICAgICAgICAgICAgICAg
aml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyOjpUcnVzdGVkSW1t
MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKwor
ICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gc3RhdGUtPmNvZGVC
bG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIHRhcmdldFRv
Q2hlY2ssCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigw
KSk7CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKKworICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwor
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKKwor
ICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5m
bzo6cmVnVDIpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9
IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKKworICAg
ICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAorICAgICAgICAgICAgICAgICAg
ICBub2RlLT5vcCgpID09IENvbnN0cnVjdCA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0IDogQ2Fs
bExpbmtJbmZvOjpDYWxsLAorICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50
aWMsIEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICBMVmFsdWUganNDYWxsZWUgPSBsb3dKU1Zh
bHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSk7CisgICAgICAgICAgICAgICAgaml0
LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
LXBhcmFtcy5wcm9jKCkuZnJhbWVTaXplKCkpLAorICAgICAgICAgICAgICAgICAgICBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAgICAgICAgICAg
IFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5j
b2RlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwg
RnVuY3Rpb25QdHIobGlua0NhbGwpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YodGFyZ2V0VG9DaGVjayksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENh
bGwpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAg
ICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOworI2Vsc2UKICAgICAgICAgdW5zaWduZWQgc3RhY2tt
YXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKIAogICAgICAgICB1bnNpZ25lZCBmcmFtZVNpemUgPSBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtQXJnczsKQEAgLTQ4NDksNyArNDk0NSw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoanNDYWxsZWUpOyAvLyBjYWxs
ZWUgLT4gc3RhY2sKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDY0KG51
bUFyZ3MpKTsgLy8gYXJndW1lbnQgY291bnQgYW5kIHplcm9zIGZvciB0aGUgdGFnCiAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKQotICAgICAgICAgICAgYXJndW1lbnRz
LmFwcGVuZChsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxICsgaSkpKTsK
KyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDEgKyBpKSkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFk
ZGluZzsgKytpKQogICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291dC5p
bnQ2NCkpOwogCkBAIC00ODYzLDcgKzQ5NTksNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUg
Y2FsbCA9IG1fb3V0LmNhbGwobV9vdXQuaW50NjQsIG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJp
bnNpYygpLCBhcmd1bWVudHMpOwogICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50
aW9uKGNhbGwsIExMVk1XZWJLaXRKU0NhbGxDb252KTsKICAgICAgICAgCi0gICAgICAgIG1fZnRs
U3RhdGUuanNDYWxscy5hcHBlbmQoSlNDYWxsKHN0YWNrbWFwSUQsIG1fbm9kZSwgY29kZU9yaWdp
bkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpKSk7CisgICAgICAgIG1fZnRsU3RhdGUuanNDYWxscy5h
cHBlbmQoSlNDYWxsKHN0YWNrbWFwSUQsIG5vZGUsIGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2Fs
bFNpdGUoKSkpOwogICAgICAgICAKICAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKICNlbmRpZgpA
QCAtNzkwMSw3ICs3OTk3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmVzdWx0LT5zZXRHZW5lcmF0
b3IoCiAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIFZlY3RvcjxMb2NhdGlv
bj4gbG9jYXRpb25zOwotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgQjM6OlZhbHVlUmVwJiBy
ZXAgOiBwYXJhbXMucmVwcykKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEIzOjpWYWx1ZVJl
cCYgcmVwIDogcGFyYW1zKQogICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnMuYXBwZW5kKExv
Y2F0aW9uOjpmb3JWYWx1ZVJlcChyZXApKTsKIAogICAgICAgICAgICAgICAgIFJlZlB0cjxMYXp5
U2xvd1BhdGg6OkdlbmVyYXRvcj4gZ2VuZXJhdG9yID0gZnVuY3Rvcihsb2NhdGlvbnMpOwpAQCAt
NzkwOSwxMiArODAwNSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6UGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGRvbmUgPSBqaXQubGFiZWwoKTsKIAot
ICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBwYXJhbXMudXNlZFJl
Z2lzdGVyczsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gcGFy
YW1zLnVzZWRSZWdpc3RlcnMoKTsKIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBcyBwYXJ0
IG9mIGhhbmRsaW5nIGV4Y2VwdGlvbnMsIHdlIG5lZWQgdG8gY3JlYXRlIGEgY29uY3JldGUgT1NS
RXhpdCBoZXJlLgogICAgICAgICAgICAgICAgIC8vIERvaW5nIHNvIHNob3VsZCBhdXRvbWFnaWNh
bGx5IHJlZ2lzdGVyIGxhdGUgcGF0aHMgdGhhdCBlbWl0IGV4aXQgdGh1bmtzLgogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIHBhcmFtcy5jb250ZXh0LT5sYXRlUGF0aHMuYXBwZW5k
KAorICAgICAgICAgICAgICAgIHBhcmFtcy5jb250ZXh0KCkubGF0ZVBhdGhzLmFwcGVuZCgKICAg
ICAgICAgICAgICAgICAgICAgY3JlYXRlU2hhcmVkVGFzazxBaXI6OkdlbmVyYXRpb25Db250ZXh0
OjpMYXRlUGF0aEZ1bmN0aW9uPigKICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChq
aXQpOwpAQCAtOTIxMyw2ICs5MzA5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uKTsKICAgICB9CiAKKyNpZiAhRlRMX1VTRVNfQjMKICAgICB2b2lkIGFw
cGVuZE9TUkV4aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24oU3Rh
Y2ttYXBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgRXhjZXB0aW9uVHlwZSBleGNlcHRpb25UeXBl
LCB1bnNpZ25lZCBvZmZzZXRPZkV4aXRBcmd1bWVudHMpCiAgICAgewogICAgICAgICBDb2RlT3Jp
Z2luIG9wQ2F0Y2hPcmlnaW47CkBAIC05MjMzLDYgKzkzMzAsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXREZXNjcmlwdG9yLCBleGl0RGVzY3JpcHRvcklt
cGwsIG5vVmFsdWUoKSwgb2Zmc2V0T2ZFeGl0QXJndW1lbnRzKTsKICAgICAgICAgYXJndW1lbnRz
LmFwcGVuZFZlY3RvcihmcmVzaExpc3QpOwogICAgIH0KKyNlbmRpZiAvLyAhRlRMX1VTRVNfQjMK
IAogICAgIGJvb2wgZW1pdEJyYW5jaFRvT1NSRXhpdElmV2lsbENhdGNoRXhjZXB0aW9uKExWYWx1
ZSBoYWRFeGNlcHRpb24pCiAgICAgewpAQCAtOTI1MSw2ICs5MzQ5LDE2IEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiBtX2Jsb2Nrcy5nZXQoYmxvY2spOwogICAgIH0KIAorCisjaWYgRlRMX1VT
RVNfQjMKKyAgICBPU1JFeGl0RGVzY3JpcHRvciogYXBwZW5kT1NSRXhpdERlc2NyaXB0b3IoRm9y
bWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiAmbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuYWxsb2MoCisgICAg
ICAgICAgICBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlRm9yKGhpZ2hWYWx1ZSksCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCku
bV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgfQorI2Vsc2UgLy8gRlRMX1VTRVNfQjMK
ICAgICBPU1JFeGl0RGVzY3JpcHRvciogYXBwZW5kT1NSRXhpdERlc2NyaXB0b3IoRXhpdEtpbmQg
a2luZCwgRXhjZXB0aW9uVHlwZSBleGNlcHRpb25UeXBlLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1
ZSwgTm9kZSogaGlnaFZhbHVlLCBOb2RlT3JpZ2luIG9yaWdpbikKICAgICB7CiAgICAgICAgIE9T
UkV4aXREZXNjcmlwdG9yJiByZXN1bHQgPSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNj
cmlwdG9ycy5hbGxvYygKQEAgLTkyNjEsNiArOTM2OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBraW5kLCBvcmlnaW4uZm9yRXhpdCwgb3JpZ2luLnNlbWFudGljLCBleGNlcHRpb25UeXBlKTsK
ICAgICAgICAgcmV0dXJuICZyZXN1bHQ7CiAgICAgfQorI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAg
ICAgCiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0KAogICAgICAgICBFeGl0S2luZCBraW5kLCBGb3Jt
YXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlv
biwgCkBAIC05MzI4LDkgKzk0MzcsNyBAQCBwcml2YXRlOgogI2lmIEZUTF9VU0VTX0IzCiAgICAg
dm9pZCBibGVzc1NwZWN1bGF0aW9uKEIzOjpDaGVja1ZhbHVlKiB2YWx1ZSwgRXhpdEtpbmQga2lu
ZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTm9kZU9yaWdpbiBv
cmlnaW4sIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyID0gZmFsc2UpCiAgICAgewotICAgICAgICBP
U1JFeGl0RGVzY3JpcHRvciogZXhpdERlc2NyaXB0b3IgPSBhcHBlbmRPU1JFeGl0RGVzY3JpcHRv
cigKLSAgICAgICAgICAgIGtpbmQsIGlzRXhjZXB0aW9uSGFuZGxlciA/IEV4Y2VwdGlvblR5cGU6
OkNDYWxsRXhjZXB0aW9uIDogRXhjZXB0aW9uVHlwZTo6Tm9uZSwgbG93VmFsdWUsCi0gICAgICAg
ICAgICBoaWdoVmFsdWUsIG9yaWdpbik7CisgICAgICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0
RGVzY3JpcHRvciA9IGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKGxvd1ZhbHVlLCBoaWdoVmFsdWUp
OwogICAgICAgICBPU1JFeGl0RGVzY3JpcHRvckltcGwqIGV4aXREZXNjcmlwdG9ySW1wbCA9ICZt
X2Z0bFN0YXRlLm9zckV4aXREZXNjcmlwdG9ySW1wbHMubGFzdCgpOwogICAgICAgICAKICAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gdmFsdWUtPm51bUNoaWxkcmVuKCk7CkBAIC05MzM5LDcgKzk0
NDYsOCBAQCBwcml2YXRlOgogICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKICAg
ICAgICAgdmFsdWUtPnNldEdlbmVyYXRvcigKICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAg
ICAgICAgICAgICAgIGV4aXREZXNjcmlwdG9yLT5lbWl0T1NSRXhpdCgqc3RhdGUsIGV4aXREZXNj
cmlwdG9ySW1wbCwgaml0LCBwYXJhbXMsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgZXhpdERl
c2NyaXB0b3ItPmVtaXRPU1JFeGl0KAorICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIGtpbmQs
IG9yaWdpbiwgaml0LCBwYXJhbXMsIG9mZnNldCwgaXNFeGNlcHRpb25IYW5kbGVyKTsKICAgICAg
ICAgICAgIH0pOwogICAgIH0KICNlbmRpZgpAQCAtOTQ3NSw2ICs5NTgzLDEwIEBAIHByaXZhdGU6
CiAgICAgICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIGNvbnN0IEhhc2hNYXA8
Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4mIG1hcCwKICAgICAgICAgTm9k
ZSogbm9kZSkKICAgICB7CisgICAgICAgIC8vIE5PVEU6IEluIEZUTC0+QjMsIHdlIGNhbm5vdCBn
ZW5lcmF0ZSBjb2RlIGhlcmUsIGJlY2F1c2UgbV9vdXRwdXQgaXMgcG9zaXRpb25lZCBhZnRlciB0
aGUKKyAgICAgICAgLy8gc3RhY2ttYXAgdmFsdWUuIExpa2UgYWxsIHZhbHVlcywgdGhlIHN0YWNr
bWFwIHZhbHVlIGNhbm5vdCB1c2UgYSBjaGlsZCB0aGF0IGlzIGRlZmluZWQgYWZ0ZXIKKyAgICAg
ICAgLy8gaXQuCisgICAgICAgIAogICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSk7CiAgICAgICAgIEFTU0VSVChub2RlLT5oYXNSZXN1bHQoKSk7CiAKQEAgLTk1MjIsMTAgKzk2
MzQsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1l
bnRzLCBEYXRhRm9ybWF0U3RyaWN0SW50NTIsIHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAKICAg
ICAgICAgdmFsdWUgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KG5vZGUpOworI2lmIEZUTF9VU0VTX0Iz
CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBleGl0QXJn
dW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0Qm9vbGVhbiwgdmFsdWUudmFsdWUoKSk7CisjZWxz
ZSAvLyBGVExfVVNFU19CMwogICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKICAgICAgICAg
ICAgIExWYWx1ZSB2YWx1ZVRvUGFzcyA9IG1fb3V0Lnplcm9FeHQodmFsdWUudmFsdWUoKSwgbV9v
dXQuaW50MzIpOwogICAgICAgICAgICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERh
dGFGb3JtYXRCb29sZWFuLCB2YWx1ZVRvUGFzcyk7CiAgICAgICAgIH0KKyNlbmRpZiAvLyBGVExf
VVNFU19CMwogICAgICAgICAKICAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KG5v
ZGUpOwogICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAJKHJldmlzaW9uIDE5MzUzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDE4ICs2
NSwyMiBAQCB2b2lkIE9TUkV4aXREZXNjcmlwdG9yOjp2YWxpZGF0ZVJlZmVyZW5jCiAKICNpZiBG
VExfVVNFU19CMwogUmVmUHRyPE9TUkV4aXRIYW5kbGU+IE9TUkV4aXREZXNjcmlwdG9yOjplbWl0
T1NSRXhpdCgKLSAgICBTdGF0ZSYgc3RhdGUsIE9TUkV4aXREZXNjcmlwdG9ySW1wbCogZXhpdERl
c2NyaXB0b3JJbXBsLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMsIHVuc2lnbmVkIG9mZnNldCkKKyAgICBTdGF0ZSYgc3RhdGUsIEV4aXRL
aW5kIGV4aXRLaW5kLCBjb25zdCBOb2RlT3JpZ2luJiBub2RlT3JpZ2luLCBDQ2FsbEhlbHBlcnMm
IGppdCwKKyAgICBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcywgdW5zaWdu
ZWQgb2Zmc2V0LCBib29sIGlzRXhjZXB0aW9uSGFuZGxlcikKIHsKLSAgICBSZWZQdHI8T1NSRXhp
dEhhbmRsZT4gaGFuZGxlID0gcHJlcGFyZU9TUkV4aXRIYW5kbGUoc3RhdGUsIGV4aXREZXNjcmlw
dG9ySW1wbCwgcGFyYW1zLCBvZmZzZXQpOworICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBoYW5k
bGUgPQorICAgICAgICBwcmVwYXJlT1NSRXhpdEhhbmRsZShzdGF0ZSwgZXhpdEtpbmQsIG5vZGVP
cmlnaW4sIHBhcmFtcywgb2Zmc2V0LCBpc0V4Y2VwdGlvbkhhbmRsZXIpOwogICAgIGhhbmRsZS0+
ZW1pdEV4aXRUaHVuayhqaXQpOwogICAgIHJldHVybiBoYW5kbGU7CiB9CiAKIFJlZlB0cjxPU1JF
eGl0SGFuZGxlPiBPU1JFeGl0RGVzY3JpcHRvcjo6ZW1pdE9TUkV4aXRMYXRlcigKLSAgICBTdGF0
ZSYgc3RhdGUsIE9TUkV4aXREZXNjcmlwdG9ySW1wbCogZXhpdERlc2NyaXB0b3JJbXBsLCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcywgdW5zaWduZWQgb2Zmc2V0KQorICAg
IFN0YXRlJiBzdGF0ZSwgRXhpdEtpbmQgZXhpdEtpbmQsIGNvbnN0IE5vZGVPcmlnaW4mIG5vZGVP
cmlnaW4sCisgICAgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMsIHVuc2ln
bmVkIG9mZnNldCwgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVmUHRyPE9TUkV4
aXRIYW5kbGU+IGhhbmRsZSA9IHByZXBhcmVPU1JFeGl0SGFuZGxlKHN0YXRlLCBleGl0RGVzY3Jp
cHRvckltcGwsIHBhcmFtcywgb2Zmc2V0KTsKLSAgICBwYXJhbXMuY29udGV4dC0+bGF0ZVBhdGhz
LmFwcGVuZCgKKyAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gaGFuZGxlID0KKyAgICAgICAgcHJl
cGFyZU9TUkV4aXRIYW5kbGUoc3RhdGUsIGV4aXRLaW5kLCBub2RlT3JpZ2luLCBwYXJhbXMsIG9m
ZnNldCwgaXNFeGNlcHRpb25IYW5kbGVyKTsKKyAgICBwYXJhbXMuY29udGV4dCgpLmxhdGVQYXRo
cy5hcHBlbmQoCiAgICAgICAgIGNyZWF0ZVNoYXJlZFRhc2s8QWlyOjpHZW5lcmF0aW9uQ29udGV4
dDo6TGF0ZVBhdGhGdW5jdGlvbj4oCiAgICAgICAgICAgICBbaGFuZGxlXSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmKSB7CiAgICAgICAgICAgICAgICAgaGFuZGxl
LT5lbWl0RXhpdFRodW5rKGppdCk7CkBAIC04NSwzMyArODksNDIgQEAgUmVmUHRyPE9TUkV4aXRI
YW5kbGU+IE9TUkV4aXREZXNjcmlwdG9yOgogfQogCiBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gT1NS
RXhpdERlc2NyaXB0b3I6OnByZXBhcmVPU1JFeGl0SGFuZGxlKAotICAgIFN0YXRlJiBzdGF0ZSwg
T1NSRXhpdERlc2NyaXB0b3JJbXBsKiBleGl0RGVzY3JpcHRvckltcGwsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zLCB1bnNpZ25lZCBvZmZzZXQpCisgICAgU3RhdGUmIHN0
YXRlLCBFeGl0S2luZCBleGl0S2luZCwgY29uc3QgTm9kZU9yaWdpbiYgbm9kZU9yaWdpbiwKKyAg
ICBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcywgdW5zaWduZWQgb2Zmc2V0
LCBib29sIGlzRXhjZXB0aW9uSGFuZGxlcikKIHsKICAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXRl
LmppdENvZGUtPm9zckV4aXQuc2l6ZSgpOwotICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBoYW5k
bGUgPSBhZG9wdFJlZigKLSAgICAgICAgbmV3IE9TUkV4aXRIYW5kbGUoaW5kZXgsIHN0YXRlLmpp
dENvZGUtPm9zckV4aXQuYWxsb2ModGhpcywgKmV4aXREZXNjcmlwdG9ySW1wbCkpKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSBvZmZzZXQ7IGkgPCBwYXJhbXMucmVwcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgaGFuZGxlLT5leGl0Lm1fdmFsdWVSZXBzLmFwcGVuZChwYXJhbXMucmVwc1tpXSk7Ci0g
ICAgaGFuZGxlLT5leGl0Lm1fdmFsdWVSZXBzLnNocmlua1RvRml0KCk7CisgICAgT1NSRXhpdCYg
ZXhpdCA9IHN0YXRlLmppdENvZGUtPm9zckV4aXQuYWxsb2MoCisgICAgICAgIHRoaXMsIGV4aXRL
aW5kLCBub2RlT3JpZ2luLmZvckV4aXQsIG5vZGVPcmlnaW4uc2VtYW50aWMsIGlzRXhjZXB0aW9u
SGFuZGxlcik7CisgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRsZSA9IGFkb3B0UmVmKG5l
dyBPU1JFeGl0SGFuZGxlKGluZGV4LCBleGl0KSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gb2Zm
c2V0OyBpIDwgcGFyYW1zLnNpemUoKTsgKytpKQorICAgICAgICBleGl0Lm1fdmFsdWVSZXBzLmFw
cGVuZChwYXJhbXNbaV0pOworICAgIGV4aXQubV92YWx1ZVJlcHMuc2hyaW5rVG9GaXQoKTsKICAg
ICByZXR1cm4gaGFuZGxlOwogfQogI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAKKyNpZiBGVExfVVNF
U19CMwogT1NSRXhpdDo6T1NSRXhpdCgKLSAgICBPU1JFeGl0RGVzY3JpcHRvciogZGVzY3JpcHRv
ciwgT1NSRXhpdERlc2NyaXB0b3JJbXBsJiBleGl0RGVzY3JpcHRvckltcGwKLSNpZiAhRlRMX1VT
RVNfQjMKLSAgICAsIHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgKLSNlbmRpZiAvLyAhRlRM
X1VTRVNfQjMKLSAgICApCisgICAgT1NSRXhpdERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCisgICAg
RXhpdEtpbmQgZXhpdEtpbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luRm9yRXhpdFByb2ZpbGUsCisgICAgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIpCisgICAg
OiBPU1JFeGl0QmFzZShleGl0S2luZCwgY29kZU9yaWdpbiwgY29kZU9yaWdpbkZvckV4aXRQcm9m
aWxlKQorICAgICwgbV9kZXNjcmlwdG9yKGRlc2NyaXB0b3IpCit7CisgICAgbV9pc0V4Y2VwdGlv
bkhhbmRsZXIgPSBpc0V4Y2VwdGlvbkhhbmRsZXI7Cit9CisjZWxzZSAvLyBGVExfVVNFU19CMwor
T1NSRXhpdDo6T1NSRXhpdCgKKyAgICBPU1JFeGl0RGVzY3JpcHRvciogZGVzY3JpcHRvciwgT1NS
RXhpdERlc2NyaXB0b3JJbXBsJiBleGl0RGVzY3JpcHRvckltcGwsCisgICAgdWludDMyX3Qgc3Rh
Y2ttYXBSZWNvcmRJbmRleCkKICAgICA6IE9TUkV4aXRCYXNlKGV4aXREZXNjcmlwdG9ySW1wbC5t
X2tpbmQsIGV4aXREZXNjcmlwdG9ySW1wbC5tX2NvZGVPcmlnaW4sIGV4aXREZXNjcmlwdG9ySW1w
bC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSkKICAgICAsIG1fZGVzY3JpcHRvcihkZXNjcmlw
dG9yKQotI2lmICFGVExfVVNFU19CMwogICAgICwgbV9zdGFja21hcFJlY29yZEluZGV4KHN0YWNr
bWFwUmVjb3JkSW5kZXgpCi0jZW5kaWYgLy8gIUZUTF9VU0VTX0IzCiAgICAgLCBtX2V4Y2VwdGlv
blR5cGUoZXhpdERlc2NyaXB0b3JJbXBsLm1fZXhjZXB0aW9uVHlwZSkKIHsKICAgICBtX2lzRXhj
ZXB0aW9uSGFuZGxlciA9IGV4aXREZXNjcmlwdG9ySW1wbC5tX2V4Y2VwdGlvblR5cGUgIT0gRXhj
ZXB0aW9uVHlwZTo6Tm9uZTsKIH0KKyNlbmRpZiAvLyBGVExfVVNFU19CMwogCiBDb2RlTG9jYXRp
b25KdW1wIE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKiBmdGxDb2Rl
QmxvY2spIGNvbnN0CiB7CkBAIC0xOTYsNyArMjA5LDYgQEAgdm9pZCBPU1JFeGl0OjpyZWNvdmVy
UmVnaXN0ZXJzRnJvbVNwaWxsUwogICAgICAgICB9CiAgICAgfQogfQotI2VuZGlmIC8vICFGVExf
VVNFU19CMwogCiBib29sIE9TUkV4aXQ6OndpbGxBcnJpdmVBdEV4aXRGcm9tSW5kaXJlY3RFeGNl
cHRpb25DaGVjaygpIGNvbnN0CiB7CkBAIC0yNjAsNiArMjcyLDcgQEAgYm9vbCBPU1JFeGl0Ojpu
ZWVkc1JlZ2lzdGVyUmVjb3ZlcnlPbkdlbgogICAgIC8vIHJlY292ZXIgdGhlIHNwaWxsZWQgcmVn
aXN0ZXJzLgogICAgIHJldHVybiBtX2V4Y2VwdGlvblR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6SlND
YWxsOwogfQorI2VuZGlmIC8vICFGVExfVVNFU19CMwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lv
biAxOTM1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKICNp
bmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKKyNpbmNs
dWRlICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdEJhc2UuaCIKICNpbmNs
dWRlICJGVExBYmJyZXZpYXRlZFR5cGVzLmgiCiAjaW5jbHVkZSAiRlRMRXhpdFRpbWVPYmplY3RN
YXRlcmlhbGl6YXRpb24uaCIKQEAgLTUxLDcgKzUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFz
cyBUcmFja2VkUmVmZXJlbmNlczsKIAogbmFtZXNwYWNlIEIzIHsKLXN0cnVjdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXM7CitjbGFzcyBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM7CiBuYW1lc3Bh
Y2UgQWlyIHsKIHN0cnVjdCBHZW5lcmF0aW9uQ29udGV4dDsKIH0gLy8gbmFtZXNwYWNlIEFpcgpA
QCAtNjEsNyArNjIsOSBAQCBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgU3RhdGU7CiBzdHJ1Y3Qg
T1NSRXhpdERlc2NyaXB0b3JJbXBsOworc3RydWN0IE9TUkV4aXRIYW5kbGU7CiAKKyNpZiAhRlRM
X1VTRVNfQjMKIGVudW0gY2xhc3MgRXhjZXB0aW9uVHlwZSA6IHVpbnQ4X3QgewogICAgIE5vbmUs
CiAgICAgQ0NhbGxFeGNlcHRpb24sCkBAIC03NSw2ICs3OCw3IEBAIGVudW0gY2xhc3MgRXhjZXB0
aW9uVHlwZSA6IHVpbnQ4X3QgewogfTsKIAogYm9vbCBleGNlcHRpb25UeXBlV2lsbEFycml2ZUF0
T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKEV4Y2VwdGlvblR5cGUpOworI2VuZGlmIC8vICFGVExf
VVNFU19CMwogCiBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3IgewogICAgIE9TUkV4aXREZXNjcmlw
dG9yKApAQCAtMTA1LDcgKzEwOSw4IEBAIHN0cnVjdCBPU1JFeGl0RGVzY3JpcHRvciB7CiAgICAg
Ly8gb24gdGhlIGdyb3VuZC4gSXQgY29udGFpbnMgaW5mb3JtYXRpb24gdGhhdCBpcyBtb3N0bHkg
bm90IHVzZWZ1bCBpZiB5b3UgdXNlIHRoaXMgQVBJLCBzaW5jZSBhZnRlcgogICAgIC8vIHRoaXMg
Y2FsbCwgdGhlIE9TUkV4aXQgaXMgc2ltcGx5IHJlYWR5IHRvIGdvLgogICAgIFJlZlB0cjxPU1JF
eGl0SGFuZGxlPiBlbWl0T1NSRXhpdCgKLSAgICAgICAgU3RhdGUmLCBPU1JFeGl0RGVzY3JpcHRv
ckltcGwqLCBDQ2FsbEhlbHBlcnMmLCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICAgICAgU3RhdGUmLCBFeGl0S2luZCwgY29uc3QgTm9k
ZU9yaWdpbiYsIENDYWxsSGVscGVycyYsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmLAorICAgICAgICB1bnNpZ25lZCBvZmZzZXQsIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyID0g
ZmFsc2UpOwogCiAgICAgLy8gSW4gc29tZSBjYXNlcyB5b3Ugd2FudCBhbiBPU1JFeGl0IHRvIGNv
bWUgaW50byBleGlzdGVuY2UsIGJ1dCB5b3UgZG9uJ3Qgd2FudCB0byBlbWl0IGl0IHJpZ2h0IG5v
dy4KICAgICAvLyBUaGlzIHdpbGwgZW1pdCB0aGUgT1NSIGV4aXQgaW4gYSBsYXRlIHBhdGguIFlv
dSBjYW4ndCBiZSBzdXJlIGV4YWN0bHkgd2hlbiB0aGF0IHdpbGwgaGFwcGVuLCBidXQKQEAgLTEx
NiwxNiArMTIxLDE5IEBAIHN0cnVjdCBPU1JFeGl0RGVzY3JpcHRvciB7CiAgICAgLy8gaGF2ZSBh
IHBsYWNlIHRvIGp1bXAgdG8gZm9yIE9TUiBleGl0LiBJdCBkb2Vzbid0IGNhcmUgd2hlcmUgdGhh
dCBPU1IgZXhpdCBpcyBlbWl0dGVkIHNvIGxvbmcgYXMgaXQKICAgICAvLyBldmVudHVhbGx5IGdl
dHMgYWNjZXNzIHRvIGl0cyBsYWJlbC4KICAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gZW1pdE9T
UkV4aXRMYXRlcigKLSAgICAgICAgU3RhdGUmLCBPU1JFeGl0RGVzY3JpcHRvckltcGwqLCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICAg
ICAgU3RhdGUmLCBFeGl0S2luZCwgY29uc3QgTm9kZU9yaWdpbiYsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmLCB1bnNpZ25lZCBvZmZzZXQsCisgICAgICAgIGJvb2wgaXNFeGNl
cHRpb25IYW5kbGVyID0gZmFsc2UpOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgbG93LWxldmVsIGlu
dGVyZmFjZS4gSXQgd2lsbCBjcmVhdGUgYSBoYW5kbGUgcmVwcmVzZW50aW5nIHRoZSBkZXNpcmUg
dG8gZW1pdCBjb2RlIGZvcgogICAgIC8vIGFuIE9TUiBleGl0LiBZb3UgY2FuIGNhbGwgT1NSRXhp
dEhhbmRsZTo6ZW1pdEV4aXRUaHVuaygpIG9uY2UgeW91IGhhdmUgYSBwbGFjZSB0byBlbWl0IGl0
LiBOb3RlCiAgICAgLy8gdGhhdCB0aGUgYWJvdmUgdHdvIEFQSXMgYXJlIHdyaXR0ZW4gaW4gdGVy
bXMgb2YgdGhpcyBhbmQgT1NSRXhpdEhhbmRsZTo6ZW1pdEV4aXRUaHVuaygpLgogICAgIFJlZlB0
cjxPU1JFeGl0SGFuZGxlPiBwcmVwYXJlT1NSRXhpdEhhbmRsZSgKLSAgICAgICAgU3RhdGUmLCBP
U1JFeGl0RGVzY3JpcHRvckltcGwqLCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICAgICAgU3RhdGUmLCBFeGl0S2luZCwgY29uc3QgTm9k
ZU9yaWdpbiYsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLCB1bnNpZ25lZCBv
ZmZzZXQsCisgICAgICAgIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyID0gZmFsc2UpOwogI2VuZGlm
IC8vIEZUTF9VU0VTX0IzCiB9OwogCisjaWYgIUZUTF9VU0VTX0IzCiBzdHJ1Y3QgT1NSRXhpdERl
c2NyaXB0b3JJbXBsIHsKICAgICBPU1JFeGl0RGVzY3JpcHRvckltcGwoRXhpdEtpbmQga2luZCwg
Q29kZU9yaWdpbiBleGl0T3JpZ2luLCBDb2RlT3JpZ2luIGZvckV4aXRQcm9maWxlLCBFeGNlcHRp
b25UeXBlIGV4Y2VwdGlvblR5cGUpCiAgICAgICAgIDogbV9raW5kKGtpbmQpCkBAIC0xNDIsMTMg
KzE1MCwxNiBAQCBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3JJbXBsIHsKICAgICBDb2RlT3JpZ2lu
IG1fc2VtYW50aWNDb2RlT3JpZ2luRm9yQ2FsbEZyYW1lSGVhZGVyOwogICAgIEhhbmRsZXJJbmZv
IG1fYmFzZWxpbmVFeGNlcHRpb25IYW5kbGVyOwogfTsKKyNlbmRpZiAvLyAhRlRMX1VTRVNfQjMK
IAogc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgREZHOjpPU1JFeGl0QmFzZSB7CiAgICAgT1NSRXhp
dCgKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqLCBPU1JFeGl0RGVzY3JpcHRvckltcGwmCi0j
aWYgIUZUTF9VU0VTX0IzCi0gICAgICAgICwgdWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleAot
I2VuZGlmIC8vICFGVExfVVNFU19CMworICAgICAgICBPU1JFeGl0RGVzY3JpcHRvciosCisjaWYg
RlRMX1VTRVNfQjMKKyAgICAgICAgRXhpdEtpbmQsIENvZGVPcmlnaW4sIENvZGVPcmlnaW4gY29k
ZU9yaWdpbkZvckV4aXRQcm9maWxlLCBib29sIGlzRXhjZXB0aW9uSGFuZGxlcgorI2Vsc2UgLy8g
RlRMX1VTRVNfQjMKKyAgICAgICAgT1NSRXhpdERlc2NyaXB0b3JJbXBsJiwgdWludDMyX3Qgc3Rh
Y2ttYXBSZWNvcmRJbmRleAorI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgICk7CiAKICAg
ICBPU1JFeGl0RGVzY3JpcHRvciogbV9kZXNjcmlwdG9yOwpAQCAtMTYyLDggKzE3Myw4IEBAIHN0
cnVjdCBPU1JFeGl0IDogcHVibGljIERGRzo6T1NSRXhpdEJhc2UKICAgICB1bnNpZ25lZCBtX3Bh
dGNoYWJsZUNvZGVPZmZzZXQ7CiAgICAgLy8gT2Zmc2V0IHdpdGhpbiBTdGFja21hcDo6cmVjb3Jk
cwogICAgIHVpbnQzMl90IG1fc3RhY2ttYXBSZWNvcmRJbmRleDsKLSNlbmRpZiAvLyBGVExfVVNF
U19CMwogICAgIEV4Y2VwdGlvblR5cGUgbV9leGNlcHRpb25UeXBlOworI2VuZGlmIC8vIEZUTF9V
U0VTX0IzCiAKICAgICBSZWdpc3RlclNldCByZWdpc3RlcnNUb1ByZXNlcnZlRm9yQ2FsbFRoYXRN
aWdodFRocm93OwogCkBAIC0xNzcsMTIgKzE4OCwxMiBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1Ymxp
YyBERkc6Ok9TUkV4aXRCYXNlCiAgICAgdm9pZCBnYXRoZXJSZWdpc3RlcnNUb1NwaWxsRm9yQ2Fs
bElmRXhjZXB0aW9uKFN0YWNrTWFwcyYsIFN0YWNrTWFwczo6UmVjb3JkJik7CiAgICAgdm9pZCBz
cGlsbFJlZ2lzdGVyc1RvU3BpbGxTbG90KENDYWxsSGVscGVycyYsIGludDMyX3Qgc3RhY2tTcGls
bFNsb3QpOwogICAgIHZvaWQgcmVjb3ZlclJlZ2lzdGVyc0Zyb21TcGlsbFNsb3QoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGludDMyX3Qgc3RhY2tTcGlsbFNsb3QpOwotI2VuZGlmIC8vICFGVExfVVNFU19C
MwogCiAgICAgYm9vbCB3aWxsQXJyaXZlQXRPU1JFeGl0RnJvbUdlbmVyaWNVbndpbmQoKSBjb25z
dDsKICAgICBib29sIHdpbGxBcnJpdmVBdEV4aXRGcm9tSW5kaXJlY3RFeGNlcHRpb25DaGVjaygp
IGNvbnN0OwogICAgIGJvb2wgd2lsbEFycml2ZUF0T1NSRXhpdEZyb21DYWxsT3BlcmF0aW9uKCkg
Y29uc3Q7CiAgICAgYm9vbCBuZWVkc1JlZ2lzdGVyUmVjb3ZlcnlPbkdlbmVyaWNVbndpbmRPU1JF
eGl0UGF0aCgpIGNvbnN0OworI2VuZGlmIC8vICFGVExfVVNFU19CMwogfTsKIAogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxOTM1MzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3
ICsxMDEsOSBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPEpTVGFpbENhbGw+IGpzVGFpbENhbGxzOwog
ICAgIFZlY3RvcjxDU3RyaW5nPiBjb2RlU2VjdGlvbk5hbWVzOwogICAgIFZlY3RvcjxDU3RyaW5n
PiBkYXRhU2VjdGlvbk5hbWVzOworI2lmICFGVExfVVNFU19CMwogICAgIFNlZ21lbnRlZFZlY3Rv
cjxPU1JFeGl0RGVzY3JpcHRvckltcGw+IG9zckV4aXREZXNjcmlwdG9ySW1wbHM7CisjZW5kaWYg
Ly8gIUZUTF9VU0VTX0IzCiAgICAgdm9pZCogdW53aW5kRGF0YVNlY3Rpb247CiAgICAgc2l6ZV90
IHVud2luZERhdGFTZWN0aW9uU2l6ZTsKICAgICBSZWZQdHI8RGF0YVNlY3Rpb24+IHN0YWNrbWFw
c1NlY3Rpb247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266732</attachid>
            <date>2015-12-06 11:13:48 -0800</date>
            <delta_ts>2015-12-06 12:53:44 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>77376</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTM1MzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzA0LDYgKzMwNCw4IEBACiAJCTBGMzM4RTFDMUJGMjg2
RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxODFCRjI4NkVBMDAxM0M4OEYgLyogQjNC
bG9ja0luc2VydGlvblNldC5oICovOyB9OwogCQkwRjMzOEUxRDFCRjI4NkVBMDAxM0M4OEYgLyog
QjNMb3dlck1hY3Jvcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjMzOEUxOTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAgKi87
IH07CiAJCTBGMzM4RTFFMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxQTFCRjI4NkVB
MDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oICovOyB9OworCQkwRjMzRkNGNzFDMTM2RTI1MDAz
MjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzM0ZDRjUxQzEzNkUyNTAwMzIzRjY3IC8q
IEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcCAqLzsgfTsKKwkJMEYzM0ZDRjgxQzEzNkUy
NTAwMzIzRjY3IC8qIEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzRkNGNjFDMTM2RTI1MDAzMjNGNjcg
LyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCAqLzsgfTsKIAkJMEYzNEIxNDkxNkQ0MjAx
MDAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQu
Y3BwICovOyB9OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDgxNkQ0
MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgfTsKIAkJMEYzNzMwOEMxQzBCRDI5MTAw
MDUyQkZBIC8qIEIzUGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzNzMwOEExQzBCRDI5MTAwMDUyQkZBIC8qIEIzUGhpQ2hpbGRy
ZW4uY3BwICovOyB9OwpAQCAtMjQwMCw2ICsyNDAyLDggQEAKIAkJMEYzMzhFMTgxQkYyODZFQTAw
MTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNCbG9ja0luc2VydGlvblNldC5oOyBwYXRoID0gYjMvQjNCbG9ja0luc2VydGlv
blNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMzOEUxOTFCRjI4NkVBMDAx
M0M4OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0xvd2VyTWFjcm9zLmNwcDsgcGF0aCA9IGIzL0IzTG93ZXJNYWNyb3MuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMzOEUxQTFCRjI4NkVBMDAxM0M4OEYgLyog
QjNMb3dlck1hY3Jvcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0xvd2Vy
TWFjcm9zLmg7IHBhdGggPSBiMy9CM0xvd2VyTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMzNGQ0Y1MUMxMzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcy5jcHA7IHBhdGggPSBiMy9CM1N0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzNGQ0Y2MUMxMzZFMjUw
MDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oOyBwYXRoID0gYjMv
QjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZH
VXNlS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ4MTZENDIw
MEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMzczMDhBMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVu
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGhpQ2hpbGRyZW4u
Y3BwOyBwYXRoID0gYjMvQjNQaGlDaGlsZHJlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC00NjI5LDYgKzQ2MzMsOCBAQAogCQkJCTBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLywKIAkJCQkwRkVDODVCNzFCRTE0NjJGMDA4MEZGNzQg
LyogQjNSZWR1Y2VTdHJlbmd0aC5jcHAgKi8sCiAJCQkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0
IC8qIEIzUmVkdWNlU3RyZW5ndGguaCAqLywKKwkJCQkwRjMzRkNGNTFDMTM2RTI1MDAzMjNGNjcg
LyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwICovLAorCQkJCTBGMzNGQ0Y2MUMxMzZF
MjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oICovLAogCQkJCTBGRUM4
NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8sCiAJCQkJMEZF
Qzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggKi8sCiAJCQkJMEYz
MzhERUYxQkU5M0FEMTAwMTNDODhGIC8qIEIzU3RhY2ttYXBWYWx1ZS5jcHAgKi8sCkBAIC02OTc2
LDYgKzY5ODIsNyBAQAogCQkJCTBGRDNFNDAyMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk5OEVENjc1MUJFRDc2OEMwMEREODAxNyAvKiBSZW1vdGVD
b250cm9sbGFibGVUYXJnZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMzNGQ0Y4MUMxMzZFMjUw
MDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRkI5MjE4MTZEMDJFQjIwMDU1QTVEQiAvKiBERkdBbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ2MTUzNENCQUYwMDBGOTQ1NiAvKiBERkdBcmd1bWVu
dFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTg0OTMsNiArODUwMCw3IEBACiAJCQkJMEY4
Rjk0M0MxNjY3NjMxMzAwRDYxOTcxIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMxMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21tb25JZGVu
dGlmaWVycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjMzRkNGNzFDMTM2RTI1MDAzMjNGNjcg
LyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcw
OUYyRjIxN0EwQUMyQTAwNTEyRTk4IC8qIENvbW1vblNsb3dQYXRocy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk2NTUzQTMzMTE3QTFGMUVFMDA4Q0Y2RjMgLyogQ29tbW9uU2xvd1BhdGhzRXhjZXB0
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0U1QTNBNzE3OTc0MzJEMDBFODkzQzAgLyog
Q29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5MzUzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWlyR2Vu
ZXJhdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUg
IkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0yMDgsMTMgKzIwOSw3IEBA
IENDYWxsSGVscGVyczo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXQKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7Ci0gICAgICAgICAgICAg
ICAgcGFyYW1zLnZhbHVlID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnJlcHMgPSBy
ZXBzOwotICAgICAgICAgICAgICAgIHBhcmFtcy51c2VkUmVnaXN0ZXJzID0gdmFsdWUtPm1fdXNl
ZFJlZ2lzdGVyczsKLSAgICAgICAgICAgICAgICBwYXJhbXMuY29udGV4dCA9ICZjb250ZXh0Owot
Ci0gICAgICAgICAgICAgICAgdmFsdWUtPm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBwYXJhbXMpOwor
ICAgICAgICAgICAgICAgIHZhbHVlLT5tX2dlbmVyYXRvci0+cnVuKGppdCwgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zKHZhbHVlLCByZXBzLCBjb250ZXh0KSk7CiAgICAgICAgICAgICB9KSk7CiAK
ICAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7IC8vIEFzIGZhciBhcyBBaXIgdGhpbmtz
LCB3ZSBhcmUgbm90IGEgdGVybWluYWwuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQYXRjaHBvaW50U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTM1MzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWly
R2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cy5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgewpAQCAtMTA3LDEzICsxMDgsNyBAQCBDQ2FsbEhlbHBlcnM6Okp1bXAgUGF0Y2hw
b2ludFNwZWNpYWw6OmdlCiAgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5j
b2RlLCBpbnN0LmFyZ3Nbb2Zmc2V0KytdKSk7CiAgICAgYXBwZW5kUmVwc0ltcGwoY29udGV4dCwg
b2Zmc2V0LCBpbnN0LCByZXBzKTsKICAgICAKLSAgICBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMg
cGFyYW1zOwotICAgIHBhcmFtcy52YWx1ZSA9IHZhbHVlOwotICAgIHBhcmFtcy5yZXBzID0gcmVw
czsKLSAgICBwYXJhbXMudXNlZFJlZ2lzdGVycyA9IHZhbHVlLT5tX3VzZWRSZWdpc3RlcnM7Ci0g
ICAgcGFyYW1zLmNvbnRleHQgPSAmY29udGV4dDsKLQotICAgIHZhbHVlLT5tX2dlbmVyYXRvci0+
cnVuKGppdCwgcGFyYW1zKTsKKyAgICB2YWx1ZS0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyh2YWx1ZSwgcmVwcywgY29udGV4dCkpOwogCiAgICAgcmV0dXJu
IENDYWxsSGVscGVyczo6SnVtcCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAxOTM1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNiArMTQ4LDE2IEBA
IHZvaWQqIFByb2NlZHVyZTo6YWRkRGF0YVNlY3Rpb24oc2l6ZV90IHMKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCit1bnNpZ25lZCBQcm9jZWR1cmU6OmNhbGxBcmdBcmVhU2l6ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGNvZGUoKS5jYWxsQXJnQXJlYVNpemUoKTsKK30KKwordm9pZCBQcm9jZWR1
cmU6OnJlcXVlc3RDYWxsQXJnQXJlYVNpemUodW5zaWduZWQgc2l6ZSkKK3sKKyAgICBjb2RlKCku
cmVxdWVzdENhbGxBcmdBcmVhU2l6ZShzaXplKTsKK30KKwogdW5zaWduZWQgUHJvY2VkdXJlOjpm
cmFtZVNpemUoKSBjb25zdAogewogICAgIHJldHVybiBjb2RlKCkuZnJhbWVTaXplKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMTkzNTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIyMSw5ICsyMjEsMTQgQEAgcHVibGljOgogICAgIC8vIHRoYXQgQVBJLCB0aGVuIHlvdSBk
b24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMuCiAgICAgc3RkOjp1bmlxdWVfcHRyPE9wYXF1
ZUJ5cHJvZHVjdHM+IHJlbGVhc2VCeXByb2R1Y3RzKCkgeyByZXR1cm4gV1RGOjptb3ZlKG1fYnlw
cm9kdWN0cyk7IH0KIAorICAgIC8vIFRoaXMgZ2l2ZXMgeW91IGRpcmVjdCBhY2Nlc3MgdG8gQ29k
ZS4gSG93ZXZlciwgdGhlIGlkZWEgaXMgdGhhdCBjbGllbnRzIG9mIEIzIHNob3VsZG4ndCBoYXZl
IHRvCisgICAgLy8gY2FsbCB0aGlzLiBTbywgUHJvY2VkdXJlIGhhcyBzb21lIG1ldGhvZHMgKGJl
bG93KSB0aGF0IGV4cG9zZSBzb21lIEFpcjo6Q29kZSBmdW5jdGlvbmFsaXR5LgogICAgIGNvbnN0
IEFpcjo6Q29kZSYgY29kZSgpIGNvbnN0IHsgcmV0dXJuICptX2NvZGU7IH0KICAgICBBaXI6OkNv
ZGUmIGNvZGUoKSB7IHJldHVybiAqbV9jb2RlOyB9CiAKKyAgICB1bnNpZ25lZCBjYWxsQXJnQXJl
YVNpemUoKSBjb25zdDsKKyAgICB2b2lkIHJlcXVlc3RDYWxsQXJnQXJlYVNpemUodW5zaWduZWQg
c2l6ZSk7CisKICAgICBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBmcmFtZVNpemUoKSBjb25z
dDsKICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgY2FsbGVlU2F2ZVJlZ2lzdGVycygp
IGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29k
ZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiQjNTdGFj
a21hcFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBu
YW1lc3BhY2UgQWlyOworCitjb25zdCBSZWdpc3RlclNldCYgU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zOjp1c2VkUmVnaXN0ZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92YWx1ZS0+bV91c2Vk
UmVnaXN0ZXJzOworfQorCitQcm9jZWR1cmUmIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczo6cHJv
YygpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC5jb2RlLT5wcm9jKCk7Cit9CisKK1N0YWNrbWFw
R2VuZXJhdGlvblBhcmFtczo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zKAorICAgIFN0YWNrbWFw
VmFsdWUqIHZhbHVlLCBjb25zdCBWZWN0b3I8VmFsdWVSZXA+JiByZXBzLCBBaXI6OkdlbmVyYXRp
b25Db250ZXh0JiBjb250ZXh0KQorICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICAsIG1fcmVwcyhy
ZXBzKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCit7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja21hcEdlbmVy
YXRpb25QYXJhbXNfaAorI2RlZmluZSBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtc19oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorI2luY2x1ZGUgIlJl
Z2lzdGVyU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBD
aGVja1NwZWNpYWw7CitjbGFzcyBQYXRjaHBvaW50U3BlY2lhbDsKK2NsYXNzIFByb2NlZHVyZTsK
K2NsYXNzIFN0YWNrbWFwVmFsdWU7CituYW1lc3BhY2UgQWlyIHsKK3N0cnVjdCBHZW5lcmF0aW9u
Q29udGV4dDsKK30gLy8gbmFtZXNwYWNlIEFpcgorCitjbGFzcyBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMgeworcHVibGljOgorICAgIC8vIFRoaXMgaXMgdGhlIHN0YWNrbWFwIHZhbHVlIHRoYXQg
d2UncmUgZ2VuZXJhdGluZy4KKyAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICAvLyBUaGlzIHRlbGxzIHlvdSB0aGUgYWN0dWFsIHZh
bHVlIHJlcHJlc2VudGF0aW9ucyB0aGF0IHdlcmUgY2hvc2VuLiBUaGlzIGlzIHVzdWFsbHkgZGlm
ZmVyZW50CisgICAgLy8gZnJvbSB0aGUgY29uc3RyYWludHMgd2Ugc3VwcGxpZWQuCisgICAgY29u
c3QgVmVjdG9yPFZhbHVlUmVwPiYgcmVwcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwczsgfTsKKwor
ICAgIC8vIFVzdWFsbHkgd2Ugd2lzaCB0byBhY2Nlc3MgdGhlIHJlcHMuIFdlIG1ha2UgdGhpcyBl
YXN5IGJ5IG1ha2luZyBvdXJzZWx2ZXMgYXBwZWFyIHRvIGJlIGEKKyAgICAvLyBjb2xsZWN0aW9u
IG9mIHJlcHMuCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwcy5zaXpl
KCk7IH0KKyAgICBjb25zdCBWYWx1ZVJlcCYgYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVwc1tpbmRleF07IH0KKyAgICBjb25zdCBWYWx1ZVJlcCYgb3BlcmF0b3JbXSh1bnNp
Z25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgVmVjdG9yPFZhbHVl
UmVwPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3JlcHMuYmVnaW4o
KTsgfQorICAgIFZlY3RvcjxWYWx1ZVJlcD46OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVwcy5lbmQoKTsgfQorICAgIAorICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSBy
ZWdpc3RlcnMgdGhhdCB3ZXJlIHVzZWQuCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdp
c3RlcnMoKSBjb25zdDsKKworICAgIC8vIFRoaXMgaXMgcHJvdmlkZWQgZm9yIGNvbnZlbmllbmNl
OyBpdCBtZWFucyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGNhcHR1cmUgaXQgaWYgeW91IGRvbid0
IHdhbnQgdG8uCisgICAgUHJvY2VkdXJlJiBwcm9jKCk7CisgICAgCisgICAgLy8gVGhlIEFpcjo6
R2VuZXJhdGlvbkNvbnRleHQgZ2l2ZXMgeW91IGV2ZW4gbW9yZSBwb3dlci4KKyAgICBBaXI6Okdl
bmVyYXRpb25Db250ZXh0JiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9OworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDaGVja1NwZWNpYWw7CisgICAgZnJpZW5kIGNsYXNzIFBh
dGNocG9pbnRTcGVjaWFsOworICAgIAorICAgIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyhTdGFj
a21hcFZhbHVlKiwgY29uc3QgVmVjdG9yPFZhbHVlUmVwPiYgcmVwcywgQWlyOjpHZW5lcmF0aW9u
Q29udGV4dCYpOworCisgICAgU3RhY2ttYXBWYWx1ZSogbV92YWx1ZTsKKyAgICBWZWN0b3I8VmFs
dWVSZXA+IG1fcmVwczsKKyAgICBBaXI6OkdlbmVyYXRpb25Db250ZXh0JiBtX2NvbnRleHQ7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHJldmlzaW9uIDE5MzUzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsMjYgKzM3LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CiAKLWNsYXNzIFN0YWNrbWFwVmFsdWU7Ci0KLW5hbWVzcGFjZSBBaXIgewotc3RydWN0IEdlbmVy
YXRpb25Db250ZXh0OwotfQotCi1zdHJ1Y3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zIHsKLSAg
ICAvLyBUaGlzIGlzIHRoZSBzdGFja21hcCB2YWx1ZSB0aGF0IHdlJ3JlIGdlbmVyYXRpbmcuCi0g
ICAgU3RhY2ttYXBWYWx1ZSogdmFsdWU7Ci0gICAgCi0gICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhl
IGFjdHVhbCB2YWx1ZSByZXByZXNlbnRhdGlvbnMgdGhhdCB3ZXJlIGNob3Nlbi4gVGhpcyBpcyB1
c3VhbGx5IGRpZmZlcmVudAotICAgIC8vIGZyb20gdGhlIGNvbnN0cmFpbnRzIHdlIHN1cHBsaWVk
LgotICAgIFZlY3RvcjxWYWx1ZVJlcD4gcmVwczsKLSAgICAKLSAgICAvLyBUaGlzIHRlbGxzIHlv
dSB0aGUgcmVnaXN0ZXJzIHRoYXQgd2VyZSB1c2VkLgotICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdp
c3RlcnM7Ci0KLSAgICAvLyBUaGUgQWlyOjpHZW5lcmF0aW9uQ29udGV4dCBnaXZlcyB5b3UgZXZl
biBtb3JlIHBvd2VyLgotICAgIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQqIGNvbnRleHQ7Ci19Owor
Y2xhc3MgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOwogCiB0eXBlZGVmIHZvaWQgU3RhY2ttYXBH
ZW5lcmF0b3JGdW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKTsKIHR5cGVkZWYgU2hhcmVkVGFzazxTdGFja21hcEdlbmVyYXRvckZ1bmN0aW9uPiBT
dGFja21hcEdlbmVyYXRvcjsKQEAgLTg0LDYgKzY1LDEzIEBAIHB1YmxpYzoKICAgICAvLyBjaGls
ZHJlbigpLmFwcGVuZCgpLiBUaGF0IHdpbGwgd29yayBmaW5lLCBidXQgaXQncyBub3QgcmVjb21t
ZW5kZWQuCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgQ29uc3RyYWluZWRWYWx1ZSYpOwogCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KKyAgICB2b2lkIGFwcGVuZFZlY3Rvcihjb25z
dCBWZWN0b3JUeXBlJiB2ZWN0b3IpCisgICAgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHZh
bHVlIDogdmVjdG9yKQorICAgICAgICAgICAgYXBwZW5kKHZhbHVlKTsKKyAgICB9CisKICAgICAv
LyBIZWxwZXIgZm9yIGFwcGVuZGluZyBjb2xkIGFueSdzLiBUaGlzIG9mdGVuIHVzZWQgYnkgY2xp
ZW50cyB0byBpbXBsZW1lbnQgT1NSLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+
CiAgICAgdm9pZCBhcHBlbmRDb2xkQW55cyhjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpCkBAIC0y
ODUsNiArMjczLDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ2hl
Y2tTcGVjaWFsOwogICAgIGZyaWVuZCBjbGFzcyBQYXRjaHBvaW50U3BlY2lhbDsKKyAgICBmcmll
bmQgY2xhc3MgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOwogICAgIGZyaWVuZCBjbGFzcyBTdGFj
a21hcFNwZWNpYWw7CiAgICAgCiAgICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlzaW9uIDE5MzUzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDcgKzMwLDkgQEAKIAogI2luY2x1ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRlICJHUFJJbmZvLmgi
CisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlJlZy5oIgorI2luY2x1ZGUgIlZp
cnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKQEAgLTExNCw2ICsxMTYsMTEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFja0Fy
Z3VtZW50KFZpcnR1YWxSZWdpc3RlciByZWcpCisgICAgeworICAgICAgICByZXR1cm4gc3RhY2tB
cmd1bWVudChyZWcub2Zmc2V0KCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICB9CisK
ICAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoaW50NjRfdCB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIFZhbHVlUmVwIHJlc3VsdDsKQEAgLTIwMSw2ICsyMDgsMTggQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUoKSk7CiAgICAgfQogCisgICAgVmFs
dWVSZXAgd2l0aE9mZnNldChpbnRwdHJfdCBvZmZzZXQpCisgICAgeworICAgICAgICBzd2l0Y2gg
KGtpbmQoKSkgeworICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICAgICAgcmV0dXJuIHN0YWNr
KG9mZnNldEZyb21GUCgpICsgb2Zmc2V0KTsKKyAgICAgICAgY2FzZSBTdGFja0FyZ3VtZW50Ogor
ICAgICAgICAgICAgcmV0dXJuIHN0YWNrQXJndW1lbnQob2Zmc2V0RnJvbVNQKCkgKyBvZmZzZXQp
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9
CisgICAgfQorCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAko
cmV2aXNpb24gMTkzNTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJCM01lbW9yeVZhbHVl
LmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKICNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVl
LmgiCisjaW5jbHVkZSAiQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCIKICNpbmNsdWRlICJC
M1N3aXRjaFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKICNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgpAQCAtMzQxMywxMSArMzQxNCwxMSBAQCB2b2lkIHRlc3RTaW1wbGVQ
YXRjaHBvaW50KCkKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMyk7Ci0g
ICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENI
RUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJl
cHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtcy5yZXBzWzFdLmdw
cigpLCBwYXJhbXMucmVwc1syXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFt
c1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1sxXS5pc0dQUigpKTsKKyAg
ICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGFkZDMyKGpp
dCwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAg
ICAgICAgIH0pOwogICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVy
biwgT3JpZ2luKCksIHBhdGNocG9pbnQpOwogCkBAIC0zNDQwLDExICszNDQxLDExIEBAIHZvaWQg
dGVzdFNpbXBsZVBhdGNocG9pbnRXaXRob3V0T3VwdXRDbG8KICAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwcy5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5p
c0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwotICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHgwMGZmMDBmZiks
IHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKLSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDB4MDBmZjAwZmYpLCBwYXJhbXMucmVwc1sxXS5ncHIoKSk7CisgICAg
ICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDIpOworICAgICAgICAgICAgQ0hFQ0socGFy
YW1zWzBdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzFdLmlzR1BSKCkpOwor
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHgwMGZmMDBm
ZiksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigweDAwZmYwMGZmKSwgcGFyYW1zWzFdLmdwcigpKTsKICAgICAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4MDBmZjAwZmYpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoMHgwMGZmMDBmZiksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAgIH0p
OwpAQCAtMzQ4NSwxMiArMzQ4NiwxMiBAQCB2b2lkIHRlc3RTaW1wbGVQYXRjaHBvaW50V2l0aE91
cHV0Q2xvYmJlCiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
ewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDMpOwotICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwc1sxXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBz
WzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0Lm1vdmUocGFyYW1zLnJlcHNbMV0uZ3ByKCks
IHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKLSAgICAgICAgICAgIGppdC5hZGQ2NChwYXJhbXMucmVw
c1syXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1swXS5pc0dQUigpKTsK
KyAgICAgICAgICAgIENIRUNLKHBhcmFtc1sxXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKHBhcmFtc1sxXS5ncHIo
KSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgICAgIGppdC5hZGQ2NChwYXJhbXNbMl0uZ3By
KCksIHBhcmFtc1swXS5ncHIoKSk7CiAKICAgICAgICAgICAgIGNsb2JiZXJBbGwuZm9yRWFjaChb
Jl0gKFJlZyByZWcpIHsKICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigweDAwZmYwMGZmKSwgcmVnLmdwcigpKTsKQEAgLTM1MjAsMTEgKzM1MjEsMTEg
QEAgdm9pZCB0ZXN0U2ltcGxlUGF0Y2hwb2ludFdpdGhvdXRPdXB1dENsbwogICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENI
RUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAyKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzWzBdLmlzRlBSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNGUFIo
KSk7Ci0gICAgICAgICAgICBqaXQubW92ZVplcm9Ub0RvdWJsZShwYXJhbXMucmVwc1swXS5mcHIo
KSk7Ci0gICAgICAgICAgICBqaXQubW92ZVplcm9Ub0RvdWJsZShwYXJhbXMucmVwc1sxXS5mcHIo
KSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDIpOworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zWzBdLmlzRlBSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzFdLmlz
RlBSKCkpOworICAgICAgICAgICAgaml0Lm1vdmVaZXJvVG9Eb3VibGUocGFyYW1zWzBdLmZwcigp
KTsKKyAgICAgICAgICAgIGppdC5tb3ZlWmVyb1RvRG91YmxlKHBhcmFtc1sxXS5mcHIoKSk7CiAg
ICAgICAgICAgICBqaXQubW92ZVplcm9Ub0RvdWJsZShGUFJJbmZvOjphcmd1bWVudEZQUjApOwog
ICAgICAgICAgICAgaml0Lm1vdmVaZXJvVG9Eb3VibGUoRlBSSW5mbzo6YXJndW1lbnRGUFIxKTsK
ICAgICAgICAgfSk7CkBAIC0zNTU4LDExICszNTU5LDExIEBAIHZvaWQgdGVzdFNpbXBsZVBhdGNo
cG9pbnRXaXRoT3VwdXRDbG9iYmUKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAg
ICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
YWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkg
PT0gMyk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0ZQUigpKTsKLSAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzRlBSKCkpOwotICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHNbMl0uaXNGUFIoKSk7Ci0gICAgICAgICAgICBqaXQuYWRkRG91YmxlKHBhcmFt
cy5yZXBzWzFdLmZwcigpLCBwYXJhbXMucmVwc1syXS5mcHIoKSwgcGFyYW1zLnJlcHNbMF0uZnBy
KCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAg
IENIRUNLKHBhcmFtc1swXS5pc0ZQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1sxXS5p
c0ZQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0ZQUigpKTsKKyAgICAgICAg
ICAgIGppdC5hZGREb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJhbXNbMl0uZnByKCksIHBhcmFt
c1swXS5mcHIoKSk7CiAKICAgICAgICAgICAgIGNsb2JiZXJBbGwuZm9yRWFjaChbJl0gKFJlZyBy
ZWcpIHsKICAgICAgICAgICAgICAgICBqaXQubW92ZVplcm9Ub0RvdWJsZShyZWcuZnByKCkpOwpA
QCAtMzU5MCwxMCArMzU5MSwxMCBAQCB2b2lkIHRlc3RQYXRjaHBvaW50V2l0aEVhcmx5Q2xvYmJl
cigpCiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJFYXJseShSZWdpc3RlclNldChyZWdpc3Rl
clRvQ2xvYmJlcikpOwogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICAg
ICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIENIRUNLKChwYXJhbXMucmVwc1sxXS5ncHIo
KSA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjApID09IGFyZzFJbkFyZ0dQUik7Ci0gICAgICAgICAg
ICAgICAgQ0hFQ0soKHBhcmFtcy5yZXBzWzJdLmdwcigpID09IEdQUkluZm86OmFyZ3VtZW50R1BS
MSkgPT0gYXJnMkluQXJnR1BSKTsKKyAgICAgICAgICAgICAgICBDSEVDSygocGFyYW1zWzFdLmdw
cigpID09IEdQUkluZm86OmFyZ3VtZW50R1BSMCkgPT0gYXJnMUluQXJnR1BSKTsKKyAgICAgICAg
ICAgICAgICBDSEVDSygocGFyYW1zWzJdLmdwcigpID09IEdQUkluZm86OmFyZ3VtZW50R1BSMSkg
PT0gYXJnMkluQXJnR1BSKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhZGQz
MihqaXQsIHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJhbXMucmVwc1syXS5ncHIoKSwgcGFyYW1z
LnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAgIGFkZDMyKGppdCwgcGFyYW1zWzFdLmdw
cigpLCBwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgICAgICAgICB9KTsK
IAogICAgICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCBwYXRjaHBvaW50KTsKQEAgLTM2MTgsMTYgKzM2MTksMTYgQEAgdm9pZCB0ZXN0UGF0
Y2hwb2ludENhbGxBcmcoKQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAg
WyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAz
KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOwotICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNTdGFjaygpKTsKLSAgICAgICAgICAgIENIRUNLKHBh
cmFtcy5yZXBzWzJdLmlzU3RhY2soKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgp
ID09IDMpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlzR1BSKCkpOworICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zWzFdLmlzU3RhY2soKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNb
Ml0uaXNTdGFjaygpKTsKICAgICAgICAgICAgIGppdC5sb2FkMzIoCi0gICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBwYXJhbXMu
cmVwc1sxXS5vZmZzZXRGcm9tRlAoKSksCi0gICAgICAgICAgICAgICAgcGFyYW1zLnJlcHNbMF0u
Z3ByKCkpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgcGFyYW1zWzFdLm9mZnNldEZyb21GUCgpKSwKKyAgICAgICAgICAg
ICAgICBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICAgICAgaml0LmFkZDMyKAotICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
cGFyYW1zLnJlcHNbMl0ub2Zmc2V0RnJvbUZQKCkpLAotICAgICAgICAgICAgICAgIHBhcmFtcy5y
ZXBzWzBdLmdwcigpKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHBhcmFtc1syXS5vZmZzZXRGcm9tRlAoKSksCisgICAg
ICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpKTsKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7
CiAKQEAgLTM2NDYsMTEgKzM2NDcsMTEgQEAgdm9pZCB0ZXN0UGF0Y2hwb2ludEZpeGVkUmVnaXN0
ZXIoKQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKLSAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnJlcHNbMV0gPT0gVmFsdWVSZXAoR1BSSW5mbzo6cmVnVDApKTsKLSAgICAgICAgICAgIENI
RUNLKHBhcmFtcy5yZXBzWzJdID09IFZhbHVlUmVwKEdQUkluZm86OnJlZ1QxKSk7Ci0gICAgICAg
ICAgICBhZGQzMihqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgcGFyYW1zLnJl
cHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsKKyAg
ICAgICAgICAgIENIRUNLKHBhcmFtc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBh
cmFtc1sxXSA9PSBWYWx1ZVJlcChHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zWzJdID09IFZhbHVlUmVwKEdQUkluZm86OnJlZ1QxKSk7CisgICAgICAgICAgICBhZGQz
MihqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgcGFyYW1zWzBdLmdwcigpKTsK
ICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7CiAKQEAgLTM2NzAsMTEgKzM2NzEsMTEgQEAgdm9p
ZCB0ZXN0UGF0Y2hwb2ludEFueShWYWx1ZVJlcCByZXApCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAg
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
CiAgICAgICAgICAgICAvLyBXZSBzaG91bGRuJ3QgaGF2ZSBzcGlsbGVkIHRoZSBpbnB1dHMsIHNv
IHdlIGFzc2VydCB0aGF0IHRoZXkncmUgaW4gcmVnaXN0ZXJzLgotICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHMuc2l6ZSgpID09IDMpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNb
MF0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS5pc0dQUigpKTsK
LSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAg
YWRkMzIoaml0LCBwYXJhbXMucmVwc1sxXS5ncHIoKSwgcGFyYW1zLnJlcHNbMl0uZ3ByKCksIHBh
cmFtcy5yZXBzWzBdLmdwcigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0g
Myk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMF0uaXNHUFIoKSk7CisgICAgICAgICAgICBD
SEVDSyhwYXJhbXNbMV0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNH
UFIoKSk7CisgICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJd
LmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICB9KTsKICAgICByb290LT5hcHBlbmRO
ZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKIApA
QCAtMzcwNCwxNiArMzcwNSwxNiBAQCB2b2lkIHRlc3RQYXRjaHBvaW50TG90c09mTGF0ZUFueXMo
KQogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAgLy8gV2Ugc2hvdWxkbid0IGhh
dmUgc3BpbGxlZCB0aGUgaW5wdXRzLCBzbyB3ZSBhc3NlcnQgdGhhdCB0aGV5J3JlIGluIHJlZ2lz
dGVycy4KLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSB0aGluZ3Muc2l6
ZSgpICsgMSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKLSAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBwYXJhbXMu
cmVwc1swXS5ncHIoKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcGFy
YW1zLnJlcHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnJlcHNb
aV0uaXNHUFIoKSkgewotICAgICAgICAgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1tpXSAh
PSBwYXJhbXMucmVwc1swXSk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGQzMihwYXJhbXMu
cmVwc1tpXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnNpemUoKSA9PSB0aGluZ3Muc2l6ZSgpICsgMSk7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXNbMF0uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigwKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBwYXJhbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAo
cGFyYW1zW2ldLmlzR1BSKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ0hFQ0socGFyYW1zW2ld
ICE9IHBhcmFtc1swXSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGQzMihwYXJhbXNbaV0u
Z3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbaV0uaXNTdGFjaygpKTsKLSAgICAgICAg
ICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgcGFyYW1zLnJlcHNbaV0ub2Zmc2V0RnJvbUZQKCkpLCBwYXJhbXMucmVw
c1swXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgIENIRUNLKHBhcmFtc1tpXS5pc1N0YWNr
KCkpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBwYXJhbXNbaV0ub2Zmc2V0RnJvbUZQKCkpLCBw
YXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgfSk7CkBAIC0zNzM2LDE0ICszNzM3LDE0IEBAIHZvaWQgdGVzdFBhdGNocG9pbnRBbnlJbW0o
VmFsdWVSZXAgcmVwKQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsK
LSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOwotICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwc1syXS5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0u
dmFsdWUoKSA9PSA0Mik7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDMpOwor
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zWzFdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzQ29uc3Rh
bnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0udmFsdWUoKSA9PSA0Mik7CiAgICAg
ICAgICAgICBqaXQuYWRkMzIoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocGFyYW1zLnJlcHNbMl0udmFsdWUoKSkpLAotICAg
ICAgICAgICAgICAgIHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJhbXMucmVwc1swXS5ncHIoKSk7
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4ocGFyYW1zWzJdLnZhbHVlKCkpKSwKKyAgICAgICAgICAgICAgICBwYXJhbXNbMV0u
Z3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgICAgIH0pOwogICAgIHJvb3QtPmFwcGVuZE5l
dzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHBhdGNocG9pbnQpOwogCkBA
IC0zNzY1LDExICszNzY2LDExIEBAIHZvaWQgdGVzdFBhdGNocG9pbnRNYW55SW1tcygpCiAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnNCwgVmFsdWVSZXA6Oldhcm1B
bnkpKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxI
ZWxwZXJzJiwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzWzBdID09IFZhbHVlUmVwOjpjb25zdGFudCg0MikpOwotICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnJlcHNbMV0gPT0gVmFsdWVSZXA6OmNvbnN0YW50KDQzKSk7Ci0gICAgICAg
ICAgICBDSEVDSyhwYXJhbXMucmVwc1syXSA9PSBWYWx1ZVJlcDo6Y29uc3RhbnQoNDMwMDAwMDAw
MDAwMDBsbCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10gPT0gVmFsdWVSZXA6
OmNvbnN0YW50KGJpdHdpc2VfY2FzdDxpbnQ2NF90Pig0Mi41KSkpOworICAgICAgICAgICAgQ0hF
Q0socGFyYW1zLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1swXSA9PSBW
YWx1ZVJlcDo6Y29uc3RhbnQoNDIpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1sxXSA9PSBW
YWx1ZVJlcDo6Y29uc3RhbnQoNDMpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXSA9PSBW
YWx1ZVJlcDo6Y29uc3RhbnQoNDMwMDAwMDAwMDAwMDBsbCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zWzNdID09IFZhbHVlUmVwOjpjb25zdGFudChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oNDIu
NSkpKTsKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCiAg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCkBAIC0zNzkxLDExICszNzkyLDExIEBAIHZv
aWQgdGVzdFBhdGNocG9pbnRXaXRoUmVnaXN0ZXJSZXN1bHQoKQogICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBh
cmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBd
ID09IFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6bm9uQXJnR1BSMCkpOwotICAgICAgICAgICAgQ0hF
Q0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVw
c1syXS5pc0dQUigpKTsKLSAgICAgICAgICAgIGFkZDMyKGppdCwgcGFyYW1zLnJlcHNbMV0uZ3By
KCksIHBhcmFtcy5yZXBzWzJdLmdwcigpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMyk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNb
MF0gPT0gVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpub25BcmdHUFIwKSk7CisgICAgICAgICAgICBD
SEVDSyhwYXJhbXNbMV0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNH
UFIoKSk7CisgICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJd
LmdwcigpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7
CiAKQEAgLTM4MTYsMTIgKzM4MTcsMTIgQEAgdm9pZCB0ZXN0UGF0Y2hwb2ludFdpdGhTdGFja0Fy
Z3VtZW50UmVzdQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0
Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdID09IFZhbHVlUmVwOjpzdGFjaygtc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KHByb2MuZnJhbWVTaXplKCkpKSk7Ci0gICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwc1sxXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJd
LmlzR1BSKCkpOwotICAgICAgICAgICAgaml0LnN0b3JlMzIocGFyYW1zLnJlcHNbMV0uZ3ByKCks
IENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
LCAwKSk7Ci0gICAgICAgICAgICBqaXQuYWRkMzIocGFyYW1zLnJlcHNbMl0uZ3ByKCksIENDYWxs
SGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAwKSk7
CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDMpOworICAgICAgICAgICAgQ0hF
Q0socGFyYW1zWzBdID09IFZhbHVlUmVwOjpzdGFjaygtc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHBy
b2MuZnJhbWVTaXplKCkpKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMV0uaXNHUFIoKSk7
CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQu
c3RvcmUzMihwYXJhbXNbMV0uZ3ByKCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAwKSk7CisgICAgICAgICAgICBqaXQuYWRkMzIocGFy
YW1zWzJdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgMCkpOwogICAgICAgICB9KTsKICAgICByb290LT5hcHBlbmROZXc8Q29u
dHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKIApAQCAtMzg0
NCwxMyArMzg0NSwxMyBAQCB2b2lkIHRlc3RQYXRjaHBvaW50V2l0aEFueVJlc3VsdCgpCiAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDMpOwotICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHNbMF0uaXNTdGFjaygpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBz
WzFdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7
Ci0gICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJhbXMucmVw
c1syXS5ncHIoKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNp
emUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1swXS5pc1N0YWNrKCkpOworICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zWzFdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFy
YW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgYWRkMzIoaml0LCBwYXJhbXNbMV0uZ3ByKCks
IHBhcmFtc1syXS5ncHIoKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgaml0LmNvbnZl
cnRJbnQzMlRvRG91YmxlKEdQUkluZm86OnJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAg
ICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHBhcmFtcy5yZXBzWzBdLm9mZnNldEZy
b21GUCgpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBwYXJhbXNb
MF0ub2Zmc2V0RnJvbUZQKCkpKTsKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7CiAKQEAgLTM4
NjYsNyArMzg2Nyw3IEBAIHZvaWQgdGVzdFNpbXBsZUNoZWNrKCkKICAgICBjaGVjay0+c2V0R2Vu
ZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnJlcHMuc2l6ZSgpID09IDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAx
KTsKIAogICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHdvcmsgYmVjYXVzZSBhIGZ1
bmN0aW9uIHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBoYXZlIGNhbGxlZQogICAgICAgICAgICAg
Ly8gc2F2ZXMuCkBAIC0zODk4LDcgKzM4OTksNyBAQCB2b2lkIHRlc3RDaGVja0xlc3NUaGFuKCkK
ICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDEpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnNpemUoKSA9PSAxKTsKIAogICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlz
IHdvcmsgYmVjYXVzZSBhIGZ1bmN0aW9uIHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBoYXZlIGNh
bGxlZQogICAgICAgICAgICAgLy8gc2F2ZXMuCkBAIC0zOTQ0LDcgKzM5NDUsNyBAQCB2b2lkIHRl
c3RDaGVja01lZ2FDb21ibygpCiAgICAgY2hlY2stPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAxKTsK
KyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMSk7CiAKICAgICAgICAgICAgIC8v
IFRoaXMgc2hvdWxkIGFsd2F5cyB3b3JrIGJlY2F1c2UgYSBmdW5jdGlvbiB0aGlzIHNpbXBsZSBz
aG91bGQgbmV2ZXIgaGF2ZSBjYWxsZWUKICAgICAgICAgICAgIC8vIHNhdmVzLgpAQCAtMzk4NCwx
MSArMzk4NSwxMSBAQCB2b2lkIHRlc3RDaGVja0FkZEltbSgpCiAgICAgY2hlY2tBZGQtPnNldEdl
bmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5yZXBzLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlz
R1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXNDb25zdGFudCgpKTsK
LSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLnZhbHVlKCkgPT0gNDIpOwotICAgICAg
ICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJ
bmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gNCk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXNbM10uaXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1szXS52YWx1
ZSgpID09IDQyKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNb
Ml0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQz
MlRvRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQyKSwgRlBSSW5mbzo6ZnBSZWdU
MSk7CiAgICAgICAgICAgICBqaXQuYWRkRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86
OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC00
MDIwLDExICs0MDIxLDExIEBAIHZvaWQgdGVzdENoZWNrQWRkSW1tQ29tbXV0ZSgpCiAgICAgY2hl
Y2tBZGQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXND
b25zdGFudCgpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLnZhbHVlKCkgPT0g
NDIpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzJd
LmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXpl
KCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7CisgICAgICAg
ICAgICBDSEVDSyhwYXJhbXNbM10uaXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIENIRUNLKHBh
cmFtc1szXS52YWx1ZSgpID09IDQyKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0Rv
dWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0
LmNvbnZlcnRJbnQzMlRvRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQyKSwgRlBS
SW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuYWRkRG91YmxlKEZQUkluZm86OmZwUmVn
VDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7CkBAIC00MDU2LDExICs0MDU3LDExIEBAIHZvaWQgdGVzdENoZWNrQWRkSW1tU29tZVJl
Z2lzdGVyKCkKICAgICBjaGVja0FkZC0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewog
ICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChq
aXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOwotICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwc1szXS5pc0dQUigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0Rv
dWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAg
ICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbM10uZ3ByKCksIEZQUkluZm86
OmZwUmVnVDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSA0KTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFt
c1szXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJh
bXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZlcnRJ
bnQzMlRvRG91YmxlKHBhcmFtc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAg
ICAgICBqaXQuYWRkRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwog
ICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBqaXQu
cmV0KCk7CkBAIC00MDkzLDExICs0MDk0LDExIEBAIHZvaWQgdGVzdENoZWNrQWRkKCkKICAgICBj
aGVja0FkZC0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOwotICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS5p
c0dQUigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVw
c1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBqaXQuY29udmVydElu
dDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbM10uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOworICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBh
cmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1szXS5pc0dQUigpKTsK
KyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQ
UkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBh
cmFtc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuYWRkRG91
YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0
LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7CkBAIC00MTI2
LDExICs0MTI3LDExIEBAIHZvaWQgdGVzdENoZWNrQWRkNjQoKQogICAgIGNoZWNrQWRkLT5zZXRH
ZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5p
c0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkpOwotICAg
ICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0RvdWJsZShw
YXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBDSEVD
SyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BS
KCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzR1BSKCkpOworICAgICAgICAgICAg
aml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdU
MCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1zWzNdLmdwcigp
LCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5hZGREb3VibGUoRlBSSW5mbzo6
ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQyMDAsMTEgKzQyMDEsMTEg
QEAgdm9pZCB0ZXN0Q2hlY2tTdWJJbW0oKQogICAgIGNoZWNrU3ViLT5zZXRHZW5lcmF0b3IoCiAg
ICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXpl
KCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzQ29uc3RhbnQoKSk7Ci0gICAgICAgICAg
ICBDSEVDSyhwYXJhbXMucmVwc1szXS52YWx1ZSgpID09IDQyKTsKLSAgICAgICAgICAgIGppdC5j
b252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdU
MCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlz
Q29uc3RhbnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbM10udmFsdWUoKSA9PSA0Mik7
CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zWzJdLmdwcigpLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMig0MiksIEZQUkluZm86OmZwUmVnVDEpOwogICAgICAg
ICAgICAgaml0LnN1YkRvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsK
ICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtNDIzNywxMSArNDIz
OCwxMSBAQCB2b2lkIHRlc3RDaGVja1N1YkJhZEltbSgpCiAgICAgY2hlY2tTdWItPnNldEdlbmVy
YXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BS
KCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXNDb25zdGFudCgpKTsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLnZhbHVlKCkgPT0gYmFkSW1tKTsKLSAgICAg
ICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBS
SW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOwor
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zWzNdLmlzQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbM10udmFs
dWUoKSA9PSBiYWRJbW0pOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBh
cmFtc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuY29udmVy
dEludDMyVG9Eb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYmFkSW1tKSwgRlBSSW5m
bzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuc3ViRG91YmxlKEZQUkluZm86OmZwUmVnVDEs
IEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KCk7CkBAIC00Mjc1LDExICs0Mjc2LDExIEBAIHZvaWQgdGVzdENoZWNrU3ViKCkKICAgICBjaGVj
a1N1Yi0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS5pc0dQ
UigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1sy
XS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBqaXQuY29udmVydEludDMy
VG9Eb3VibGUocGFyYW1zLnJlcHNbM10uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOworICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFt
c1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1szXS5pc0dQUigpKTsKKyAg
ICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUklu
Zm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFt
c1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuc3ViRG91Ymxl
KEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7CkBAIC00MzEzLDEx
ICs0MzE0LDExIEBAIHZvaWQgdGVzdENoZWNrU3ViNjQoKQogICAgIGNoZWNrU3ViLT5zZXRHZW5l
cmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQ
UigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkpOwotICAgICAg
ICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJ
bmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0RvdWJsZShwYXJh
bXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkp
OworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzR1BSKCkpOworICAgICAgICAgICAgaml0
LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7
CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1zWzNdLmdwcigpLCBG
UFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5zdWJEb3VibGUoRlBSSW5mbzo6ZnBS
ZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQzODYsOSArNDM4Nyw5IEBAIHZv
aWQgdGVzdENoZWNrTmVnKCkKICAgICBjaGVja05lZy0+c2V0R2VuZXJhdG9yKAogICAgICAgICBb
Jl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDMp
OwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAg
ICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3ByKCksIEZQUkluZm86
OmZwUmVnVDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0
SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOwogICAgICAg
ICAgICAgaml0Lm5lZ2F0ZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1Qw
KTsKICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgICAgICAgICAg
aml0LnJldCgpOwpAQCAtNDQxNiw5ICs0NDE3LDkgQEAgdm9pZCB0ZXN0Q2hlY2tOZWc2NCgpCiAg
ICAgY2hlY2tOZWctPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKLSAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRv
RG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMyk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNb
Ml0uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1z
WzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5uZWdhdGVEb3Vi
bGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQu
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQ0NTEs
MTEgKzQ0NTIsMTEgQEAgdm9pZCB0ZXN0Q2hlY2tNdWwoKQogICAgIGNoZWNrTXVsLT5zZXRHZW5l
cmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQ
UigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkpOwotICAgICAg
ICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJ
bmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJh
bXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkp
OworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzR1BSKCkpOworICAgICAgICAgICAgaml0
LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7
CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zWzNdLmdwcigpLCBG
UFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5tdWxEb3VibGUoRlBSSW5mbzo6ZnBS
ZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQ0OTIsMTEgKzQ0OTMsMTEgQEAg
dm9pZCB0ZXN0Q2hlY2tNdWxNZW1vcnkoKQogICAgIGNoZWNrTXVsLT5zZXRHZW5lcmF0b3IoCiAg
ICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXpl
KCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0
LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJl
Z1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1sz
XS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6
ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzR1BSKCkpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJ
bnQzMlRvRG91YmxlKHBhcmFtc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAg
ICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zWzNdLmdwcigpLCBGUFJJbmZvOjpm
cFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5tdWxEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBS
SW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsK
ICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQ1MzgsMTEgKzQ1MzksMTEgQEAgdm9pZCB0ZXN0
Q2hlY2tNdWwyKCkKICAgICBjaGVja011bC0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
ewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOwotICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwc1szXS5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnJlcHNbM10udmFsdWUoKSA9PSAyKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0Rv
dWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAg
ICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJd
LmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzQ29uc3RhbnQoKSk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXNbM10udmFsdWUoKSA9PSAyKTsKKyAgICAgICAgICAgIGpp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDAp
OwogICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDIpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5tdWxEb3Vi
bGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQu
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTQ1NzIsMTEgKzQ1NzMsMTEgQEAgdm9pZCB0ZXN0
Q2hlY2tNdWw2NCgpCiAgICAgY2hlY2tNdWwtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0
Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hF
Q0socGFyYW1zLnJlcHNbM10uaXNHUFIoKSk7Ci0gICAgICAgICAgICBqaXQuY29udmVydEludDY0
VG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwotICAgICAg
ICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzNdLmdwcigpLCBGUFJJ
bmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gNCk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXNbM10uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUo
cGFyYW1zWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5jb252
ZXJ0SW50NjRUb0RvdWJsZShwYXJhbXNbM10uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOwogICAg
ICAgICAgICAgaml0Lm11bERvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1Qw
KTsKICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgICAgICAgICAg
aml0LnJldCgpOwpAQCAtNDY3NSw5ICs0Njc2LDkgQEAgdm9pZCBnZW5lcmljVGVzdENvbXBhcmUo
CiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgICAgIFsmXSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOwotICAgICAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAx
KTsKLSAgICAgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKLSAgICAg
ICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgcGFyYW1z
LnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0g
MSk7CisgICAgICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlzR1BSKCkpOworICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBwYXJhbXNbMF0u
Z3ByKCkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIHRoZW5DYXNlLT5hcHBlbmROZXc8Q29u
dHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxOTM1MzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw3ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIFdlIGFyZSBp
biB0aGUgbWlkZGxlIG9mIGFuIGV4cGVyaW1lbnRhbCB0cmFuc2l0aW9uIGZyb20gTExWTSB0byBC
MyBhcyB0aGUgYmFja2VuZCBmb3IgdGhlIEZUTC4gV2UgZG9uJ3QKIC8vIHlldCBrbm93IGhvdyBp
dCB3aWxsIHR1cm4gb3V0LiBGb3Igbm93LCB0aGlzIGZsYWcgd2lsbCBjb250cm9sIHdoZXRoZXIg
RlRMIHVzZXMgQjMuIFJlbWVtYmVyIHRvIHNldCB0aGlzCiAvLyB0byAwIGJlZm9yZSBjb21taXR0
aW5nIQotI2RlZmluZSBGVExfVVNFU19CMyAwCisjZGVmaW5lIEZUTF9VU0VTX0IzIDEKIAogc3Ry
dWN0IE5vZGU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAJ
KHJldmlzaW9uIDE5MzUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkZUTEpTQ2FsbC5oIgogCi0jaWYgRU5BQkxFKEZUTF9KSVQpCisjaWYgRU5B
QkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwogCiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2lu
Y2x1ZGUgIkZUTFN0YXRlLmgiCkBAIC02Myw1ICs2Myw1IEBAIHZvaWQgSlNDYWxsOjplbWl0KEND
YWxsSGVscGVycyYgaml0LCBTdGEKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCi0jZW5k
aWYgLy8gRU5BQkxFKEZUTF9KSVQpCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmICFGVExf
VVNFU19CMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmgJKHJldmlz
aW9uIDE5MzUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDkgQEAKICNpZm5kZWYgRlRMSlNDYWxsX2gKICNkZWZp
bmUgRlRMSlNDYWxsX2gKIAotI2lmIEVOQUJMRShGVExfSklUKQorI2luY2x1ZGUgIkRGR0NvbW1v
bi5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwogCiAjaW5jbHVkZSAi
RlRMSlNDYWxsQmFzZS5oIgogCkBAIC02MSw3ICs2Myw3IEBAIHB1YmxpYzoKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAogCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwogCiAjZW5kaWYgLy8gRlRMSlNDYWxsX2gK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCShy
ZXZpc2lvbiAxOTM1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRlRMSlNDYWxsQmFzZS5oIgogCi0jaWYgRU5BQkxFKEZUTF9KSVQpCisj
aWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwogCiAjaW5jbHVkZSAiREZHTm9kZS5o
IgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCkBAIC01NSwxMiArNTUsOCBAQCB2b2lkIEpTQ2FsbEJh
c2U6OmVtaXQoQ0NhbGxIZWxwZXJzJiBqaXQsCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoISFtX2Nh
bGxTaXRlSW5kZXgpOwogCi0jaWYgRlRMX1VTRVNfQjMKLSAgICBVTlVTRURfUEFSQU0ob3NyRXhp
dEZyb21HZW5lcmljVW53aW5kU3RhY2tTcGlsbFNsb3QpOwotI2Vsc2UgLy8gRlRMX1VTRVNfQjMK
ICAgICBpZiAobV9jb3JyZXNwb25kaW5nR2VuZXJpY1Vud2luZE9TUkV4aXQpCiAgICAgICAgIG1f
Y29ycmVzcG9uZGluZ0dlbmVyaWNVbndpbmRPU1JFeGl0LT5zcGlsbFJlZ2lzdGVyc1RvU3BpbGxT
bG90KGppdCwgb3NyRXhpdEZyb21HZW5lcmljVW53aW5kU3RhY2tTcGlsbFNsb3QpOwotI2VuZGlm
IC8vIEZUTF9VU0VTX0IzCiAKICAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihtX2NhbGxTaXRlSW5kZXguYml0cygpKSwgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwogCkBAIC0x
MDcsNSArMTAzLDUgQEAgdm9pZCBKU0NhbGxCYXNlOjpsaW5rKFZNJiB2bSwgTGlua0J1ZmZlcgog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
KyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VTX0IzCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5oCShyZXZpc2lvbiAxOTM1MzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNyArMjYsOSBAQAogI2lmbmRlZiBGVExKU0NhbGxCYXNlX2gKICNkZWZpbmUgRlRM
SlNDYWxsQmFzZV9oCiAKLSNpZiBFTkFCTEUoRlRMX0pJVCkKKyNpbmNsdWRlICJERkdDb21tb24u
aCIKKworI2lmIEVOQUJMRShGVExfSklUKSAmJiAhRlRMX1VTRVNfQjMKIAogI2luY2x1ZGUgIkND
YWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgpAQCAtNzMsNyArNzUsNyBA
QCBwdWJsaWM6CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAotI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQorI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAmJiAhRlRMX1VTRVNfQjMKIAog
I2VuZGlmIC8vIEZUTEpTQ2FsbEJhc2VfaAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5jcHAJKHJldmlzaW9uIDE5MzUzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGVExKU0Nh
bGxWYXJhcmdzLmgiCiAKLSNpZiBFTkFCTEUoRlRMX0pJVCkKKyNpZiBFTkFCTEUoRlRMX0pJVCkg
JiYgIUZUTF9VU0VTX0IzCiAKICNpbmNsdWRlICJERkdOb2RlLmgiCiAjaW5jbHVkZSAiREZHT3Bl
cmF0aW9ucy5oIgpAQCAtMjI1LDUgKzIyNSw1IEBAIHZvaWQgSlNDYWxsVmFyYXJnczo6bGluayhW
TSYgdm0sIExpbmtCdWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCi0jZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19C
MwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3Mu
aAkocmV2aXNpb24gMTkzNTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0Nh
bGxWYXJhcmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDkgQEAKICNpZm5kZWYgRlRM
SlNDYWxsVmFyYXJnc19oCiAjZGVmaW5lIEZUTEpTQ2FsbFZhcmFyZ3NfaAogCi0jaWYgRU5BQkxF
KEZUTF9KSVQpCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkg
JiYgIUZUTF9VU0VTX0IzCiAKICNpbmNsdWRlICJGVExKU0NhbGxCYXNlLmgiCiAKQEAgLTc1LDcg
Kzc3LDcgQEAgcHVibGljOgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKLSNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VT
X0IzCiAKICNlbmRpZiAvLyBGVExKU0NhbGxWYXJhcmdzX2gKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKU1RhaWxDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpTVGFpbENhbGwuY3BwCShyZXZpc2lvbiAxOTM1MzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTVGFpbENhbGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRlRMSlNU
YWlsQ2FsbC5oIgogCi0jaWYgRU5BQkxFKEZUTF9KSVQpCisjaWYgRU5BQkxFKEZUTF9KSVQpICYm
ICFGVExfVVNFU19CMwogCiAjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKICNpbmNsdWRl
ICJERkdOb2RlLmgiCkBAIC0zOCwyNyArMzgsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CiAKLXVzaW5nIG5hbWVzcGFjZSBCMzsKIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAK
LSNpZiBGVExfVVNFU19CMwotCi1KU1RhaWxDYWxsOjpKU1RhaWxDYWxsKFBhdGNocG9pbnRWYWx1
ZSogcGF0Y2hwb2ludCwgTm9kZSogbm9kZSwgY29uc3QgVmVjdG9yPEV4aXRWYWx1ZT4mIGFyZ3Vt
ZW50cykKLSAgICA6IEpTQ2FsbEJhc2UoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgbm9kZS0+b3Jp
Z2luLnNlbWFudGljLCBub2RlLT5vcmlnaW4uc2VtYW50aWMpCi0gICAgLCBtX3BhdGNocG9pbnQo
cGF0Y2hwb2ludCkKLSAgICAsIG1fYXJndW1lbnRzKGFyZ3VtZW50cykKLSAgICAsIG1faW5zdHJ1
Y3Rpb25PZmZzZXQoMCkKLXsKLSAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLX0KLQot
dm9pZCBKU1RhaWxDYWxsOjplbWl0KEpJVENvZGUmLCBDQ2FsbEhlbHBlcnMmKQotewotICAgIFVO
UkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotfQotCi0jZWxzZSAvLyBGVExfVVNFU19CMwotCiBu
YW1lc3BhY2UgewogCiBGVEw6OkxvY2F0aW9uIGdldFJlZ2lzdGVyV2l0aEFkZGVuZChjb25zdCBF
eGl0VmFsdWUmIHZhbHVlLCBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkLCBTdGFja01hcHMmIHN0
YWNrbWFwcykKQEAgLTM0Miw4ICszMjMsNiBAQCB2b2lkIEpTVGFpbENhbGw6OmVtaXQoSklUQ29k
ZSYgaml0Q29kZSwgCiAgICAgbV9jYWxsTGlua0luZm8tPnNldFVwQ2FsbChtX3R5cGUsIG1fc2Vt
YW50aWNlT3JpZ2luLCBjYWxsZWVHUFIpOwogfQogCi0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKLQog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKU1RhaWxDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKU1RhaWxDYWxsLmgJKHJldmlzaW9uIDE5MzUzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNUYWlsQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw3ICsyNiw5IEBACiAjaWZuZGVmIEZUTEpTVGFpbENhbGxfaAogI2RlZmluZSBGVExKU1Rh
aWxDYWxsX2gKIAotI2lmIEVOQUJMRShGVExfSklUKQorI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgor
CisjaWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwogCiAjaW5jbHVkZSAiQjNQYXRj
aHBvaW50VmFsdWUuaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKQEAgLTQ1LDIwICs0NywxMiBA
QCBuYW1lc3BhY2UgRlRMIHsKIGNsYXNzIEpTVGFpbENhbGwgOiBwdWJsaWMgSlNDYWxsQmFzZSB7
CiBwdWJsaWM6CiAgICAgSlNUYWlsQ2FsbCgKLSNpZiBGVExfVVNFU19CMwotICAgICAgICBCMzo6
UGF0Y2hwb2ludFZhbHVlKiwKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgIHVuc2lnbmVk
IHN0YWNrbWFwSUQsCi0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgREZHOjpOb2RlKiwg
Y29uc3QgVmVjdG9yPEV4aXRWYWx1ZT4mIGFyZ3VtZW50cyk7CiAKICAgICB2b2lkIGVtaXQoSklU
Q29kZSYsIENDYWxsSGVscGVycyYpOwogCi0jaWYgRlRMX1VTRVNfQjMKLSAgICBCMzo6UGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXRjaHBvaW50OyB9Ci0j
ZWxzZSAvLyBGVExfVVNFU19CMwogICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQoKSBjb25zdCB7IHJl
dHVybiBtX3N0YWNrbWFwSUQ7IH0KLSNlbmRpZiAvLyBGVExfVVNFU19CMwogCiAgICAgdW5zaWdu
ZWQgZXN0aW1hdGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXN0aW1hdGVkU2l6ZTsgfQogCkBA
IC03MCwxMSArNjQsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSNpZiBGVExf
VVNFU19CMwotICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIG1fcGF0Y2hwb2ludDsKLSNlbHNlIC8v
IEZUTF9VU0VTX0IzCiAgICAgdW5zaWduZWQgbV9zdGFja21hcElEOwotI2VuZGlmIC8vIEZUTF9V
U0VTX0IzCiAgICAgVmVjdG9yPEV4aXRWYWx1ZT4gbV9hcmd1bWVudHM7CiAgICAgdW5zaWduZWQg
bV9lc3RpbWF0ZWRTaXplOwogCkBAIC04NCw3ICs3NCw3IEBAIHB1YmxpYzoKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAogCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwogCiAjZW5kaWYgLy8gRlRMSlNUYWlsQ2Fs
bF9oCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCShyZXZpc2lvbiAxOTM1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
CiAjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCIKICNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgi
CkBAIC00ODI4LDE0ICs0ODI5LDEwOSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21waWxlQ2Fs
bE9yQ29uc3RydWN0KCkKICAgICB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CisgICAg
ICAgIGludCBudW1BcmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CisKKyAgICAgICAgTFZh
bHVlIGpzQ2FsbGVlID0gbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsK
KwogI2lmIEZUTF9VU0VTX0IzCi0gICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVk
KCkgfHwgIXZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgIENSQVNIKCk7
Ci0jZWxzZQotICAgICAgICBpbnQgbnVtQXJncyA9IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7
CisgICAgICAgIHVuc2lnbmVkIGZyYW1lU2l6ZSA9IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNp
emUgKyBudW1BcmdzOworICAgICAgICB1bnNpZ25lZCBhbGlnbmVkRnJhbWVTaXplID0gV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIGZyYW1lU2l6ZSk7
CisKKyAgICAgICAgLy8gSlMtPkpTIGNhbGxpbmcgY29udmVudGlvbiByZXF1aXJlcyB0aGF0IHRo
ZSBjYWxsZXIgYWxsb3dzIHRoaXMgbXVjaCBzcGFjZSBvbiB0b3Agb2Ygc3RhY2sgdG8KKyAgICAg
ICAgLy8gZ2V0IHRyYXNoZWQgYnkgdGhlIGNhbGxlZSwgZXZlbiBpZiBub3QgYWxsIG9mIHRoYXQg
c3BhY2UgaXMgdXNlZCB0byBwYXNzIGFyZ3VtZW50cy4gV2UgdGVsbAorICAgICAgICAvLyBCMyB0
aGlzIGV4cGxpY2l0bHkgZm9yIHR3byByZWFzb25zOgorICAgICAgICAvLworICAgICAgICAvLyAt
IFdlIHdpbGwgb25seSBwYXNzIGZyYW1lU2l6ZSB3b3J0aCBvZiBzdHVmZi4KKyAgICAgICAgLy8g
LSBUaGUgdHJhc2hlZCBzdGFjayBndWFyYW50ZWUgaXMgbG9naWNhbGx5IHNlcGFyYXRlIGZyb20g
dGhlIGFjdCBvZiBwYXNzaW5nIGFyZ3VtZW50cywgc28gd2UKKyAgICAgICAgLy8gICBzaG91bGRu
J3QgcmVseSBvbiBBaXIgdG8gaW5mZXIgdGhlIHRyYXNoZWQgc3RhY2sgcHJvcGVydHkgYmFzZWQg
b24gdGhlIGFyZ3VtZW50cyBpdCBlbmRzCisgICAgICAgIC8vICAgdXAgc2VlaW5nLgorICAgICAg
ICBtX3Byb2MucmVxdWVzdENhbGxBcmdBcmVhU2l6ZShhbGlnbmVkRnJhbWVTaXplKTsKKworICAg
ICAgICAvLyBDb2xsZWN0IHRoZSBhcmd1bWVudHMsIHNpbmNlIHRoaXMgY2FuIGdlbmVyYXRlIGNv
ZGUgYW5kIHdlIHdhbnQgdG8gZ2VuZXJhdGUgaXQgYmVmb3JlIHdlIGVtaXQKKyAgICAgICAgLy8g
dGhlIGNhbGwuCisgICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFZhbHVlPiBhcmd1bWVudHM7CisK
KyAgICAgICAgLy8gTWFrZSB0aGlzIGVhc3kgZm9yIG91cnNlbHZlcy4KKyAgICAgICAgYXV0byBh
ZGRBcmd1bWVudCA9IFsmXSAoTFZhbHVlIHZhbHVlLCBjb25zdCBWYWx1ZVJlcCYgcmVwKSB7Cisg
ICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUodmFsdWUsIHJlcCkp
OworICAgICAgICB9OworCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBjYWxsZWUgZ29l
cyBpbnRvIEdQUjAuCisgICAgICAgIGFkZEFyZ3VtZW50KGpzQ2FsbGVlLCBWYWx1ZVJlcDo6cmVn
KEdQUkluZm86OnJlZ1QwKSk7CisKKyAgICAgICAgLy8gTm93IHB1dCB0aGluZ3MgaW50byB0aGUg
c3RhY2suCisgICAgICAgIGFkZEFyZ3VtZW50KGpzQ2FsbGVlLCBWYWx1ZVJlcDo6c3RhY2tBcmd1
bWVudChWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSkpOworICAgICAgICBhZGRBcmd1
bWVudCgKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIobnVtQXJncyksCisgICAgICAgICAg
ICBWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1l
bnRDb3VudCkpLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKSB7CisgICAgICAgICAgICBhZGRBcmd1bWVudCgK
KyAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSAr
IGkpKSwKKyAgICAgICAgICAgICAgICBWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChpKSkpOworICAgICAgICB9CisKKyAgICAgICAgUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CisgICAgICAgIHBhdGNo
cG9pbnQtPmFwcGVuZFZlY3Rvcihhcmd1bWVudHMpOworICAgICAgICBwYXRjaHBvaW50LT5jbG9i
YmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNo
cG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2Fs
bCgpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpy
ZWcoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9y
aWdpbiA9IGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsKKyAgICAgICAgU3RhdGUq
IHN0YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigK
KyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4ID0gc3RhdGUtPmppdENvZGUtPmNvbW1vbi0+YWRkVW5pcXVlQ2FsbFNpdGVJbmRl
eChjb2RlT3JpZ2luKTsKKworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSB3ZXJlIGhh
bmRsaW5nIGV4Y2VwdGlvbnMsIHRoZW4gYXQgdGhpcyBwb2ludCB3ZSB3b3VsZCBhc2sgb3VyIGRl
c2NyaXB0b3IKKyAgICAgICAgICAgICAgICAvLyB0byBwcmVwYXJlIGFuZCB0aGVuIHdlIHdvdWxk
IG1vZGlmeSB0aGUgT1NSRXhpdCBkYXRhIHN0cnVjdHVyZSBpbnNpZGUgdGhlCisgICAgICAgICAg
ICAgICAgLy8gT1NSRXhpdEhhbmRsZSB0byBsaW5rIGl0IHVwIHRvIHRoaXMgY2FsbC4KKworICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cjo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKKyAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQpKSk7CisKKyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9
IHN0YXRlLT5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7CisKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOworICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2go
CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJl
Z1QwLCB0YXJnZXRUb0NoZWNrLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoMCkpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRv
bmU7CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgZmFzdENhbGwgPSBqaXQu
bmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGpp
dC5qdW1wKCk7CisKKyAgICAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOworCisgICAg
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5r
SW5mbyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBkb25lLmxpbmso
JmppdCk7CisKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbCgKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkNv
bnN0cnVjdCA6IENhbGxMaW5rSW5mbzo6Q2FsbCwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
b3JpZ2luLnNlbWFudGljLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgTFZhbHVlIGpzQ2Fs
bGVlID0gbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpOworICAgICAg
ICAgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKC1wYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpKSwKKyAgICAgICAgICAgICAg
ICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogCisgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAorICAgICAg
ICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsaW5rQ2FsbCA9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci52bSgpLmdldENUSVN0dWIobGlua0NhbGxUaHVu
a0dlbmVyYXRvcikuY29kZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsKSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hl
Y2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsKGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
fSk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKKyNlbHNlCiAgICAgICAgIHVu
c2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CiAKICAgICAgICAgdW5zaWduZWQg
ZnJhbWVTaXplID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bUFyZ3M7CkBAIC00
ODQ5LDcgKzQ5NDUsNyBAQCBwcml2YXRlOgogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGpzQ2Fs
bGVlKTsgLy8gY2FsbGVlIC0+IHN0YWNrCiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQu
Y29uc3RJbnQ2NChudW1BcmdzKSk7IC8vIGFyZ3VtZW50IGNvdW50IGFuZCB6ZXJvcyBmb3IgdGhl
IHRhZwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUFyZ3M7ICsraSkKLSAgICAgICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMSArIGkpKSk7CisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGxvd0pTVmFsdWUobV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxICsgaSkpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHBhZGRpbmc7ICsraSkKICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoZ2V0
VW5kZWYobV9vdXQuaW50NjQpKTsKIApAQCAtNDg2Myw3ICs0OTU5LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKG1fb3V0LmludDY0LCBtX291dC5wYXRjaHBv
aW50SW50NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25D
YWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNV2ViS2l0SlNDYWxsQ29udik7CiAgICAgICAgIAot
ICAgICAgICBtX2Z0bFN0YXRlLmpzQ2FsbHMuYXBwZW5kKEpTQ2FsbChzdGFja21hcElELCBtX25v
ZGUsIGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKSkpOworICAgICAgICBtX2Z0bFN0
YXRlLmpzQ2FsbHMuYXBwZW5kKEpTQ2FsbChzdGFja21hcElELCBub2RlLCBjb2RlT3JpZ2luRGVz
Y3JpcHRpb25PZkNhbGxTaXRlKCkpKTsKICAgICAgICAgCiAgICAgICAgIHNldEpTVmFsdWUoY2Fs
bCk7CiAjZW5kaWYKQEAgLTc5MDEsNyArNzk5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJlc3Vs
dC0+c2V0R2VuZXJhdG9yKAogICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBW
ZWN0b3I8TG9jYXRpb24+IGxvY2F0aW9uczsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEIz
OjpWYWx1ZVJlcCYgcmVwIDogcGFyYW1zLnJlcHMpCisgICAgICAgICAgICAgICAgZm9yIChjb25z
dCBCMzo6VmFsdWVSZXAmIHJlcCA6IHBhcmFtcykKICAgICAgICAgICAgICAgICAgICAgbG9jYXRp
b25zLmFwcGVuZChMb2NhdGlvbjo6Zm9yVmFsdWVSZXAocmVwKSk7CiAKICAgICAgICAgICAgICAg
ICBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IGdlbmVyYXRvciA9IGZ1bmN0b3IobG9j
YXRpb25zKTsKQEAgLTc5MDksMTIgKzgwMDUsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVtcCA9IGppdC5wYXRjaGFi
bGVKdW1wKCk7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBkb25lID0gaml0
LmxhYmVsKCk7CiAKLSAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0g
cGFyYW1zLnVzZWRSZWdpc3RlcnM7CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJl
Z2lzdGVycyA9IHBhcmFtcy51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogQXMgcGFydCBvZiBoYW5kbGluZyBleGNlcHRpb25zLCB3ZSBuZWVkIHRvIGNyZWF0ZSBh
IGNvbmNyZXRlIE9TUkV4aXQgaGVyZS4KICAgICAgICAgICAgICAgICAvLyBEb2luZyBzbyBzaG91
bGQgYXV0b21hZ2ljYWxseSByZWdpc3RlciBsYXRlIHBhdGhzIHRoYXQgZW1pdCBleGl0IHRodW5r
cy4KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBwYXJhbXMuY29udGV4dC0+bGF0
ZVBhdGhzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBwYXJhbXMuY29udGV4dCgpLmxhdGVQYXRo
cy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYXJlZFRhc2s8QWlyOjpHZW5l
cmF0aW9uQ29udGV4dDo6TGF0ZVBhdGhGdW5jdGlvbj4oCiAgICAgICAgICAgICAgICAgICAgICAg
ICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBBaXI6OkdlbmVyYXRpb25Db250ZXh0JikgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKQEAgLTkyMTMsNiArOTMwOSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbik7CiAgICAgfQogCisjaWYgIUZUTF9VU0VTX0Iz
CiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0QXJndW1lbnRzRm9yUGF0Y2hwb2ludElmV2lsbENhdGNo
RXhjZXB0aW9uKFN0YWNrbWFwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIEV4Y2VwdGlvblR5cGUg
ZXhjZXB0aW9uVHlwZSwgdW5zaWduZWQgb2Zmc2V0T2ZFeGl0QXJndW1lbnRzKQogICAgIHsKICAg
ICAgICAgQ29kZU9yaWdpbiBvcENhdGNoT3JpZ2luOwpAQCAtOTIzMyw2ICs5MzMwLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVzY3JpcHRvciwgZXhp
dERlc2NyaXB0b3JJbXBsLCBub1ZhbHVlKCksIG9mZnNldE9mRXhpdEFyZ3VtZW50cyk7CiAgICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmRWZWN0b3IoZnJlc2hMaXN0KTsKICAgICB9CisjZW5kaWYgLy8g
IUZUTF9VU0VTX0IzCiAKICAgICBib29sIGVtaXRCcmFuY2hUb09TUkV4aXRJZldpbGxDYXRjaEV4
Y2VwdGlvbihMVmFsdWUgaGFkRXhjZXB0aW9uKQogICAgIHsKQEAgLTkyNTEsNiArOTM0OSwxNiBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9ibG9ja3MuZ2V0KGJsb2NrKTsKICAgICB9CiAK
KworI2lmIEZUTF9VU0VTX0IzCisgICAgT1NSRXhpdERlc2NyaXB0b3IqIGFwcGVuZE9TUkV4aXRE
ZXNjcmlwdG9yKEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gJm1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0b3Jz
LmFsbG9jKAorICAgICAgICAgICAgbG93VmFsdWUuZm9ybWF0KCksIG1fZ3JhcGgubWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdoVmFsdWUpLAorICAgICAgICAgICAgYXZhaWxhYmls
aXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkpOworICAgIH0KKyNlbHNlIC8v
IEZUTF9VU0VTX0IzCiAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGFwcGVuZE9TUkV4aXREZXNjcmlw
dG9yKEV4aXRLaW5kIGtpbmQsIEV4Y2VwdGlvblR5cGUgZXhjZXB0aW9uVHlwZSwgRm9ybWF0dGVk
VmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTm9kZU9yaWdpbiBvcmlnaW4pCiAgICAg
ewogICAgICAgICBPU1JFeGl0RGVzY3JpcHRvciYgcmVzdWx0ID0gbV9mdGxTdGF0ZS5qaXRDb2Rl
LT5vc3JFeGl0RGVzY3JpcHRvcnMuYWxsb2MoCkBAIC05MjYxLDYgKzkzNjksNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAga2luZCwgb3JpZ2luLmZvckV4aXQsIG9yaWdpbi5zZW1hbnRpYywgZXhj
ZXB0aW9uVHlwZSk7CiAgICAgICAgIHJldHVybiAmcmVzdWx0OwogICAgIH0KKyNlbmRpZiAvLyBG
VExfVVNFU19CMwogICAgIAogICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKICAgICAgICAgRXhpdEtp
bmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVl
IGZhaWxDb25kaXRpb24sIApAQCAtOTMyOCw5ICs5NDM3LDcgQEAgcHJpdmF0ZToKICNpZiBGVExf
VVNFU19CMwogICAgIHZvaWQgYmxlc3NTcGVjdWxhdGlvbihCMzo6Q2hlY2tWYWx1ZSogdmFsdWUs
IEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUs
IE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGlzRXhjZXB0aW9uSGFuZGxlciA9IGZhbHNlKQogICAg
IHsKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yID0gYXBwZW5kT1NS
RXhpdERlc2NyaXB0b3IoCi0gICAgICAgICAgICBraW5kLCBpc0V4Y2VwdGlvbkhhbmRsZXIgPyBF
eGNlcHRpb25UeXBlOjpDQ2FsbEV4Y2VwdGlvbiA6IEV4Y2VwdGlvblR5cGU6Ok5vbmUsIGxvd1Zh
bHVlLAotICAgICAgICAgICAgaGlnaFZhbHVlLCBvcmlnaW4pOworICAgICAgICBPU1JFeGl0RGVz
Y3JpcHRvciogZXhpdERlc2NyaXB0b3IgPSBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihsb3dWYWx1
ZSwgaGlnaFZhbHVlKTsKICAgICAgICAgT1NSRXhpdERlc2NyaXB0b3JJbXBsKiBleGl0RGVzY3Jp
cHRvckltcGwgPSAmbV9mdGxTdGF0ZS5vc3JFeGl0RGVzY3JpcHRvckltcGxzLmxhc3QoKTsKICAg
ICAgICAgCiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHZhbHVlLT5udW1DaGlsZHJlbigpOwpA
QCAtOTMzOSw3ICs5NDQ2LDggQEAgcHJpdmF0ZToKICAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1f
ZnRsU3RhdGU7CiAgICAgICAgIHZhbHVlLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgICAgICBbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKLSAgICAgICAgICAgICAgICBleGl0RGVzY3JpcHRvci0+ZW1pdE9TUkV4aXQoKnN0
YXRlLCBleGl0RGVzY3JpcHRvckltcGwsIGppdCwgcGFyYW1zLCBvZmZzZXQpOworICAgICAgICAg
ICAgICAgIGV4aXREZXNjcmlwdG9yLT5lbWl0T1NSRXhpdCgKKyAgICAgICAgICAgICAgICAgICAg
KnN0YXRlLCBraW5kLCBvcmlnaW4sIGppdCwgcGFyYW1zLCBvZmZzZXQsIGlzRXhjZXB0aW9uSGFu
ZGxlcik7CiAgICAgICAgICAgICB9KTsKICAgICB9CiAjZW5kaWYKQEAgLTk0NzUsNiArOTU4Mywx
MCBAQCBwcml2YXRlOgogICAgICAgICBTdGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBj
b25zdCBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+JiBtYXAs
CiAgICAgICAgIE5vZGUqIG5vZGUpCiAgICAgeworICAgICAgICAvLyBOT1RFOiBJbiBGVEwtPkIz
LCB3ZSBjYW5ub3QgZ2VuZXJhdGUgY29kZSBoZXJlLCBiZWNhdXNlIG1fb3V0cHV0IGlzIHBvc2l0
aW9uZWQgYWZ0ZXIgdGhlCisgICAgICAgIC8vIHN0YWNrbWFwIHZhbHVlLiBMaWtlIGFsbCB2YWx1
ZXMsIHRoZSBzdGFja21hcCB2YWx1ZSBjYW5ub3QgdXNlIGEgY2hpbGQgdGhhdCBpcyBkZWZpbmVk
IGFmdGVyCisgICAgICAgIC8vIGl0LgorICAgICAgICAKICAgICAgICAgQVNTRVJUKG5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpOwogICAgICAgICBBU1NFUlQobm9kZS0+aGFzUmVzdWx0KCkpOwogCkBA
IC05NTIyLDEwICs5NjM0LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gZXhpdEFy
Z3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdFN0cmljdEludDUyLCB2YWx1ZS52YWx1ZSgpKTsK
ICAgICAgICAgCiAgICAgICAgIHZhbHVlID0gbV9ib29sZWFuVmFsdWVzLmdldChub2RlKTsKKyNp
ZiBGVExfVVNFU19CMworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICBy
ZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEJvb2xlYW4sIHZhbHVlLnZh
bHVlKCkpOworI2Vsc2UgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUp
KSB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWVUb1Bhc3MgPSBtX291dC56ZXJvRXh0KHZhbHVl
LnZhbHVlKCksIG1fb3V0LmludDMyKTsKICAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQo
YXJndW1lbnRzLCBEYXRhRm9ybWF0Qm9vbGVhbiwgdmFsdWVUb1Bhc3MpOwogICAgICAgICB9Cisj
ZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgCiAgICAgICAgIHZhbHVlID0gbV9qc1ZhbHVl
VmFsdWVzLmdldChub2RlKTsKICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCShyZXZpc2lvbiAxOTM1MzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NSwxOCArNjUsMjIgQEAgdm9pZCBPU1JFeGl0RGVzY3JpcHRvcjo6dmFsaWRhdGVSZWZl
cmVuYwogCiAjaWYgRlRMX1VTRVNfQjMKIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBPU1JFeGl0RGVz
Y3JpcHRvcjo6ZW1pdE9TUkV4aXQoCi0gICAgU3RhdGUmIHN0YXRlLCBPU1JFeGl0RGVzY3JpcHRv
ckltcGwqIGV4aXREZXNjcmlwdG9ySW1wbCwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zLCB1bnNpZ25lZCBvZmZzZXQpCisgICAgU3RhdGUm
IHN0YXRlLCBFeGl0S2luZCBleGl0S2luZCwgY29uc3QgTm9kZU9yaWdpbiYgbm9kZU9yaWdpbiwg
Q0NhbGxIZWxwZXJzJiBqaXQsCisgICAgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMsIHVuc2lnbmVkIG9mZnNldCwgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIpCiB7Ci0gICAg
UmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRsZSA9IHByZXBhcmVPU1JFeGl0SGFuZGxlKHN0YXRl
LCBleGl0RGVzY3JpcHRvckltcGwsIHBhcmFtcywgb2Zmc2V0KTsKKyAgICBSZWZQdHI8T1NSRXhp
dEhhbmRsZT4gaGFuZGxlID0KKyAgICAgICAgcHJlcGFyZU9TUkV4aXRIYW5kbGUoc3RhdGUsIGV4
aXRLaW5kLCBub2RlT3JpZ2luLCBwYXJhbXMsIG9mZnNldCwgaXNFeGNlcHRpb25IYW5kbGVyKTsK
ICAgICBoYW5kbGUtPmVtaXRFeGl0VGh1bmsoaml0KTsKICAgICByZXR1cm4gaGFuZGxlOwogfQog
CiBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gT1NSRXhpdERlc2NyaXB0b3I6OmVtaXRPU1JFeGl0TGF0
ZXIoCi0gICAgU3RhdGUmIHN0YXRlLCBPU1JFeGl0RGVzY3JpcHRvckltcGwqIGV4aXREZXNjcmlw
dG9ySW1wbCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMsIHVuc2lnbmVk
IG9mZnNldCkKKyAgICBTdGF0ZSYgc3RhdGUsIEV4aXRLaW5kIGV4aXRLaW5kLCBjb25zdCBOb2Rl
T3JpZ2luJiBub2RlT3JpZ2luLAorICAgIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zLCB1bnNpZ25lZCBvZmZzZXQsIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyKQogewotICAg
IFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBoYW5kbGUgPSBwcmVwYXJlT1NSRXhpdEhhbmRsZShzdGF0
ZSwgZXhpdERlc2NyaXB0b3JJbXBsLCBwYXJhbXMsIG9mZnNldCk7Ci0gICAgcGFyYW1zLmNvbnRl
eHQtPmxhdGVQYXRocy5hcHBlbmQoCisgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRsZSA9
CisgICAgICAgIHByZXBhcmVPU1JFeGl0SGFuZGxlKHN0YXRlLCBleGl0S2luZCwgbm9kZU9yaWdp
biwgcGFyYW1zLCBvZmZzZXQsIGlzRXhjZXB0aW9uSGFuZGxlcik7CisgICAgcGFyYW1zLmNvbnRl
eHQoKS5sYXRlUGF0aHMuYXBwZW5kKAogICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPEFpcjo6R2Vu
ZXJhdGlvbkNvbnRleHQ6OkxhdGVQYXRoRnVuY3Rpb24+KAogICAgICAgICAgICAgW2hhbmRsZV0g
KENDYWxsSGVscGVycyYgaml0LCBBaXI6OkdlbmVyYXRpb25Db250ZXh0JikgewogICAgICAgICAg
ICAgICAgIGhhbmRsZS0+ZW1pdEV4aXRUaHVuayhqaXQpOwpAQCAtODUsMzMgKzg5LDQyIEBAIFJl
ZlB0cjxPU1JFeGl0SGFuZGxlPiBPU1JFeGl0RGVzY3JpcHRvcjoKIH0KIAogUmVmUHRyPE9TUkV4
aXRIYW5kbGU+IE9TUkV4aXREZXNjcmlwdG9yOjpwcmVwYXJlT1NSRXhpdEhhbmRsZSgKLSAgICBT
dGF0ZSYgc3RhdGUsIE9TUkV4aXREZXNjcmlwdG9ySW1wbCogZXhpdERlc2NyaXB0b3JJbXBsLCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcywgdW5zaWduZWQgb2Zmc2V0KQor
ICAgIFN0YXRlJiBzdGF0ZSwgRXhpdEtpbmQgZXhpdEtpbmQsIGNvbnN0IE5vZGVPcmlnaW4mIG5v
ZGVPcmlnaW4sCisgICAgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMsIHVu
c2lnbmVkIG9mZnNldCwgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIpCiB7CiAgICAgdW5zaWduZWQg
aW5kZXggPSBzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsKLSAgICBSZWZQdHI8T1NSRXhp
dEhhbmRsZT4gaGFuZGxlID0gYWRvcHRSZWYoCi0gICAgICAgIG5ldyBPU1JFeGl0SGFuZGxlKGlu
ZGV4LCBzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFsbG9jKHRoaXMsICpleGl0RGVzY3JpcHRvcklt
cGwpKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gb2Zmc2V0OyBpIDwgcGFyYW1zLnJlcHMuc2l6
ZSgpOyArK2kpCi0gICAgICAgIGhhbmRsZS0+ZXhpdC5tX3ZhbHVlUmVwcy5hcHBlbmQocGFyYW1z
LnJlcHNbaV0pOwotICAgIGhhbmRsZS0+ZXhpdC5tX3ZhbHVlUmVwcy5zaHJpbmtUb0ZpdCgpOwor
ICAgIE9TUkV4aXQmIGV4aXQgPSBzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFsbG9jKAorICAgICAg
ICB0aGlzLCBleGl0S2luZCwgbm9kZU9yaWdpbi5mb3JFeGl0LCBub2RlT3JpZ2luLnNlbWFudGlj
LCBpc0V4Y2VwdGlvbkhhbmRsZXIpOworICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBoYW5kbGUg
PSBhZG9wdFJlZihuZXcgT1NSRXhpdEhhbmRsZShpbmRleCwgZXhpdCkpOworICAgIGZvciAodW5z
aWduZWQgaSA9IG9mZnNldDsgaSA8IHBhcmFtcy5zaXplKCk7ICsraSkKKyAgICAgICAgZXhpdC5t
X3ZhbHVlUmVwcy5hcHBlbmQocGFyYW1zW2ldKTsKKyAgICBleGl0Lm1fdmFsdWVSZXBzLnNocmlu
a1RvRml0KCk7CiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KICNlbmRpZiAvLyBGVExfVVNFU19CMwog
CisjaWYgRlRMX1VTRVNfQjMKIE9TUkV4aXQ6Ok9TUkV4aXQoCi0gICAgT1NSRXhpdERlc2NyaXB0
b3IqIGRlc2NyaXB0b3IsIE9TUkV4aXREZXNjcmlwdG9ySW1wbCYgZXhpdERlc2NyaXB0b3JJbXBs
Ci0jaWYgIUZUTF9VU0VTX0IzCi0gICAgLCB1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4Ci0j
ZW5kaWYgLy8gIUZUTF9VU0VTX0IzCi0gICAgKQorICAgIE9TUkV4aXREZXNjcmlwdG9yKiBkZXNj
cmlwdG9yLAorICAgIEV4aXRLaW5kIGV4aXRLaW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENv
ZGVPcmlnaW4gY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAorICAgIGJvb2wgaXNFeGNlcHRpb25I
YW5kbGVyKQorICAgIDogT1NSRXhpdEJhc2UoZXhpdEtpbmQsIGNvZGVPcmlnaW4sIGNvZGVPcmln
aW5Gb3JFeGl0UHJvZmlsZSkKKyAgICAsIG1fZGVzY3JpcHRvcihkZXNjcmlwdG9yKQoreworICAg
IG1faXNFeGNlcHRpb25IYW5kbGVyID0gaXNFeGNlcHRpb25IYW5kbGVyOworfQorI2Vsc2UgLy8g
RlRMX1VTRVNfQjMKK09TUkV4aXQ6Ok9TUkV4aXQoCisgICAgT1NSRXhpdERlc2NyaXB0b3IqIGRl
c2NyaXB0b3IsIE9TUkV4aXREZXNjcmlwdG9ySW1wbCYgZXhpdERlc2NyaXB0b3JJbXBsLAorICAg
IHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgpCiAgICAgOiBPU1JFeGl0QmFzZShleGl0RGVz
Y3JpcHRvckltcGwubV9raW5kLCBleGl0RGVzY3JpcHRvckltcGwubV9jb2RlT3JpZ2luLCBleGl0
RGVzY3JpcHRvckltcGwubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUpCiAgICAgLCBtX2Rlc2Ny
aXB0b3IoZGVzY3JpcHRvcikKLSNpZiAhRlRMX1VTRVNfQjMKICAgICAsIG1fc3RhY2ttYXBSZWNv
cmRJbmRleChzdGFja21hcFJlY29yZEluZGV4KQotI2VuZGlmIC8vICFGVExfVVNFU19CMwogICAg
ICwgbV9leGNlcHRpb25UeXBlKGV4aXREZXNjcmlwdG9ySW1wbC5tX2V4Y2VwdGlvblR5cGUpCiB7
CiAgICAgbV9pc0V4Y2VwdGlvbkhhbmRsZXIgPSBleGl0RGVzY3JpcHRvckltcGwubV9leGNlcHRp
b25UeXBlICE9IEV4Y2VwdGlvblR5cGU6Ok5vbmU7CiB9CisjZW5kaWYgLy8gRlRMX1VTRVNfQjMK
IAogQ29kZUxvY2F0aW9uSnVtcCBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVC
bG9jayogZnRsQ29kZUJsb2NrKSBjb25zdAogewpAQCAtMTk2LDcgKzIwOSw2IEBAIHZvaWQgT1NS
RXhpdDo6cmVjb3ZlclJlZ2lzdGVyc0Zyb21TcGlsbFMKICAgICAgICAgfQogICAgIH0KIH0KLSNl
bmRpZiAvLyAhRlRMX1VTRVNfQjMKIAogYm9vbCBPU1JFeGl0Ojp3aWxsQXJyaXZlQXRFeGl0RnJv
bUluZGlyZWN0RXhjZXB0aW9uQ2hlY2soKSBjb25zdAogewpAQCAtMjYwLDYgKzI3Miw3IEBAIGJv
b2wgT1NSRXhpdDo6bmVlZHNSZWdpc3RlclJlY292ZXJ5T25HZW4KICAgICAvLyByZWNvdmVyIHRo
ZSBzcGlsbGVkIHJlZ2lzdGVycy4KICAgICByZXR1cm4gbV9leGNlcHRpb25UeXBlID09IEV4Y2Vw
dGlvblR5cGU6OkpTQ2FsbDsKIH0KKyNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXQuaAkocmV2aXNpb24gMTkzNTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJCM1Zh
bHVlUmVwLmgiCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9m
aWxlLmgiCisjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXRC
YXNlLmgiCiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5oIgogI2luY2x1ZGUgIkZUTEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgiCkBAIC01MSwxNyArNTIsMjMgQEAgbmFtZXNw
YWNlIEpTQyB7CiBjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKIAogbmFtZXNwYWNlIEIzIHsKLXN0
cnVjdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM7CitjbGFzcyBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXM7CiBuYW1lc3BhY2UgQWlyIHsKIHN0cnVjdCBHZW5lcmF0aW9uQ29udGV4dDsKIH0gLy8g
bmFtZXNwYWNlIEFpcgogfSAvLyBuYW1lc3BhY2UgQjMKIAorbmFtZXNwYWNlIERGRyB7CitzdHJ1
Y3QgTm9kZU9yaWdpbjsKK30gLy8gbmFtZXNwYWNlIERGRzsKKwogbmFtZXNwYWNlIEZUTCB7CiAK
IGNsYXNzIFN0YXRlOwogc3RydWN0IE9TUkV4aXREZXNjcmlwdG9ySW1wbDsKK3N0cnVjdCBPU1JF
eGl0SGFuZGxlOwogCisjaWYgIUZUTF9VU0VTX0IzCiBlbnVtIGNsYXNzIEV4Y2VwdGlvblR5cGUg
OiB1aW50OF90IHsKICAgICBOb25lLAogICAgIENDYWxsRXhjZXB0aW9uLApAQCAtNzUsNiArODIs
NyBAQCBlbnVtIGNsYXNzIEV4Y2VwdGlvblR5cGUgOiB1aW50OF90IHsKIH07CiAKIGJvb2wgZXhj
ZXB0aW9uVHlwZVdpbGxBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJpY1Vud2luZChFeGNlcHRpb25U
eXBlKTsKKyNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKIAogc3RydWN0IE9TUkV4aXREZXNjcmlwdG9y
IHsKICAgICBPU1JFeGl0RGVzY3JpcHRvcigKQEAgLTEwNSw3ICsxMTMsOCBAQCBzdHJ1Y3QgT1NS
RXhpdERlc2NyaXB0b3IgewogICAgIC8vIG9uIHRoZSBncm91bmQuIEl0IGNvbnRhaW5zIGluZm9y
bWF0aW9uIHRoYXQgaXMgbW9zdGx5IG5vdCB1c2VmdWwgaWYgeW91IHVzZSB0aGlzIEFQSSwgc2lu
Y2UgYWZ0ZXIKICAgICAvLyB0aGlzIGNhbGwsIHRoZSBPU1JFeGl0IGlzIHNpbXBseSByZWFkeSB0
byBnby4KICAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gZW1pdE9TUkV4aXQoCi0gICAgICAgIFN0
YXRlJiwgT1NSRXhpdERlc2NyaXB0b3JJbXBsKiwgQ0NhbGxIZWxwZXJzJiwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYsIHVuc2lnbmVkIG9mZnNldCk7CisgICAgICAgIFN0YXRl
JiwgRXhpdEtpbmQsIGNvbnN0IERGRzo6Tm9kZU9yaWdpbiYsIENDYWxsSGVscGVycyYsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLAorICAgICAgICB1bnNpZ25lZCBvZmZzZXQs
IGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyID0gZmFsc2UpOwogCiAgICAgLy8gSW4gc29tZSBjYXNl
cyB5b3Ugd2FudCBhbiBPU1JFeGl0IHRvIGNvbWUgaW50byBleGlzdGVuY2UsIGJ1dCB5b3UgZG9u
J3Qgd2FudCB0byBlbWl0IGl0IHJpZ2h0IG5vdy4KICAgICAvLyBUaGlzIHdpbGwgZW1pdCB0aGUg
T1NSIGV4aXQgaW4gYSBsYXRlIHBhdGguIFlvdSBjYW4ndCBiZSBzdXJlIGV4YWN0bHkgd2hlbiB0
aGF0IHdpbGwgaGFwcGVuLCBidXQKQEAgLTExNiwxNiArMTI1LDE5IEBAIHN0cnVjdCBPU1JFeGl0
RGVzY3JpcHRvciB7CiAgICAgLy8gaGF2ZSBhIHBsYWNlIHRvIGp1bXAgdG8gZm9yIE9TUiBleGl0
LiBJdCBkb2Vzbid0IGNhcmUgd2hlcmUgdGhhdCBPU1IgZXhpdCBpcyBlbWl0dGVkIHNvIGxvbmcg
YXMgaXQKICAgICAvLyBldmVudHVhbGx5IGdldHMgYWNjZXNzIHRvIGl0cyBsYWJlbC4KICAgICBS
ZWZQdHI8T1NSRXhpdEhhbmRsZT4gZW1pdE9TUkV4aXRMYXRlcigKLSAgICAgICAgU3RhdGUmLCBP
U1JFeGl0RGVzY3JpcHRvckltcGwqLCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICAgICAgU3RhdGUmLCBFeGl0S2luZCwgY29uc3QgREZH
OjpOb2RlT3JpZ2luJiwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYsIHVuc2ln
bmVkIG9mZnNldCwKKyAgICAgICAgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIgPSBmYWxzZSk7CiAK
ICAgICAvLyBUaGlzIGlzIHRoZSBsb3ctbGV2ZWwgaW50ZXJmYWNlLiBJdCB3aWxsIGNyZWF0ZSBh
IGhhbmRsZSByZXByZXNlbnRpbmcgdGhlIGRlc2lyZSB0byBlbWl0IGNvZGUgZm9yCiAgICAgLy8g
YW4gT1NSIGV4aXQuIFlvdSBjYW4gY2FsbCBPU1JFeGl0SGFuZGxlOjplbWl0RXhpdFRodW5rKCkg
b25jZSB5b3UgaGF2ZSBhIHBsYWNlIHRvIGVtaXQgaXQuIE5vdGUKICAgICAvLyB0aGF0IHRoZSBh
Ym92ZSB0d28gQVBJcyBhcmUgd3JpdHRlbiBpbiB0ZXJtcyBvZiB0aGlzIGFuZCBPU1JFeGl0SGFu
ZGxlOjplbWl0RXhpdFRodW5rKCkuCiAgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IHByZXBhcmVP
U1JFeGl0SGFuZGxlKAotICAgICAgICBTdGF0ZSYsIE9TUkV4aXREZXNjcmlwdG9ySW1wbCosIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLCB1bnNpZ25lZCBvZmZzZXQpOworICAg
ICAgICBTdGF0ZSYsIEV4aXRLaW5kLCBjb25zdCBERkc6Ok5vZGVPcmlnaW4mLCBjb25zdCBCMzo6
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiwgdW5zaWduZWQgb2Zmc2V0LAorICAgICAgICBib29s
IGlzRXhjZXB0aW9uSGFuZGxlciA9IGZhbHNlKTsKICNlbmRpZiAvLyBGVExfVVNFU19CMwogfTsK
IAorI2lmICFGVExfVVNFU19CMwogc3RydWN0IE9TUkV4aXREZXNjcmlwdG9ySW1wbCB7CiAgICAg
T1NSRXhpdERlc2NyaXB0b3JJbXBsKEV4aXRLaW5kIGtpbmQsIENvZGVPcmlnaW4gZXhpdE9yaWdp
biwgQ29kZU9yaWdpbiBmb3JFeGl0UHJvZmlsZSwgRXhjZXB0aW9uVHlwZSBleGNlcHRpb25UeXBl
KQogICAgICAgICA6IG1fa2luZChraW5kKQpAQCAtMTQyLDEzICsxNTQsMTYgQEAgc3RydWN0IE9T
UkV4aXREZXNjcmlwdG9ySW1wbCB7CiAgICAgQ29kZU9yaWdpbiBtX3NlbWFudGljQ29kZU9yaWdp
bkZvckNhbGxGcmFtZUhlYWRlcjsKICAgICBIYW5kbGVySW5mbyBtX2Jhc2VsaW5lRXhjZXB0aW9u
SGFuZGxlcjsKIH07CisjZW5kaWYgLy8gIUZUTF9VU0VTX0IzCiAKIHN0cnVjdCBPU1JFeGl0IDog
cHVibGljIERGRzo6T1NSRXhpdEJhc2UgewogICAgIE9TUkV4aXQoCi0gICAgICAgIE9TUkV4aXRE
ZXNjcmlwdG9yKiwgT1NSRXhpdERlc2NyaXB0b3JJbXBsJgotI2lmICFGVExfVVNFU19CMwotICAg
ICAgICAsIHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgKLSNlbmRpZiAvLyAhRlRMX1VTRVNf
QjMKKyAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqLAorI2lmIEZUTF9VU0VTX0IzCisgICAgICAg
IEV4aXRLaW5kLCBDb2RlT3JpZ2luLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW5Gb3JFeGl0UHJvZmls
ZSwgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIKKyNlbHNlIC8vIEZUTF9VU0VTX0IzCisgICAgICAg
IE9TUkV4aXREZXNjcmlwdG9ySW1wbCYsIHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgKKyNl
bmRpZiAvLyBGVExfVVNFU19CMwogICAgICAgICApOwogCiAgICAgT1NSRXhpdERlc2NyaXB0b3Iq
IG1fZGVzY3JpcHRvcjsKQEAgLTE2Miw4ICsxNzcsOCBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1Ymxp
YyBERkc6Ok9TUkV4aXRCYXNlCiAgICAgdW5zaWduZWQgbV9wYXRjaGFibGVDb2RlT2Zmc2V0Owog
ICAgIC8vIE9mZnNldCB3aXRoaW4gU3RhY2ttYXA6OnJlY29yZHMKICAgICB1aW50MzJfdCBtX3N0
YWNrbWFwUmVjb3JkSW5kZXg7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICBFeGNlcHRpb25U
eXBlIG1fZXhjZXB0aW9uVHlwZTsKKyNlbmRpZiAvLyBGVExfVVNFU19CMwogCiAgICAgUmVnaXN0
ZXJTZXQgcmVnaXN0ZXJzVG9QcmVzZXJ2ZUZvckNhbGxUaGF0TWlnaHRUaHJvdzsKIApAQCAtMTc3
LDEyICsxOTIsMTIgQEAgc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgREZHOjpPU1JFeGl0QmFzZQog
ICAgIHZvaWQgZ2F0aGVyUmVnaXN0ZXJzVG9TcGlsbEZvckNhbGxJZkV4Y2VwdGlvbihTdGFja01h
cHMmLCBTdGFja01hcHM6OlJlY29yZCYpOwogICAgIHZvaWQgc3BpbGxSZWdpc3RlcnNUb1NwaWxs
U2xvdChDQ2FsbEhlbHBlcnMmLCBpbnQzMl90IHN0YWNrU3BpbGxTbG90KTsKICAgICB2b2lkIHJl
Y292ZXJSZWdpc3RlcnNGcm9tU3BpbGxTbG90KENDYWxsSGVscGVycyYgaml0LCBpbnQzMl90IHN0
YWNrU3BpbGxTbG90KTsKLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKIAogICAgIGJvb2wgd2lsbEFy
cml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKCkgY29uc3Q7CiAgICAgYm9vbCB3aWxsQXJy
aXZlQXRFeGl0RnJvbUluZGlyZWN0RXhjZXB0aW9uQ2hlY2soKSBjb25zdDsKICAgICBib29sIHdp
bGxBcnJpdmVBdE9TUkV4aXRGcm9tQ2FsbE9wZXJhdGlvbigpIGNvbnN0OwogICAgIGJvb2wgbmVl
ZHNSZWdpc3RlclJlY292ZXJ5T25HZW5lcmljVW53aW5kT1NSRXhpdFBhdGgoKSBjb25zdDsKKyNl
bmRpZiAvLyAhRlRMX1VTRVNfQjMKIH07CiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU3RhdGUuaAkocmV2aXNpb24gMTkzNTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxMiArOTYsMTQgQEAgcHVibGljOgog
I2lmIEVOQUJMRShNQVNNX1BST0JFKQogICAgIFNlZ21lbnRlZFZlY3RvcjxQcm9iZURlc2NyaXB0
b3I+IHByb2JlczsKICNlbmRpZgorI2lmICFGVExfVVNFU19CMwogICAgIFZlY3RvcjxKU0NhbGw+
IGpzQ2FsbHM7CiAgICAgVmVjdG9yPEpTQ2FsbFZhcmFyZ3M+IGpzQ2FsbFZhcmFyZ3NlczsKICAg
ICBWZWN0b3I8SlNUYWlsQ2FsbD4ganNUYWlsQ2FsbHM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGNv
ZGVTZWN0aW9uTmFtZXM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGRhdGFTZWN0aW9uTmFtZXM7CiAg
ICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXREZXNjcmlwdG9ySW1wbD4gb3NyRXhpdERlc2NyaXB0
b3JJbXBsczsKKyNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKICAgICB2b2lkKiB1bndpbmREYXRhU2Vj
dGlvbjsKICAgICBzaXplX3QgdW53aW5kRGF0YVNlY3Rpb25TaXplOwogICAgIFJlZlB0cjxEYXRh
U2VjdGlvbj4gc3RhY2ttYXBzU2VjdGlvbjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266734</attachid>
            <date>2015-12-06 12:53:44 -0800</date>
            <delta_ts>2015-12-06 14:53:12 -0800</delta_ts>
            <desc>moar</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>86647</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTM1MzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzA0LDYgKzMwNCw4IEBACiAJCTBGMzM4RTFDMUJGMjg2
RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxODFCRjI4NkVBMDAxM0M4OEYgLyogQjNC
bG9ja0luc2VydGlvblNldC5oICovOyB9OwogCQkwRjMzOEUxRDFCRjI4NkVBMDAxM0M4OEYgLyog
QjNMb3dlck1hY3Jvcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjMzOEUxOTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAgKi87
IH07CiAJCTBGMzM4RTFFMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzOEUxQTFCRjI4NkVB
MDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oICovOyB9OworCQkwRjMzRkNGNzFDMTM2RTI1MDAz
MjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzM0ZDRjUxQzEzNkUyNTAwMzIzRjY3IC8q
IEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcCAqLzsgfTsKKwkJMEYzM0ZDRjgxQzEzNkUy
NTAwMzIzRjY3IC8qIEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzRkNGNjFDMTM2RTI1MDAzMjNGNjcg
LyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCAqLzsgfTsKIAkJMEYzNEIxNDkxNkQ0MjAx
MDAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQu
Y3BwICovOyB9OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDgxNkQ0
MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgfTsKIAkJMEYzNzMwOEMxQzBCRDI5MTAw
MDUyQkZBIC8qIEIzUGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzNzMwOEExQzBCRDI5MTAwMDUyQkZBIC8qIEIzUGhpQ2hpbGRy
ZW4uY3BwICovOyB9OwpAQCAtMjQwMCw2ICsyNDAyLDggQEAKIAkJMEYzMzhFMTgxQkYyODZFQTAw
MTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNCbG9ja0luc2VydGlvblNldC5oOyBwYXRoID0gYjMvQjNCbG9ja0luc2VydGlv
blNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMzOEUxOTFCRjI4NkVBMDAx
M0M4OEYgLyogQjNMb3dlck1hY3Jvcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0xvd2VyTWFjcm9zLmNwcDsgcGF0aCA9IGIzL0IzTG93ZXJNYWNyb3MuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMzOEUxQTFCRjI4NkVBMDAxM0M4OEYgLyog
QjNMb3dlck1hY3Jvcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0xvd2Vy
TWFjcm9zLmg7IHBhdGggPSBiMy9CM0xvd2VyTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMzNGQ0Y1MUMxMzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcy5jcHA7IHBhdGggPSBiMy9CM1N0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzNGQ0Y2MUMxMzZFMjUw
MDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oOyBwYXRoID0gYjMv
QjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZH
VXNlS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ4MTZENDIw
MEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMzczMDhBMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVu
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGhpQ2hpbGRyZW4u
Y3BwOyBwYXRoID0gYjMvQjNQaGlDaGlsZHJlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC00NjI5LDYgKzQ2MzMsOCBAQAogCQkJCTBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLywKIAkJCQkwRkVDODVCNzFCRTE0NjJGMDA4MEZGNzQg
LyogQjNSZWR1Y2VTdHJlbmd0aC5jcHAgKi8sCiAJCQkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0
IC8qIEIzUmVkdWNlU3RyZW5ndGguaCAqLywKKwkJCQkwRjMzRkNGNTFDMTM2RTI1MDAzMjNGNjcg
LyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwICovLAorCQkJCTBGMzNGQ0Y2MUMxMzZF
MjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oICovLAogCQkJCTBGRUM4
NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8sCiAJCQkJMEZF
Qzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggKi8sCiAJCQkJMEYz
MzhERUYxQkU5M0FEMTAwMTNDODhGIC8qIEIzU3RhY2ttYXBWYWx1ZS5jcHAgKi8sCkBAIC02OTc2
LDYgKzY5ODIsNyBAQAogCQkJCTBGRDNFNDAyMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk5OEVENjc1MUJFRDc2OEMwMEREODAxNyAvKiBSZW1vdGVD
b250cm9sbGFibGVUYXJnZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMzNGQ0Y4MUMxMzZFMjUw
MDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRkI5MjE4MTZEMDJFQjIwMDU1QTVEQiAvKiBERkdBbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ2MTUzNENCQUYwMDBGOTQ1NiAvKiBERkdBcmd1bWVu
dFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTg0OTMsNiArODUwMCw3IEBACiAJCQkJMEY4
Rjk0M0MxNjY3NjMxMzAwRDYxOTcxIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMxMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21tb25JZGVu
dGlmaWVycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjMzRkNGNzFDMTM2RTI1MDAzMjNGNjcg
LyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcw
OUYyRjIxN0EwQUMyQTAwNTEyRTk4IC8qIENvbW1vblNsb3dQYXRocy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk2NTUzQTMzMTE3QTFGMUVFMDA4Q0Y2RjMgLyogQ29tbW9uU2xvd1BhdGhzRXhjZXB0
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0U1QTNBNzE3OTc0MzJEMDBFODkzQzAgLyog
Q29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5MzUzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWlyR2Vu
ZXJhdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUg
IkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0yMDgsMTMgKzIwOSw3IEBA
IENDYWxsSGVscGVyczo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXQKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7Ci0gICAgICAgICAgICAg
ICAgcGFyYW1zLnZhbHVlID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnJlcHMgPSBy
ZXBzOwotICAgICAgICAgICAgICAgIHBhcmFtcy51c2VkUmVnaXN0ZXJzID0gdmFsdWUtPm1fdXNl
ZFJlZ2lzdGVyczsKLSAgICAgICAgICAgICAgICBwYXJhbXMuY29udGV4dCA9ICZjb250ZXh0Owot
Ci0gICAgICAgICAgICAgICAgdmFsdWUtPm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBwYXJhbXMpOwor
ICAgICAgICAgICAgICAgIHZhbHVlLT5tX2dlbmVyYXRvci0+cnVuKGppdCwgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zKHZhbHVlLCByZXBzLCBjb250ZXh0KSk7CiAgICAgICAgICAgICB9KSk7CiAK
ICAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7IC8vIEFzIGZhciBhcyBBaXIgdGhpbmtz
LCB3ZSBhcmUgbm90IGEgdGVybWluYWwuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQYXRjaHBvaW50U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCShyZXZpc2lvbiAxOTM1MzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWly
R2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cy5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgewpAQCAtMTA3LDEzICsxMDgsNyBAQCBDQ2FsbEhlbHBlcnM6Okp1bXAgUGF0Y2hw
b2ludFNwZWNpYWw6OmdlCiAgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5j
b2RlLCBpbnN0LmFyZ3Nbb2Zmc2V0KytdKSk7CiAgICAgYXBwZW5kUmVwc0ltcGwoY29udGV4dCwg
b2Zmc2V0LCBpbnN0LCByZXBzKTsKICAgICAKLSAgICBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMg
cGFyYW1zOwotICAgIHBhcmFtcy52YWx1ZSA9IHZhbHVlOwotICAgIHBhcmFtcy5yZXBzID0gcmVw
czsKLSAgICBwYXJhbXMudXNlZFJlZ2lzdGVycyA9IHZhbHVlLT5tX3VzZWRSZWdpc3RlcnM7Ci0g
ICAgcGFyYW1zLmNvbnRleHQgPSAmY29udGV4dDsKLQotICAgIHZhbHVlLT5tX2dlbmVyYXRvci0+
cnVuKGppdCwgcGFyYW1zKTsKKyAgICB2YWx1ZS0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyh2YWx1ZSwgcmVwcywgY29udGV4dCkpOwogCiAgICAgcmV0dXJu
IENDYWxsSGVscGVyczo6SnVtcCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAxOTM1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNiArMTQ4LDE2IEBA
IHZvaWQqIFByb2NlZHVyZTo6YWRkRGF0YVNlY3Rpb24oc2l6ZV90IHMKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCit1bnNpZ25lZCBQcm9jZWR1cmU6OmNhbGxBcmdBcmVhU2l6ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGNvZGUoKS5jYWxsQXJnQXJlYVNpemUoKTsKK30KKwordm9pZCBQcm9jZWR1
cmU6OnJlcXVlc3RDYWxsQXJnQXJlYVNpemUodW5zaWduZWQgc2l6ZSkKK3sKKyAgICBjb2RlKCku
cmVxdWVzdENhbGxBcmdBcmVhU2l6ZShzaXplKTsKK30KKwogdW5zaWduZWQgUHJvY2VkdXJlOjpm
cmFtZVNpemUoKSBjb25zdAogewogICAgIHJldHVybiBjb2RlKCkuZnJhbWVTaXplKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMTkzNTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIyMSw5ICsyMjEsMTQgQEAgcHVibGljOgogICAgIC8vIHRoYXQgQVBJLCB0aGVuIHlvdSBk
b24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMuCiAgICAgc3RkOjp1bmlxdWVfcHRyPE9wYXF1
ZUJ5cHJvZHVjdHM+IHJlbGVhc2VCeXByb2R1Y3RzKCkgeyByZXR1cm4gV1RGOjptb3ZlKG1fYnlw
cm9kdWN0cyk7IH0KIAorICAgIC8vIFRoaXMgZ2l2ZXMgeW91IGRpcmVjdCBhY2Nlc3MgdG8gQ29k
ZS4gSG93ZXZlciwgdGhlIGlkZWEgaXMgdGhhdCBjbGllbnRzIG9mIEIzIHNob3VsZG4ndCBoYXZl
IHRvCisgICAgLy8gY2FsbCB0aGlzLiBTbywgUHJvY2VkdXJlIGhhcyBzb21lIG1ldGhvZHMgKGJl
bG93KSB0aGF0IGV4cG9zZSBzb21lIEFpcjo6Q29kZSBmdW5jdGlvbmFsaXR5LgogICAgIGNvbnN0
IEFpcjo6Q29kZSYgY29kZSgpIGNvbnN0IHsgcmV0dXJuICptX2NvZGU7IH0KICAgICBBaXI6OkNv
ZGUmIGNvZGUoKSB7IHJldHVybiAqbV9jb2RlOyB9CiAKKyAgICB1bnNpZ25lZCBjYWxsQXJnQXJl
YVNpemUoKSBjb25zdDsKKyAgICB2b2lkIHJlcXVlc3RDYWxsQXJnQXJlYVNpemUodW5zaWduZWQg
c2l6ZSk7CisKICAgICBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBmcmFtZVNpemUoKSBjb25z
dDsKICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgY2FsbGVlU2F2ZVJlZ2lzdGVycygp
IGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29k
ZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiQjNTdGFj
a21hcFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBu
YW1lc3BhY2UgQWlyOworCitjb25zdCBSZWdpc3RlclNldCYgU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zOjp1c2VkUmVnaXN0ZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92YWx1ZS0+bV91c2Vk
UmVnaXN0ZXJzOworfQorCitQcm9jZWR1cmUmIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczo6cHJv
YygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dC5jb2RlLT5wcm9jKCk7Cit9CisKK1N0
YWNrbWFwR2VuZXJhdGlvblBhcmFtczo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zKAorICAgIFN0
YWNrbWFwVmFsdWUqIHZhbHVlLCBjb25zdCBWZWN0b3I8VmFsdWVSZXA+JiByZXBzLCBBaXI6Okdl
bmVyYXRpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICAsIG1f
cmVwcyhyZXBzKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCit7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja21h
cEdlbmVyYXRpb25QYXJhbXNfaAorI2RlZmluZSBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtc19o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorI2luY2x1
ZGUgIlJlZ2lzdGVyU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBDaGVja1NwZWNpYWw7CitjbGFzcyBQYXRjaHBvaW50U3BlY2lhbDsKK2NsYXNzIFByb2Nl
ZHVyZTsKK2NsYXNzIFN0YWNrbWFwVmFsdWU7CituYW1lc3BhY2UgQWlyIHsKK3N0cnVjdCBHZW5l
cmF0aW9uQ29udGV4dDsKK30gLy8gbmFtZXNwYWNlIEFpcgorCitjbGFzcyBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMgeworcHVibGljOgorICAgIC8vIFRoaXMgaXMgdGhlIHN0YWNrbWFwIHZhbHVl
IHRoYXQgd2UncmUgZ2VuZXJhdGluZy4KKyAgICBTdGFja21hcFZhbHVlKiB2YWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICAvLyBUaGlzIHRlbGxzIHlvdSB0aGUgYWN0
dWFsIHZhbHVlIHJlcHJlc2VudGF0aW9ucyB0aGF0IHdlcmUgY2hvc2VuLiBUaGlzIGlzIHVzdWFs
bHkgZGlmZmVyZW50CisgICAgLy8gZnJvbSB0aGUgY29uc3RyYWludHMgd2Ugc3VwcGxpZWQuCisg
ICAgY29uc3QgVmVjdG9yPFZhbHVlUmVwPiYgcmVwcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwczsg
fTsKKworICAgIC8vIFVzdWFsbHkgd2Ugd2lzaCB0byBhY2Nlc3MgdGhlIHJlcHMuIFdlIG1ha2Ug
dGhpcyBlYXN5IGJ5IG1ha2luZyBvdXJzZWx2ZXMgYXBwZWFyIHRvIGJlIGEKKyAgICAvLyBjb2xs
ZWN0aW9uIG9mIHJlcHMuCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVw
cy5zaXplKCk7IH0KKyAgICBjb25zdCBWYWx1ZVJlcCYgYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVwc1tpbmRleF07IH0KKyAgICBjb25zdCBWYWx1ZVJlcCYgb3BlcmF0b3Jb
XSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgVmVjdG9y
PFZhbHVlUmVwPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3JlcHMu
YmVnaW4oKTsgfQorICAgIFZlY3RvcjxWYWx1ZVJlcD46OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVwcy5lbmQoKTsgfQorICAgIAorICAgIC8vIFRoaXMgdGVsbHMgeW91
IHRoZSByZWdpc3RlcnMgdGhhdCB3ZXJlIHVzZWQuCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMoKSBjb25zdDsKKworICAgIC8vIFRoaXMgaXMgcHJvdmlkZWQgZm9yIGNvbnZl
bmllbmNlOyBpdCBtZWFucyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGNhcHR1cmUgaXQgaWYgeW91
IGRvbid0IHdhbnQgdG8uCisgICAgUHJvY2VkdXJlJiBwcm9jKCkgY29uc3Q7CisgICAgCisgICAg
Ly8gVGhlIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQgZ2l2ZXMgeW91IGV2ZW4gbW9yZSBwb3dlci4K
KyAgICBBaXI6OkdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZXh0OyB9OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDaGVja1NwZWNpYWw7Cisg
ICAgZnJpZW5kIGNsYXNzIFBhdGNocG9pbnRTcGVjaWFsOworICAgIAorICAgIFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyhTdGFja21hcFZhbHVlKiwgY29uc3QgVmVjdG9yPFZhbHVlUmVwPiYgcmVw
cywgQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYpOworCisgICAgU3RhY2ttYXBWYWx1ZSogbV92YWx1
ZTsKKyAgICBWZWN0b3I8VmFsdWVSZXA+IG1fcmVwczsKKyAgICBBaXI6OkdlbmVyYXRpb25Db250
ZXh0JiBtX2NvbnRleHQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFt
c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJ
KHJldmlzaW9uIDE5MzUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMjYgKzM3LDcgQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CiAKLWNsYXNzIFN0YWNrbWFwVmFsdWU7Ci0KLW5hbWVzcGFjZSBB
aXIgewotc3RydWN0IEdlbmVyYXRpb25Db250ZXh0OwotfQotCi1zdHJ1Y3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zIHsKLSAgICAvLyBUaGlzIGlzIHRoZSBzdGFja21hcCB2YWx1ZSB0aGF0IHdl
J3JlIGdlbmVyYXRpbmcuCi0gICAgU3RhY2ttYXBWYWx1ZSogdmFsdWU7Ci0gICAgCi0gICAgLy8g
VGhpcyB0ZWxscyB5b3UgdGhlIGFjdHVhbCB2YWx1ZSByZXByZXNlbnRhdGlvbnMgdGhhdCB3ZXJl
IGNob3Nlbi4gVGhpcyBpcyB1c3VhbGx5IGRpZmZlcmVudAotICAgIC8vIGZyb20gdGhlIGNvbnN0
cmFpbnRzIHdlIHN1cHBsaWVkLgotICAgIFZlY3RvcjxWYWx1ZVJlcD4gcmVwczsKLSAgICAKLSAg
ICAvLyBUaGlzIHRlbGxzIHlvdSB0aGUgcmVnaXN0ZXJzIHRoYXQgd2VyZSB1c2VkLgotICAgIFJl
Z2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7Ci0KLSAgICAvLyBUaGUgQWlyOjpHZW5lcmF0aW9uQ29u
dGV4dCBnaXZlcyB5b3UgZXZlbiBtb3JlIHBvd2VyLgotICAgIEFpcjo6R2VuZXJhdGlvbkNvbnRl
eHQqIGNvbnRleHQ7Ci19OworY2xhc3MgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOwogCiB0eXBl
ZGVmIHZvaWQgU3RhY2ttYXBHZW5lcmF0b3JGdW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBjb25zdCBT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmKTsKIHR5cGVkZWYgU2hhcmVkVGFzazxTdGFja21hcEdl
bmVyYXRvckZ1bmN0aW9uPiBTdGFja21hcEdlbmVyYXRvcjsKQEAgLTg0LDYgKzY1LDEzIEBAIHB1
YmxpYzoKICAgICAvLyBjaGlsZHJlbigpLmFwcGVuZCgpLiBUaGF0IHdpbGwgd29yayBmaW5lLCBi
dXQgaXQncyBub3QgcmVjb21tZW5kZWQuCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgQ29uc3RyYWlu
ZWRWYWx1ZSYpOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KKyAgICB2b2lk
IGFwcGVuZFZlY3Rvcihjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpCisgICAgeworICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIHZhbHVlIDogdmVjdG9yKQorICAgICAgICAgICAgYXBwZW5kKHZhbHVl
KTsKKyAgICB9CisKICAgICAvLyBIZWxwZXIgZm9yIGFwcGVuZGluZyBjb2xkIGFueSdzLiBUaGlz
IG9mdGVuIHVzZWQgYnkgY2xpZW50cyB0byBpbXBsZW1lbnQgT1NSLgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZlY3RvclR5cGU+CiAgICAgdm9pZCBhcHBlbmRDb2xkQW55cyhjb25zdCBWZWN0b3JU
eXBlJiB2ZWN0b3IpCkBAIC0yODUsNiArMjczLDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgQ2hlY2tTcGVjaWFsOwogICAgIGZyaWVuZCBjbGFzcyBQYXRjaHBvaW50
U3BlY2lhbDsKKyAgICBmcmllbmQgY2xhc3MgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOwogICAg
IGZyaWVuZCBjbGFzcyBTdGFja21hcFNwZWNpYWw7CiAgICAgCiAgICAgVmVjdG9yPFZhbHVlUmVw
PiBtX3JlcHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlz
aW9uIDE5MzUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDkgQEAKIAogI2luY2x1ZGUgIkZQUkluZm8uaCIKICNp
bmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlJl
Zy5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKQEAgLTExNCw2ICsxMTYs
MTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRp
YyBWYWx1ZVJlcCBzdGFja0FyZ3VtZW50KFZpcnR1YWxSZWdpc3RlciByZWcpCisgICAgeworICAg
ICAgICByZXR1cm4gc3RhY2tBcmd1bWVudChyZWcub2Zmc2V0KCkgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKTsKKyAgICB9CisKICAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoaW50NjRfdCB2
YWx1ZSkKICAgICB7CiAgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKQEAgLTIwMSw2ICsyMDgsMTgg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUoKSk7
CiAgICAgfQogCisgICAgVmFsdWVSZXAgd2l0aE9mZnNldChpbnRwdHJfdCBvZmZzZXQpCisgICAg
eworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIFN0YWNrOgorICAgICAg
ICAgICAgcmV0dXJuIHN0YWNrKG9mZnNldEZyb21GUCgpICsgb2Zmc2V0KTsKKyAgICAgICAgY2Fz
ZSBTdGFja0FyZ3VtZW50OgorICAgICAgICAgICAgcmV0dXJuIHN0YWNrQXJndW1lbnQob2Zmc2V0
RnJvbVNQKCkgKyBvZmZzZXQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgICAgICB9CisgICAgfQorCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTkzNTM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNs
dWRlICJCM01lbW9yeVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKICNpbmNsdWRl
ICJCM1N0YWNrU2xvdFZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMuaCIKICNpbmNsdWRlICJCM1N3aXRjaFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNVcHNpbG9uVmFs
dWUuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgpAQCAtMzQxMywxMSArMzQxNCwxMSBA
QCB2b2lkIHRlc3RTaW1wbGVQYXRjaHBvaW50KCkKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVw
cy5zaXplKCkgPT0gMyk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigp
KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwotICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBhZGQzMihqaXQs
IHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJhbXMucmVwc1syXS5ncHIoKSwgcGFyYW1zLnJlcHNb
MF0uZ3ByKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFt
c1sxXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAg
ICAgICAgICAgIGFkZDMyKGppdCwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCksIHBh
cmFtc1swXS5ncHIoKSk7CiAgICAgICAgIH0pOwogICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9s
VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHBhdGNocG9pbnQpOwogCkBAIC0zNDQwLDEx
ICszNDQxLDExIEBAIHZvaWQgdGVzdFNpbXBsZVBhdGNocG9pbnRXaXRob3V0T3VwdXRDbG8KICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAg
ICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAg
ICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBz
WzFdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMHgwMGZmMDBmZiksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKLSAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4MDBmZjAwZmYpLCBwYXJhbXMucmVw
c1sxXS5ncHIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDIpOworICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFy
YW1zWzFdLmlzR1BSKCkpOworICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoMHgwMGZmMDBmZiksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweDAwZmYwMGZmKSwgcGFyYW1zWzFdLmdw
cigpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4
MDBmZjAwZmYpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHgwMGZmMDBmZiksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CiAgICAgICAgIH0pOwpAQCAtMzQ4NSwxMiArMzQ4NiwxMiBAQCB2b2lkIHRlc3RTaW1w
bGVQYXRjaHBvaW50V2l0aE91cHV0Q2xvYmJlCiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMu
c2l6ZSgpID09IDMpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNHUFIoKSk7
Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS5pc0dQUigpKTsKLSAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0Lm1vdmUocGFy
YW1zLnJlcHNbMV0uZ3ByKCksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKLSAgICAgICAgICAgIGpp
dC5hZGQ2NChwYXJhbXMucmVwc1syXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBh
cmFtc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1sxXS5pc0dQUigpKTsK
KyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5t
b3ZlKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgICAgIGppdC5h
ZGQ2NChwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAKICAgICAgICAgICAgIGNs
b2JiZXJBbGwuZm9yRWFjaChbJl0gKFJlZyByZWcpIHsKICAgICAgICAgICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweDAwZmYwMGZmKSwgcmVnLmdwcigpKTsKQEAg
LTM1MjAsMTEgKzM1MjEsMTEgQEAgdm9pZCB0ZXN0U2ltcGxlUGF0Y2hwb2ludFdpdGhvdXRPdXB1
dENsbwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAyKTsKLSAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzRlBSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnJlcHNbMV0uaXNGUFIoKSk7Ci0gICAgICAgICAgICBqaXQubW92ZVplcm9Ub0RvdWJsZShw
YXJhbXMucmVwc1swXS5mcHIoKSk7Ci0gICAgICAgICAgICBqaXQubW92ZVplcm9Ub0RvdWJsZShw
YXJhbXMucmVwc1sxXS5mcHIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09
IDIpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlzRlBSKCkpOworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zWzFdLmlzRlBSKCkpOworICAgICAgICAgICAgaml0Lm1vdmVaZXJvVG9Eb3Vi
bGUocGFyYW1zWzBdLmZwcigpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlWmVyb1RvRG91YmxlKHBh
cmFtc1sxXS5mcHIoKSk7CiAgICAgICAgICAgICBqaXQubW92ZVplcm9Ub0RvdWJsZShGUFJJbmZv
Ojphcmd1bWVudEZQUjApOwogICAgICAgICAgICAgaml0Lm1vdmVaZXJvVG9Eb3VibGUoRlBSSW5m
bzo6YXJndW1lbnRGUFIxKTsKICAgICAgICAgfSk7CkBAIC0zNTU4LDExICszNTU5LDExIEBAIHZv
aWQgdGVzdFNpbXBsZVBhdGNocG9pbnRXaXRoT3VwdXRDbG9iYmUKICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwcy5zaXplKCkgPT0gMyk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sw
XS5pc0ZQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzRlBSKCkpOwot
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNGUFIoKSk7Ci0gICAgICAgICAgICBq
aXQuYWRkRG91YmxlKHBhcmFtcy5yZXBzWzFdLmZwcigpLCBwYXJhbXMucmVwc1syXS5mcHIoKSwg
cGFyYW1zLnJlcHNbMF0uZnByKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9
PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1swXS5pc0ZQUigpKTsKKyAgICAgICAgICAg
IENIRUNLKHBhcmFtc1sxXS5pc0ZQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5p
c0ZQUigpKTsKKyAgICAgICAgICAgIGppdC5hZGREb3VibGUocGFyYW1zWzFdLmZwcigpLCBwYXJh
bXNbMl0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CiAKICAgICAgICAgICAgIGNsb2JiZXJBbGwu
Zm9yRWFjaChbJl0gKFJlZyByZWcpIHsKICAgICAgICAgICAgICAgICBqaXQubW92ZVplcm9Ub0Rv
dWJsZShyZWcuZnByKCkpOwpAQCAtMzU5MCwxMCArMzU5MSwxMCBAQCB2b2lkIHRlc3RQYXRjaHBv
aW50V2l0aEVhcmx5Q2xvYmJlcigpCiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJFYXJseShS
ZWdpc3RlclNldChyZWdpc3RlclRvQ2xvYmJlcikpOwogICAgICAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoCiAgICAgICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIENIRUNLKChw
YXJhbXMucmVwc1sxXS5ncHIoKSA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjApID09IGFyZzFJbkFy
Z0dQUik7Ci0gICAgICAgICAgICAgICAgQ0hFQ0soKHBhcmFtcy5yZXBzWzJdLmdwcigpID09IEdQ
UkluZm86OmFyZ3VtZW50R1BSMSkgPT0gYXJnMkluQXJnR1BSKTsKKyAgICAgICAgICAgICAgICBD
SEVDSygocGFyYW1zWzFdLmdwcigpID09IEdQUkluZm86OmFyZ3VtZW50R1BSMCkgPT0gYXJnMUlu
QXJnR1BSKTsKKyAgICAgICAgICAgICAgICBDSEVDSygocGFyYW1zWzJdLmdwcigpID09IEdQUklu
Zm86OmFyZ3VtZW50R1BSMSkgPT0gYXJnMkluQXJnR1BSKTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJhbXMucmVw
c1syXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAgIGFkZDMy
KGppdCwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7
CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVl
Pihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKQEAgLTM2MTgsMTYgKzM2MTks
MTYgQEAgdm9pZCB0ZXN0UGF0Y2hwb2ludENhbGxBcmcoKQogICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5yZXBzLnNpemUoKSA9PSAzKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlz
R1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNTdGFjaygpKTsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzU3RhY2soKSk7CisgICAgICAgICAgICBD
SEVDSyhwYXJhbXMuc2l6ZSgpID09IDMpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlz
R1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzFdLmlzU3RhY2soKSk7CisgICAgICAg
ICAgICBDSEVDSyhwYXJhbXNbMl0uaXNTdGFjaygpKTsKICAgICAgICAgICAgIGppdC5sb2FkMzIo
Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBwYXJhbXMucmVwc1sxXS5vZmZzZXRGcm9tRlAoKSksCi0gICAgICAgICAgICAg
ICAgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcGFyYW1zWzFdLm9mZnNldEZyb21G
UCgpKSwKKyAgICAgICAgICAgICAgICBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICAgICAgaml0
LmFkZDMyKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgcGFyYW1zLnJlcHNbMl0ub2Zmc2V0RnJvbUZQKCkpLAotICAgICAg
ICAgICAgICAgIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHBhcmFtc1syXS5vZmZz
ZXRGcm9tRlAoKSksCisgICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpKTsKICAgICAgICAg
fSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgcGF0Y2hwb2ludCk7CiAKQEAgLTM2NDYsMTEgKzM2NDcsMTEgQEAgdm9pZCB0ZXN0UGF0
Y2hwb2ludEZpeGVkUmVnaXN0ZXIoKQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAg
ICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUo
KSA9PSAzKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOwotICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0gPT0gVmFsdWVSZXAoR1BSSW5mbzo6cmVnVDAp
KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdID09IFZhbHVlUmVwKEdQUkluZm86
OnJlZ1QxKSk7Ci0gICAgICAgICAgICBhZGQzMihqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZv
OjpyZWdUMSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1swXS5pc0dQUigpKTsKKyAg
ICAgICAgICAgIENIRUNLKHBhcmFtc1sxXSA9PSBWYWx1ZVJlcChHUFJJbmZvOjpyZWdUMCkpOwor
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdID09IFZhbHVlUmVwKEdQUkluZm86OnJlZ1QxKSk7
CisgICAgICAgICAgICBhZGQzMihqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwg
cGFyYW1zWzBdLmdwcigpKTsKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRy
b2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7CiAKQEAgLTM2NzAs
MTEgKzM2NzEsMTEgQEAgdm9pZCB0ZXN0UGF0Y2hwb2ludEFueShWYWx1ZVJlcCByZXApCiAgICAg
ICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
YWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgICAgICAvLyBXZSBzaG91bGRuJ3QgaGF2ZSBzcGls
bGVkIHRoZSBpbnB1dHMsIHNvIHdlIGFzc2VydCB0aGF0IHRoZXkncmUgaW4gcmVnaXN0ZXJzLgot
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDMpOwotICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnJlcHNbMF0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwc1sxXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BS
KCkpOwotICAgICAgICAgICAgYWRkMzIoaml0LCBwYXJhbXMucmVwc1sxXS5ncHIoKSwgcGFyYW1z
LnJlcHNbMl0uZ3ByKCksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5zaXplKCkgPT0gMyk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMF0uaXNHUFIo
KSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMV0uaXNHUFIoKSk7CisgICAgICAgICAgICBD
SEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtc1sx
XS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICB9KTsK
ICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBwYXRjaHBvaW50KTsKIApAQCAtMzcwNCwxNiArMzcwNSwxNiBAQCB2b2lkIHRlc3RQYXRjaHBv
aW50TG90c09mTGF0ZUFueXMoKQogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAg
Ly8gV2Ugc2hvdWxkbid0IGhhdmUgc3BpbGxlZCB0aGUgaW5wdXRzLCBzbyB3ZSBhc3NlcnQgdGhh
dCB0aGV5J3JlIGluIHJlZ2lzdGVycy4KLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNp
emUoKSA9PSB0aGluZ3Muc2l6ZSgpICsgMSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVw
c1swXS5pc0dQUigpKTsKLSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKDApLCBwYXJhbXMucmVwc1swXS5ncHIoKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgcGFyYW1zLnJlcHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBpZiAocGFyYW1zLnJlcHNbaV0uaXNHUFIoKSkgewotICAgICAgICAgICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwc1tpXSAhPSBwYXJhbXMucmVwc1swXSk7Ci0gICAgICAgICAgICAgICAgICAg
IGppdC5hZGQzMihwYXJhbXMucmVwc1tpXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOwor
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSB0aGluZ3Muc2l6ZSgpICsgMSk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXNbMF0uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBwYXJhbXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBpZiAocGFyYW1zW2ldLmlzR1BSKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zW2ldICE9IHBhcmFtc1swXSk7CisgICAgICAgICAgICAgICAgICAgIGpp
dC5hZGQzMihwYXJhbXNbaV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbaV0uaXNT
dGFjaygpKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcGFyYW1zLnJlcHNbaV0ub2Zmc2V0RnJv
bUZQKCkpLCBwYXJhbXMucmVwc1swXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgIENIRUNL
KHBhcmFtc1tpXS5pc1N0YWNrKCkpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkMzIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBwYXJhbXNbaV0u
b2Zmc2V0RnJvbUZQKCkpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgfSk7CkBAIC0zNzM2LDE0ICszNzM3LDE0IEBAIHZvaWQgdGVz
dFBhdGNocG9pbnRBbnlJbW0oVmFsdWVSZXAgcmVwKQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzLnNpemUoKSA9PSAzKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BS
KCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0gICAgICAg
ICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgQ0hF
Q0socGFyYW1zLnJlcHNbMl0udmFsdWUoKSA9PSA0Mik7CisgICAgICAgICAgICBDSEVDSyhwYXJh
bXMuc2l6ZSgpID09IDMpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlzR1BSKCkpOwor
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzFdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zWzJdLmlzQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0udmFs
dWUoKSA9PSA0Mik7CiAgICAgICAgICAgICBqaXQuYWRkMzIoCi0gICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocGFyYW1zLnJlcHNb
Ml0udmFsdWUoKSkpLAotICAgICAgICAgICAgICAgIHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJh
bXMucmVwc1swXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocGFyYW1zWzJdLnZhbHVlKCkpKSwKKyAgICAgICAg
ICAgICAgICBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgICAgIH0pOwog
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCks
IHBhdGNocG9pbnQpOwogCkBAIC0zNzY1LDExICszNzY2LDExIEBAIHZvaWQgdGVzdFBhdGNocG9p
bnRNYW55SW1tcygpCiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJn
NCwgVmFsdWVSZXA6Oldhcm1BbnkpKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAg
ICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsK
LSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdID09IFZhbHVlUmVwOjpjb25zdGFudCg0
MikpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0gPT0gVmFsdWVSZXA6OmNvbnN0
YW50KDQzKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXSA9PSBWYWx1ZVJlcDo6
Y29uc3RhbnQoNDMwMDAwMDAwMDAwMDBsbCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJl
cHNbM10gPT0gVmFsdWVSZXA6OmNvbnN0YW50KGJpdHdpc2VfY2FzdDxpbnQ2NF90Pig0Mi41KSkp
OworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENI
RUNLKHBhcmFtc1swXSA9PSBWYWx1ZVJlcDo6Y29uc3RhbnQoNDIpKTsKKyAgICAgICAgICAgIENI
RUNLKHBhcmFtc1sxXSA9PSBWYWx1ZVJlcDo6Y29uc3RhbnQoNDMpKTsKKyAgICAgICAgICAgIENI
RUNLKHBhcmFtc1syXSA9PSBWYWx1ZVJlcDo6Y29uc3RhbnQoNDMwMDAwMDAwMDAwMDBsbCkpOwor
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdID09IFZhbHVlUmVwOjpjb25zdGFudChiaXR3aXNl
X2Nhc3Q8aW50NjRfdD4oNDIuNSkpKTsKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnRyb2xWYWx1ZT4oCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCkBAIC0zNzkx
LDExICszNzkyLDExIEBAIHZvaWQgdGVzdFBhdGNocG9pbnRXaXRoUmVnaXN0ZXJSZXN1bHQoKQog
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKLSAgICAgICAgICAgIENI
RUNLKHBhcmFtcy5yZXBzWzBdID09IFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6bm9uQXJnR1BSMCkp
OwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0gICAgICAgICAg
ICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsKLSAgICAgICAgICAgIGFkZDMyKGppdCwg
cGFyYW1zLnJlcHNbMV0uZ3ByKCksIHBhcmFtcy5yZXBzWzJdLmdwcigpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMyk7CisgICAgICAg
ICAgICBDSEVDSyhwYXJhbXNbMF0gPT0gVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpub25BcmdHUFIw
KSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMV0uaXNHUFIoKSk7CisgICAgICAgICAgICBD
SEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtc1sx
XS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICAgICAg
fSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgcGF0Y2hwb2ludCk7CiAKQEAgLTM4MTYsMTIgKzM4MTcsMTIgQEAgdm9pZCB0ZXN0UGF0
Y2hwb2ludFdpdGhTdGFja0FyZ3VtZW50UmVzdQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBz
LnNpemUoKSA9PSAzKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdID09IFZhbHVl
UmVwOjpzdGFjaygtc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHByb2MuZnJhbWVTaXplKCkpKSk7Ci0g
ICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENI
RUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0LnN0b3JlMzIocGFy
YW1zLnJlcHNbMV0uZ3ByKCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyLCAwKSk7Ci0gICAgICAgICAgICBqaXQuYWRkMzIocGFyYW1zLnJl
cHNbMl0uZ3ByKCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCAwKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDMp
OworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdID09IFZhbHVlUmVwOjpzdGFjaygtc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KHByb2MuZnJhbWVTaXplKCkpKSk7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXNbMV0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7
CisgICAgICAgICAgICBqaXQuc3RvcmUzMihwYXJhbXNbMV0uZ3ByKCksIENDYWxsSGVscGVyczo6
QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAwKSk7CisgICAgICAg
ICAgICBqaXQuYWRkMzIocGFyYW1zWzJdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0Nh
bGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgMCkpOwogICAgICAgICB9KTsKICAgICBy
b290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRj
aHBvaW50KTsKIApAQCAtMzg0NCwxMyArMzg0NSwxMyBAQCB2b2lkIHRlc3RQYXRjaHBvaW50V2l0
aEFueVJlc3VsdCgpCiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDMpOwot
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNTdGFjaygpKTsKLSAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtcy5yZXBzWzFd
LmdwcigpLCBwYXJhbXMucmVwc1syXS5ncHIoKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1sw
XS5pc1N0YWNrKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzFdLmlzR1BSKCkpOworICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgYWRkMzIoaml0
LCBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSwgR1BSSW5mbzo6cmVnVDApOwogICAg
ICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKEdQUkluZm86OnJlZ1QwLCBGUFJJbmZv
OjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1Qw
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHBhcmFt
cy5yZXBzWzBdLm9mZnNldEZyb21GUCgpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUo
RlBSSW5mbzo6ZnBSZWdUMCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBwYXJhbXNbMF0ub2Zmc2V0RnJvbUZQKCkpKTsKICAgICAgICAgfSk7CiAgICAg
cm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0
Y2hwb2ludCk7CiAKQEAgLTM4NjYsNyArMzg2Nyw3IEBAIHZvaWQgdGVzdFNpbXBsZUNoZWNrKCkK
ICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDEpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnNpemUoKSA9PSAxKTsKIAogICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlz
IHdvcmsgYmVjYXVzZSBhIGZ1bmN0aW9uIHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBoYXZlIGNh
bGxlZQogICAgICAgICAgICAgLy8gc2F2ZXMuCkBAIC0zODk4LDcgKzM4OTksNyBAQCB2b2lkIHRl
c3RDaGVja0xlc3NUaGFuKCkKICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDEpOwor
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAxKTsKIAogICAgICAgICAgICAgLy8g
VGhpcyBzaG91bGQgYWx3YXlzIHdvcmsgYmVjYXVzZSBhIGZ1bmN0aW9uIHRoaXMgc2ltcGxlIHNo
b3VsZCBuZXZlciBoYXZlIGNhbGxlZQogICAgICAgICAgICAgLy8gc2F2ZXMuCkBAIC0zOTQ0LDcg
KzM5NDUsNyBAQCB2b2lkIHRlc3RDaGVja01lZ2FDb21ibygpCiAgICAgY2hlY2stPnNldEdlbmVy
YXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzLnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMSk7
CiAKICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGFsd2F5cyB3b3JrIGJlY2F1c2UgYSBmdW5j
dGlvbiB0aGlzIHNpbXBsZSBzaG91bGQgbmV2ZXIgaGF2ZSBjYWxsZWUKICAgICAgICAgICAgIC8v
IHNhdmVzLgpAQCAtMzk4NCwxMSArMzk4NSwxMSBAQCB2b2lkIHRlc3RDaGVja0FkZEltbSgpCiAg
ICAgY2hlY2tBZGQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNb
M10uaXNDb25zdGFudCgpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLnZhbHVl
KCkgPT0gNDIpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5y
ZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXNbM10uaXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIENI
RUNLKHBhcmFtc1szXS52YWx1ZSgpID09IDQyKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50
MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAg
ICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQy
KSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuYWRkRG91YmxlKEZQUkluZm86
OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlv
bkVwaWxvZ3VlKCk7CkBAIC00MDIwLDExICs0MDIxLDExIEBAIHZvaWQgdGVzdENoZWNrQWRkSW1t
Q29tbXV0ZSgpCiAgICAgY2hlY2tBZGQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
ICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2go
aml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKLSAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHNbM10uaXNDb25zdGFudCgpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzWzNdLnZhbHVlKCkgPT0gNDIpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91
YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0u
aXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbM10uaXNDb25zdGFudCgpKTsKKyAg
ICAgICAgICAgIENIRUNLKHBhcmFtc1szXS52YWx1ZSgpID09IDQyKTsKKyAgICAgICAgICAgIGpp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDAp
OwogICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDQyKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuYWRkRG91
YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0
LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC00MDU2LDExICs0MDU3LDExIEBAIHZvaWQgdGVz
dENoZWNrQWRkSW1tU29tZVJlZ2lzdGVyKCkKICAgICBjaGVja0FkZC0+c2V0R2VuZXJhdG9yKAog
ICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6
ZSgpID09IDQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0g
ICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS5pc0dQUigpKTsKLSAgICAgICAgICAgIGpp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBS
ZWdUMCk7Ci0gICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNb
M10uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNp
emUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtc1szXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0
SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAg
ICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtc1szXS5ncHIoKSwgRlBSSW5mbzo6
ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuYWRkRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQ
UkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7
CiAgICAgICAgICAgICBqaXQucmV0KCk7CkBAIC00MDkzLDExICs0MDk0LDExIEBAIHZvaWQgdGVz
dENoZWNrQWRkKCkKICAgICBjaGVja0FkZC0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
ewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOwotICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwc1szXS5pc0dQUigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJU
b0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAg
ICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbM10uZ3ByKCksIEZQUklu
Zm86OmZwUmVnVDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSA0KTsKKyAg
ICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBh
cmFtc1szXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShw
YXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZl
cnRJbnQzMlRvRG91YmxlKHBhcmFtc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAg
ICAgICAgICBqaXQuYWRkRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDAp
OwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBq
aXQucmV0KCk7CkBAIC00MTI2LDExICs0MTI3LDExIEBAIHZvaWQgdGVzdENoZWNrQWRkNjQoKQog
ICAgIGNoZWNrQWRkLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAg
ICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAg
ICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBz
WzNdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFt
cy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252
ZXJ0SW50NjRUb0RvdWJsZShwYXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7
CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hF
Q0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzR1BS
KCkpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtc1syXS5ncHIo
KSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3Vi
bGUocGFyYW1zWzNdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5h
ZGREb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAg
ICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAg
LTQyMDAsMTEgKzQyMDEsMTEgQEAgdm9pZCB0ZXN0Q2hlY2tTdWJJbW0oKQogICAgIGNoZWNrU3Vi
LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVw
c1syXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzQ29uc3Rh
bnQoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS52YWx1ZSgpID09IDQyKTsK
LSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIo
KSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09
IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zWzNdLmlzQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNb
M10udmFsdWUoKSA9PSA0Mik7CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUo
cGFyYW1zWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIGppdC5jb252
ZXJ0SW50MzJUb0RvdWJsZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMig0MiksIEZQUkluZm86
OmZwUmVnVDEpOwogICAgICAgICAgICAgaml0LnN1YkRvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgp
OwpAQCAtNDIzNywxMSArNDIzOCwxMSBAQCB2b2lkIHRlc3RDaGVja1N1YkJhZEltbSgpCiAgICAg
Y2hlY2tTdWItPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIENIRUNLKHBh
cmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10u
aXNDb25zdGFudCgpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLnZhbHVlKCkg
PT0gYmFkSW1tKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMu
cmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBDSEVDSyhwYXJh
bXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOwor
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBD
SEVDSyhwYXJhbXNbM10udmFsdWUoKSA9PSBiYWRJbW0pOworICAgICAgICAgICAgaml0LmNvbnZl
cnRJbnQzMlRvRG91YmxlKHBhcmFtc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAg
ICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoYmFkSW1tKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuc3ViRG91Ymxl
KEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC00Mjc1LDExICs0Mjc2LDExIEBAIHZvaWQgdGVzdENo
ZWNrU3ViKCkKICAgICBjaGVja1N1Yi0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewog
ICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChq
aXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOwotICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwc1szXS5pc0dQUigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0Rv
dWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAg
ICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbM10uZ3ByKCksIEZQUkluZm86
OmZwUmVnVDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSA0KTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFt
c1szXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJh
bXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZlcnRJ
bnQzMlRvRG91YmxlKHBhcmFtc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAg
ICAgICBqaXQuc3ViRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwog
ICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBqaXQu
cmV0KCk7CkBAIC00MzEzLDExICs0MzE0LDExIEBAIHZvaWQgdGVzdENoZWNrU3ViNjQoKQogICAg
IGNoZWNrU3ViLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAg
ICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwc1syXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNd
LmlzR1BSKCkpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5y
ZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0
SW50NjRUb0RvdWJsZShwYXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzR1BSKCkp
OworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtc1syXS5ncHIoKSwg
RlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUo
cGFyYW1zWzNdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5zdWJE
b3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBq
aXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQz
ODYsOSArNDM4Nyw5IEBAIHZvaWQgdGVzdENoZWNrTmVnKCkKICAgICBjaGVja05lZy0+c2V0R2Vu
ZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnJlcHMuc2l6ZSgpID09IDMpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNH
UFIoKSk7Ci0gICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNb
Ml0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNp
emUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAg
ICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUkluZm86
OmZwUmVnVDEpOwogICAgICAgICAgICAgaml0Lm5lZ2F0ZURvdWJsZShGUFJJbmZvOjpmcFJlZ1Qx
LCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1
ZSgpOwogICAgICAgICAgICAgaml0LnJldCgpOwpAQCAtNDQxNiw5ICs0NDE3LDkgQEAgdm9pZCB0
ZXN0Q2hlY2tOZWc2NCgpCiAgICAgY2hlY2tOZWctPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsK
LSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAg
aml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpm
cFJlZ1QxKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMyk7CisgICAgICAg
ICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQuY29udmVydElu
dDY0VG9Eb3VibGUocGFyYW1zWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAg
ICAgIGppdC5uZWdhdGVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7
CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGpp
dC5yZXQoKTsKQEAgLTQ0NTEsMTEgKzQ0NTIsMTEgQEAgdm9pZCB0ZXN0Q2hlY2tNdWwoKQogICAg
IGNoZWNrTXVsLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAg
ICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwc1syXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNd
LmlzR1BSKCkpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5y
ZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0
SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzR1BSKCkp
OworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtc1syXS5ncHIoKSwg
RlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUo
cGFyYW1zWzNdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5tdWxE
b3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBq
aXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQ0
OTIsMTEgKzQ0OTMsMTEgQEAgdm9pZCB0ZXN0Q2hlY2tNdWxNZW1vcnkoKQogICAgIGNoZWNrTXVs
LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVw
c1syXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlzR1BSKCkp
OwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdw
cigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0Rv
dWJsZShwYXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAg
ICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJd
LmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzR1BSKCkpOworICAgICAg
ICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtc1syXS5ncHIoKSwgRlBSSW5mbzo6
ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zWzNd
LmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5tdWxEb3VibGUoRlBS
SW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1
bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQ1MzgsMTEgKzQ1
MzksMTEgQEAgdm9pZCB0ZXN0Q2hlY2tNdWwyKCkKICAgICBjaGVja011bC0+c2V0R2VuZXJhdG9y
KAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMu
c2l6ZSgpID09IDQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7
Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS5pc0NvbnN0YW50KCkpOwotICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10udmFsdWUoKSA9PSAyKTsKLSAgICAgICAgICAgIGpp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBS
ZWdUMCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNd
LmlzQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbM10udmFsdWUoKSA9PSAy
KTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCks
IEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91Ymxl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAg
ICAgICAgIGppdC5tdWxEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7
CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTQ1NzIsMTEgKzQ1
NzMsMTEgQEAgdm9pZCB0ZXN0Q2hlY2tNdWw2NCgpCiAgICAgY2hlY2tNdWwtPnNldEdlbmVyYXRv
cigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBz
LnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkp
OwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXNHUFIoKSk7Ci0gICAgICAgICAg
ICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3ByKCksIEZQUkluZm86
OmZwUmVnVDApOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5y
ZXBzWzNdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXNbM10uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQuY29u
dmVydEludDY0VG9Eb3VibGUocGFyYW1zWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAg
ICAgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0RvdWJsZShwYXJhbXNbM10uZ3ByKCksIEZQUklu
Zm86OmZwUmVnVDEpOwogICAgICAgICAgICAgaml0Lm11bERvdWJsZShGUFJJbmZvOjpmcFJlZ1Qx
LCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1
ZSgpOwogICAgICAgICAgICAgaml0LnJldCgpOwpAQCAtNDY3NSw5ICs0Njc2LDkgQEAgdm9pZCBn
ZW5lcmljVGVzdENvbXBhcmUoCiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAg
ICAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5yZXBzLnNpemUoKSA9PSAxKTsKLSAgICAgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sw
XS5pc0dQUigpKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigxKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlz
R1BSKCkpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKDEpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIHRoZW5D
YXNlLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRj
aHBvaW50KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZp
c2lvbiAxOTM1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIC8vIFdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGV4cGVyaW1lbnRhbCB0cmFuc2l0
aW9uIGZyb20gTExWTSB0byBCMyBhcyB0aGUgYmFja2VuZCBmb3IgdGhlIEZUTC4gV2UgZG9uJ3QK
IC8vIHlldCBrbm93IGhvdyBpdCB3aWxsIHR1cm4gb3V0LiBGb3Igbm93LCB0aGlzIGZsYWcgd2ls
bCBjb250cm9sIHdoZXRoZXIgRlRMIHVzZXMgQjMuIFJlbWVtYmVyIHRvIHNldCB0aGlzCiAvLyB0
byAwIGJlZm9yZSBjb21taXR0aW5nIQotI2RlZmluZSBGVExfVVNFU19CMyAwCisjZGVmaW5lIEZU
TF9VU0VTX0IzIDEKIAogc3RydWN0IE5vZGU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY3BwCShyZXZp
c2lvbiAxOTM1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvbkhh
bmRsZXJNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmgiCiAK
LSNpZiBFTkFCTEUoRlRMX0pJVCkKKyNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VTX0Iz
CiAKICNpbmNsdWRlICJGVExTdGF0ZS5oIgogCkBAIC0xNjQsNCArMTY0LDQgQEAgQ2FsbFNpdGVJ
bmRleCBFeGNlcHRpb25IYW5kbGVyTWFuYWdlcjo6cAogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCiAKLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkgJiYgIUZUTF9VU0VTX0IzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4
Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5oCShyZXZpc2lvbiAxOTM1MzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgRlRMRXhjZXB0aW9uSGFu
ZGxlck1hbmFnZXJfaAogI2RlZmluZSBGVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlcl9oCiAKLSNp
ZiBFTkFCTEUoRlRMX0pJVCkKKyNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKIAog
I2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkZUTEpTQ2FsbC5oIgpAQCAtODMsNiAr
ODMsNiBAQCBwcml2YXRlOgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKLSNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VT
X0IzCiAKICNlbmRpZiAvLyBGVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlcl9oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCShyZXZpc2lvbiAxOTM1MzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGVExKU0NhbGwu
aCIKIAotI2lmIEVOQUJMRShGVExfSklUKQorI2lmIEVOQUJMRShGVExfSklUKSAmJiAhRlRMX1VT
RVNfQjMKIAogI2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgpAQCAt
NjMsNSArNjMsNSBAQCB2b2lkIEpTQ2FsbDo6ZW1pdChDQ2FsbEhlbHBlcnMmIGppdCwgU3RhCiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQor
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAmJiAhRlRMX1VTRVNfQjMKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCShyZXZpc2lvbiAxOTM1MzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw5IEBACiAjaWZuZGVmIEZUTEpTQ2FsbF9oCiAjZGVmaW5lIEZUTEpTQ2FsbF9oCiAKLSNpZiBF
TkFCTEUoRlRMX0pJVCkKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKworI2lmIEVOQUJMRShGVExf
SklUKSAmJiAhRlRMX1VTRVNfQjMKIAogI2luY2x1ZGUgIkZUTEpTQ2FsbEJhc2UuaCIKIApAQCAt
NjEsNyArNjMsNyBAQCBwdWJsaWM6CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAotI2Vu
ZGlmIC8vIEVOQUJMRShGVExfSklUKQorI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAmJiAhRlRM
X1VTRVNfQjMKIAogI2VuZGlmIC8vIEZUTEpTQ2FsbF9oCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmNwcAkocmV2aXNpb24gMTkzNTM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZUTEpTQ2Fs
bEJhc2UuaCIKIAotI2lmIEVOQUJMRShGVExfSklUKQorI2lmIEVOQUJMRShGVExfSklUKSAmJiAh
RlRMX1VTRVNfQjMKIAogI2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5o
IgpAQCAtNTUsMTIgKzU1LDggQEAgdm9pZCBKU0NhbGxCYXNlOjplbWl0KENDYWxsSGVscGVycyYg
aml0LAogewogICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9jYWxsU2l0ZUluZGV4KTsKIAotI2lmIEZU
TF9VU0VTX0IzCi0gICAgVU5VU0VEX1BBUkFNKG9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNr
U3BpbGxTbG90KTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCiAgICAgaWYgKG1fY29ycmVzcG9uZGlu
Z0dlbmVyaWNVbndpbmRPU1JFeGl0KQogICAgICAgICBtX2NvcnJlc3BvbmRpbmdHZW5lcmljVW53
aW5kT1NSRXhpdC0+c3BpbGxSZWdpc3RlcnNUb1NwaWxsU2xvdChqaXQsIG9zckV4aXRGcm9tR2Vu
ZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90KTsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogCiAgICAg
aml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9jYWxsU2l0ZUluZGV4LmJp
dHMoKSksIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
SlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKIApAQCAtMTA3LDUgKzEwMyw1IEBAIHZvaWQgSlND
YWxsQmFzZTo6bGluayhWTSYgdm0sIExpbmtCdWZmZXIKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAogCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpICYmICFGVExfVVNFU19CMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpTQ2FsbEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpTQ2FsbEJhc2UuaAkocmV2aXNpb24gMTkzNTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKU0NhbGxCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDkgQEAKICNp
Zm5kZWYgRlRMSlNDYWxsQmFzZV9oCiAjZGVmaW5lIEZUTEpTQ2FsbEJhc2VfaAogCi0jaWYgRU5B
QkxFKEZUTF9KSVQpCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJ
VCkgJiYgIUZUTF9VU0VTX0IzCiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRl
ICJDYWxsTGlua0luZm8uaCIKQEAgLTczLDcgKzc1LDcgQEAgcHVibGljOgogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCiAKLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VTX0IzCiAKICNlbmRpZiAvLyBGVExKU0NhbGxCYXNl
X2gKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFy
Z3MuY3BwCShyZXZpc2lvbiAxOTM1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpTQ2FsbFZhcmFyZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRlRMSlNDYWxsVmFyYXJncy5oIgogCi0jaWYgRU5B
QkxFKEZUTF9KSVQpCisjaWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwogCiAjaW5j
bHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKQEAgLTIyNSw1ICsy
MjUsNSBAQCB2b2lkIEpTQ2FsbFZhcmFyZ3M6OmxpbmsoVk0mIHZtLCBMaW5rQnVmCiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpGVEwKIAotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKSAmJiAhRlRMX1VTRVNfQjMKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmgJKHJldmlzaW9uIDE5MzUzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw3ICsyNiw5IEBACiAjaWZuZGVmIEZUTEpTQ2FsbFZhcmFyZ3NfaAogI2RlZmlu
ZSBGVExKU0NhbGxWYXJhcmdzX2gKIAotI2lmIEVOQUJMRShGVExfSklUKQorI2luY2x1ZGUgIkRG
R0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwogCiAjaW5j
bHVkZSAiRlRMSlNDYWxsQmFzZS5oIgogCkBAIC03NSw3ICs3Nyw3IEBAIHB1YmxpYzoKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisjZW5k
aWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwogCiAjZW5kaWYgLy8gRlRMSlND
YWxsVmFyYXJnc19oCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNUYWls
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU1Rh
aWxDYWxsLmNwcAkocmV2aXNpb24gMTkzNTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKU1RhaWxDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZUTEpTVGFpbENhbGwuaCIKIAotI2lmIEVOQUJM
RShGVExfSklUKQorI2lmIEVOQUJMRShGVExfSklUKSAmJiAhRlRMX1VTRVNfQjMKIAogI2luY2x1
ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgpAQCAtMzgsMjcg
KzM4LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCi11c2luZyBuYW1l
c3BhY2UgQjM7CiB1c2luZyBuYW1lc3BhY2UgREZHOwogCi0jaWYgRlRMX1VTRVNfQjMKLQotSlNU
YWlsQ2FsbDo6SlNUYWlsQ2FsbChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQsIE5vZGUqIG5v
ZGUsIGNvbnN0IFZlY3RvcjxFeGl0VmFsdWU+JiBhcmd1bWVudHMpCi0gICAgOiBKU0NhbGxCYXNl
KENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgbm9kZS0+b3Jp
Z2luLnNlbWFudGljKQotICAgICwgbV9wYXRjaHBvaW50KHBhdGNocG9pbnQpCi0gICAgLCBtX2Fy
Z3VtZW50cyhhcmd1bWVudHMpCi0gICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0KDApCi17Ci0gICAg
VU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci19Ci0KLXZvaWQgSlNUYWlsQ2FsbDo6ZW1pdChK
SVRDb2RlJiwgQ0NhbGxIZWxwZXJzJikKLXsKLSAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0o
KTsKLX0KLQotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLQogbmFtZXNwYWNlIHsKIAogRlRMOjpMb2Nh
dGlvbiBnZXRSZWdpc3RlcldpdGhBZGRlbmQoY29uc3QgRXhpdFZhbHVlJiB2YWx1ZSwgU3RhY2tN
YXBzOjpSZWNvcmQmIHJlY29yZCwgU3RhY2tNYXBzJiBzdGFja21hcHMpCkBAIC0zNDIsOCArMzIz
LDYgQEAgdm9pZCBKU1RhaWxDYWxsOjplbWl0KEpJVENvZGUmIGppdENvZGUsIAogICAgIG1fY2Fs
bExpbmtJbmZvLT5zZXRVcENhbGwobV90eXBlLCBtX3NlbWFudGljZU9yaWdpbiwgY2FsbGVlR1BS
KTsKIH0KIAotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCi0KIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKIAotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KSAmJiAhRlRMX1VTRVNfQjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNU
YWlsQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNU
YWlsQ2FsbC5oCShyZXZpc2lvbiAxOTM1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpTVGFpbENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOSBAQAogI2lmbmRl
ZiBGVExKU1RhaWxDYWxsX2gKICNkZWZpbmUgRlRMSlNUYWlsQ2FsbF9oCiAKLSNpZiBFTkFCTEUo
RlRMX0pJVCkKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKworI2lmIEVOQUJMRShGVExfSklUKSAm
JiAhRlRMX1VTRVNfQjMKIAogI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCiAjaW5jbHVk
ZSAiREZHQ29tbW9uLmgiCkBAIC00NSwyMCArNDcsMTIgQEAgbmFtZXNwYWNlIEZUTCB7CiBjbGFz
cyBKU1RhaWxDYWxsIDogcHVibGljIEpTQ2FsbEJhc2UgewogcHVibGljOgogICAgIEpTVGFpbENh
bGwoCi0jaWYgRlRMX1VTRVNfQjMKLSAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSosCi0jZWxz
ZSAvLyBGVExfVVNFU19CMwogICAgICAgICB1bnNpZ25lZCBzdGFja21hcElELAotI2VuZGlmIC8v
IEZUTF9VU0VTX0IzCiAgICAgICAgIERGRzo6Tm9kZSosIGNvbnN0IFZlY3RvcjxFeGl0VmFsdWU+
JiBhcmd1bWVudHMpOwogCiAgICAgdm9pZCBlbWl0KEpJVENvZGUmLCBDQ2FsbEhlbHBlcnMmKTsK
IAotI2lmIEZUTF9VU0VTX0IzCi0gICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGF0Y2hwb2ludDsgfQotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKICAg
ICB1bnNpZ25lZCBzdGFja21hcElEKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja21hcElEOyB9Ci0j
ZW5kaWYgLy8gRlRMX1VTRVNfQjMKIAogICAgIHVuc2lnbmVkIGVzdGltYXRlZFNpemUoKSBjb25z
dCB7IHJldHVybiBtX2VzdGltYXRlZFNpemU7IH0KIApAQCAtNzAsMTEgKzY0LDcgQEAgcHVibGlj
OgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0jaWYgRlRMX1VTRVNfQjMKLSAgICBCMzo6UGF0Y2hw
b2ludFZhbHVlKiBtX3BhdGNocG9pbnQ7Ci0jZWxzZSAvLyBGVExfVVNFU19CMwogICAgIHVuc2ln
bmVkIG1fc3RhY2ttYXBJRDsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAgIFZlY3RvcjxFeGl0
VmFsdWU+IG1fYXJndW1lbnRzOwogICAgIHVuc2lnbmVkIG1fZXN0aW1hdGVkU2l6ZTsKIApAQCAt
ODQsNyArNzQsNyBAQCBwdWJsaWM6CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAotI2Vu
ZGlmIC8vIEVOQUJMRShGVExfSklUKQorI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAmJiAhRlRM
X1VTRVNfQjMKIAogI2VuZGlmIC8vIEZUTEpTVGFpbENhbGxfaAogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTkz
NTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkFpckdlbmVyYXRp
b25Db250ZXh0LmgiCiAjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgi
CisjaW5jbHVkZSAiQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiREZHRG9taW5hdG9ycy5oIgpAQCAtNDgyOCwxNCArNDgyOSwxMDcg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgpCiAgICAgewor
ICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOworICAgICAgICB1bnNpZ25lZCBudW1BcmdzID0g
bm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CisKKyAgICAgICAgTFZhbHVlIGpzQ2FsbGVlID0gbG93
SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKwogI2lmIEZUTF9VU0VTX0Iz
Ci0gICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkgfHwgIXZlcmJvc2VDb21w
aWxhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgIENSQVNIKCk7Ci0jZWxzZQotICAgICAgICBp
bnQgbnVtQXJncyA9IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CisgICAgICAgIHVuc2lnbmVk
IGZyYW1lU2l6ZSA9IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBudW1BcmdzOworICAg
ICAgICB1bnNpZ25lZCBhbGlnbmVkRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIGZyYW1lU2l6ZSk7CiAKLSAgICAgICAgTFZhbHVl
IGpzQ2FsbGVlID0gbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpOwor
ICAgICAgICAvLyBKUy0+SlMgY2FsbGluZyBjb252ZW50aW9uIHJlcXVpcmVzIHRoYXQgdGhlIGNh
bGxlciBhbGxvd3MgdGhpcyBtdWNoIHNwYWNlIG9uIHRvcCBvZiBzdGFjayB0bworICAgICAgICAv
LyBnZXQgdHJhc2hlZCBieSB0aGUgY2FsbGVlLCBldmVuIGlmIG5vdCBhbGwgb2YgdGhhdCBzcGFj
ZSBpcyB1c2VkIHRvIHBhc3MgYXJndW1lbnRzLiBXZSB0ZWxsCisgICAgICAgIC8vIEIzIHRoaXMg
ZXhwbGljaXRseSBmb3IgdHdvIHJlYXNvbnM6CisgICAgICAgIC8vCisgICAgICAgIC8vIC0gV2Ug
d2lsbCBvbmx5IHBhc3MgZnJhbWVTaXplIHdvcnRoIG9mIHN0dWZmLgorICAgICAgICAvLyAtIFRo
ZSB0cmFzaGVkIHN0YWNrIGd1YXJhbnRlZSBpcyBsb2dpY2FsbHkgc2VwYXJhdGUgZnJvbSB0aGUg
YWN0IG9mIHBhc3NpbmcgYXJndW1lbnRzLCBzbyB3ZQorICAgICAgICAvLyAgIHNob3VsZG4ndCBy
ZWx5IG9uIEFpciB0byBpbmZlciB0aGUgdHJhc2hlZCBzdGFjayBwcm9wZXJ0eSBiYXNlZCBvbiB0
aGUgYXJndW1lbnRzIGl0IGVuZHMKKyAgICAgICAgLy8gICB1cCBzZWVpbmcuCisgICAgICAgIG1f
cHJvYy5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKGFsaWduZWRGcmFtZVNpemUpOworCisgICAgICAg
IC8vIENvbGxlY3QgdGhlIGFyZ3VtZW50cywgc2luY2UgdGhpcyBjYW4gZ2VuZXJhdGUgY29kZSBh
bmQgd2Ugd2FudCB0byBnZW5lcmF0ZSBpdCBiZWZvcmUgd2UgZW1pdAorICAgICAgICAvLyB0aGUg
Y2FsbC4KKyAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVmFsdWU+IGFyZ3VtZW50czsKKworICAg
ICAgICAvLyBNYWtlIHRoaXMgZWFzeSBmb3Igb3Vyc2VsdmVzLgorICAgICAgICBhdXRvIGFkZEFy
Z3VtZW50ID0gWyZdIChMVmFsdWUgdmFsdWUsIGNvbnN0IEIzOjpWYWx1ZVJlcCYgcmVwKSB7Cisg
ICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUodmFsdWUsIHJlcCkp
OworICAgICAgICB9OworCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBjYWxsZWUgZ29l
cyBpbnRvIEdQUjAuCisgICAgICAgIGFkZEFyZ3VtZW50KGpzQ2FsbGVlLCBWYWx1ZVJlcDo6cmVn
KEdQUkluZm86OnJlZ1QwKSk7CisKKyAgICAgICAgLy8gTm93IHB1dCB0aGluZ3MgaW50byB0aGUg
c3RhY2suCisgICAgICAgIGFkZEFyZ3VtZW50KGpzQ2FsbGVlLCBWYWx1ZVJlcDo6c3RhY2tBcmd1
bWVudChWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSkpOworICAgICAgICBhZGRBcmd1
bWVudCgKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIobnVtQXJncyksCisgICAgICAgICAg
ICBWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1l
bnRDb3VudCkpLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKSB7CisgICAgICAgICAgICBhZGRBcmd1bWVudCgK
KyAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSAr
IGkpKSwKKyAgICAgICAgICAgICAgICBWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChpKSkpOworICAgICAgICB9CisKKyAgICAgICAgUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CisgICAgICAgIHBhdGNo
cG9pbnQtPmFwcGVuZFZlY3Rvcihhcmd1bWVudHMpOworICAgICAgICBwYXRjaHBvaW50LT5jbG9i
YmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNo
cG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2Fs
bCgpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpy
ZWcoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9y
aWdpbiA9IGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsKKyAgICAgICAgU3RhdGUq
IHN0YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigK
KyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4ID0gc3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4
KGNvZGVPcmlnaW4pOwogCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElmIHdlIHdlcmUgaGFu
ZGxpbmcgZXhjZXB0aW9ucywgdGhlbiBhdCB0aGlzIHBvaW50IHdlIHdvdWxkIGFzayBvdXIgZGVz
Y3JpcHRvcgorICAgICAgICAgICAgICAgIC8vIHRvIHByZXBhcmUgYW5kIHRoZW4gd2Ugd291bGQg
bW9kaWZ5IHRoZSBPU1JFeGl0IGRhdGEgc3RydWN0dXJlIGluc2lkZSB0aGUKKyAgICAgICAgICAg
ICAgICAvLyBPU1JFeGl0SGFuZGxlIHRvIGxpbmsgaXQgdXAgdG8gdGhpcyBjYWxsLgorCisgICAg
ICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKKyAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQpKSk7CisKKyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9
IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7CisKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOworICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCisg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1Qw
LCB0YXJnZXRUb0NoZWNrLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoMCkpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RD
YWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGRvbmUgPSBqaXQuanVtcCgpOworCisgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0
KTsKKworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAg
ZG9uZS5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENh
bGwoCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0ID8gQ2FsbExp
bmtJbmZvOjpDb25zdHJ1Y3QgOiBDYWxsTGlua0luZm86OkNhbGwsCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgR1BSSW5mbzo6cmVnVDApOworCisgICAgICAgICAg
ICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoLXBhcmFtcy5wcm9jKCkuZnJhbWVTaXplKCkpLAorICAgICAgICAgICAgICAgICAg
ICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAg
ICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
c2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
KHNsb3dDYWxsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YodGFyZ2V0VG9DaGVjayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwor
I2Vsc2UKICAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKIAog
ICAgICAgICB1bnNpZ25lZCBmcmFtZVNpemUgPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXpl
ICsgbnVtQXJnczsKQEAgLTQ4NDgsOCArNDk0Miw4IEBAIHByaXZhdGU6CiAgICAgICAgIGFyZ3Vt
ZW50cy5hcHBlbmQoZ2V0VW5kZWYobV9vdXQuaW50NjQpKTsgLy8gY29kZSBibG9jawogICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKGpzQ2FsbGVlKTsgLy8gY2FsbGVlIC0+IHN0YWNrCiAgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2NChudW1BcmdzKSk7IC8vIGFyZ3VtZW50
IGNvdW50IGFuZCB6ZXJvcyBmb3IgdGhlIHRhZwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bUFyZ3M7ICsraSkKLSAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobG93SlNWYWx1ZSht
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSArIGkpKSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1BcmdzOyArK2kpCisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5k
KGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxICsgaSkpKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhZGRpbmc7ICsraSkKICAgICAgICAgICAgIGFyZ3Vt
ZW50cy5hcHBlbmQoZ2V0VW5kZWYobV9vdXQuaW50NjQpKTsKIApAQCAtNDg2Myw3ICs0OTU3LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKG1fb3V0LmludDY0
LCBtX291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKICAgICAgICAg
c2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNV2ViS2l0SlNDYWxsQ29u
dik7CiAgICAgICAgIAotICAgICAgICBtX2Z0bFN0YXRlLmpzQ2FsbHMuYXBwZW5kKEpTQ2FsbChz
dGFja21hcElELCBtX25vZGUsIGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKSkpOwor
ICAgICAgICBtX2Z0bFN0YXRlLmpzQ2FsbHMuYXBwZW5kKEpTQ2FsbChzdGFja21hcElELCBub2Rl
LCBjb2RlT3JpZ2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCkpKTsKICAgICAgICAgCiAgICAgICAg
IHNldEpTVmFsdWUoY2FsbCk7CiAjZW5kaWYKQEAgLTUzMzMsNyArNTQyNyw3IEBAIHByaXZhdGU6
CiAKICAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yID0gYXBwZW5kT1NS
RXhpdERlc2NyaXB0b3IoVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIEV4Y2VwdGlvblR5cGU6Ok5v
bmUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwogICAgICAgICAKLSAgICAgICAgU3Rh
Y2ttYXBBcmd1bWVudExpc3QgYXJndW1lbnRzID0gYnVpbGRFeGl0QXJndW1lbnRzKGV4aXREZXNj
cmlwdG9yLCBtX2Z0bFN0YXRlLm9zckV4aXREZXNjcmlwdG9ySW1wbHMubGFzdCgpLCBGb3JtYXR0
ZWRWYWx1ZSgpKTsKKyAgICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3QgYXJndW1lbnRzID0gYnVp
bGRFeGl0QXJndW1lbnRzKGV4aXREZXNjcmlwdG9yLCBtX2Z0bFN0YXRlLm9zckV4aXREZXNjcmlw
dG9ySW1wbHMubGFzdCgpLm1fY29kZU9yaWdpbiwgRm9ybWF0dGVkVmFsdWUoKSk7CiAgICAgICAg
IGNhbGxTdGFja21hcChleGl0RGVzY3JpcHRvciwgYXJndW1lbnRzKTsKICAgICAgICAgCiAgICAg
ICAgIGV4aXREZXNjcmlwdG9yLT5tX2lzSW52YWxpZGF0aW9uUG9pbnQgPSB0cnVlOwpAQCAtNzkw
MSw3ICs3OTk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmVzdWx0LT5zZXRHZW5lcmF0b3IoCiAg
ICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIFZlY3RvcjxMb2NhdGlvbj4gbG9j
YXRpb25zOwotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgQjM6OlZhbHVlUmVwJiByZXAgOiBw
YXJhbXMucmVwcykKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEIzOjpWYWx1ZVJlcCYgcmVw
IDogcGFyYW1zKQogICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnMuYXBwZW5kKExvY2F0aW9u
Ojpmb3JWYWx1ZVJlcChyZXApKTsKIAogICAgICAgICAgICAgICAgIFJlZlB0cjxMYXp5U2xvd1Bh
dGg6OkdlbmVyYXRvcj4gZ2VuZXJhdG9yID0gZnVuY3Rvcihsb2NhdGlvbnMpOwpAQCAtNzkwOSwx
MiArODAwMywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6UGF0
Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGRvbmUgPSBqaXQubGFiZWwoKTsKIAotICAgICAg
ICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBwYXJhbXMudXNlZFJlZ2lzdGVy
czsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gcGFyYW1zLnVz
ZWRSZWdpc3RlcnMoKTsKIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBcyBwYXJ0IG9mIGhh
bmRsaW5nIGV4Y2VwdGlvbnMsIHdlIG5lZWQgdG8gY3JlYXRlIGEgY29uY3JldGUgT1NSRXhpdCBo
ZXJlLgogICAgICAgICAgICAgICAgIC8vIERvaW5nIHNvIHNob3VsZCBhdXRvbWFnaWNhbGx5IHJl
Z2lzdGVyIGxhdGUgcGF0aHMgdGhhdCBlbWl0IGV4aXQgdGh1bmtzLgogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIHBhcmFtcy5jb250ZXh0LT5sYXRlUGF0aHMuYXBwZW5kKAorICAg
ICAgICAgICAgICAgIHBhcmFtcy5jb250ZXh0KCkubGF0ZVBhdGhzLmFwcGVuZCgKICAgICAgICAg
ICAgICAgICAgICAgY3JlYXRlU2hhcmVkVGFzazxBaXI6OkdlbmVyYXRpb25Db250ZXh0OjpMYXRl
UGF0aEZ1bmN0aW9uPigKICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwpA
QCAtOTIxMyw2ICs5MzA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uKTsKICAgICB9CiAKKyNpZiAhRlRMX1VTRVNfQjMKICAgICB2b2lkIGFwcGVuZE9T
UkV4aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24oU3RhY2ttYXBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgRXhjZXB0aW9uVHlwZSBleGNlcHRpb25UeXBlLCB1bnNp
Z25lZCBvZmZzZXRPZkV4aXRBcmd1bWVudHMpCiAgICAgewogICAgICAgICBDb2RlT3JpZ2luIG9w
Q2F0Y2hPcmlnaW47CkBAIC05MjMwLDkgKzkzMjUsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgZXhp
dERlc2NyaXB0b3JJbXBsLm1fYmFzZWxpbmVFeGNlcHRpb25IYW5kbGVyID0gKmV4Y2VwdGlvbkhh
bmRsZXI7CiAKICAgICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3QgZnJlc2hMaXN0ID0KLSAgICAg
ICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVzY3JpcHRvciwgZXhpdERlc2NyaXB0b3JJ
bXBsLCBub1ZhbHVlKCksIG9mZnNldE9mRXhpdEFyZ3VtZW50cyk7CisgICAgICAgICAgICBidWls
ZEV4aXRBcmd1bWVudHMoZXhpdERlc2NyaXB0b3IsIGV4aXREZXNjcmlwdG9ySW1wbC5tX2NvZGVP
cmlnaW4sIG5vVmFsdWUoKSwgb2Zmc2V0T2ZFeGl0QXJndW1lbnRzKTsKICAgICAgICAgYXJndW1l
bnRzLmFwcGVuZFZlY3RvcihmcmVzaExpc3QpOwogICAgIH0KKyNlbmRpZiAvLyAhRlRMX1VTRVNf
QjMKIAogICAgIGJvb2wgZW1pdEJyYW5jaFRvT1NSRXhpdElmV2lsbENhdGNoRXhjZXB0aW9uKExW
YWx1ZSBoYWRFeGNlcHRpb24pCiAgICAgewpAQCAtOTI1MSw2ICs5MzQ3LDE2IEBAIHByaXZhdGU6
CiAgICAgICAgIHJldHVybiBtX2Jsb2Nrcy5nZXQoYmxvY2spOwogICAgIH0KIAorCisjaWYgRlRM
X1VTRVNfQjMKKyAgICBPU1JFeGl0RGVzY3JpcHRvciogYXBwZW5kT1NSRXhpdERlc2NyaXB0b3Io
Rm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiAmbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuYWxsb2MoCisg
ICAgICAgICAgICBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlRm9yKGhpZ2hWYWx1ZSksCisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5t
X2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFw
KCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgfQorI2Vsc2UgLy8gRlRMX1VTRVNf
QjMKICAgICBPU1JFeGl0RGVzY3JpcHRvciogYXBwZW5kT1NSRXhpdERlc2NyaXB0b3IoRXhpdEtp
bmQga2luZCwgRXhjZXB0aW9uVHlwZSBleGNlcHRpb25UeXBlLCBGb3JtYXR0ZWRWYWx1ZSBsb3dW
YWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBOb2RlT3JpZ2luIG9yaWdpbikKICAgICB7CiAgICAgICAg
IE9TUkV4aXREZXNjcmlwdG9yJiByZXN1bHQgPSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXRE
ZXNjcmlwdG9ycy5hbGxvYygKQEAgLTkyNjEsNiArOTM2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBraW5kLCBvcmlnaW4uZm9yRXhpdCwgb3JpZ2luLnNlbWFudGljLCBleGNlcHRpb25UeXBl
KTsKICAgICAgICAgcmV0dXJuICZyZXN1bHQ7CiAgICAgfQorI2VuZGlmIC8vIEZUTF9VU0VTX0Iz
CiAgICAgCiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0KAogICAgICAgICBFeGl0S2luZCBraW5kLCBG
b3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRp
dGlvbiwgCkBAIC05MzI4LDE4ICs5NDM1LDE2IEBAIHByaXZhdGU6CiAjaWYgRlRMX1VTRVNfQjMK
ICAgICB2b2lkIGJsZXNzU3BlY3VsYXRpb24oQjM6OkNoZWNrVmFsdWUqIHZhbHVlLCBFeGl0S2lu
ZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBOb2RlT3Jp
Z2luIG9yaWdpbiwgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIgPSBmYWxzZSkKICAgICB7Ci0gICAg
ICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciA9IGFwcGVuZE9TUkV4aXREZXNj
cmlwdG9yKAotICAgICAgICAgICAga2luZCwgaXNFeGNlcHRpb25IYW5kbGVyID8gRXhjZXB0aW9u
VHlwZTo6Q0NhbGxFeGNlcHRpb24gOiBFeGNlcHRpb25UeXBlOjpOb25lLCBsb3dWYWx1ZSwKLSAg
ICAgICAgICAgIGhpZ2hWYWx1ZSwgb3JpZ2luKTsKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0b3JJ
bXBsKiBleGl0RGVzY3JpcHRvckltcGwgPSAmbV9mdGxTdGF0ZS5vc3JFeGl0RGVzY3JpcHRvcklt
cGxzLmxhc3QoKTsKKyAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yID0g
YXBwZW5kT1NSRXhpdERlc2NyaXB0b3IobG93VmFsdWUsIGhpZ2hWYWx1ZSk7CiAgICAgICAgIAog
ICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB2YWx1ZS0+bnVtQ2hpbGRyZW4oKTsKLSAgICAgICAg
dmFsdWUtPmFwcGVuZENvbGRBbnlzKGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVzY3JpcHRvciwg
bV9mdGxTdGF0ZS5vc3JFeGl0RGVzY3JpcHRvckltcGxzLmxhc3QoKSwgbG93VmFsdWUpKTsKKyAg
ICAgICAgdmFsdWUtPmFwcGVuZENvbGRBbnlzKGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVzY3Jp
cHRvciwgb3JpZ2luLmZvckV4aXQsIGxvd1ZhbHVlKSk7CiAKICAgICAgICAgU3RhdGUqIHN0YXRl
ID0gJm1fZnRsU3RhdGU7CiAgICAgICAgIHZhbHVlLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgICAg
ICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBleGl0RGVzY3JpcHRvci0+ZW1pdE9TUkV4
aXQoKnN0YXRlLCBleGl0RGVzY3JpcHRvckltcGwsIGppdCwgcGFyYW1zLCBvZmZzZXQpOworICAg
ICAgICAgICAgICAgIGV4aXREZXNjcmlwdG9yLT5lbWl0T1NSRXhpdCgKKyAgICAgICAgICAgICAg
ICAgICAgKnN0YXRlLCBraW5kLCBvcmlnaW4sIGppdCwgcGFyYW1zLCBvZmZzZXQsIGlzRXhjZXB0
aW9uSGFuZGxlcik7CiAgICAgICAgICAgICB9KTsKICAgICB9CiAjZW5kaWYKQEAgLTkzNDcsMjkg
Kzk0NTIsMjkgQEAgcHJpdmF0ZToKICNpZiAhRlRMX1VTRVNfQjMKICAgICB2b2lkIGVtaXRPU1JF
eGl0Q2FsbChPU1JFeGl0RGVzY3JpcHRvciogZXhpdERlc2NyaXB0b3IsIEZvcm1hdHRlZFZhbHVl
IGxvd1ZhbHVlKQogICAgIHsKLSAgICAgICAgY2FsbFN0YWNrbWFwKGV4aXREZXNjcmlwdG9yLCBi
dWlsZEV4aXRBcmd1bWVudHMoZXhpdERlc2NyaXB0b3IsIG1fZnRsU3RhdGUub3NyRXhpdERlc2Ny
aXB0b3JJbXBscy5sYXN0KCksIGxvd1ZhbHVlKSk7CisgICAgICAgIGNhbGxTdGFja21hcChleGl0
RGVzY3JpcHRvciwgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXREZXNjcmlwdG9yLCBtX2Z0bFN0YXRl
Lm9zckV4aXREZXNjcmlwdG9ySW1wbHMubGFzdCgpLm1fY29kZU9yaWdpbiwgbG93VmFsdWUpKTsK
ICAgICB9CiAjZW5kaWYKIAogICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0IGJ1aWxkRXhpdEFyZ3Vt
ZW50cygKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yLCBPU1JFeGl0
RGVzY3JpcHRvckltcGwmIGV4aXREZXNjcmlwdG9ySW1wbCwgRm9ybWF0dGVkVmFsdWUgbG93VmFs
dWUsCisgICAgICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciwgQ29kZU9yaWdp
biBleGl0T3JpZ2luLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwKICAgICAgICAgdW5zaWduZWQg
b2Zmc2V0T2ZFeGl0QXJndW1lbnRzSW5TdGFja21hcExvY2F0aW9ucyA9IDApCiAgICAgewogICAg
ICAgICBTdGFja21hcEFyZ3VtZW50TGlzdCByZXN1bHQ7CiAgICAgICAgIGJ1aWxkRXhpdEFyZ3Vt
ZW50cygKLSAgICAgICAgICAgIGV4aXREZXNjcmlwdG9yLCBleGl0RGVzY3JpcHRvckltcGwsIHJl
c3VsdCwgbG93VmFsdWUsIG9mZnNldE9mRXhpdEFyZ3VtZW50c0luU3RhY2ttYXBMb2NhdGlvbnMp
OworICAgICAgICAgICAgZXhpdERlc2NyaXB0b3IsIGV4aXRPcmlnaW4sIHJlc3VsdCwgbG93VmFs
dWUsIG9mZnNldE9mRXhpdEFyZ3VtZW50c0luU3RhY2ttYXBMb2NhdGlvbnMpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICB2b2lkIGJ1aWxkRXhpdEFyZ3VtZW50cygK
LSAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yLCBPU1JFeGl0RGVzY3Jp
cHRvckltcGwmIGV4aXREZXNjcmlwdG9ySW1wbCwgU3RhY2ttYXBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsCisgICAgICAgIE9TUkV4aXREZXNjcmlwdG9y
KiBleGl0RGVzY3JpcHRvciwgQ29kZU9yaWdpbiBleGl0T3JpZ2luLCBTdGFja21hcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwKICAgICAgICAgdW5zaWdu
ZWQgb2Zmc2V0T2ZFeGl0QXJndW1lbnRzSW5TdGFja21hcExvY2F0aW9ucyA9IDApCiAgICAgewog
ICAgICAgICBpZiAoISFsb3dWYWx1ZSkKICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobG93
VmFsdWUudmFsdWUoKSk7CiAgICAgICAgIAogICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZhaWxh
YmlsaXR5TWFwID0gdGhpcy0+YXZhaWxhYmlsaXR5TWFwKCk7Ci0gICAgICAgIGF2YWlsYWJpbGl0
eU1hcC5wcnVuZUJ5TGl2ZW5lc3MobV9ncmFwaCwgZXhpdERlc2NyaXB0b3JJbXBsLm1fY29kZU9y
aWdpbik7CisgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5wcnVuZUJ5TGl2ZW5lc3MobV9ncmFwaCwg
ZXhpdE9yaWdpbik7CiAgICAgICAgIAogICAgICAgICBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbio+IG1hcDsKICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLmZvckVh
Y2hBdmFpbGFiaWxpdHkoCkBAIC05Mzk2LDcgKzk1MDEsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpIHsKICAgICAgICAg
ICAgICAgICBERkdfQVNTRVJUKAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBtX25vZGUs
Ci0gICAgICAgICAgICAgICAgICAgICghKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBo
LmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBleGl0RGVzY3JpcHRv
ckltcGwubV9jb2RlT3JpZ2luKSkpIHx8IG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0gRlRMRm9yT1NS
RW50cnlNb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgKCEoYXZhaWxhYmlsaXR5LmlzRGVhZCgp
ICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIGV4
aXRPcmlnaW4pKSkgfHwgbV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBGVExGb3JPU1JFbnRyeU1vZGUp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZSA9IGV4aXRW
YWx1ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5KTsKICAgICAg
ICAgICAgIGlmIChleGl0VmFsdWUuaGFzSW5kZXhJblN0YWNrbWFwTG9jYXRpb25zKCkpCkBAIC05
NDc1LDYgKzk1ODAsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgY29uc3QgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24qPiYgbWFwLAogICAgICAgICBOb2RlKiBub2RlKQogICAgIHsKKyAgICAgICAgLy8gTk9U
RTogSW4gRlRMLT5CMywgd2UgY2Fubm90IGdlbmVyYXRlIGNvZGUgaGVyZSwgYmVjYXVzZSBtX291
dHB1dCBpcyBwb3NpdGlvbmVkIGFmdGVyIHRoZQorICAgICAgICAvLyBzdGFja21hcCB2YWx1ZS4g
TGlrZSBhbGwgdmFsdWVzLCB0aGUgc3RhY2ttYXAgdmFsdWUgY2Fubm90IHVzZSBhIGNoaWxkIHRo
YXQgaXMgZGVmaW5lZCBhZnRlcgorICAgICAgICAvLyBpdC4KKyAgICAgICAgCiAgICAgICAgIEFT
U0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPmhhc1Jl
c3VsdCgpKTsKIApAQCAtOTUyMiwxMCArOTYzMSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
cmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRTdHJpY3RJbnQ1MiwgdmFs
dWUudmFsdWUoKSk7CiAgICAgICAgIAogICAgICAgICB2YWx1ZSA9IG1fYm9vbGVhblZhbHVlcy5n
ZXQobm9kZSk7CisjaWYgRlRMX1VTRVNfQjMKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQor
ICAgICAgICAgICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRCb29s
ZWFuLCB2YWx1ZS52YWx1ZSgpKTsKKyNlbHNlIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgIGlmIChp
c1ZhbGlkKHZhbHVlKSkgewogICAgICAgICAgICAgTFZhbHVlIHZhbHVlVG9QYXNzID0gbV9vdXQu
emVyb0V4dCh2YWx1ZS52YWx1ZSgpLCBtX291dC5pbnQzMik7CiAgICAgICAgICAgICByZXR1cm4g
ZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEJvb2xlYW4sIHZhbHVlVG9QYXNzKTsK
ICAgICAgICAgfQorI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgIAogICAgICAgICB2YWx1
ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQobm9kZSk7CiAgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVl
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkocmV2aXNp
b24gMTkzNTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShGVExfSklUKQogCiAj
aW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcy5oIgogI2luY2x1ZGUgIkIzU3RhY2ttYXBWYWx1ZS5oIgogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKQEAgLTY1LDE4ICs2Niwy
MiBAQCB2b2lkIE9TUkV4aXREZXNjcmlwdG9yOjp2YWxpZGF0ZVJlZmVyZW5jCiAKICNpZiBGVExf
VVNFU19CMwogUmVmUHRyPE9TUkV4aXRIYW5kbGU+IE9TUkV4aXREZXNjcmlwdG9yOjplbWl0T1NS
RXhpdCgKLSAgICBTdGF0ZSYgc3RhdGUsIE9TUkV4aXREZXNjcmlwdG9ySW1wbCogZXhpdERlc2Ny
aXB0b3JJbXBsLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMsIHVuc2lnbmVkIG9mZnNldCkKKyAgICBTdGF0ZSYgc3RhdGUsIEV4aXRLaW5k
IGV4aXRLaW5kLCBjb25zdCBOb2RlT3JpZ2luJiBub2RlT3JpZ2luLCBDQ2FsbEhlbHBlcnMmIGpp
dCwKKyAgICBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcywgdW5zaWduZWQg
b2Zmc2V0LCBib29sIGlzRXhjZXB0aW9uSGFuZGxlcikKIHsKLSAgICBSZWZQdHI8T1NSRXhpdEhh
bmRsZT4gaGFuZGxlID0gcHJlcGFyZU9TUkV4aXRIYW5kbGUoc3RhdGUsIGV4aXREZXNjcmlwdG9y
SW1wbCwgcGFyYW1zLCBvZmZzZXQpOworICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBoYW5kbGUg
PQorICAgICAgICBwcmVwYXJlT1NSRXhpdEhhbmRsZShzdGF0ZSwgZXhpdEtpbmQsIG5vZGVPcmln
aW4sIHBhcmFtcywgb2Zmc2V0LCBpc0V4Y2VwdGlvbkhhbmRsZXIpOwogICAgIGhhbmRsZS0+ZW1p
dEV4aXRUaHVuayhqaXQpOwogICAgIHJldHVybiBoYW5kbGU7CiB9CiAKIFJlZlB0cjxPU1JFeGl0
SGFuZGxlPiBPU1JFeGl0RGVzY3JpcHRvcjo6ZW1pdE9TUkV4aXRMYXRlcigKLSAgICBTdGF0ZSYg
c3RhdGUsIE9TUkV4aXREZXNjcmlwdG9ySW1wbCogZXhpdERlc2NyaXB0b3JJbXBsLCBjb25zdCBT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcywgdW5zaWduZWQgb2Zmc2V0KQorICAgIFN0
YXRlJiBzdGF0ZSwgRXhpdEtpbmQgZXhpdEtpbmQsIGNvbnN0IE5vZGVPcmlnaW4mIG5vZGVPcmln
aW4sCisgICAgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMsIHVuc2lnbmVk
IG9mZnNldCwgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVmUHRyPE9TUkV4aXRI
YW5kbGU+IGhhbmRsZSA9IHByZXBhcmVPU1JFeGl0SGFuZGxlKHN0YXRlLCBleGl0RGVzY3JpcHRv
ckltcGwsIHBhcmFtcywgb2Zmc2V0KTsKLSAgICBwYXJhbXMuY29udGV4dC0+bGF0ZVBhdGhzLmFw
cGVuZCgKKyAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gaGFuZGxlID0KKyAgICAgICAgcHJlcGFy
ZU9TUkV4aXRIYW5kbGUoc3RhdGUsIGV4aXRLaW5kLCBub2RlT3JpZ2luLCBwYXJhbXMsIG9mZnNl
dCwgaXNFeGNlcHRpb25IYW5kbGVyKTsKKyAgICBwYXJhbXMuY29udGV4dCgpLmxhdGVQYXRocy5h
cHBlbmQoCiAgICAgICAgIGNyZWF0ZVNoYXJlZFRhc2s8QWlyOjpHZW5lcmF0aW9uQ29udGV4dDo6
TGF0ZVBhdGhGdW5jdGlvbj4oCiAgICAgICAgICAgICBbaGFuZGxlXSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmKSB7CiAgICAgICAgICAgICAgICAgaGFuZGxlLT5l
bWl0RXhpdFRodW5rKGppdCk7CkBAIC04NSwzMyArOTAsNDIgQEAgUmVmUHRyPE9TUkV4aXRIYW5k
bGU+IE9TUkV4aXREZXNjcmlwdG9yOgogfQogCiBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gT1NSRXhp
dERlc2NyaXB0b3I6OnByZXBhcmVPU1JFeGl0SGFuZGxlKAotICAgIFN0YXRlJiBzdGF0ZSwgT1NS
RXhpdERlc2NyaXB0b3JJbXBsKiBleGl0RGVzY3JpcHRvckltcGwsIGNvbnN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zLCB1bnNpZ25lZCBvZmZzZXQpCisgICAgU3RhdGUmIHN0YXRl
LCBFeGl0S2luZCBleGl0S2luZCwgY29uc3QgTm9kZU9yaWdpbiYgbm9kZU9yaWdpbiwKKyAgICBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcywgdW5zaWduZWQgb2Zmc2V0LCBi
b29sIGlzRXhjZXB0aW9uSGFuZGxlcikKIHsKICAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXRlLmpp
dENvZGUtPm9zckV4aXQuc2l6ZSgpOwotICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBoYW5kbGUg
PSBhZG9wdFJlZigKLSAgICAgICAgbmV3IE9TUkV4aXRIYW5kbGUoaW5kZXgsIHN0YXRlLmppdENv
ZGUtPm9zckV4aXQuYWxsb2ModGhpcywgKmV4aXREZXNjcmlwdG9ySW1wbCkpKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBvZmZzZXQ7IGkgPCBwYXJhbXMucmVwcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgaGFuZGxlLT5leGl0Lm1fdmFsdWVSZXBzLmFwcGVuZChwYXJhbXMucmVwc1tpXSk7Ci0gICAg
aGFuZGxlLT5leGl0Lm1fdmFsdWVSZXBzLnNocmlua1RvRml0KCk7CisgICAgT1NSRXhpdCYgZXhp
dCA9IHN0YXRlLmppdENvZGUtPm9zckV4aXQuYWxsb2MoCisgICAgICAgIHRoaXMsIGV4aXRLaW5k
LCBub2RlT3JpZ2luLmZvckV4aXQsIG5vZGVPcmlnaW4uc2VtYW50aWMsIGlzRXhjZXB0aW9uSGFu
ZGxlcik7CisgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRsZSA9IGFkb3B0UmVmKG5ldyBP
U1JFeGl0SGFuZGxlKGluZGV4LCBleGl0KSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gb2Zmc2V0
OyBpIDwgcGFyYW1zLnNpemUoKTsgKytpKQorICAgICAgICBleGl0Lm1fdmFsdWVSZXBzLmFwcGVu
ZChwYXJhbXNbaV0pOworICAgIGV4aXQubV92YWx1ZVJlcHMuc2hyaW5rVG9GaXQoKTsKICAgICBy
ZXR1cm4gaGFuZGxlOwogfQogI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAKKyNpZiBGVExfVVNFU19C
MwogT1NSRXhpdDo6T1NSRXhpdCgKLSAgICBPU1JFeGl0RGVzY3JpcHRvciogZGVzY3JpcHRvciwg
T1NSRXhpdERlc2NyaXB0b3JJbXBsJiBleGl0RGVzY3JpcHRvckltcGwKLSNpZiAhRlRMX1VTRVNf
QjMKLSAgICAsIHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgKLSNlbmRpZiAvLyAhRlRMX1VT
RVNfQjMKLSAgICApCisgICAgT1NSRXhpdERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCisgICAgRXhp
dEtpbmQgZXhpdEtpbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luRm9yRXhpdFByb2ZpbGUsCisgICAgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIpCisgICAgOiBP
U1JFeGl0QmFzZShleGl0S2luZCwgY29kZU9yaWdpbiwgY29kZU9yaWdpbkZvckV4aXRQcm9maWxl
KQorICAgICwgbV9kZXNjcmlwdG9yKGRlc2NyaXB0b3IpCit7CisgICAgbV9pc0V4Y2VwdGlvbkhh
bmRsZXIgPSBpc0V4Y2VwdGlvbkhhbmRsZXI7Cit9CisjZWxzZSAvLyBGVExfVVNFU19CMworT1NS
RXhpdDo6T1NSRXhpdCgKKyAgICBPU1JFeGl0RGVzY3JpcHRvciogZGVzY3JpcHRvciwgT1NSRXhp
dERlc2NyaXB0b3JJbXBsJiBleGl0RGVzY3JpcHRvckltcGwsCisgICAgdWludDMyX3Qgc3RhY2tt
YXBSZWNvcmRJbmRleCkKICAgICA6IE9TUkV4aXRCYXNlKGV4aXREZXNjcmlwdG9ySW1wbC5tX2tp
bmQsIGV4aXREZXNjcmlwdG9ySW1wbC5tX2NvZGVPcmlnaW4sIGV4aXREZXNjcmlwdG9ySW1wbC5t
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSkKICAgICAsIG1fZGVzY3JpcHRvcihkZXNjcmlwdG9y
KQotI2lmICFGVExfVVNFU19CMwogICAgICwgbV9zdGFja21hcFJlY29yZEluZGV4KHN0YWNrbWFw
UmVjb3JkSW5kZXgpCi0jZW5kaWYgLy8gIUZUTF9VU0VTX0IzCiAgICAgLCBtX2V4Y2VwdGlvblR5
cGUoZXhpdERlc2NyaXB0b3JJbXBsLm1fZXhjZXB0aW9uVHlwZSkKIHsKICAgICBtX2lzRXhjZXB0
aW9uSGFuZGxlciA9IGV4aXREZXNjcmlwdG9ySW1wbC5tX2V4Y2VwdGlvblR5cGUgIT0gRXhjZXB0
aW9uVHlwZTo6Tm9uZTsKIH0KKyNlbmRpZiAvLyBGVExfVVNFU19CMwogCiBDb2RlTG9jYXRpb25K
dW1wIE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKiBmdGxDb2RlQmxv
Y2spIGNvbnN0CiB7CkBAIC0xOTYsNyArMjEwLDYgQEAgdm9pZCBPU1JFeGl0OjpyZWNvdmVyUmVn
aXN0ZXJzRnJvbVNwaWxsUwogICAgICAgICB9CiAgICAgfQogfQotI2VuZGlmIC8vICFGVExfVVNF
U19CMwogCiBib29sIE9TUkV4aXQ6OndpbGxBcnJpdmVBdEV4aXRGcm9tSW5kaXJlY3RFeGNlcHRp
b25DaGVjaygpIGNvbnN0CiB7CkBAIC0yNjAsNiArMjczLDcgQEAgYm9vbCBPU1JFeGl0OjpuZWVk
c1JlZ2lzdGVyUmVjb3ZlcnlPbkdlbgogICAgIC8vIHJlY292ZXIgdGhlIHNwaWxsZWQgcmVnaXN0
ZXJzLgogICAgIHJldHVybiBtX2V4Y2VwdGlvblR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6SlNDYWxs
OwogfQorI2VuZGlmIC8vICFGVExfVVNFU19CMwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lvbiAx
OTM1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKICNpbmNs
dWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKKyNpbmNsdWRl
ICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdEJhc2UuaCIKICNpbmNsdWRl
ICJGVExBYmJyZXZpYXRlZFR5cGVzLmgiCiAjaW5jbHVkZSAiRlRMRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb24uaCIKQEAgLTUxLDE3ICs1MiwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNz
IFRyYWNrZWRSZWZlcmVuY2VzOwogCiBuYW1lc3BhY2UgQjMgewotc3RydWN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtczsKK2NsYXNzIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczsKIG5hbWVzcGFj
ZSBBaXIgewogc3RydWN0IEdlbmVyYXRpb25Db250ZXh0OwogfSAvLyBuYW1lc3BhY2UgQWlyCiB9
IC8vIG5hbWVzcGFjZSBCMwogCituYW1lc3BhY2UgREZHIHsKK3N0cnVjdCBOb2RlT3JpZ2luOwor
fSAvLyBuYW1lc3BhY2UgREZHOworCiBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgU3RhdGU7CiBz
dHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3JJbXBsOworc3RydWN0IE9TUkV4aXRIYW5kbGU7CiAKKyNp
ZiAhRlRMX1VTRVNfQjMKIGVudW0gY2xhc3MgRXhjZXB0aW9uVHlwZSA6IHVpbnQ4X3QgewogICAg
IE5vbmUsCiAgICAgQ0NhbGxFeGNlcHRpb24sCkBAIC03NSw2ICs4Miw3IEBAIGVudW0gY2xhc3Mg
RXhjZXB0aW9uVHlwZSA6IHVpbnQ4X3QgewogfTsKIAogYm9vbCBleGNlcHRpb25UeXBlV2lsbEFy
cml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKEV4Y2VwdGlvblR5cGUpOworI2VuZGlmIC8v
ICFGVExfVVNFU19CMwogCiBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3IgewogICAgIE9TUkV4aXRE
ZXNjcmlwdG9yKApAQCAtMTA1LDcgKzExMyw4IEBAIHN0cnVjdCBPU1JFeGl0RGVzY3JpcHRvciB7
CiAgICAgLy8gb24gdGhlIGdyb3VuZC4gSXQgY29udGFpbnMgaW5mb3JtYXRpb24gdGhhdCBpcyBt
b3N0bHkgbm90IHVzZWZ1bCBpZiB5b3UgdXNlIHRoaXMgQVBJLCBzaW5jZSBhZnRlcgogICAgIC8v
IHRoaXMgY2FsbCwgdGhlIE9TUkV4aXQgaXMgc2ltcGx5IHJlYWR5IHRvIGdvLgogICAgIFJlZlB0
cjxPU1JFeGl0SGFuZGxlPiBlbWl0T1NSRXhpdCgKLSAgICAgICAgU3RhdGUmLCBPU1JFeGl0RGVz
Y3JpcHRvckltcGwqLCBDQ2FsbEhlbHBlcnMmLCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICAgICAgU3RhdGUmLCBFeGl0S2luZCwgY29u
c3QgREZHOjpOb2RlT3JpZ2luJiwgQ0NhbGxIZWxwZXJzJiwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYsCisgICAgICAgIHVuc2lnbmVkIG9mZnNldCwgYm9vbCBpc0V4Y2VwdGlv
bkhhbmRsZXIgPSBmYWxzZSk7CiAKICAgICAvLyBJbiBzb21lIGNhc2VzIHlvdSB3YW50IGFuIE9T
UkV4aXQgdG8gY29tZSBpbnRvIGV4aXN0ZW5jZSwgYnV0IHlvdSBkb24ndCB3YW50IHRvIGVtaXQg
aXQgcmlnaHQgbm93LgogICAgIC8vIFRoaXMgd2lsbCBlbWl0IHRoZSBPU1IgZXhpdCBpbiBhIGxh
dGUgcGF0aC4gWW91IGNhbid0IGJlIHN1cmUgZXhhY3RseSB3aGVuIHRoYXQgd2lsbCBoYXBwZW4s
IGJ1dApAQCAtMTE2LDE2ICsxMjUsMTkgQEAgc3RydWN0IE9TUkV4aXREZXNjcmlwdG9yIHsKICAg
ICAvLyBoYXZlIGEgcGxhY2UgdG8ganVtcCB0byBmb3IgT1NSIGV4aXQuIEl0IGRvZXNuJ3QgY2Fy
ZSB3aGVyZSB0aGF0IE9TUiBleGl0IGlzIGVtaXR0ZWQgc28gbG9uZyBhcyBpdAogICAgIC8vIGV2
ZW50dWFsbHkgZ2V0cyBhY2Nlc3MgdG8gaXRzIGxhYmVsLgogICAgIFJlZlB0cjxPU1JFeGl0SGFu
ZGxlPiBlbWl0T1NSRXhpdExhdGVyKAotICAgICAgICBTdGF0ZSYsIE9TUkV4aXREZXNjcmlwdG9y
SW1wbCosIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLCB1bnNpZ25lZCBvZmZz
ZXQpOworICAgICAgICBTdGF0ZSYsIEV4aXRLaW5kLCBjb25zdCBERkc6Ok5vZGVPcmlnaW4mLCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiwgdW5zaWduZWQgb2Zmc2V0LAorICAg
ICAgICBib29sIGlzRXhjZXB0aW9uSGFuZGxlciA9IGZhbHNlKTsKIAogICAgIC8vIFRoaXMgaXMg
dGhlIGxvdy1sZXZlbCBpbnRlcmZhY2UuIEl0IHdpbGwgY3JlYXRlIGEgaGFuZGxlIHJlcHJlc2Vu
dGluZyB0aGUgZGVzaXJlIHRvIGVtaXQgY29kZSBmb3IKICAgICAvLyBhbiBPU1IgZXhpdC4gWW91
IGNhbiBjYWxsIE9TUkV4aXRIYW5kbGU6OmVtaXRFeGl0VGh1bmsoKSBvbmNlIHlvdSBoYXZlIGEg
cGxhY2UgdG8gZW1pdCBpdC4gTm90ZQogICAgIC8vIHRoYXQgdGhlIGFib3ZlIHR3byBBUElzIGFy
ZSB3cml0dGVuIGluIHRlcm1zIG9mIHRoaXMgYW5kIE9TUkV4aXRIYW5kbGU6OmVtaXRFeGl0VGh1
bmsoKS4KICAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gcHJlcGFyZU9TUkV4aXRIYW5kbGUoCi0g
ICAgICAgIFN0YXRlJiwgT1NSRXhpdERlc2NyaXB0b3JJbXBsKiwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYsIHVuc2lnbmVkIG9mZnNldCk7CisgICAgICAgIFN0YXRlJiwgRXhp
dEtpbmQsIGNvbnN0IERGRzo6Tm9kZU9yaWdpbiYsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmLCB1bnNpZ25lZCBvZmZzZXQsCisgICAgICAgIGJvb2wgaXNFeGNlcHRpb25IYW5k
bGVyID0gZmFsc2UpOwogI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiB9OwogCisjaWYgIUZUTF9VU0VT
X0IzCiBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3JJbXBsIHsKICAgICBPU1JFeGl0RGVzY3JpcHRv
ckltcGwoRXhpdEtpbmQga2luZCwgQ29kZU9yaWdpbiBleGl0T3JpZ2luLCBDb2RlT3JpZ2luIGZv
ckV4aXRQcm9maWxlLCBFeGNlcHRpb25UeXBlIGV4Y2VwdGlvblR5cGUpCiAgICAgICAgIDogbV9r
aW5kKGtpbmQpCkBAIC0xNDIsMTMgKzE1NCwxNiBAQCBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3JJ
bXBsIHsKICAgICBDb2RlT3JpZ2luIG1fc2VtYW50aWNDb2RlT3JpZ2luRm9yQ2FsbEZyYW1lSGVh
ZGVyOwogICAgIEhhbmRsZXJJbmZvIG1fYmFzZWxpbmVFeGNlcHRpb25IYW5kbGVyOwogfTsKKyNl
bmRpZiAvLyAhRlRMX1VTRVNfQjMKIAogc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgREZHOjpPU1JF
eGl0QmFzZSB7CiAgICAgT1NSRXhpdCgKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqLCBPU1JF
eGl0RGVzY3JpcHRvckltcGwmCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgICAgICwgdWludDMyX3Qg
c3RhY2ttYXBSZWNvcmRJbmRleAotI2VuZGlmIC8vICFGVExfVVNFU19CMworICAgICAgICBPU1JF
eGl0RGVzY3JpcHRvciosCisjaWYgRlRMX1VTRVNfQjMKKyAgICAgICAgRXhpdEtpbmQsIENvZGVP
cmlnaW4sIENvZGVPcmlnaW4gY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBib29sIGlzRXhjZXB0
aW9uSGFuZGxlcgorI2Vsc2UgLy8gRlRMX1VTRVNfQjMKKyAgICAgICAgT1NSRXhpdERlc2NyaXB0
b3JJbXBsJiwgdWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleAorI2VuZGlmIC8vIEZUTF9VU0VT
X0IzCiAgICAgICAgICk7CiAKICAgICBPU1JFeGl0RGVzY3JpcHRvciogbV9kZXNjcmlwdG9yOwpA
QCAtMTU3LDE1ICsxNzIsMTggQEAgc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgREZHOjpPU1JFeGl0
QmFzZQogICAgIC8vIFRoaXMgdGVsbHMgdXMgd2hlcmUgdG8gcGxhY2UgYSBqdW1wLgogICAgIENv
ZGVMb2NhdGlvbkp1bXAgbV9wYXRjaGFibGVKdW1wOwogICAgIFZlY3RvcjxCMzo6VmFsdWVSZXA+
IG1fdmFsdWVSZXBzOworICAgIC8vIFRydWUgaWYgdGhpcyBleGl0IGlzIHVzZWQgYXMgYW4gZXhj
ZXB0aW9uIGhhbmRsZXIgZm9yIHVud2luZGluZy4gVGhpcyBoYXBwZW5zIHRvIG9ubHkgYmUgc2V0
IHdoZW4KKyAgICAvLyBpc0V4Y2VwdGlvbkhhbmRsZXIgaXMgdHJ1ZSwgYnV0IGFsbCB0aGlzIGFj
dHVhbGx5IG1lYW5zIGlzIHRoYXQgdGhlIE9TUiBleGl0IHdpbGwgYXNzdW1lIHRoYXQgdGhlCisg
ICAgLy8gbWFjaGluZSBzdGF0ZSBpcyBhcyBpdCB3b3VsZCBiZSBjb21pbmcgb3V0IG9mIGdlbmVy
aWNVbndpbmQuCisgICAgYm9vbCBtX2lzVW53aW5kSGFuZGxlciB7IGZhbHNlIH07CiAjZWxzZSAv
LyBGVExfVVNFU19CMwogICAgIC8vIE9mZnNldCB3aXRoaW4gdGhlIGV4aXQgc3R1YnMgb2YgdGhl
IHN0dWIgZm9yIHRoaXMgZXhpdC4KICAgICB1bnNpZ25lZCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQ7
CiAgICAgLy8gT2Zmc2V0IHdpdGhpbiBTdGFja21hcDo6cmVjb3JkcwogICAgIHVpbnQzMl90IG1f
c3RhY2ttYXBSZWNvcmRJbmRleDsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAgIEV4Y2VwdGlv
blR5cGUgbV9leGNlcHRpb25UeXBlOwotCiAgICAgUmVnaXN0ZXJTZXQgcmVnaXN0ZXJzVG9QcmVz
ZXJ2ZUZvckNhbGxUaGF0TWlnaHRUaHJvdzsKKyNlbmRpZiAvLyBGVExfVVNFU19CMwogCiAgICAg
Q29kZUxvY2F0aW9uSnVtcCBjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnRsQ29k
ZUJsb2NrKSBjb25zdDsKICAgICB2b2lkIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRl
KENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCkBAIC0xNzcsMTIgKzE5NSwxMiBAQCBzdHJ1
Y3QgT1NSRXhpdCA6IHB1YmxpYyBERkc6Ok9TUkV4aXRCYXNlCiAgICAgdm9pZCBnYXRoZXJSZWdp
c3RlcnNUb1NwaWxsRm9yQ2FsbElmRXhjZXB0aW9uKFN0YWNrTWFwcyYsIFN0YWNrTWFwczo6UmVj
b3JkJik7CiAgICAgdm9pZCBzcGlsbFJlZ2lzdGVyc1RvU3BpbGxTbG90KENDYWxsSGVscGVycyYs
IGludDMyX3Qgc3RhY2tTcGlsbFNsb3QpOwogICAgIHZvaWQgcmVjb3ZlclJlZ2lzdGVyc0Zyb21T
cGlsbFNsb3QoQ0NhbGxIZWxwZXJzJiBqaXQsIGludDMyX3Qgc3RhY2tTcGlsbFNsb3QpOwotI2Vu
ZGlmIC8vICFGVExfVVNFU19CMwogCiAgICAgYm9vbCB3aWxsQXJyaXZlQXRPU1JFeGl0RnJvbUdl
bmVyaWNVbndpbmQoKSBjb25zdDsKICAgICBib29sIHdpbGxBcnJpdmVBdEV4aXRGcm9tSW5kaXJl
Y3RFeGNlcHRpb25DaGVjaygpIGNvbnN0OwogICAgIGJvb2wgd2lsbEFycml2ZUF0T1NSRXhpdEZy
b21DYWxsT3BlcmF0aW9uKCkgY29uc3Q7CiAgICAgYm9vbCBuZWVkc1JlZ2lzdGVyUmVjb3ZlcnlP
bkdlbmVyaWNVbndpbmRPU1JFeGl0UGF0aCgpIGNvbnN0OworI2VuZGlmIC8vICFGVExfVVNFU19C
MwogfTsKIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21w
aWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxOTM1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNywyMyAr
MjA3LDM0IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIENDYWxsSGVscGVycyBqaXQo
dm0sIGNvZGVCbG9jayk7CiAKICAgICAvLyBUaGUgZmlyc3QgdGhpbmcgd2UgbmVlZCB0byBkbyBp
cyByZXN0YWJsaXNoIG91ciBmcmFtZSBpbiB0aGUgY2FzZSBvZiBhbiBleGNlcHRpb24uCi0gICAg
aWYgKGV4aXQud2lsbEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKCkpIHsKKyAgICBp
ZiAoCisjaWYgRlRMX1VTRVNfQjMKKyAgICAgICAgZXhpdC5tX2lzVW53aW5kSGFuZGxlcgorI2Vs
c2UgLy8gRlRMX1VTRVNfQjMKKyAgICAgICAgZXhpdC53aWxsQXJyaXZlQXRPU1JFeGl0RnJvbUdl
bmVyaWNVbndpbmQoKQorI2VuZGlmIC8vIEZUTF9VU0VTX0IzCisgICAgICAgICkgewogICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOyAvLyBUaGUgZmlyc3QgdGlt
ZSB3ZSBoaXQgdGhpcyBleGl0LCBsaWtlIGF0IGFsbCBvdGhlciB0aW1lcywgdGhpcyBmaWVsZCBz
aG91bGQgYmUgbm9uLW51bGwuCiAgICAgICAgIGppdC5yZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1D
YWxsZWVTYXZlc0J1ZmZlcigpOwogICAgICAgICBqaXQubG9hZFB0cih2bS0+YWRkcmVzc09mQ2Fs
bEZyYW1lRm9yQ2F0Y2goKSwgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsK
ICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2st
PnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksCiAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwogCisjaWYgIUZUTF9VU0VTX0IzCiAgICAgICAgIGlmIChleGl0Lm5l
ZWRzUmVnaXN0ZXJSZWNvdmVyeU9uR2VuZXJpY1Vud2luZE9TUkV4aXRQYXRoKCkpCiAgICAgICAg
ICAgICBleGl0LnJlY292ZXJSZWdpc3RlcnNGcm9tU3BpbGxTbG90KGppdCwgaml0Q29kZS0+b3Ny
RXhpdEZyb21HZW5lcmljVW53aW5kU3RhY2tTcGlsbFNsb3QpOworI2VuZGlmIC8vICFGVExfVVNF
U19CMwogCiAgICAgICAgIC8vIERvIGEgcHVzaFRvU2F2ZSBiZWNhdXNlIHRoYXQncyB3aGF0IHRo
ZSBleGl0IGNvbXBpbGVyIGJlbG93IGV4cGVjdHMgdGhlIHN0YWNrCiAgICAgICAgIC8vIHRvIGxv
b2sgbGlrZSBiZWNhdXNlIHRoYXQncyB0aGUgbGFzdCB0aGluZyB0aGUgRXhpdFRodW5rR2VuZXJh
dG9yIGRvZXMuIFRoZSBjb2RlCiAgICAgICAgIC8vIGJlbG93IGRvZXNuJ3QgYWN0dWFsbHkgdXNl
IHRoZSB2YWx1ZSB0aGF0IHdhcyBwdXNoZWQsIGJ1dCBpdCBkb2VzIHJlbHkgb24gdGhlCiAgICAg
ICAgIC8vIGdlbmVyYWwgc2hhcGUgb2YgdGhlIHN0YWNrIGJlaW5nIGFzIGl0IGlzIGluIHRoZSBu
b24tZXhjZXB0aW9uIE9TUiBjYXNlLgogICAgICAgICBqaXQucHVzaFRvU2F2ZUltbWVkaWF0ZVdp
dGhvdXRUb3VjaGluZ1JlZ2lzdGVycyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweGJhZGJl
ZWYpKTsKLSAgICB9IGVsc2UgaWYgKGV4aXQud2lsbEFycml2ZUF0T1NSRXhpdEZyb21DYWxsT3Bl
cmF0aW9uKCkpCisgICAgfQorI2lmICFGVExfVVNFU19CMworICAgIGlmIChleGl0LndpbGxBcnJp
dmVBdE9TUkV4aXRGcm9tQ2FsbE9wZXJhdGlvbigpKQogICAgICAgICBleGl0LnJlY292ZXJSZWdp
c3RlcnNGcm9tU3BpbGxTbG90KGppdCwgaml0Q29kZS0+b3NyRXhpdEZyb21HZW5lcmljVW53aW5k
U3RhY2tTcGlsbFNsb3QpOworI2VuZGlmIC8vICFGVExfVVNFU19CMwogICAgIAogCiAgICAgLy8g
V2UgbmVlZCBzY3JhdGNoIHNwYWNlIHRvIHNhdmUgYWxsIHJlZ2lzdGVycywgdG8gYnVpbGQgdXAg
dGhlIEpTIHN0YWNrLCB0byBkZWFsIHdpdGggdW53aW5kCkBAIC02MDUsOSArNjE2LDEzIEBAIGV4
dGVybiAiQyIgdm9pZCogY29tcGlsZUZUTE9TUkV4aXQoRXhlY1MKICAgICAgICAgICAgIGRhdGFM
b2coIiAgICBPcmlnaW4gZm9yIGV4aXQgcHJvZmlsZTogIiwgZXhpdC5tX2NvZGVPcmlnaW5Gb3JF
eGl0UHJvZmlsZSwgIlxuIik7CiAgICAgICAgIGRhdGFMb2coIiAgICBFeGl0IHN0YWNrbWFwIElE
OiAiLCBleGl0Lm1fZGVzY3JpcHRvci0+bV9zdGFja21hcElELCAiXG4iKTsKICAgICAgICAgZGF0
YUxvZygiICAgIEN1cnJlbnQgY2FsbCBzaXRlIGluZGV4OiAiLCBleGVjLT5jYWxsU2l0ZUluZGV4
KCkuYml0cygpLCAiXG4iKTsKLSAgICAgICAgZGF0YUxvZygiICAgIEV4aXQgaXMgZXhjZXB0aW9u
IGhhbmRsZXI6ICIsIGV4aXQubV9pc0V4Y2VwdGlvbkhhbmRsZXIsCi0gICAgICAgICAgICAiIHdp
bGwgYXJyaXZlIGF0IGV4aXQgZnJvbSBnZW5lcmljVW53aW5kKCk6ICIsIGV4aXQud2lsbEFycml2
ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKCksIAotICAgICAgICAgICAgIiB3aWxsIGFycml2
ZSBhdCBleGl0IGZyb20gbGF6eSBzbG93IHBhdGg6ICIsIGV4aXQubV9leGNlcHRpb25UeXBlID09
IEV4Y2VwdGlvblR5cGU6OkxhenlTbG93UGF0aCwgIlxuIik7CisgICAgICAgIGRhdGFMb2coIiAg
ICBFeGl0IGlzIGV4Y2VwdGlvbiBoYW5kbGVyOiAiLCBleGl0Lm1faXNFeGNlcHRpb25IYW5kbGVy
LCAiXG4iKTsKKyNpZiBGVExfVVNFU19CMworICAgICAgICBkYXRhTG9nKCIgICAgSXMgdW53aW5k
IGhhbmRsZXI6ICIsIGV4aXQubV9pc1Vud2luZEhhbmRsZXIsICJcbiIpOworI2Vsc2UgLy8gRlRM
X1VTRVNfQjMKKyAgICAgICAgZGF0YUxvZygiICAgIFdpbGwgYXJyaXZlIGF0IGV4aXQgZnJvbSBn
ZW5lcmljVW53aW5kKCk6ICIsIGV4aXQud2lsbEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53
aW5kKCksICJcbiIpOworICAgICAgICBkYXRhTG9nKCIgICAgV2lsbCBhcnJpdmUgYXQgZXhpdCBm
cm9tIGxhenkgc2xvdyBwYXRoOiAiLCBleGl0Lm1fZXhjZXB0aW9uVHlwZSA9PSBFeGNlcHRpb25U
eXBlOjpMYXp5U2xvd1BhdGgsICJcbiIpOworI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAg
IGRhdGFMb2coIiAgICBFeGl0IHZhbHVlczogIiwgZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVz
LCAiXG4iKTsKICAgICAgICAgaWYgKCFleGl0Lm1fZGVzY3JpcHRvci0+bV9tYXRlcmlhbGl6YXRp
b25zLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgZGF0YUxvZygiICAgIE1hdGVyaWFsaXphdGlv
bnM6XG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHJldmlzaW9u
IDE5MzUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTYsMTIgKzk2LDE0IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoTUFTTV9QUk9C
RSkKICAgICBTZWdtZW50ZWRWZWN0b3I8UHJvYmVEZXNjcmlwdG9yPiBwcm9iZXM7CiAjZW5kaWYK
KyNpZiAhRlRMX1VTRVNfQjMKICAgICBWZWN0b3I8SlNDYWxsPiBqc0NhbGxzOwogICAgIFZlY3Rv
cjxKU0NhbGxWYXJhcmdzPiBqc0NhbGxWYXJhcmdzZXM7CiAgICAgVmVjdG9yPEpTVGFpbENhbGw+
IGpzVGFpbENhbGxzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBjb2RlU2VjdGlvbk5hbWVzOwogICAg
IFZlY3RvcjxDU3RyaW5nPiBkYXRhU2VjdGlvbk5hbWVzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxP
U1JFeGl0RGVzY3JpcHRvckltcGw+IG9zckV4aXREZXNjcmlwdG9ySW1wbHM7CisjZW5kaWYgLy8g
IUZUTF9VU0VTX0IzCiAgICAgdm9pZCogdW53aW5kRGF0YVNlY3Rpb247CiAgICAgc2l6ZV90IHVu
d2luZERhdGFTZWN0aW9uU2l6ZTsKICAgICBSZWZQdHI8RGF0YVNlY3Rpb24+IHN0YWNrbWFwc1Nl
Y3Rpb247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266737</attachid>
            <date>2015-12-06 14:53:12 -0800</date>
            <delta_ts>2015-12-07 11:11:39 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>104706</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkzNTk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MSBA
QAorMjAxNS0xMi0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBCMyBzaG91bGQgYmUgYWJsZSB0byBtYWtlIEpTLT5KUyBjYWxscworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxOTAxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIHN1cHBvcnQgZm9y
IHRoZSBDYWxsIGFuZCBJbnZhbGlkYXRpb25Qb2ludCBvcGNvZGVzIGluIERGRyBJUi4gVGhpcyBy
ZXF1aXJlZCBkb2luZyBzb21lCisgICAgICAgIGNsZWFuLXVwIGluIHRoZSBPU1IgZXhpdCBjb2Rl
LiBXZSBkb24ndCB3YW50IHRoZSBCMyBGVEwgdG8gdXNlIGEgYnVuY2ggb2YgdmVjdG9ycyB0byBo
b2xkCisgICAgICAgIHNpZGUtc3RhdGUsIHNvIHRoZSB1c2Ugb2YgT1NSRXhpdERlc2NyaXB0b3JJ
bXBsIGlzIG5vdCByaWdodC4gSXQgbWFrZXMgc2Vuc2UgaW4gdGhlIExMVk0gRlRMCisgICAgICAg
IGJlY2F1c2UgdGhhdCBjb2RlIG5lZWRzIHNvbWUgd2F5IG9mIHNhdmluZyBzb21lIHN0YXRlIGZy
b20gTG93ZXJERkdUb0xMVk0gdG8gY29tcGlsZSgpLCBidXQKKyAgICAgICAgdGhhdCdzIG5vdCBo
b3cgQjMgRlRMIHdvcmtzLiBJdCB0dXJucyBvdXQgdGhhdCBmb3IgQjMgRlRMLCB0aGVyZSBpc24n
dCBhbnl0aGluZyBpbgorICAgICAgICBPU1JFeGl0RGVzY3JpcHRvckltcGwgdGhhdCB0aGUgY29k
ZSBpbiBMb3dlckRGR1RvTExWTSBjYW4ndCBqdXN0IGNhcHR1cmUgaW4gYSBsYW1iZGEuCisKKyAg
ICAgICAgVGhpcyBhbHNvIHNpbXBsaWZpZXMgc29tZSBzdGFja21hcC1yZWxhdGVkIEFQSXMsIHNp
bmNlIEkgZ290IHRpcmVkIG9mIHdyaXRpbmcgYm9pbGVycGxhdGUuCisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6Cisg
ICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoQWRkcmVzc0Nv
bXB1dGF0aW9uKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6YWRkTGlu
a1Rhc2spOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6
QjM6OkNoZWNrU3BlY2lhbDo6Z2VuZXJhdGUpOgorICAgICAgICAqIGIzL0IzRWZmZWN0cy5oOgor
ICAgICAgICAqIGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwOgorICAgICAgICAoSlNDOjpCMzo6
UGF0Y2hwb2ludFNwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5j
cHA6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmFkZERhdGFTZWN0aW9uKToKKyAgICAg
ICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6Y2FsbEFyZ0FyZWFTaXplKToKKyAgICAgICAgKEpTQzo6
QjM6OlByb2NlZHVyZTo6cmVxdWVzdENhbGxBcmdBcmVhU2l6ZSk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmZyYW1lU2l6ZSk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmUuaDoKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6cmVsZWFzZUJ5cHJvZHVjdHMpOgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpjb2RlKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zOjp1c2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtczo6cHJvYyk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyk6CisgICAgICAgICogYjMvQjNTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXM6OnZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtczo6cmVwcyk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcEdlbmVyYXRp
b25QYXJhbXM6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6Om9w
ZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjpi
ZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6OmVuZCk6
CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6OmNvbnRleHQpOgor
ICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjphZGRMYXRlUGF0aCk6
CisgICAgICAgICogYjMvQjNTdGFja21hcFZhbHVlLmg6CisgICAgICAgICogYjMvQjNWYWx1ZVJl
cC5oOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmRvdWJsZVZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlUmVwOjp3aXRoT2Zmc2V0KToKKyAgICAgICAgKiBiMy9haXIvQWlyR2Vu
ZXJhdGlvbkNvbnRleHQuaDoKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlND
OjpCMzo6dGVzdFNpbXBsZVBhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNpbXBs
ZVBhdGNocG9pbnRXaXRob3V0T3VwdXRDbG9iYmVyc0dQQXJncyk6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0U2ltcGxlUGF0Y2hwb2ludFdpdGhPdXB1dENsb2JiZXJzR1BBcmdzKToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RTaW1wbGVQYXRjaHBvaW50V2l0aG91dE91cHV0Q2xvYmJlcnNGUEFyZ3Mp
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNpbXBsZVBhdGNocG9pbnRXaXRoT3VwdXRDbG9iYmVy
c0ZQQXJncyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0UGF0Y2hwb2ludFdpdGhFYXJseUNsb2Ji
ZXIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFBhdGNocG9pbnRDYWxsQXJnKToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RQYXRjaHBvaW50Rml4ZWRSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0UGF0Y2hwb2ludEFueSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0UGF0Y2hwb2ludExv
dHNPZkxhdGVBbnlzKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RQYXRjaHBvaW50QW55SW1tKToK
KyAgICAgICAgKEpTQzo6QjM6OnRlc3RQYXRjaHBvaW50TWFueUltbXMpOgorICAgICAgICAoSlND
OjpCMzo6dGVzdFBhdGNocG9pbnRXaXRoUmVnaXN0ZXJSZXN1bHQpOgorICAgICAgICAoSlNDOjpC
Mzo6dGVzdFBhdGNocG9pbnRXaXRoU3RhY2tBcmd1bWVudFJlc3VsdCk6CisgICAgICAgIChKU0M6
OkIzOjp0ZXN0UGF0Y2hwb2ludFdpdGhBbnlSZXN1bHQpOgorICAgICAgICAoSlNDOjpCMzo6dGVz
dFNpbXBsZUNoZWNrKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja0xlc3NUaGFuKToKKyAg
ICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja01lZ2FDb21ibyk6CisgICAgICAgIChKU0M6OkIzOjp0
ZXN0Q2hlY2tBZGRJbW0pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrQWRkSW1tQ29tbXV0
ZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tBZGRJbW1Tb21lUmVnaXN0ZXIpOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdENoZWNrQWRkKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVj
a0FkZDY0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja1N1YkltbSk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0Q2hlY2tTdWJCYWRJbW0pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNr
U3ViKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja1N1YjY0KToKKyAgICAgICAgKEpTQzo6
QjM6OnRlc3RDaGVja05lZyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tOZWc2NCk6Cisg
ICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tNdWwpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENo
ZWNrTXVsTWVtb3J5KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja011bDIpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdENoZWNrTXVsNjQpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJpY1Rl
c3RDb21wYXJlKToKKyAgICAgICAgKiBmdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY3Bw
OgorICAgICAgICAqIGZ0bC9GVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5oOgorICAgICAgICAq
IGZ0bC9GVExKU0NhbGwuY3BwOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGwuaDoKKyAgICAgICAg
KiBmdGwvRlRMSlNDYWxsQmFzZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SlNDYWxsQmFzZTo6
ZW1pdCk6CisgICAgICAgICogZnRsL0ZUTEpTQ2FsbEJhc2UuaDoKKyAgICAgICAgKiBmdGwvRlRM
SlNDYWxsVmFyYXJncy5jcHA6CisgICAgICAgICogZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaDoKKyAg
ICAgICAgKiBmdGwvRlRMSlNUYWlsQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpn
ZXRSZWdpc3RlcldpdGhBZGRlbmQpOgorICAgICAgICAoSlNDOjpGVEw6OkpTVGFpbENhbGw6OmVt
aXQpOgorICAgICAgICAoSlNDOjpGVEw6OkpTVGFpbENhbGw6OkpTVGFpbENhbGwpOiBEZWxldGVk
LgorICAgICAgICAqIGZ0bC9GVExKU1RhaWxDYWxsLmg6CisgICAgICAgIChKU0M6OkZUTDo6SlNU
YWlsQ2FsbDo6c3RhY2ttYXBJRCk6CisgICAgICAgIChKU0M6OkZUTDo6SlNUYWlsQ2FsbDo6ZXN0
aW1hdGVkU2l6ZSk6CisgICAgICAgIChKU0M6OkZUTDo6SlNUYWlsQ2FsbDo6b3BlcmF0b3I8KToK
KyAgICAgICAgKEpTQzo6RlRMOjpKU1RhaWxDYWxsOjpwYXRjaHBvaW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6bGF6eVNsb3dQYXRoKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjYWxsQ2hlY2spOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmFwcGVuZE9TUkV4aXRBcmd1bWVudHNG
b3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0xMVk06OmVtaXRCcmFuY2hUb09TUkV4aXRJZldpbGxDYXRjaEV4Y2VwdGlv
bik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6bG93QmxvY2spOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmFwcGVuZE9TUkV4aXREZXNj
cmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjphcHBlbmRP
U1JFeGl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpibGVzc1Nw
ZWN1bGF0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjplbWl0
T1NSRXhpdENhbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmJ1
aWxkRXhpdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExW
TTo6ZXhpdFZhbHVlRm9yTm9kZSk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuY3BwOgorICAg
ICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0RGVzY3JpcHRvcik6Cisg
ICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdERlc2NyaXB0b3I6OmVtaXRPU1JFeGl0KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPU1JFeGl0RGVzY3JpcHRvcjo6ZW1pdE9TUkV4aXRMYXRlcik6CisgICAg
ICAgIChKU0M6OkZUTDo6T1NSRXhpdERlc2NyaXB0b3I6OnByZXBhcmVPU1JFeGl0SGFuZGxlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6RlRM
OjpPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKToKKyAgICAgICAgKEpTQzo6RlRMOjpP
U1JFeGl0OjpyZWNvdmVyUmVnaXN0ZXJzRnJvbVNwaWxsU2xvdCk6CisgICAgICAgIChKU0M6OkZU
TDo6T1NSRXhpdDo6d2lsbEFycml2ZUF0RXhpdEZyb21JbmRpcmVjdEV4Y2VwdGlvbkNoZWNrKToK
KyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0OjpuZWVkc1JlZ2lzdGVyUmVjb3ZlcnlPbkdlbmVy
aWNVbndpbmRPU1JFeGl0UGF0aCk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpPU1JFeGl0RGVzY3JpcHRvckltcGw6Ok9TUkV4aXREZXNjcmlwdG9ySW1w
bCk6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50
RXhpdFNpdGUpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlRlRM
T1NSRXhpdCk6CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmg6CisKIDIwMTUtMTItMDUgQWxla3Nh
bmRyIFNrYWNoa292ICAgPGdza2FjaGtvdkBnbWFpbC5jb20+CiAKICAgICAgICAgW0VTNl0gInN1
cGVyIiBhbmQgInRoaXMiIHNob3VsZCBiZSBsZXhpY2FsbHkgYm91bmQgaW5zaWRlIGFuIGFycm93
IGZ1bmN0aW9uIGFuZCBzaG91bGQgbGl2ZSBpbiBhIEpTTGV4aWNhbEVudmlyb25tZW50CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxOTM1MzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEy
NSw2ICsxMjUsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGIzL0IzUGhpQ2hp
bGRyZW4uY3BwCiAgICAgYjMvQjNQcm9jZWR1cmUuY3BwCiAgICAgYjMvQjNSZWR1Y2VTdHJlbmd0
aC5jcHAKKyAgICBiMy9CM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAKICAgICBiMy9CM1N0
YWNrbWFwU3BlY2lhbC5jcHAKICAgICBiMy9CM1N0YWNrbWFwVmFsdWUuY3BwCiAgICAgYjMvQjNT
dGFja1Nsb3RLaW5kLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE5MzUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNiArMzA0LDggQEAK
IAkJMEYzMzhFMUMxQkYyODZFQTAwMTNDODhGIC8qIEIzQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTE4MUJGMjg2
RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IH07CiAJCTBGMzM4RTFEMUJG
Mjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzM4RTE5MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xv
d2VyTWFjcm9zLmNwcCAqLzsgfTsKIAkJMEYzMzhFMUUxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93
ZXJNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMzM4RTFBMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggKi87IH07CisJCTBG
MzNGQ0Y3MUMxMzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMzRkNGNTFD
MTM2RTI1MDAzMjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwICovOyB9Owor
CQkwRjMzRkNGODFDMTM2RTI1MDAzMjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzNGQ0Y2
MUMxMzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oICovOyB9Owog
CQkwRjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0NzE2RDQyMDBFMDAxQ0RB
NUEgLyogREZHVXNlS2luZC5jcHAgKi87IH07CiAJCTBGMzRCMTRBMTZENDIwMTMwMDFDREE1QSAv
KiBERkdVc2VLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovOyB9OwogCQkw
RjM3MzA4QzFDMEJEMjkxMDAwNTJCRkEgLyogQjNQaGlDaGlsZHJlbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM3MzA4QTFDMEJEMjkxMDAwNTJC
RkEgLyogQjNQaGlDaGlsZHJlbi5jcHAgKi87IH07CkBAIC0yNDAwLDYgKzI0MDIsOCBAQAogCQkw
RjMzOEUxODFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9ja0luc2VydGlvblNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBi
My9CM0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MzM4RTE5MUJGMjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzTG93ZXJNYWNyb3MuY3BwOyBwYXRoID0gYjMvQjNM
b3dlck1hY3Jvcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzM4RTFBMUJG
Mjg2RUEwMDEzQzg4RiAvKiBCM0xvd2VyTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzTG93ZXJNYWNyb3MuaDsgcGF0aCA9IGIzL0IzTG93ZXJNYWNyb3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzM0ZDRjUxQzEzNkUyNTAwMzIzRjY3IC8qIEIz
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcDsgcGF0aCA9IGIzL0IzU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYzM0ZDRjYxQzEzNkUyNTAwMzIzRjY3IC8qIEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zLmg7IHBhdGggPSBiMy9CM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2lu
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdVc2VLaW5kLmNw
cDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVXNlS2luZC5oOyBwYXRoID0gZGZnL0RGR1VzZUtpbmQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNzMwOEExQzBCRDI5MTAwMDUyQkZB
IC8qIEIzUGhpQ2hpbGRyZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNQaGlDaGlsZHJlbi5jcHA7IHBhdGggPSBiMy9CM1BoaUNoaWxkcmVuLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ2MjksNiArNDYzMyw4IEBACiAJCQkJMEZFQzg0RTMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovLAogCQkJCTBGRUM4NUI3
MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmNwcCAqLywKIAkJCQkwRkVDODVC
ODFCRTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5oICovLAorCQkJCTBGMzNGQ0Y1
MUMxMzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAgKi8sCisJ
CQkJMEYzM0ZDRjYxQzEzNkUyNTAwMzIzRjY3IC8qIEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
LmggKi8sCiAJCQkJMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFs
LmNwcCAqLywKIAkJCQkwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNp
YWwuaCAqLywKIAkJCQkwRjMzOERFRjFCRTkzQUQxMDAxM0M4OEYgLyogQjNTdGFja21hcFZhbHVl
LmNwcCAqLywKQEAgLTY5NzYsNiArNjk4Miw3IEBACiAJCQkJMEZEM0U0MDIxQjYxOEFBRjAwQzgw
RTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYxOEQzRDAxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk4RUQ2NzUxQkVENzY4QzAw
REQ4MDE3IC8qIFJlbW90ZUNvbnRyb2xsYWJsZVRhcmdldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEYzM0ZDRjgxQzEzNkUyNTAwMzIzRjY3IC8qIEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNl
bmN5TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMTgxNkQwMkVCMjAwNTVBNURCIC8q
IERGR0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDYxNTM0Q0JBRjAwMEY5
NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtODQ5Myw2ICs4
NTAwLDcgQEAKIAkJCQkwRjhGOTQzQzE2Njc2MzEzMDBENjE5NzEgLyogQ29kZVNwZWNpYWxpemF0
aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEg
LyogQ29kZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzExMDdFQzM3NjAwNDI3
QTQ4IC8qIENvbW1vbklkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMzNGQ0Y3
MUMxMzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNzA5RjJGMjE3QTBBQzJBMDA1MTJFOTggLyogQ29tbW9uU2xvd1BhdGhz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTNBMzMxMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21t
b25TbG93UGF0aHNFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVBM0E3MTc5
NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxOTM1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMTAxNiwxMSArMTAxNiw2IEBAIHB1YmxpYzoKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVw
bGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb24obGFiZWwuZGF0YUxvY2F0aW9uKCkpOwogICAgIH0K
IAotICAgIHZvaWQgYWRkTGlua1Rhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5rQnVmZmVy
Jik+PiB0YXNrKQotICAgIHsKLSAgICAgICAgbV9saW5rVGFza3MuYXBwZW5kKHRhc2spOwotICAg
IH0KLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBhZGRMaW5rVGFz
ayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkocmV2aXNpb24gMTkzNTM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJHZW5lcmF0
aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKQEAgLTIwOCwxMyArMjA5LDcgQEAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIENoZWNrU3BlY2lhbDo6Z2VuZXJhdAogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zIHBhcmFtczsKLSAgICAgICAgICAgICAgICBw
YXJhbXMudmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICBwYXJhbXMucmVwcyA9IHJlcHM7
Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnVzZWRSZWdpc3RlcnMgPSB2YWx1ZS0+bV91c2VkUmVn
aXN0ZXJzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5jb250ZXh0ID0gJmNvbnRleHQ7Ci0KLSAg
ICAgICAgICAgICAgICB2YWx1ZS0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CisgICAg
ICAgICAgICAgICAgdmFsdWUtPm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXModmFsdWUsIHJlcHMsIGNvbnRleHQpKTsKICAgICAgICAgICAgIH0pKTsKIAogICAg
IHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsgLy8gQXMgZmFyIGFzIEFpciB0aGlua3MsIHdl
IGFyZSBub3QgYSB0ZXJtaW5hbC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vm
ZmVjdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3Rz
LmgJKHJldmlzaW9uIDE5MzUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVj
dHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsMTEgQEAgc3RydWN0IEVmZmVjdHMgewog
ICAgIC8vIFRydWUgaWYgdGhpcyBjYW5ub3QgY29udGludWUgZXhlY3V0aW9uIGluIHRoZSBjdXJy
ZW50IGJsb2NrLgogICAgIGJvb2wgdGVybWluYWwgeyBmYWxzZSB9OwogCi0gICAgLy8gVHJ1ZSBp
ZiB0aGlzIHZhbHVlIGNhbiBjYXVzZSBleGVjdXRpb24gdG8gdGVybWluYXRlIGFicnVwdGx5Lgor
ICAgIC8vIFRydWUgaWYgdGhpcyB2YWx1ZSBjYW4gY2F1c2UgZXhlY3V0aW9uIHRvIHRlcm1pbmF0
ZSBhYnJ1cHRseSwgYW5kIHRoYXQgdGhpcyBhYnJ1cHQgdGVybWluYXRpb24gaXMKKyAgICAvLyBv
YnNlcnZhYmxlLiBOb3RlIHRoYXQgaWYgZXhpdHNTaWRld2F5cyBpcyBzZXQgdG8gdHJ1ZSBidXQg
cmVhZHMgaXMgYm90dG9tLCB0aGVuIEIzIGlzIGZyZWUgdG8KKyAgICAvLyBhc3N1bWUgdGhhdCBh
ZnRlciBhYnJ1cHQgdGVybWluYXRpb24gb2YgdGhpcyBwcm9jZWR1cmUsIG5vbmUgb2YgdGhlIGhl
YXAgd2lsbCBiZSByZWFkLiBUaGF0J3MKKyAgICAvLyB1c3VhbGx5IGZhbHNlLCBzbyBtYWtlIHN1
cmUgdGhhdCByZWFkcyBjb3JyZXNwb25kcyB0byB0aGUgc2V0IG9mIHRoaW5ncyB0aGF0IGFyZSBy
ZWFkYWJsZSBhZnRlcgorICAgIC8vIHRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyBhYnJ1cHRseS4K
ICAgICBib29sIGV4aXRzU2lkZXdheXMgeyBmYWxzZSB9OwogCiAgICAgLy8gVHJ1ZSBpZiB0aGUg
aW5zdHJ1Y3Rpb24gbWF5IGNoYW5nZSBzZW1hbnRpY3MgaWYgaG9pc3RlZCBhYm92ZSBzb21lIGNv
bnRyb2wgZmxvdy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRT
cGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRj
aHBvaW50U3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5MzUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCiAjaW5jbHVk
ZSAiQjNWYWx1ZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBA
IC0xMDcsMTMgKzEwOCw3IEBAIENDYWxsSGVscGVyczo6SnVtcCBQYXRjaHBvaW50U3BlY2lhbDo6
Z2UKICAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJn
c1tvZmZzZXQrK10pKTsKICAgICBhcHBlbmRSZXBzSW1wbChjb250ZXh0LCBvZmZzZXQsIGluc3Qs
IHJlcHMpOwogICAgIAotICAgIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7Ci0gICAg
cGFyYW1zLnZhbHVlID0gdmFsdWU7Ci0gICAgcGFyYW1zLnJlcHMgPSByZXBzOwotICAgIHBhcmFt
cy51c2VkUmVnaXN0ZXJzID0gdmFsdWUtPm1fdXNlZFJlZ2lzdGVyczsKLSAgICBwYXJhbXMuY29u
dGV4dCA9ICZjb250ZXh0OwotCi0gICAgdmFsdWUtPm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBwYXJh
bXMpOworICAgIHZhbHVlLT5tX2dlbmVyYXRvci0+cnVuKGppdCwgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zKHZhbHVlLCByZXBzLCBjb250ZXh0KSk7CiAKICAgICByZXR1cm4gQ0NhbGxIZWxwZXJz
OjpKdW1wKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5j
cHAJKHJldmlzaW9uIDE5MzUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2Nl
ZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw2ICsxNDgsMTYgQEAgdm9pZCogUHJvY2Vk
dXJlOjphZGREYXRhU2VjdGlvbihzaXplX3QgcwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3Vu
c2lnbmVkIFByb2NlZHVyZTo6Y2FsbEFyZ0FyZWFTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Y29kZSgpLmNhbGxBcmdBcmVhU2l6ZSgpOworfQorCit2b2lkIFByb2NlZHVyZTo6cmVxdWVzdENh
bGxBcmdBcmVhU2l6ZSh1bnNpZ25lZCBzaXplKQoreworICAgIGNvZGUoKS5yZXF1ZXN0Q2FsbEFy
Z0FyZWFTaXplKHNpemUpOworfQorCiB1bnNpZ25lZCBQcm9jZWR1cmU6OmZyYW1lU2l6ZSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGNvZGUoKS5mcmFtZVNpemUoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAxOTM1MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDkgKzIy
MSwxNCBAQCBwdWJsaWM6CiAgICAgLy8gdGhhdCBBUEksIHRoZW4geW91IGRvbid0IGhhdmUgdG8g
d29ycnkgYWJvdXQgdGhpcy4KICAgICBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4g
cmVsZWFzZUJ5cHJvZHVjdHMoKSB7IHJldHVybiBXVEY6Om1vdmUobV9ieXByb2R1Y3RzKTsgfQog
CisgICAgLy8gVGhpcyBnaXZlcyB5b3UgZGlyZWN0IGFjY2VzcyB0byBDb2RlLiBIb3dldmVyLCB0
aGUgaWRlYSBpcyB0aGF0IGNsaWVudHMgb2YgQjMgc2hvdWxkbid0IGhhdmUgdG8KKyAgICAvLyBj
YWxsIHRoaXMuIFNvLCBQcm9jZWR1cmUgaGFzIHNvbWUgbWV0aG9kcyAoYmVsb3cpIHRoYXQgZXhw
b3NlIHNvbWUgQWlyOjpDb2RlIGZ1bmN0aW9uYWxpdHkuCiAgICAgY29uc3QgQWlyOjpDb2RlJiBj
b2RlKCkgY29uc3QgeyByZXR1cm4gKm1fY29kZTsgfQogICAgIEFpcjo6Q29kZSYgY29kZSgpIHsg
cmV0dXJuICptX2NvZGU7IH0KIAorICAgIHVuc2lnbmVkIGNhbGxBcmdBcmVhU2l6ZSgpIGNvbnN0
OworICAgIHZvaWQgcmVxdWVzdENhbGxBcmdBcmVhU2l6ZSh1bnNpZ25lZCBzaXplKTsKKwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGZyYW1lU2l6ZSgpIGNvbnN0OwogICAgIGNvbnN0
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgY29uc3Q7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMu
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVk
ZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwVmFsdWUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7
CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6OnVzZWRSZWdp
c3RlcnMoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZhbHVlLT5tX3VzZWRSZWdpc3RlcnM7Cit9
CisKK1Byb2NlZHVyZSYgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOjpwcm9jKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9jb250ZXh0LmNvZGUtPnByb2MoKTsKK30KKworU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMoCisgICAgU3RhY2ttYXBWYWx1ZSog
dmFsdWUsIGNvbnN0IFZlY3RvcjxWYWx1ZVJlcD4mIHJlcHMsIEFpcjo6R2VuZXJhdGlvbkNvbnRl
eHQmIGNvbnRleHQpCisgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICwgbV9yZXBzKHJlcHMpCisg
ICAgLCBtX2NvbnRleHQoY29udGV4dCkKK3sKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrbWFwR2VuZXJhdGlvblBh
cmFtc19oCisjZGVmaW5lIEIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUg
IkIzVmFsdWVSZXAuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ2hlY2tTcGVjaWFsOworY2xhc3MgUGF0Y2hwb2lu
dFNwZWNpYWw7CitjbGFzcyBQcm9jZWR1cmU7CitjbGFzcyBTdGFja21hcFZhbHVlOworCitjbGFz
cyBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMgeworcHVibGljOgorICAgIC8vIFRoaXMgaXMgdGhl
IHN0YWNrbWFwIHZhbHVlIHRoYXQgd2UncmUgZ2VuZXJhdGluZy4KKyAgICBTdGFja21hcFZhbHVl
KiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICAvLyBUaGlzIHRl
bGxzIHlvdSB0aGUgYWN0dWFsIHZhbHVlIHJlcHJlc2VudGF0aW9ucyB0aGF0IHdlcmUgY2hvc2Vu
LiBUaGlzIGlzIHVzdWFsbHkgZGlmZmVyZW50CisgICAgLy8gZnJvbSB0aGUgY29uc3RyYWludHMg
d2Ugc3VwcGxpZWQuCisgICAgY29uc3QgVmVjdG9yPFZhbHVlUmVwPiYgcmVwcygpIGNvbnN0IHsg
cmV0dXJuIG1fcmVwczsgfTsKKworICAgIC8vIFVzdWFsbHkgd2Ugd2lzaCB0byBhY2Nlc3MgdGhl
IHJlcHMuIFdlIG1ha2UgdGhpcyBlYXN5IGJ5IG1ha2luZyBvdXJzZWx2ZXMgYXBwZWFyIHRvIGJl
IGEKKyAgICAvLyBjb2xsZWN0aW9uIG9mIHJlcHMuCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVwcy5zaXplKCk7IH0KKyAgICBjb25zdCBWYWx1ZVJlcCYgYXQodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwc1tpbmRleF07IH0KKyAgICBjb25zdCBWYWx1
ZVJlcCYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgp
OyB9CisgICAgVmVjdG9yPFZhbHVlUmVwPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBtX3JlcHMuYmVnaW4oKTsgfQorICAgIFZlY3RvcjxWYWx1ZVJlcD46OmNvbnN0X2l0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwcy5lbmQoKTsgfQorICAgIAorICAgIC8v
IFRoaXMgdGVsbHMgeW91IHRoZSByZWdpc3RlcnMgdGhhdCB3ZXJlIHVzZWQuCisgICAgY29uc3Qg
UmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMoKSBjb25zdDsKKworICAgIC8vIFRoaXMgaXMgcHJv
dmlkZWQgZm9yIGNvbnZlbmllbmNlOyBpdCBtZWFucyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGNh
cHR1cmUgaXQgaWYgeW91IGRvbid0IHdhbnQgdG8uCisgICAgUHJvY2VkdXJlJiBwcm9jKCkgY29u
c3Q7CisgICAgCisgICAgLy8gVGhlIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQgZ2l2ZXMgeW91IGV2
ZW4gbW9yZSBwb3dlci4KKyAgICBBaXI6OkdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZXh0OyB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KKyAgICB2b2lkIGFkZExhdGVQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0Cisg
ICAgeworICAgICAgICBjb250ZXh0KCkubGF0ZVBhdGhzLmFwcGVuZCgKKyAgICAgICAgICAgIGNy
ZWF0ZVNoYXJlZFRhc2s8QWlyOjpHZW5lcmF0aW9uQ29udGV4dDo6TGF0ZVBhdGhGdW5jdGlvbj4o
CisgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgQWlyOjpHZW5lcmF0aW9u
Q29udGV4dCYpIHsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihqaXQpOworICAgICAgICAg
ICAgICAgIH0pKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENoZWNrU3Bl
Y2lhbDsKKyAgICBmcmllbmQgY2xhc3MgUGF0Y2hwb2ludFNwZWNpYWw7CisgICAgCisgICAgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zKFN0YWNrbWFwVmFsdWUqLCBjb25zdCBWZWN0b3I8VmFsdWVS
ZXA+JiByZXBzLCBBaXI6OkdlbmVyYXRpb25Db250ZXh0Jik7CisKKyAgICBTdGFja21hcFZhbHVl
KiBtX3ZhbHVlOworICAgIFZlY3RvcjxWYWx1ZVJlcD4gbV9yZXBzOworICAgIEFpcjo6R2VuZXJh
dGlvbkNvbnRleHQmIG1fY29udGV4dDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
VmFsdWUuaAkocmV2aXNpb24gMTkzNTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2ttYXBWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywyNiArMzcsNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAotY2xhc3MgU3RhY2ttYXBWYWx1ZTsKLQotbmFt
ZXNwYWNlIEFpciB7Ci1zdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQ7Ci19Ci0KLXN0cnVjdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMgewotICAgIC8vIFRoaXMgaXMgdGhlIHN0YWNrbWFwIHZhbHVl
IHRoYXQgd2UncmUgZ2VuZXJhdGluZy4KLSAgICBTdGFja21hcFZhbHVlKiB2YWx1ZTsKLSAgICAK
LSAgICAvLyBUaGlzIHRlbGxzIHlvdSB0aGUgYWN0dWFsIHZhbHVlIHJlcHJlc2VudGF0aW9ucyB0
aGF0IHdlcmUgY2hvc2VuLiBUaGlzIGlzIHVzdWFsbHkgZGlmZmVyZW50Ci0gICAgLy8gZnJvbSB0
aGUgY29uc3RyYWludHMgd2Ugc3VwcGxpZWQuCi0gICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOwot
ICAgIAotICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSByZWdpc3RlcnMgdGhhdCB3ZXJlIHVzZWQu
Ci0gICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKLQotICAgIC8vIFRoZSBBaXI6OkdlbmVy
YXRpb25Db250ZXh0IGdpdmVzIHlvdSBldmVuIG1vcmUgcG93ZXIuCi0gICAgQWlyOjpHZW5lcmF0
aW9uQ29udGV4dCogY29udGV4dDsKLX07CitjbGFzcyBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM7
CiAKIHR5cGVkZWYgdm9pZCBTdGFja21hcEdlbmVyYXRvckZ1bmN0aW9uKENDYWxsSGVscGVycyYs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpOwogdHlwZWRlZiBTaGFyZWRUYXNrPFN0
YWNrbWFwR2VuZXJhdG9yRnVuY3Rpb24+IFN0YWNrbWFwR2VuZXJhdG9yOwpAQCAtODQsNiArNjUs
MTMgQEAgcHVibGljOgogICAgIC8vIGNoaWxkcmVuKCkuYXBwZW5kKCkuIFRoYXQgd2lsbCB3b3Jr
IGZpbmUsIGJ1dCBpdCdzIG5vdCByZWNvbW1lbmRlZC4KICAgICB2b2lkIGFwcGVuZChjb25zdCBD
b25zdHJhaW5lZFZhbHVlJik7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgor
ICAgIHZvaWQgYXBwZW5kVmVjdG9yKGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvcikKKyAgICB7Cisg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgdmFsdWUgOiB2ZWN0b3IpCisgICAgICAgICAgICBhcHBl
bmQodmFsdWUpOworICAgIH0KKwogICAgIC8vIEhlbHBlciBmb3IgYXBwZW5kaW5nIGNvbGQgYW55
J3MuIFRoaXMgb2Z0ZW4gdXNlZCBieSBjbGllbnRzIHRvIGltcGxlbWVudCBPU1IuCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KICAgICB2b2lkIGFwcGVuZENvbGRBbnlzKGNvbnN0
IFZlY3RvclR5cGUmIHZlY3RvcikKQEAgLTI4NSw2ICsyNzMsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDaGVja1NwZWNpYWw7CiAgICAgZnJpZW5kIGNsYXNzIFBh
dGNocG9pbnRTcGVjaWFsOworICAgIGZyaWVuZCBjbGFzcyBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXM7CiAgICAgZnJpZW5kIGNsYXNzIFN0YWNrbWFwU3BlY2lhbDsKICAgICAKICAgICBWZWN0b3I8
VmFsdWVSZXA+IG1fcmVwczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
UmVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAu
aAkocmV2aXNpb24gMTkzNTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVS
ZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiRlBSSW5m
by5oIgogI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5j
bHVkZSAiUmVnLmgiCiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKQEAgLTIwMSw2ICsy
MDIsMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4odmFs
dWUoKSk7CiAgICAgfQogCisgICAgVmFsdWVSZXAgd2l0aE9mZnNldChpbnRwdHJfdCBvZmZzZXQp
CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIFN0YWNrOgor
ICAgICAgICAgICAgcmV0dXJuIHN0YWNrKG9mZnNldEZyb21GUCgpICsgb2Zmc2V0KTsKKyAgICAg
ICAgY2FzZSBTdGFja0FyZ3VtZW50OgorICAgICAgICAgICAgcmV0dXJuIHN0YWNrQXJndW1lbnQo
b2Zmc2V0RnJvbVNQKCkgKyBvZmZzZXQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuICp0aGlzOworICAgICAgICB9CisgICAgfQorCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTkzNTM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAK
ICNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKICNp
bmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMuaCIKICNpbmNsdWRlICJCM1N3aXRjaFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNVcHNp
bG9uVmFsdWUuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgpAQCAtMzQxMywxMSArMzQx
NCwxMSBAQCB2b2lkIHRlc3RTaW1wbGVQYXRjaHBvaW50KCkKICAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwcy5zaXplKCkgPT0gMyk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5p
c0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwotICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBhZGQz
MihqaXQsIHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJhbXMucmVwc1syXS5ncHIoKSwgcGFyYW1z
LnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsK
KyAgICAgICAgICAgIENIRUNLKHBhcmFtc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtc1sxXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigp
KTsKKyAgICAgICAgICAgIGFkZDMyKGppdCwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3By
KCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgICAgIH0pOwogICAgIHJvb3QtPmFwcGVuZE5ldzxD
b250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHBhdGNocG9pbnQpOwogCkBAIC0z
NDQwLDExICszNDQxLDExIEBAIHZvaWQgdGVzdFNpbXBsZVBhdGNocG9pbnRXaXRob3V0T3VwdXRD
bG8KICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAg
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMik7Ci0gICAgICAgICAg
ICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5yZXBzWzFdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMHgwMGZmMDBmZiksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKLSAgICAgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4MDBmZjAwZmYpLCBwYXJh
bXMucmVwc1sxXS5ncHIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDIp
OworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hF
Q0socGFyYW1zWzFdLmlzR1BSKCkpOworICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoMHgwMGZmMDBmZiksIHBhcmFtc1swXS5ncHIoKSk7CisgICAgICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweDAwZmYwMGZmKSwgcGFyYW1z
WzFdLmdwcigpKTsKICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKDB4MDBmZjAwZmYpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHgwMGZmMDBmZiksIEdQUkluZm86OmFy
Z3VtZW50R1BSMSk7CiAgICAgICAgIH0pOwpAQCAtMzQ4NSwxMiArMzQ4NiwxMiBAQCB2b2lkIHRl
c3RTaW1wbGVQYXRjaHBvaW50V2l0aE91cHV0Q2xvYmJlCiAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnJlcHMuc2l6ZSgpID09IDMpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNH
UFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS5pc0dQUigpKTsKLSAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0Lm1v
dmUocGFyYW1zLnJlcHNbMV0uZ3ByKCksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKLSAgICAgICAg
ICAgIGppdC5hZGQ2NChwYXJhbXMucmVwc1syXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkp
OworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENI
RUNLKHBhcmFtc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1sxXS5pc0dQ
UigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAg
IGppdC5tb3ZlKHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKKyAgICAgICAgICAg
IGppdC5hZGQ2NChwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAKICAgICAgICAg
ICAgIGNsb2JiZXJBbGwuZm9yRWFjaChbJl0gKFJlZyByZWcpIHsKICAgICAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweDAwZmYwMGZmKSwgcmVnLmdwcigp
KTsKQEAgLTM1MjAsMTEgKzM1MjEsMTEgQEAgdm9pZCB0ZXN0U2ltcGxlUGF0Y2hwb2ludFdpdGhv
dXRPdXB1dENsbwogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0
Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAyKTsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzRlBSKCkpOwotICAgICAgICAgICAgQ0hF
Q0socGFyYW1zLnJlcHNbMV0uaXNGUFIoKSk7Ci0gICAgICAgICAgICBqaXQubW92ZVplcm9Ub0Rv
dWJsZShwYXJhbXMucmVwc1swXS5mcHIoKSk7Ci0gICAgICAgICAgICBqaXQubW92ZVplcm9Ub0Rv
dWJsZShwYXJhbXMucmVwc1sxXS5mcHIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6
ZSgpID09IDIpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlzRlBSKCkpOworICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zWzFdLmlzRlBSKCkpOworICAgICAgICAgICAgaml0Lm1vdmVaZXJv
VG9Eb3VibGUocGFyYW1zWzBdLmZwcigpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlWmVyb1RvRG91
YmxlKHBhcmFtc1sxXS5mcHIoKSk7CiAgICAgICAgICAgICBqaXQubW92ZVplcm9Ub0RvdWJsZShG
UFJJbmZvOjphcmd1bWVudEZQUjApOwogICAgICAgICAgICAgaml0Lm1vdmVaZXJvVG9Eb3VibGUo
RlBSSW5mbzo6YXJndW1lbnRGUFIxKTsKICAgICAgICAgfSk7CkBAIC0zNTU4LDExICszNTU5LDEx
IEBAIHZvaWQgdGVzdFNpbXBsZVBhdGNocG9pbnRXaXRoT3VwdXRDbG9iYmUKICAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICBD
SEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMyk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwc1swXS5pc0ZQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzRlBS
KCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNGUFIoKSk7Ci0gICAgICAg
ICAgICBqaXQuYWRkRG91YmxlKHBhcmFtcy5yZXBzWzFdLmZwcigpLCBwYXJhbXMucmVwc1syXS5m
cHIoKSwgcGFyYW1zLnJlcHNbMF0uZnByKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNp
emUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1swXS5pc0ZQUigpKTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtc1sxXS5pc0ZQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFt
c1syXS5pc0ZQUigpKTsKKyAgICAgICAgICAgIGppdC5hZGREb3VibGUocGFyYW1zWzFdLmZwcigp
LCBwYXJhbXNbMl0uZnByKCksIHBhcmFtc1swXS5mcHIoKSk7CiAKICAgICAgICAgICAgIGNsb2Ji
ZXJBbGwuZm9yRWFjaChbJl0gKFJlZyByZWcpIHsKICAgICAgICAgICAgICAgICBqaXQubW92ZVpl
cm9Ub0RvdWJsZShyZWcuZnByKCkpOwpAQCAtMzU5MCwxMCArMzU5MSwxMCBAQCB2b2lkIHRlc3RQ
YXRjaHBvaW50V2l0aEVhcmx5Q2xvYmJlcigpCiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXJF
YXJseShSZWdpc3RlclNldChyZWdpc3RlclRvQ2xvYmJlcikpOwogICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIENI
RUNLKChwYXJhbXMucmVwc1sxXS5ncHIoKSA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjApID09IGFy
ZzFJbkFyZ0dQUik7Ci0gICAgICAgICAgICAgICAgQ0hFQ0soKHBhcmFtcy5yZXBzWzJdLmdwcigp
ID09IEdQUkluZm86OmFyZ3VtZW50R1BSMSkgPT0gYXJnMkluQXJnR1BSKTsKKyAgICAgICAgICAg
ICAgICBDSEVDSygocGFyYW1zWzFdLmdwcigpID09IEdQUkluZm86OmFyZ3VtZW50R1BSMCkgPT0g
YXJnMUluQXJnR1BSKTsKKyAgICAgICAgICAgICAgICBDSEVDSygocGFyYW1zWzJdLmdwcigpID09
IEdQUkluZm86OmFyZ3VtZW50R1BSMSkgPT0gYXJnMkluQXJnR1BSKTsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJh
bXMucmVwc1syXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAg
IGFkZDMyKGppdCwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5n
cHIoKSk7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICByb290LT5hcHBlbmROZXc8Q29udHJv
bFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKQEAgLTM2MTgsMTYg
KzM2MTksMTYgQEAgdm9pZCB0ZXN0UGF0Y2hwb2ludENhbGxBcmcoKQogICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBz
WzBdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNTdGFjaygp
KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzU3RhY2soKSk7CisgICAgICAg
ICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDMpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1z
WzBdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzFdLmlzU3RhY2soKSk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNTdGFjaygpKTsKICAgICAgICAgICAgIGppdC5s
b2FkMzIoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBwYXJhbXMucmVwc1sxXS5vZmZzZXRGcm9tRlAoKSksCi0gICAgICAg
ICAgICAgICAgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcGFyYW1zWzFdLm9mZnNl
dEZyb21GUCgpKSwKKyAgICAgICAgICAgICAgICBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICAg
ICAgaml0LmFkZDMyKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcGFyYW1zLnJlcHNbMl0ub2Zmc2V0RnJvbUZQKCkpLAot
ICAgICAgICAgICAgICAgIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHBhcmFtc1sy
XS5vZmZzZXRGcm9tRlAoKSksCisgICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpKTsKICAg
ICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7CiAKQEAgLTM2NDYsMTEgKzM2NDcsMTEgQEAgdm9pZCB0
ZXN0UGF0Y2hwb2ludEZpeGVkUmVnaXN0ZXIoKQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBz
LnNpemUoKSA9PSAzKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkp
OwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0gPT0gVmFsdWVSZXAoR1BSSW5mbzo6
cmVnVDApKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdID09IFZhbHVlUmVwKEdQ
UkluZm86OnJlZ1QxKSk7Ci0gICAgICAgICAgICBhZGQzMihqaXQsIEdQUkluZm86OnJlZ1QwLCBH
UFJJbmZvOjpyZWdUMSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1swXS5pc0dQUigp
KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1sxXSA9PSBWYWx1ZVJlcChHUFJJbmZvOjpyZWdU
MCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdID09IFZhbHVlUmVwKEdQUkluZm86OnJl
Z1QxKSk7CisgICAgICAgICAgICBhZGQzMihqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpy
ZWdUMSwgcGFyYW1zWzBdLmdwcigpKTsKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7CiAKQEAg
LTM2NzAsMTEgKzM2NzEsMTEgQEAgdm9pZCB0ZXN0UGF0Y2hwb2ludEFueShWYWx1ZVJlcCByZXAp
CiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVy
VXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgICAgICAvLyBXZSBzaG91bGRuJ3QgaGF2
ZSBzcGlsbGVkIHRoZSBpbnB1dHMsIHNvIHdlIGFzc2VydCB0aGF0IHRoZXkncmUgaW4gcmVnaXN0
ZXJzLgotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDMpOwotICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwc1sxXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJd
LmlzR1BSKCkpOwotICAgICAgICAgICAgYWRkMzIoaml0LCBwYXJhbXMucmVwc1sxXS5ncHIoKSwg
cGFyYW1zLnJlcHNbMl0uZ3ByKCksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKKyAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMyk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMF0u
aXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMV0uaXNHUFIoKSk7CisgICAgICAg
ICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBhZGQzMihqaXQsIHBh
cmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAg
ICB9KTsKICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCBwYXRjaHBvaW50KTsKIApAQCAtMzcwNCwxNiArMzcwNSwxNiBAQCB2b2lkIHRlc3RQ
YXRjaHBvaW50TG90c09mTGF0ZUFueXMoKQogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAg
ICAgICAgLy8gV2Ugc2hvdWxkbid0IGhhdmUgc3BpbGxlZCB0aGUgaW5wdXRzLCBzbyB3ZSBhc3Nl
cnQgdGhhdCB0aGV5J3JlIGluIHJlZ2lzdGVycy4KLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzLnNpemUoKSA9PSB0aGluZ3Muc2l6ZSgpICsgMSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwc1swXS5pc0dQUigpKTsKLSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKDApLCBwYXJhbXMucmVwc1swXS5ncHIoKSk7Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgcGFyYW1zLnJlcHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBpZiAocGFyYW1zLnJlcHNbaV0uaXNHUFIoKSkgewotICAgICAgICAgICAgICAgICAg
ICBDSEVDSyhwYXJhbXMucmVwc1tpXSAhPSBwYXJhbXMucmVwc1swXSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGppdC5hZGQzMihwYXJhbXMucmVwc1tpXS5ncHIoKSwgcGFyYW1zLnJlcHNbMF0uZ3By
KCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSB0aGluZ3Muc2l6ZSgpICsg
MSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMF0uaXNHUFIoKSk7CisgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgcGFyYW1zWzBdLmdwcigpKTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBwYXJhbXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgICAgICBpZiAocGFyYW1zW2ldLmlzR1BSKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zW2ldICE9IHBhcmFtc1swXSk7CisgICAgICAgICAgICAgICAg
ICAgIGppdC5hZGQzMihwYXJhbXNbaV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNb
aV0uaXNTdGFjaygpKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcGFyYW1zLnJlcHNbaV0ub2Zm
c2V0RnJvbUZQKCkpLCBwYXJhbXMucmVwc1swXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAg
IENIRUNLKHBhcmFtc1tpXS5pc1N0YWNrKCkpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRk
MzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBwYXJh
bXNbaV0ub2Zmc2V0RnJvbUZQKCkpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CkBAIC0zNzM2LDE0ICszNzM3LDE0IEBAIHZv
aWQgdGVzdFBhdGNocG9pbnRBbnlJbW0oVmFsdWVSZXAgcmVwKQogICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBh
cmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBd
LmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0g
ICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0NvbnN0YW50KCkpOwotICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0udmFsdWUoKSA9PSA0Mik7CisgICAgICAgICAgICBDSEVD
SyhwYXJhbXMuc2l6ZSgpID09IDMpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdLmlzR1BS
KCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzFdLmlzR1BSKCkpOworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zWzJdLmlzQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNb
Ml0udmFsdWUoKSA9PSA0Mik7CiAgICAgICAgICAgICBqaXQuYWRkMzIoCi0gICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocGFyYW1z
LnJlcHNbMl0udmFsdWUoKSkpLAotICAgICAgICAgICAgICAgIHBhcmFtcy5yZXBzWzFdLmdwcigp
LCBwYXJhbXMucmVwc1swXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocGFyYW1zWzJdLnZhbHVlKCkpKSwKKyAg
ICAgICAgICAgICAgICBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CiAgICAgICAg
IH0pOwogICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIHBhdGNocG9pbnQpOwogCkBAIC0zNzY1LDExICszNzY2LDExIEBAIHZvaWQgdGVzdFBh
dGNocG9pbnRNYW55SW1tcygpCiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFs
dWUoYXJnNCwgVmFsdWVSZXA6Oldhcm1BbnkpKTsKICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9
PSA0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdID09IFZhbHVlUmVwOjpjb25z
dGFudCg0MikpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0gPT0gVmFsdWVSZXA6
OmNvbnN0YW50KDQzKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXSA9PSBWYWx1
ZVJlcDo6Y29uc3RhbnQoNDMwMDAwMDAwMDAwMDBsbCkpOwotICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnJlcHNbM10gPT0gVmFsdWVSZXA6OmNvbnN0YW50KGJpdHdpc2VfY2FzdDxpbnQ2NF90Pig0
Mi41KSkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSA0KTsKKyAgICAgICAg
ICAgIENIRUNLKHBhcmFtc1swXSA9PSBWYWx1ZVJlcDo6Y29uc3RhbnQoNDIpKTsKKyAgICAgICAg
ICAgIENIRUNLKHBhcmFtc1sxXSA9PSBWYWx1ZVJlcDo6Y29uc3RhbnQoNDMpKTsKKyAgICAgICAg
ICAgIENIRUNLKHBhcmFtc1syXSA9PSBWYWx1ZVJlcDo6Y29uc3RhbnQoNDMwMDAwMDAwMDAwMDBs
bCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdID09IFZhbHVlUmVwOjpjb25zdGFudChi
aXR3aXNlX2Nhc3Q8aW50NjRfdD4oNDIuNSkpKTsKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4oCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCkBA
IC0zNzkxLDExICszNzkyLDExIEBAIHZvaWQgdGVzdFBhdGNocG9pbnRXaXRoUmVnaXN0ZXJSZXN1
bHQoKQogICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKLSAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdID09IFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6bm9uQXJn
R1BSMCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7Ci0gICAg
ICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsKLSAgICAgICAgICAgIGFkZDMy
KGppdCwgcGFyYW1zLnJlcHNbMV0uZ3ByKCksIHBhcmFtcy5yZXBzWzJdLmdwcigpLCBHUFJJbmZv
Ojpub25BcmdHUFIwKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMyk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXNbMF0gPT0gVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpub25B
cmdHUFIwKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMV0uaXNHUFIoKSk7CisgICAgICAg
ICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBhZGQzMihqaXQsIHBh
cmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAg
ICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7CiAKQEAgLTM4MTYsMTIgKzM4MTcsMTIgQEAgdm9pZCB0
ZXN0UGF0Y2hwb2ludFdpdGhTdGFja0FyZ3VtZW50UmVzdQogICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5yZXBzLnNpemUoKSA9PSAzKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdID09
IFZhbHVlUmVwOjpzdGFjaygtc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHByb2MuZnJhbWVTaXplKCkp
KSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS5pc0dQUigpKTsKLSAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0LnN0b3Jl
MzIocGFyYW1zLnJlcHNbMV0uZ3ByKCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAwKSk7Ci0gICAgICAgICAgICBqaXQuYWRkMzIocGFy
YW1zLnJlcHNbMl0uZ3ByKCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyLCAwKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgp
ID09IDMpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzBdID09IFZhbHVlUmVwOjpzdGFjaygt
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHByb2MuZnJhbWVTaXplKCkpKSk7CisgICAgICAgICAgICBD
SEVDSyhwYXJhbXNbMV0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNH
UFIoKSk7CisgICAgICAgICAgICBqaXQuc3RvcmUzMihwYXJhbXNbMV0uZ3ByKCksIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAwKSk7Cisg
ICAgICAgICAgICBqaXQuYWRkMzIocGFyYW1zWzJdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgMCkpOwogICAgICAgICB9KTsK
ICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBwYXRjaHBvaW50KTsKIApAQCAtMzg0NCwxMyArMzg0NSwxMyBAQCB2b2lkIHRlc3RQYXRjaHBv
aW50V2l0aEFueVJlc3VsdCgpCiAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAg
ICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFs
bG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09
IDMpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNTdGFjaygpKTsKLSAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBhZGQzMihqaXQsIHBhcmFtcy5y
ZXBzWzFdLmdwcigpLCBwYXJhbXMucmVwc1syXS5ncHIoKSwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBh
cmFtc1swXS5pc1N0YWNrKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzFdLmlzR1BSKCkp
OworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgYWRk
MzIoaml0LCBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSwgR1BSSW5mbzo6cmVnVDAp
OwogICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKEdQUkluZm86OnJlZ1QwLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjpm
cFJlZ1QwLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IHBhcmFtcy5yZXBzWzBdLm9mZnNldEZyb21GUCgpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVE
b3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBwYXJhbXNbMF0ub2Zmc2V0RnJvbUZQKCkpKTsKICAgICAgICAgfSk7
CiAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwgcGF0Y2hwb2ludCk7CiAKQEAgLTM4NjYsNyArMzg2Nyw3IEBAIHZvaWQgdGVzdFNpbXBsZUNo
ZWNrKCkKICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAg
ICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwot
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDEpOworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnNpemUoKSA9PSAxKTsKIAogICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQg
YWx3YXlzIHdvcmsgYmVjYXVzZSBhIGZ1bmN0aW9uIHRoaXMgc2ltcGxlIHNob3VsZCBuZXZlciBo
YXZlIGNhbGxlZQogICAgICAgICAgICAgLy8gc2F2ZXMuCkBAIC0zODk4LDcgKzM4OTksNyBAQCB2
b2lkIHRlc3RDaGVja0xlc3NUaGFuKCkKICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKAogICAgICAg
ICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFs
bG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09
IDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSAxKTsKIAogICAgICAgICAg
ICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIHdvcmsgYmVjYXVzZSBhIGZ1bmN0aW9uIHRoaXMgc2lt
cGxlIHNob3VsZCBuZXZlciBoYXZlIGNhbGxlZQogICAgICAgICAgICAgLy8gc2F2ZXMuCkBAIC0z
OTQ0LDcgKzM5NDUsNyBAQCB2b2lkIHRlc3RDaGVja01lZ2FDb21ibygpCiAgICAgY2hlY2stPnNl
dEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBh
cmFtcy5yZXBzLnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkg
PT0gMSk7CiAKICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGFsd2F5cyB3b3JrIGJlY2F1c2Ug
YSBmdW5jdGlvbiB0aGlzIHNpbXBsZSBzaG91bGQgbmV2ZXIgaGF2ZSBjYWxsZWUKICAgICAgICAg
ICAgIC8vIHNhdmVzLgpAQCAtMzk4NCwxMSArMzk4NSwxMSBAQCB2b2lkIHRlc3RDaGVja0FkZElt
bSgpCiAgICAgY2hlY2tBZGQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsK
LSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnJlcHNbM10uaXNDb25zdGFudCgpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNd
LnZhbHVlKCkgPT0gNDIpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBh
cmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIo
KSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbM10uaXNDb25zdGFudCgpKTsKKyAgICAgICAg
ICAgIENIRUNLKHBhcmFtc1szXS52YWx1ZSgpID09IDQyKTsKKyAgICAgICAgICAgIGppdC5jb252
ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwogICAg
ICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKDQyKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuYWRkRG91YmxlKEZQ
UkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVtaXRG
dW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC00MDIwLDExICs0MDIxLDExIEBAIHZvaWQgdGVzdENoZWNr
QWRkSW1tQ29tbXV0ZSgpCiAgICAgY2hlY2tBZGQtPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsK
LSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnJlcHNbM10uaXNDb25zdGFudCgpKTsKLSAgICAgICAgICAgIENIRUNLKHBh
cmFtcy5yZXBzWzNdLnZhbHVlKCkgPT0gNDIpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQz
MlRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJh
bXNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbM10uaXNDb25zdGFudCgp
KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1szXS52YWx1ZSgpID09IDQyKTsKKyAgICAgICAg
ICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZw
UmVnVDApOwogICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDQyKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQu
YWRkRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAg
ICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC00MDU2LDExICs0MDU3LDExIEBAIHZv
aWQgdGVzdENoZWNrQWRkSW1tU29tZVJlZ2lzdGVyKCkKICAgICBjaGVja0FkZC0+c2V0R2VuZXJh
dG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJl
cHMuc2l6ZSgpID09IDQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIo
KSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS5pc0dQUigpKTsKLSAgICAgICAg
ICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5m
bzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1z
LnJlcHNbM10uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsK
KyAgICAgICAgICAgIENIRUNLKHBhcmFtc1szXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5j
b252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwor
ICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtc1szXS5ncHIoKSwgRlBS
SW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuYWRkRG91YmxlKEZQUkluZm86OmZwUmVn
VDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7CiAgICAgICAgICAgICBqaXQucmV0KCk7CkBAIC00MDkzLDExICs0MDk0LDExIEBAIHZv
aWQgdGVzdENoZWNrQWRkKCkKICAgICBjaGVja0FkZC0+c2V0R2VuZXJhdG9yKAogICAgICAgICBb
Jl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQp
OwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAg
ICBDSEVDSyhwYXJhbXMucmVwc1szXS5pc0dQUigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0
SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0g
ICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbM10uZ3ByKCks
IEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSA0
KTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENI
RUNLKHBhcmFtc1szXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0Rv
dWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0
LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7
CiAgICAgICAgICAgICBqaXQuYWRkRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZw
UmVnVDApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAg
ICAgICBqaXQucmV0KCk7CkBAIC00MTI2LDExICs0MTI3LDExIEBAIHZvaWQgdGVzdENoZWNrQWRk
NjQoKQogICAgIGNoZWNrQWRkLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAg
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAg
ICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5yZXBzWzNdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91Ymxl
KHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGpp
dC5jb252ZXJ0SW50NjRUb0RvdWJsZShwYXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBS
ZWdUMSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAg
ICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNd
LmlzR1BSKCkpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtc1sy
XS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0
VG9Eb3VibGUocGFyYW1zWzNdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAg
IGppdC5hZGREb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAg
ICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQo
KTsKQEAgLTQyMDAsMTEgKzQyMDEsMTEgQEAgdm9pZCB0ZXN0Q2hlY2tTdWJJbW0oKQogICAgIGNo
ZWNrU3ViLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAg
ICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwc1syXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlz
Q29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS52YWx1ZSgpID09
IDQyKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1sy
XS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6
ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXNbM10udmFsdWUoKSA9PSA0Mik7CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9E
b3VibGUocGFyYW1zWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIGpp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMig0MiksIEZQ
UkluZm86OmZwUmVnVDEpOwogICAgICAgICAgICAgaml0LnN1YkRvdWJsZShGUFJJbmZvOjpmcFJl
Z1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGls
b2d1ZSgpOwpAQCAtNDIzNywxMSArNDIzOCwxMSBAQCB2b2lkIHRlc3RDaGVja1N1YkJhZEltbSgp
CiAgICAgY2hlY2tTdWItPnNldEdlbmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIENI
RUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJl
cHNbM10uaXNDb25zdGFudCgpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLnZh
bHVlKCkgPT0gYmFkSW1tKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShw
YXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBDSEVD
SyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BS
KCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzQ29uc3RhbnQoKSk7CisgICAgICAg
ICAgICBDSEVDSyhwYXJhbXNbM10udmFsdWUoKSA9PSBiYWRJbW0pOworICAgICAgICAgICAgaml0
LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7
CiAgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoYmFkSW1tKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAgICAgICAgICAgICBqaXQuc3Vi
RG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAg
aml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC00Mjc1LDExICs0Mjc2LDExIEBAIHZvaWQg
dGVzdENoZWNrU3ViKCkKICAgICBjaGVja1N1Yi0+c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDQpOwot
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBD
SEVDSyhwYXJhbXMucmVwc1szXS5pc0dQUigpKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50
MzJUb0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAg
ICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbM10uZ3ByKCksIEZQ
UkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnNpemUoKSA9PSA0KTsK
KyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtc1szXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJs
ZShwYXJhbXNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmNv
bnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CiAg
ICAgICAgICAgICBqaXQuc3ViRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVn
VDApOwogICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAg
ICBqaXQucmV0KCk7CkBAIC00MzEzLDExICs0MzE0LDExIEBAIHZvaWQgdGVzdENoZWNrU3ViNjQo
KQogICAgIGNoZWNrU3ViLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0g
ICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBD
SEVDSyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzWzNdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBh
cmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5j
b252ZXJ0SW50NjRUb0RvdWJsZShwYXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdU
MSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlz
R1BSKCkpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtc1syXS5n
cHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9E
b3VibGUocGFyYW1zWzNdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGpp
dC5zdWJEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAg
ICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsK
QEAgLTQzODYsOSArNDM4Nyw5IEBAIHZvaWQgdGVzdENoZWNrTmVnKCkKICAgICBjaGVja05lZy0+
c2V0R2VuZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHMuc2l6ZSgpID09IDMpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNb
Ml0uaXNHUFIoKSk7Ci0gICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1z
LnJlcHNbMl0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtc1syXS5pc0dQUigpKTsK
KyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNbMl0uZ3ByKCksIEZQ
UkluZm86OmZwUmVnVDEpOwogICAgICAgICAgICAgaml0Lm5lZ2F0ZURvdWJsZShGUFJJbmZvOjpm
cFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25F
cGlsb2d1ZSgpOwogICAgICAgICAgICAgaml0LnJldCgpOwpAQCAtNDQxNiw5ICs0NDE3LDkgQEAg
dm9pZCB0ZXN0Q2hlY2tOZWc2NCgpCiAgICAgY2hlY2tOZWctPnNldEdlbmVyYXRvcigKICAgICAg
ICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9
PSAzKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlzR1BSKCkpOwotICAgICAg
ICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJ
bmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMyk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQuY29u
dmVydEludDY0VG9Eb3VibGUocGFyYW1zWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAg
ICAgICAgICAgIGppdC5uZWdhdGVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBS
ZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAg
ICAgIGppdC5yZXQoKTsKQEAgLTQ0NTEsMTEgKzQ0NTIsMTEgQEAgdm9pZCB0ZXN0Q2hlY2tNdWwo
KQogICAgIGNoZWNrTXVsLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0g
ICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBD
SEVDSyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5y
ZXBzWzNdLmlzR1BSKCkpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBh
cmFtcy5yZXBzWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5j
b252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdU
MSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlz
R1BSKCkpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtc1syXS5n
cHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9E
b3VibGUocGFyYW1zWzNdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGpp
dC5tdWxEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAg
ICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsK
QEAgLTQ0OTIsMTEgKzQ0OTMsMTEgQEAgdm9pZCB0ZXN0Q2hlY2tNdWxNZW1vcnkoKQogICAgIGNo
ZWNrTXVsLT5zZXRHZW5lcmF0b3IoCiAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAg
ICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gNCk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJh
bXMucmVwc1syXS5pc0dQUigpKTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzNdLmlz
R1BSKCkpOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBz
WzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5jb252ZXJ0SW50
MzJUb0RvdWJsZShwYXJhbXMucmVwc1szXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAg
ICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQ0hFQ0socGFy
YW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zWzNdLmlzR1BSKCkpOwor
ICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtc1syXS5ncHIoKSwgRlBS
SW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFy
YW1zWzNdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKICAgICAgICAgICAgIGppdC5tdWxEb3Vi
bGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBqaXQu
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgICAgIGppdC5yZXQoKTsKQEAgLTQ1Mzgs
MTEgKzQ1MzksMTEgQEAgdm9pZCB0ZXN0Q2hlY2tNdWwyKCkKICAgICBjaGVja011bC0+c2V0R2Vu
ZXJhdG9yKAogICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnJlcHMuc2l6ZSgpID09IDQpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNH
UFIoKSk7Ci0gICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1szXS5pc0NvbnN0YW50KCkpOwot
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10udmFsdWUoKSA9PSAyKTsKLSAgICAgICAg
ICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1syXS5ncHIoKSwgRlBSSW5m
bzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMuc2l6ZSgpID09IDQpOworICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zWzJdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFy
YW1zWzNdLmlzQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbM10udmFsdWUo
KSA9PSAyKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXNbMl0u
Z3ByKCksIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIpLCBGUFJJbmZvOjpmcFJlZ1QxKTsK
ICAgICAgICAgICAgIGppdC5tdWxEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBS
ZWdUMCk7CiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTQ1NzIs
MTEgKzQ1NzMsMTEgQEAgdm9pZCB0ZXN0Q2hlY2tNdWw2NCgpCiAgICAgY2hlY2tNdWwtPnNldEdl
bmVyYXRvcigKICAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5yZXBzLnNpemUoKSA9PSA0KTsKLSAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzJdLmlz
R1BSKCkpOwotICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbM10uaXNHUFIoKSk7Ci0gICAg
ICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1zLnJlcHNbMl0uZ3ByKCksIEZQ
UkluZm86OmZwUmVnVDApOwotICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBh
cmFtcy5yZXBzWzNdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbMl0uaXNHUFIo
KSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXNbM10uaXNHUFIoKSk7CisgICAgICAgICAgICBq
aXQuY29udmVydEludDY0VG9Eb3VibGUocGFyYW1zWzJdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1Qw
KTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0RvdWJsZShwYXJhbXNbM10uZ3ByKCks
IEZQUkluZm86OmZwUmVnVDEpOwogICAgICAgICAgICAgaml0Lm11bERvdWJsZShGUFJJbmZvOjpm
cFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25F
cGlsb2d1ZSgpOwogICAgICAgICAgICAgaml0LnJldCgpOwpAQCAtNDY3NSw5ICs0Njc2LDkgQEAg
dm9pZCBnZW5lcmljVGVzdENvbXBhcmUoCiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cigKICAgICAgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0
Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzLnNpemUoKSA9PSAxKTsKLSAgICAgICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwc1swXS5pc0dQUigpKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigxKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICAgICAgQ0hFQ0socGFyYW1z
WzBdLmlzR1BSKCkpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDEpLCBwYXJhbXNbMF0uZ3ByKCkpOwogICAgICAgICAgICAgfSk7CiAgICAgICAg
IHRoZW5DYXNlLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBwYXRjaHBvaW50KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJH
ZW5lcmF0aW9uQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkocmV2aXNpb24gMTkzNTM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw3ICszMSwxMSBAQAogI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ0NhbGxIZWxwZXJzOworCitu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAogY2xhc3MgQ29kZTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25IYW5kbGVy
TWFuYWdlci5jcHAJKHJldmlzaW9uIDE5MzUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRlRMRXhjZXB0aW9uSGFu
ZGxlck1hbmFnZXIuaCIKIAotI2lmIEVOQUJMRShGVExfSklUKQorI2lmIEVOQUJMRShGVExfSklU
KSAmJiAhRlRMX1VTRVNfQjMKIAogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAKQEAgLTE2NCw0ICsx
NjQsNCBAQCBDYWxsU2l0ZUluZGV4IEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpwCiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpGVEwKIAotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKSAmJiAhRlRMX1VTRVNfQjMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmgJKHJl
dmlzaW9uIDE5MzUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9u
SGFuZGxlck1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOSBAQAogI2lmbmRl
ZiBGVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlcl9oCiAjZGVmaW5lIEZUTEV4Y2VwdGlvbkhhbmRs
ZXJNYW5hZ2VyX2gKIAotI2lmIEVOQUJMRShGVExfSklUKQorI2luY2x1ZGUgIkRGR0NvbW1vbi5o
IgorCisjaWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwogCiAjaW5jbHVkZSAiQ2Fs
bEZyYW1lLmgiCiAjaW5jbHVkZSAiRlRMSlNDYWxsLmgiCkBAIC04Myw2ICs4NSw2IEBAIHByaXZh
dGU6CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAotI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQorI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAmJiAhRlRMX1VTRVNfQjMKIAogI2VuZGlm
IC8vIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpTQ2FsbC5jcHAJKHJldmlzaW9uIDE5MzUzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZUTEpTQ2FsbC5oIgogCi0jaWYgRU5B
QkxFKEZUTF9KSVQpCisjaWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwogCiAjaW5j
bHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCkBAIC02Myw1ICs2Myw1IEBA
IHZvaWQgSlNDYWxsOjplbWl0KENDYWxsSGVscGVycyYgaml0LCBTdGEKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAogCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpTQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSlNDYWxsLmgJKHJldmlzaW9uIDE5MzUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSlNDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDkgQEAKICNpZm5k
ZWYgRlRMSlNDYWxsX2gKICNkZWZpbmUgRlRMSlNDYWxsX2gKIAotI2lmIEVOQUJMRShGVExfSklU
KQorI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExf
VVNFU19CMwogCiAjaW5jbHVkZSAiRlRMSlNDYWxsQmFzZS5oIgogCkBAIC02MSw3ICs2Myw3IEBA
IHB1YmxpYzoKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCi0jZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwogCiAj
ZW5kaWYgLy8gRlRMSlNDYWxsX2gKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKU0NhbGxCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpTQ2FsbEJhc2UuY3BwCShyZXZpc2lvbiAxOTM1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRlRMSlNDYWxsQmFzZS5oIgogCi0j
aWYgRU5BQkxFKEZUTF9KSVQpCisjaWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwog
CiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCkBAIC01NSwxMiAr
NTUsOCBAQCB2b2lkIEpTQ2FsbEJhc2U6OmVtaXQoQ0NhbGxIZWxwZXJzJiBqaXQsCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoISFtX2NhbGxTaXRlSW5kZXgpOwogCi0jaWYgRlRMX1VTRVNfQjMKLSAg
ICBVTlVTRURfUEFSQU0ob3NyRXhpdEZyb21HZW5lcmljVW53aW5kU3RhY2tTcGlsbFNsb3QpOwot
I2Vsc2UgLy8gRlRMX1VTRVNfQjMKICAgICBpZiAobV9jb3JyZXNwb25kaW5nR2VuZXJpY1Vud2lu
ZE9TUkV4aXQpCiAgICAgICAgIG1fY29ycmVzcG9uZGluZ0dlbmVyaWNVbndpbmRPU1JFeGl0LT5z
cGlsbFJlZ2lzdGVyc1RvU3BpbGxTbG90KGppdCwgb3NyRXhpdEZyb21HZW5lcmljVW53aW5kU3Rh
Y2tTcGlsbFNsb3QpOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAKICAgICBqaXQuc3RvcmUzMihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX2NhbGxTaXRlSW5kZXguYml0cygpKSwgQ0NhbGxI
ZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1
bWVudENvdW50KSkpOwogCkBAIC0xMDcsNSArMTAzLDUgQEAgdm9pZCBKU0NhbGxCYXNlOjpsaW5r
KFZNJiB2bSwgTGlua0J1ZmZlcgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKLSNlbmRp
ZiAvLyBFTkFCTEUoRlRMX0pJVCkKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9V
U0VTX0IzCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5o
CShyZXZpc2lvbiAxOTM1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2Fs
bEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOSBAQAogI2lmbmRlZiBGVExKU0Nh
bGxCYXNlX2gKICNkZWZpbmUgRlRMSlNDYWxsQmFzZV9oCiAKLSNpZiBFTkFCTEUoRlRMX0pJVCkK
KyNpbmNsdWRlICJERkdDb21tb24uaCIKKworI2lmIEVOQUJMRShGVExfSklUKSAmJiAhRlRMX1VT
RVNfQjMKIAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkNhbGxMaW5rSW5m
by5oIgpAQCAtNzMsNyArNzUsNyBAQCBwdWJsaWM6CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKIAotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KSAmJiAhRlRMX1VTRVNfQjMKIAogI2VuZGlmIC8vIEZUTEpTQ2FsbEJhc2VfaAogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5jcHAJKHJldmlz
aW9uIDE5MzUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJn
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCiAKLSNpZiBFTkFCTEUoRlRMX0pJVCkK
KyNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VTX0IzCiAKICNpbmNsdWRlICJERkdOb2Rl
LmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgpAQCAtMjI1LDUgKzIyNSw1IEBAIHZvaWQg
SlNDYWxsVmFyYXJnczo6bGluayhWTSYgdm0sIExpbmtCdWYKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTAogCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpICYmICFGVExfVVNFU19CMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpTQ2FsbFZhcmFyZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaAkocmV2aXNpb24gMTkzNTM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDkgQEAKICNpZm5kZWYgRlRMSlNDYWxsVmFyYXJnc19oCiAjZGVmaW5lIEZUTEpTQ2FsbFZh
cmFyZ3NfaAogCi0jaWYgRU5BQkxFKEZUTF9KSVQpCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisK
KyNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VTX0IzCiAKICNpbmNsdWRlICJGVExKU0Nh
bGxCYXNlLmgiCiAKQEAgLTc1LDcgKzc3LDcgQEAgcHVibGljOgogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCiAKLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKyNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkgJiYgIUZUTF9VU0VTX0IzCiAKICNlbmRpZiAvLyBGVExKU0NhbGxWYXJhcmdzX2gK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU1RhaWxDYWxsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTVGFpbENhbGwuY3BwCShy
ZXZpc2lvbiAxOTM1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTVGFpbENh
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRlRMSlNUYWlsQ2FsbC5oIgogCi0jaWYgRU5BQkxFKEZUTF9KSVQpCisj
aWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwogCiAjaW5jbHVkZSAiQ2FsbEZyYW1l
U2h1ZmZsZXIuaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCkBAIC0zOCwyNyArMzgsOCBAQAogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKLXVzaW5nIG5hbWVzcGFjZSBCMzsKIHVz
aW5nIG5hbWVzcGFjZSBERkc7CiAKLSNpZiBGVExfVVNFU19CMwotCi1KU1RhaWxDYWxsOjpKU1Rh
aWxDYWxsKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCwgTm9kZSogbm9kZSwgY29uc3QgVmVj
dG9yPEV4aXRWYWx1ZT4mIGFyZ3VtZW50cykKLSAgICA6IEpTQ2FsbEJhc2UoQ2FsbExpbmtJbmZv
OjpUYWlsQ2FsbCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBub2RlLT5vcmlnaW4uc2VtYW50aWMp
Ci0gICAgLCBtX3BhdGNocG9pbnQocGF0Y2hwb2ludCkKLSAgICAsIG1fYXJndW1lbnRzKGFyZ3Vt
ZW50cykKLSAgICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoMCkKLXsKLSAgICBVTlJFQUNIQUJMRV9G
T1JfUExBVEZPUk0oKTsKLX0KLQotdm9pZCBKU1RhaWxDYWxsOjplbWl0KEpJVENvZGUmLCBDQ2Fs
bEhlbHBlcnMmKQotewotICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotfQotCi0jZWxz
ZSAvLyBGVExfVVNFU19CMwotCiBuYW1lc3BhY2UgewogCiBGVEw6OkxvY2F0aW9uIGdldFJlZ2lz
dGVyV2l0aEFkZGVuZChjb25zdCBFeGl0VmFsdWUmIHZhbHVlLCBTdGFja01hcHM6OlJlY29yZCYg
cmVjb3JkLCBTdGFja01hcHMmIHN0YWNrbWFwcykKQEAgLTM0Miw4ICszMjMsNiBAQCB2b2lkIEpT
VGFpbENhbGw6OmVtaXQoSklUQ29kZSYgaml0Q29kZSwgCiAgICAgbV9jYWxsTGlua0luZm8tPnNl
dFVwQ2FsbChtX3R5cGUsIG1fc2VtYW50aWNlT3JpZ2luLCBjYWxsZWVHUFIpOwogfQogCi0jZW5k
aWYgLy8gRlRMX1VTRVNfQjMKLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCi0jZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNF
U19CMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU1RhaWxDYWxsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU1RhaWxDYWxsLmgJKHJl
dmlzaW9uIDE5MzUzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNUYWlsQ2Fs
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw5IEBACiAjaWZuZGVmIEZUTEpTVGFpbENh
bGxfaAogI2RlZmluZSBGVExKU1RhaWxDYWxsX2gKIAotI2lmIEVOQUJMRShGVExfSklUKQorI2lu
Y2x1ZGUgIkRGR0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19C
MwogCiAjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKICNpbmNsdWRlICJERkdDb21tb24u
aCIKQEAgLTQ1LDIwICs0NywxMiBAQCBuYW1lc3BhY2UgRlRMIHsKIGNsYXNzIEpTVGFpbENhbGwg
OiBwdWJsaWMgSlNDYWxsQmFzZSB7CiBwdWJsaWM6CiAgICAgSlNUYWlsQ2FsbCgKLSNpZiBGVExf
VVNFU19CMwotICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiwKLSNlbHNlIC8vIEZUTF9VU0VT
X0IzCiAgICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQsCi0jZW5kaWYgLy8gRlRMX1VTRVNfQjMK
ICAgICAgICAgREZHOjpOb2RlKiwgY29uc3QgVmVjdG9yPEV4aXRWYWx1ZT4mIGFyZ3VtZW50cyk7
CiAKICAgICB2b2lkIGVtaXQoSklUQ29kZSYsIENDYWxsSGVscGVycyYpOwogCi0jaWYgRlRMX1VT
RVNfQjMKLSAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KCkgY29uc3QgeyByZXR1
cm4gbV9wYXRjaHBvaW50OyB9Ci0jZWxzZSAvLyBGVExfVVNFU19CMwogICAgIHVuc2lnbmVkIHN0
YWNrbWFwSUQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrbWFwSUQ7IH0KLSNlbmRpZiAvLyBGVExf
VVNFU19CMwogCiAgICAgdW5zaWduZWQgZXN0aW1hdGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZXN0aW1hdGVkU2l6ZTsgfQogCkBAIC03MCwxMSArNjQsNyBAQCBwdWJsaWM6CiAgICAgfQogICAg
IAogcHJpdmF0ZToKLSNpZiBGVExfVVNFU19CMwotICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIG1f
cGF0Y2hwb2ludDsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCiAgICAgdW5zaWduZWQgbV9zdGFja21h
cElEOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgVmVjdG9yPEV4aXRWYWx1ZT4gbV9hcmd1
bWVudHM7CiAgICAgdW5zaWduZWQgbV9lc3RpbWF0ZWRTaXplOwogCkBAIC04NCw3ICs3NCw3IEBA
IHB1YmxpYzoKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCi0jZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwogCiAj
ZW5kaWYgLy8gRlRMSlNUYWlsQ2FsbF9oCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxOTM1MzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIK
ICNpbmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKKyNpbmNsdWRlICJC
M1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRU
eXBlLmgiCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCIKICNpbmNs
dWRlICJERkdEb21pbmF0b3JzLmgiCkBAIC00ODI4LDE0ICs0ODI5LDEwNSBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0KCkKICAgICB7CisgICAgICAgIE5vZGUq
IG5vZGUgPSBtX25vZGU7CisgICAgICAgIHVuc2lnbmVkIG51bUFyZ3MgPSBub2RlLT5udW1DaGls
ZHJlbigpIC0gMTsKKworICAgICAgICBMVmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVlKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworCiAjaWYgRlRMX1VTRVNfQjMKLSAgICAgICAgaWYg
KHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSB8fCAhdmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxl
ZCgpKQotICAgICAgICAgICAgQ1JBU0goKTsKLSNlbHNlCi0gICAgICAgIGludCBudW1BcmdzID0g
bV9ub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKKyAgICAgICAgdW5zaWduZWQgZnJhbWVTaXplID0g
SlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bUFyZ3M7CisgICAgICAgIHVuc2lnbmVk
IGFsaWduZWRGcmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1l
bnRSZWdpc3RlcnMoKSwgZnJhbWVTaXplKTsKKworICAgICAgICAvLyBKUy0+SlMgY2FsbGluZyBj
b252ZW50aW9uIHJlcXVpcmVzIHRoYXQgdGhlIGNhbGxlciBhbGxvd3MgdGhpcyBtdWNoIHNwYWNl
IG9uIHRvcCBvZiBzdGFjayB0bworICAgICAgICAvLyBnZXQgdHJhc2hlZCBieSB0aGUgY2FsbGVl
LCBldmVuIGlmIG5vdCBhbGwgb2YgdGhhdCBzcGFjZSBpcyB1c2VkIHRvIHBhc3MgYXJndW1lbnRz
LiBXZSB0ZWxsCisgICAgICAgIC8vIEIzIHRoaXMgZXhwbGljaXRseSBmb3IgdHdvIHJlYXNvbnM6
CisgICAgICAgIC8vCisgICAgICAgIC8vIC0gV2Ugd2lsbCBvbmx5IHBhc3MgZnJhbWVTaXplIHdv
cnRoIG9mIHN0dWZmLgorICAgICAgICAvLyAtIFRoZSB0cmFzaGVkIHN0YWNrIGd1YXJhbnRlZSBp
cyBsb2dpY2FsbHkgc2VwYXJhdGUgZnJvbSB0aGUgYWN0IG9mIHBhc3NpbmcgYXJndW1lbnRzLCBz
byB3ZQorICAgICAgICAvLyAgIHNob3VsZG4ndCByZWx5IG9uIEFpciB0byBpbmZlciB0aGUgdHJh
c2hlZCBzdGFjayBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgYXJndW1lbnRzIGl0IGVuZHMKKyAgICAg
ICAgLy8gICB1cCBzZWVpbmcuCisgICAgICAgIG1fcHJvYy5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXpl
KGFsaWduZWRGcmFtZVNpemUpOworCisgICAgICAgIC8vIENvbGxlY3QgdGhlIGFyZ3VtZW50cywg
c2luY2UgdGhpcyBjYW4gZ2VuZXJhdGUgY29kZSBhbmQgd2Ugd2FudCB0byBnZW5lcmF0ZSBpdCBi
ZWZvcmUgd2UgZW1pdAorICAgICAgICAvLyB0aGUgY2FsbC4KKyAgICAgICAgVmVjdG9yPENvbnN0
cmFpbmVkVmFsdWU+IGFyZ3VtZW50czsKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUg
Y2FsbGVlIGdvZXMgaW50byBHUFIwLgorICAgICAgICBhcmd1bWVudHMuYXBwZW5kKENvbnN0cmFp
bmVkVmFsdWUoanNDYWxsZWUsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmVnVDApKSk7CisKKyAg
ICAgICAgLy8gTWFrZSB0aGlzIGVhc3kgZm9yIG91cnNlbHZlczogdGhpcyBhZGRzIGEgc3RhY2sg
YXJndW1lbnQuCisgICAgICAgIGF1dG8gYWRkQXJndW1lbnQgPSBbJl0gKExWYWx1ZSB2YWx1ZSwg
VmlydHVhbFJlZ2lzdGVyIHJlZywgaW50IG9mZnNldCkgeworICAgICAgICAgICAgaW50cHRyX3Qg
b2Zmc2V0RnJvbVNQID0KKyAgICAgICAgICAgICAgICAocmVnLm9mZnNldCgpIC0gSlNTdGFjazo6
Q2FsbGVyRnJhbWVBbmRQQ1NpemUpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIG9mZnNldDsK
KyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZSh2YWx1ZSwgVmFs
dWVSZXA6OnN0YWNrQXJndW1lbnQob2Zmc2V0RnJvbVNQKSkpOworICAgICAgICB9OworCisgICAg
ICAgIC8vIE5vdyBwdXQgdGhpbmdzIGludG8gdGhlIHN0YWNrLgorICAgICAgICBhZGRBcmd1bWVu
dChqc0NhbGxlZSwgVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSksIDApOworICAgICAg
ICBhZGRBcmd1bWVudChtX291dC5jb25zdEludDMyKG51bUFyZ3MpLCBWaXJ0dWFsUmVnaXN0ZXIo
SlNTdGFjazo6QXJndW1lbnRDb3VudCksIFBheWxvYWRPZmZzZXQpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKQorICAgICAgICAgICAgYWRkQXJndW1lbnQo
bG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEgKyBpKSksIHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KGkpLCAwKTsKKworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSBtX291dC5wYXRjaHBvaW50KEludDY0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kVmVjdG9yKGFyZ3VtZW50cyk7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0
ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlckxhdGUoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOworICAg
ICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OnJlZyhHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CiAKLSAgICAgICAgTFZhbHVlIGpzQ2FsbGVlID0gbG93SlNWYWx1
ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpOworICAgICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4gPSBjb2RlT3JpZ2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCk7CisgICAgICAgIFN0
YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLmFkZFVuaXF1
ZUNhbGxTaXRlSW5kZXgoY29kZU9yaWdpbik7CiAKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SWYgd2Ugd2VyZSBoYW5kbGluZyBleGNlcHRpb25zLCB0aGVuIGF0IHRoaXMgcG9pbnQgd2Ugd291
bGQgYXNrIG91ciBkZXNjcmlwdG9yCisgICAgICAgICAgICAgICAgLy8gdG8gcHJlcGFyZSBhbmQg
dGhlbiB3ZSB3b3VsZCBtb2RpZnkgdGhlIE9TUkV4aXQgZGF0YSBzdHJ1Y3R1cmUgaW5zaWRlIHRo
ZQorICAgICAgICAgICAgICAgIC8vIE9TUkV4aXRIYW5kbGUgdG8gbGluayBpdCB1cCB0byB0aGlz
IGNhbGwuCisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoSlNT
dGFjazo6QXJndW1lbnRDb3VudCkpKTsKKworICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKKworICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Cisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0
cldpdGhQYXRjaCgKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwg
R1BSSW5mbzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ssCisgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSk7CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CisKKyAgICAgICAgICAgICAgICBzbG93
UGF0aC5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAg
ICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldFVwQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBDb25z
dHJ1Y3QgPyBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA6IENhbGxMaW5rSW5mbzo6Q2FsbCwKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBHUFJJbmZvOjpyZWdUMCk7
CisKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtcGFyYW1zLnByb2MoKS5mcmFtZVNpemUoKSksCisgICAg
ICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFz
aygKKyAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlua0NhbGwgPQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIudm0oKS5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIobGlua0NhbGwuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENh
bGxMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCkpOworICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIHNldEpTVmFsdWUo
cGF0Y2hwb2ludCk7CisjZWxzZQogICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFj
a21hcElEcysrOwogCiAgICAgICAgIHVuc2lnbmVkIGZyYW1lU2l6ZSA9IEpTU3RhY2s6OkNhbGxG
cmFtZUhlYWRlclNpemUgKyBudW1BcmdzOwpAQCAtNDg0OCw4ICs0OTQwLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291dC5pbnQ2NCkpOyAvLyBjb2Rl
IGJsb2NrCiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoanNDYWxsZWUpOyAvLyBjYWxsZWUgLT4g
c3RhY2sKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDY0KG51bUFyZ3Mp
KTsgLy8gYXJndW1lbnQgY291bnQgYW5kIHplcm9zIGZvciB0aGUgdGFnCi0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKQotICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVu
ZChsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxICsgaSkpKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUFyZ3M7ICsraSkKKyAgICAgICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEgKyBp
KSkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFkZGluZzsgKytpKQogICAg
ICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291dC5pbnQ2NCkpOwogCkBAIC00
ODYzLDcgKzQ5NTUsNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNh
bGwobV9vdXQuaW50NjQsIG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLCBhcmd1bWVu
dHMpOwogICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1X
ZWJLaXRKU0NhbGxDb252KTsKICAgICAgICAgCi0gICAgICAgIG1fZnRsU3RhdGUuanNDYWxscy5h
cHBlbmQoSlNDYWxsKHN0YWNrbWFwSUQsIG1fbm9kZSwgY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZD
YWxsU2l0ZSgpKSk7CisgICAgICAgIG1fZnRsU3RhdGUuanNDYWxscy5hcHBlbmQoSlNDYWxsKHN0
YWNrbWFwSUQsIG5vZGUsIGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKSkpOwogICAg
ICAgICAKICAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKICNlbmRpZgpAQCAtNTMyMiwxOCArNTQx
NCw2NSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUludmFsaWRhdGlvblBvaW50
KCkKICAgICB7Ci0jaWYgRlRMX1VTRVNfQjMKLSAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRG
T1JNKCk7Ci0jZWxzZSAvLyBGVExfVVNFU19CMwogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0
aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgZGF0YUxvZygiICAgIEludmFsaWRhdGlvbiBwb2lu
dCB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOwogCiAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX29yaWdpbi5leGl0T0spOwogICAgICAg
ICAKKyNpZiBGVExfVVNFU19CMworICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbV9vdXQucGF0Y2hwb2ludChWb2lkKTsKKyAgICAgICAgT1NSRXhpdERlc2NyaXB0b3Iq
IGRlc2NyaXB0b3IgPSBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihub1ZhbHVlKCksIG51bGxwdHIp
OworICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOworICAgICAgICBwYXRjaHBv
aW50LT5hcHBlbmRDb2xkQW55cyhidWlsZEV4aXRBcmd1bWVudHMoZGVzY3JpcHRvciwgb3JpZ2lu
LmZvckV4aXQsIG5vVmFsdWUoKSkpOworICAgICAgICAKKyAgICAgICAgU3RhdGUqIHN0YXRlID0g
Jm1fZnRsU3RhdGU7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAg
ICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIE1hY3JvQXNzZW1ibGVy
IGtub3dzIG1vcmUgYWJvdXQgdGhpcyB0aGFuIEIzIGRvZXMuIFRoZSB3YXRjaHBvaW50TGFiZWwo
KSBtZXRob2QKKyAgICAgICAgICAgICAgICAvLyB3aWxsIGVuc3VyZSB0aGF0IHRoaXMgaXMgZm9s
bG93ZWQgYnkgYSBub3Agc2hhZG93IGJ1dCBvbmx5IHdoZW4gdGhpcyBpcyBhY3R1YWxseQorICAg
ICAgICAgICAgICAgIC8vIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkxhYmVsIGxhYmVsID0gaml0LndhdGNocG9pbnRMYWJlbCgpOworCisgICAgICAgICAgICAgICAg
UmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRsZSA9IGRlc2NyaXB0b3ItPmVtaXRPU1JFeGl0TGF0
ZXIoCisgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgVW5jb3VudGFibGVJbnZhbGlkYXRpb24s
IG9yaWdpbiwgcGFyYW1zKTsKKworICAgICAgICAgICAgICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRD
b2RlID0gc3RhdGUtPmppdENvZGUuZ2V0KCk7CisKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soCisgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
eworICAgICAgICAgICAgICAgICAgICAgICAgSnVtcFJlcGxhY2VtZW50IGp1bXBSZXBsYWNlbWVu
dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobGFi
ZWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZiho
YW5kbGUtPmxhYmVsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXRDb2RlLT5jb21tb24u
anVtcFJlcGxhY2VtZW50cy5hcHBlbmQoanVtcFJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0
aGUgZWZmZWN0cyBhcmUgYXMgd2Ugd2FudC4KKworICAgICAgICAvLyBTZXQgc29tZSBvYnZpb3Vz
IHRoaW5ncy4KKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy50ZXJtaW5hbCA9IGZhbHNlOwor
ICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc1NTQVN0YXRlID0gZmFsc2U7CisgICAg
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNTU0FTdGF0ZSA9IGZhbHNlOworICAgICAgICAK
KyAgICAgICAgLy8gVGhpcyBpcyBob3cgd2UgdGVsbCBCMyBhYm91dCB0aGUgcG9zc2liaWxpdHkg
b2YganVtcCByZXBsYWNlbWVudC4KKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5leGl0c1Np
ZGV3YXlzID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIC8vIEl0J3Mgbm90IHBvc3NpYmxlIGZv
ciBzb21lIHByaW9yIGJyYW5jaCB0byBkZXRlcm1pbmUgdGhlIHNhZmV0eSBvZiB0aGlzIG9wZXJh
dGlvbi4gSXQncyBhbHdheXMKKyAgICAgICAgLy8gZmluZSB0byBleGVjdXRlIHRoaXMgb24gc29t
ZSBwYXRoIHRoYXQgd291bGRuJ3QgaGF2ZSBvcmlnaW5hbGx5IGV4ZWN1dGVkIGl0IGJlZm9yZQor
ICAgICAgICAvLyBvcHRpbWl6YXRpb24uCisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMuY29u
dHJvbERlcGVuZGVudCA9IGZhbHNlOworCisgICAgICAgIC8vIElmIHRoaXMgZmFsbHMgdGhyb3Vn
aCB0aGVuIGl0IHdvbid0IHdyaXRlIGFueXRoaW5nLgorICAgICAgICBwYXRjaHBvaW50LT5lZmZl
Y3RzLndyaXRlcyA9IEhlYXBSYW5nZSgpOworCisgICAgICAgIC8vIFdoZW4gdGhpcyBhYnJ1cHRs
eSB0ZXJtaW5hdGVzLCBpdCBjb3VsZCByZWFkIGFueSBoZWFwIGxvY2F0aW9uLgorICAgICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKKyNlbHNlIC8vIEZU
TF9VU0VTX0IzCiAKICAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yID0g
YXBwZW5kT1NSRXhpdERlc2NyaXB0b3IoVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIEV4Y2VwdGlv
blR5cGU6Ok5vbmUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwogICAgICAgICAKLSAg
ICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3QgYXJndW1lbnRzID0gYnVpbGRFeGl0QXJndW1lbnRz
KGV4aXREZXNjcmlwdG9yLCBtX2Z0bFN0YXRlLm9zckV4aXREZXNjcmlwdG9ySW1wbHMubGFzdCgp
LCBGb3JtYXR0ZWRWYWx1ZSgpKTsKKyAgICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3QgYXJndW1l
bnRzID0gYnVpbGRFeGl0QXJndW1lbnRzKGV4aXREZXNjcmlwdG9yLCBtX2Z0bFN0YXRlLm9zckV4
aXREZXNjcmlwdG9ySW1wbHMubGFzdCgpLm1fY29kZU9yaWdpbiwgRm9ybWF0dGVkVmFsdWUoKSk7
CiAgICAgICAgIGNhbGxTdGFja21hcChleGl0RGVzY3JpcHRvciwgYXJndW1lbnRzKTsKICAgICAg
ICAgCiAgICAgICAgIGV4aXREZXNjcmlwdG9yLT5tX2lzSW52YWxpZGF0aW9uUG9pbnQgPSB0cnVl
OwpAQCAtNzkwMSw3ICs4MDQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmVzdWx0LT5zZXRHZW5l
cmF0b3IoCiAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIFZlY3RvcjxMb2Nh
dGlvbj4gbG9jYXRpb25zOwotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgQjM6OlZhbHVlUmVw
JiByZXAgOiBwYXJhbXMucmVwcykKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEIzOjpWYWx1
ZVJlcCYgcmVwIDogcGFyYW1zKQogICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnMuYXBwZW5k
KExvY2F0aW9uOjpmb3JWYWx1ZVJlcChyZXApKTsKIAogICAgICAgICAgICAgICAgIFJlZlB0cjxM
YXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gZ2VuZXJhdG9yID0gZnVuY3Rvcihsb2NhdGlvbnMpOwpA
QCAtNzkwOSw1NiArODA0OCw1NSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6UGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsK
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGRvbmUgPSBqaXQubGFiZWwoKTsK
IAotICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBwYXJhbXMudXNl
ZFJlZ2lzdGVyczsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0g
cGFyYW1zLnVzZWRSZWdpc3RlcnMoKTsKIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBcyBw
YXJ0IG9mIGhhbmRsaW5nIGV4Y2VwdGlvbnMsIHdlIG5lZWQgdG8gY3JlYXRlIGEgY29uY3JldGUg
T1NSRXhpdCBoZXJlLgogICAgICAgICAgICAgICAgIC8vIERvaW5nIHNvIHNob3VsZCBhdXRvbWFn
aWNhbGx5IHJlZ2lzdGVyIGxhdGUgcGF0aHMgdGhhdCBlbWl0IGV4aXQgdGh1bmtzLgotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIHBhcmFtcy5jb250ZXh0LT5sYXRlUGF0aHMuYXBw
ZW5kKAotICAgICAgICAgICAgICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPEFpcjo6R2VuZXJhdGlv
bkNvbnRleHQ6OkxhdGVQYXRoRnVuY3Rpb24+KAotICAgICAgICAgICAgICAgICAgICAgICAgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hhYmxlSnVtcC5t
X2p1bXAubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bmRleCA9IHN0YXRlLT5qaXRDb2RlLT5sYXp5U2xvd1BhdGhzLnNpemUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZS0+aml0Q29kZS0+bGF6eVNsb3dQYXRocy5hcHBlbmQobnVs
bHB0cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LnB1c2hUb1NhdmVJbW1lZGlh
dGVXaXRob3V0VG91Y2hpbmdSZWdpc3RlcnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRvckp1bXAgPSBqaXQuanVtcCgp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHNvIGxvbmcgYXMg
d2UncmUgaGVyZSwgd2UgZG9uJ3QgcmVhbGx5IGtub3cgaWYgb3VyIGxhdGUgcGF0aAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHJ1bnMgYmVmb3JlIG9yIGFmdGVyIGFueSBvdGhlciBs
YXRlIHBhdGhzIHRoYXQgd2UgbWlnaHQgZGVwZW5kIG9uLCBsaWtlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlIGV4Y2VwdGlvbiB0aHVuay4KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlID0gc3RhdGUtPmppdENvZGU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVk0qIHZtID0gJnN0YXRlLT5ncmFwaC5tX3ZtOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JKdW1wLCBDb2RlTG9jYXRp
b25MYWJlbCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0t
PmdldENUSVN0dWIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworCisg
ICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAorICAgICAgICAgICAgICAgICAgICBb
PV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwYXRjaGFibGVKdW1wLm1fanVtcC5saW5rKCZqaXQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0ZS0+aml0Q29kZS0+bGF6eVNsb3dQYXRo
cy5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aml0Q29kZS0+bGF6eVNs
b3dQYXRocy5hcHBlbmQobnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHVz
aFRvU2F2ZUltbWVkaWF0ZVdpdGhvdXRUb3VjaGluZ1JlZ2lzdGVycygKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRvckp1bXAgPSBqaXQu
anVtcCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgc28gbG9uZyBh
cyB3ZSdyZSBoZXJlLCB3ZSBkb24ndCByZWFsbHkga25vdyBpZiBvdXIgbGF0ZSBwYXRoCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBydW5zIGJlZm9yZSBvciBhZnRlciBhbnkgb3RoZXIgbGF0
ZSBwYXRocyB0aGF0IHdlIG1pZ2h0IGRlcGVuZCBvbiwgbGlrZQorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdGhlIGV4Y2VwdGlvbiB0aHVuay4KKworICAgICAgICAgICAgICAgICAgICAgICAg
UmVmUHRyPEpJVENvZGU+IGppdENvZGUgPSBzdGF0ZS0+aml0Q29kZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFZNKiB2bSA9ICZzdGF0ZS0+Z3JhcGgubV92bTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnZW5lcmF0b3JKdW1wLCBDb2RlTG9jYXRpb25MYWJlbCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1YigKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJh
dG9yKS5jb2RlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBsaW5rZWRQ
YXRjaGFibGVKdW1wID0gQ29kZUxvY2F0aW9uSnVtcCgKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocGF0Y2hhYmxlSnVtcCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGlu
a2VkRG9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihkb25lKTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IE5lZWQgYSBzdG9yeSBmb3IgZXhjZXB0aW9u
cyBpbiBGVEwtQjMuIFRoYXQgYmFzaWNhbGx5IG1lYW5zCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBkb2luZyBhIGxvb2t1cCBvZiB0aGUgZXhjZXB0aW9uIGVudHJ5cG9p
bnQgaGVyZS4gV2Ugd2lsbCBoYXZlIGFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBPU1IgZXhpdCBkYXRhIHN0cnVjdHVyZSBvZiBzb21lIHNvcnQuCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUxNjg2Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25UYXJnZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxs
U2l0ZUluZGV4KG9yaWdpbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkp1bXAgbGlua2VkUGF0Y2hhYmxlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXAoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocGF0
Y2hhYmxlSnVtcCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbCBsaW5rZWREb25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGRvbmUpOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBOZWVkIGEgc3RvcnkgZm9yIGV4
Y2VwdGlvbnMgaW4gRlRMLUIzLiBUaGF0IGJhc2ljYWxseSBtZWFucworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBkb2luZyBhIGxvb2t1cCBvZiB0aGUgZXhjZXB0aW9uIGVudHJ5
cG9pbnQgaGVyZS4gV2Ugd2lsbCBoYXZlIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIE9TUiBleGl0IGRhdGEgc3RydWN0dXJlIG9mIHNvbWUgc29ydC4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MTY4NgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbCBleGNlcHRpb25UYXJnZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChvcmlnaW4p
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF6eVNsb3dQYXRoPiBsYXp5U2xv
d1BhdGggPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFr
ZV91bmlxdWU8TGF6eVNsb3dQYXRoPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua2VkUGF0Y2hhYmxlSnVtcCwgbGlua2VkRG9uZSwgZXhjZXB0aW9uVGFy
Z2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkUmVn
aXN0ZXJzLCBjYWxsU2l0ZUluZGV4LCBnZW5lcmF0b3IpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF6eVNsb3dQYXRoPiBsYXp5U2xvd1BhdGggPQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxMYXp5
U2xvd1BhdGg+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtl
ZFBhdGNoYWJsZUp1bXAsIGxpbmtlZERvbmUsIGV4Y2VwdGlvblRhcmdldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLCBjYWxsU2l0ZUluZGV4
LCBnZW5lcmF0b3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXRDb2RlLT5sYXp5U2xvd1BhdGhzW2lu
ZGV4XSA9IFdURjo6bW92ZShsYXp5U2xvd1BhdGgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaml0Q29kZS0+bGF6eVNsb3dQYXRoc1tpbmRleF0gPSBXVEY6Om1v
dmUobGF6eVNsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICNlbHNlCkBAIC05MjEzLDYgKzkzNTEsNyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24pOwogICAgIH0KIAorI2lmICFGVExfVVNFU19CMwogICAgIHZv
aWQgYXBwZW5kT1NSRXhpdEFyZ3VtZW50c0ZvclBhdGNocG9pbnRJZldpbGxDYXRjaEV4Y2VwdGlv
bihTdGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBFeGNlcHRpb25UeXBlIGV4Y2VwdGlv
blR5cGUsIHVuc2lnbmVkIG9mZnNldE9mRXhpdEFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIENv
ZGVPcmlnaW4gb3BDYXRjaE9yaWdpbjsKQEAgLTkyMzAsOSArOTM2OSwxMCBAQCBwcml2YXRlOgog
ICAgICAgICBleGl0RGVzY3JpcHRvckltcGwubV9iYXNlbGluZUV4Y2VwdGlvbkhhbmRsZXIgPSAq
ZXhjZXB0aW9uSGFuZGxlcjsKIAogICAgICAgICBTdGFja21hcEFyZ3VtZW50TGlzdCBmcmVzaExp
c3QgPQotICAgICAgICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXREZXNjcmlwdG9yLCBleGl0
RGVzY3JpcHRvckltcGwsIG5vVmFsdWUoKSwgb2Zmc2V0T2ZFeGl0QXJndW1lbnRzKTsKKyAgICAg
ICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVzY3JpcHRvciwgZXhpdERlc2NyaXB0b3JJ
bXBsLm1fY29kZU9yaWdpbiwgbm9WYWx1ZSgpLCBvZmZzZXRPZkV4aXRBcmd1bWVudHMpOwogICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kVmVjdG9yKGZyZXNoTGlzdCk7CiAgICAgfQorI2VuZGlmIC8v
ICFGVExfVVNFU19CMwogCiAgICAgYm9vbCBlbWl0QnJhbmNoVG9PU1JFeGl0SWZXaWxsQ2F0Y2hF
eGNlcHRpb24oTFZhbHVlIGhhZEV4Y2VwdGlvbikKICAgICB7CkBAIC05MjUxLDYgKzkzOTEsMTYg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fYmxvY2tzLmdldChibG9jayk7CiAgICAgfQog
CisKKyNpZiBGVExfVVNFU19CMworICAgIE9TUkV4aXREZXNjcmlwdG9yKiBhcHBlbmRPU1JFeGl0
RGVzY3JpcHRvcihGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuICZtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlwdG9y
cy5hbGxvYygKKyAgICAgICAgICAgIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKKyAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKTsKKyAgICB9CisjZWxzZSAv
LyBGVExfVVNFU19CMwogICAgIE9TUkV4aXREZXNjcmlwdG9yKiBhcHBlbmRPU1JFeGl0RGVzY3Jp
cHRvcihFeGl0S2luZCBraW5kLCBFeGNlcHRpb25UeXBlIGV4Y2VwdGlvblR5cGUsIEZvcm1hdHRl
ZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIE5vZGVPcmlnaW4gb3JpZ2luKQogICAg
IHsKICAgICAgICAgT1NSRXhpdERlc2NyaXB0b3ImIHJlc3VsdCA9IG1fZnRsU3RhdGUuaml0Q29k
ZS0+b3NyRXhpdERlc2NyaXB0b3JzLmFsbG9jKApAQCAtOTI2MSw2ICs5NDExLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGtpbmQsIG9yaWdpbi5mb3JFeGl0LCBvcmlnaW4uc2VtYW50aWMsIGV4
Y2VwdGlvblR5cGUpOwogICAgICAgICByZXR1cm4gJnJlc3VsdDsKICAgICB9CisjZW5kaWYgLy8g
RlRMX1VTRVNfQjMKICAgICAKICAgICB2b2lkIGFwcGVuZE9TUkV4aXQoCiAgICAgICAgIEV4aXRL
aW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1
ZSBmYWlsQ29uZGl0aW9uLCAKQEAgLTkzMjgsMTggKzk0NzksMTYgQEAgcHJpdmF0ZToKICNpZiBG
VExfVVNFU19CMwogICAgIHZvaWQgYmxlc3NTcGVjdWxhdGlvbihCMzo6Q2hlY2tWYWx1ZSogdmFs
dWUsIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFs
dWUsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGlzRXhjZXB0aW9uSGFuZGxlciA9IGZhbHNlKQog
ICAgIHsKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yID0gYXBwZW5k
T1NSRXhpdERlc2NyaXB0b3IoCi0gICAgICAgICAgICBraW5kLCBpc0V4Y2VwdGlvbkhhbmRsZXIg
PyBFeGNlcHRpb25UeXBlOjpDQ2FsbEV4Y2VwdGlvbiA6IEV4Y2VwdGlvblR5cGU6Ok5vbmUsIGxv
d1ZhbHVlLAotICAgICAgICAgICAgaGlnaFZhbHVlLCBvcmlnaW4pOwotICAgICAgICBPU1JFeGl0
RGVzY3JpcHRvckltcGwqIGV4aXREZXNjcmlwdG9ySW1wbCA9ICZtX2Z0bFN0YXRlLm9zckV4aXRE
ZXNjcmlwdG9ySW1wbHMubGFzdCgpOworICAgICAgICBPU1JFeGl0RGVzY3JpcHRvciogZXhpdERl
c2NyaXB0b3IgPSBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihsb3dWYWx1ZSwgaGlnaFZhbHVlKTsK
ICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHZhbHVlLT5udW1DaGlsZHJlbigp
OwotICAgICAgICB2YWx1ZS0+YXBwZW5kQ29sZEFueXMoYnVpbGRFeGl0QXJndW1lbnRzKGV4aXRE
ZXNjcmlwdG9yLCBtX2Z0bFN0YXRlLm9zckV4aXREZXNjcmlwdG9ySW1wbHMubGFzdCgpLCBsb3dW
YWx1ZSkpOworICAgICAgICB2YWx1ZS0+YXBwZW5kQ29sZEFueXMoYnVpbGRFeGl0QXJndW1lbnRz
KGV4aXREZXNjcmlwdG9yLCBvcmlnaW4uZm9yRXhpdCwgbG93VmFsdWUpKTsKIAogICAgICAgICBT
dGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKICAgICAgICAgdmFsdWUtPnNldEdlbmVyYXRvcigK
ICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIGV4aXREZXNjcmlwdG9y
LT5lbWl0T1NSRXhpdCgqc3RhdGUsIGV4aXREZXNjcmlwdG9ySW1wbCwgaml0LCBwYXJhbXMsIG9m
ZnNldCk7CisgICAgICAgICAgICAgICAgZXhpdERlc2NyaXB0b3ItPmVtaXRPU1JFeGl0KAorICAg
ICAgICAgICAgICAgICAgICAqc3RhdGUsIGtpbmQsIG9yaWdpbiwgaml0LCBwYXJhbXMsIG9mZnNl
dCwgaXNFeGNlcHRpb25IYW5kbGVyKTsKICAgICAgICAgICAgIH0pOwogICAgIH0KICNlbmRpZgpA
QCAtOTM0NywyOSArOTQ5NiwyOSBAQCBwcml2YXRlOgogI2lmICFGVExfVVNFU19CMwogICAgIHZv
aWQgZW1pdE9TUkV4aXRDYWxsKE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciwgRm9y
bWF0dGVkVmFsdWUgbG93VmFsdWUpCiAgICAgewotICAgICAgICBjYWxsU3RhY2ttYXAoZXhpdERl
c2NyaXB0b3IsIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVzY3JpcHRvciwgbV9mdGxTdGF0ZS5v
c3JFeGl0RGVzY3JpcHRvckltcGxzLmxhc3QoKSwgbG93VmFsdWUpKTsKKyAgICAgICAgY2FsbFN0
YWNrbWFwKGV4aXREZXNjcmlwdG9yLCBidWlsZEV4aXRBcmd1bWVudHMoZXhpdERlc2NyaXB0b3Is
IG1fZnRsU3RhdGUub3NyRXhpdERlc2NyaXB0b3JJbXBscy5sYXN0KCkubV9jb2RlT3JpZ2luLCBs
b3dWYWx1ZSkpOwogICAgIH0KICNlbmRpZgogCiAgICAgU3RhY2ttYXBBcmd1bWVudExpc3QgYnVp
bGRFeGl0QXJndW1lbnRzKAotICAgICAgICBPU1JFeGl0RGVzY3JpcHRvciogZXhpdERlc2NyaXB0
b3IsIE9TUkV4aXREZXNjcmlwdG9ySW1wbCYgZXhpdERlc2NyaXB0b3JJbXBsLCBGb3JtYXR0ZWRW
YWx1ZSBsb3dWYWx1ZSwKKyAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9y
LCBDb2RlT3JpZ2luIGV4aXRPcmlnaW4sIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLAogICAgICAg
ICB1bnNpZ25lZCBvZmZzZXRPZkV4aXRBcmd1bWVudHNJblN0YWNrbWFwTG9jYXRpb25zID0gMCkK
ICAgICB7CiAgICAgICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0IHJlc3VsdDsKICAgICAgICAgYnVp
bGRFeGl0QXJndW1lbnRzKAotICAgICAgICAgICAgZXhpdERlc2NyaXB0b3IsIGV4aXREZXNjcmlw
dG9ySW1wbCwgcmVzdWx0LCBsb3dWYWx1ZSwgb2Zmc2V0T2ZFeGl0QXJndW1lbnRzSW5TdGFja21h
cExvY2F0aW9ucyk7CisgICAgICAgICAgICBleGl0RGVzY3JpcHRvciwgZXhpdE9yaWdpbiwgcmVz
dWx0LCBsb3dWYWx1ZSwgb2Zmc2V0T2ZFeGl0QXJndW1lbnRzSW5TdGFja21hcExvY2F0aW9ucyk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIHZvaWQgYnVpbGRFeGl0
QXJndW1lbnRzKAotICAgICAgICBPU1JFeGl0RGVzY3JpcHRvciogZXhpdERlc2NyaXB0b3IsIE9T
UkV4aXREZXNjcmlwdG9ySW1wbCYgZXhpdERlc2NyaXB0b3JJbXBsLCBTdGFja21hcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwKKyAgICAgICAgT1NSRXhp
dERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yLCBDb2RlT3JpZ2luIGV4aXRPcmlnaW4sIFN0YWNr
bWFwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLAogICAg
ICAgICB1bnNpZ25lZCBvZmZzZXRPZkV4aXRBcmd1bWVudHNJblN0YWNrbWFwTG9jYXRpb25zID0g
MCkKICAgICB7CiAgICAgICAgIGlmICghIWxvd1ZhbHVlKQogICAgICAgICAgICAgYXJndW1lbnRz
LmFwcGVuZChsb3dWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAgCiAgICAgICAgIEF2YWlsYWJpbGl0
eU1hcCBhdmFpbGFiaWxpdHlNYXAgPSB0aGlzLT5hdmFpbGFiaWxpdHlNYXAoKTsKLSAgICAgICAg
YXZhaWxhYmlsaXR5TWFwLnBydW5lQnlMaXZlbmVzcyhtX2dyYXBoLCBleGl0RGVzY3JpcHRvcklt
cGwubV9jb2RlT3JpZ2luKTsKKyAgICAgICAgYXZhaWxhYmlsaXR5TWFwLnBydW5lQnlMaXZlbmVz
cyhtX2dyYXBoLCBleGl0T3JpZ2luKTsKICAgICAgICAgCiAgICAgICAgIEhhc2hNYXA8Tm9kZSos
IEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4gbWFwOwogICAgICAgICBhdmFpbGFiaWxp
dHlNYXAuZm9yRWFjaEF2YWlsYWJpbGl0eSgKQEAgLTkzOTYsNyArOTU0NSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MoKSkg
ewogICAgICAgICAgICAgICAgIERGR19BU1NFUlQoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsIG1fbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgKCEoYXZhaWxhYmlsaXR5LmlzRGVhZCgp
ICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIGV4
aXREZXNjcmlwdG9ySW1wbC5tX2NvZGVPcmlnaW4pKSkgfHwgbV9ncmFwaC5tX3BsYW4ubW9kZSA9
PSBGVExGb3JPU1JFbnRyeU1vZGUpOworICAgICAgICAgICAgICAgICAgICAoIShhdmFpbGFiaWxp
dHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kKSwgZXhpdE9yaWdpbikpKSB8fCBtX2dyYXBoLm1fcGxhbi5tb2RlID09IEZUTEZvck9T
UkVudHJ5TW9kZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBFeGl0VmFsdWUgZXhpdFZh
bHVlID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxp
dHkpOwogICAgICAgICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2ttYXBMb2NhdGlv
bnMoKSkKQEAgLTk0NzUsNiArOTYyNCwxMCBAQCBwcml2YXRlOgogICAgICAgICBTdGFja21hcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBjb25zdCBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9iamVj
dE1hdGVyaWFsaXphdGlvbio+JiBtYXAsCiAgICAgICAgIE5vZGUqIG5vZGUpCiAgICAgeworICAg
ICAgICAvLyBOT1RFOiBJbiBGVEwtPkIzLCB3ZSBjYW5ub3QgZ2VuZXJhdGUgY29kZSBoZXJlLCBi
ZWNhdXNlIG1fb3V0cHV0IGlzIHBvc2l0aW9uZWQgYWZ0ZXIgdGhlCisgICAgICAgIC8vIHN0YWNr
bWFwIHZhbHVlLiBMaWtlIGFsbCB2YWx1ZXMsIHRoZSBzdGFja21hcCB2YWx1ZSBjYW5ub3QgdXNl
IGEgY2hpbGQgdGhhdCBpcyBkZWZpbmVkIGFmdGVyCisgICAgICAgIC8vIGl0LgorICAgICAgICAK
ICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICBBU1NFUlQo
bm9kZS0+aGFzUmVzdWx0KCkpOwogCkBAIC05NTIyLDEwICs5Njc1LDE1IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdFN0cmlj
dEludDUyLCB2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgCiAgICAgICAgIHZhbHVlID0gbV9ib29s
ZWFuVmFsdWVzLmdldChub2RlKTsKKyNpZiBGVExfVVNFU19CMworICAgICAgICBpZiAoaXNWYWxp
ZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0
YUZvcm1hdEJvb2xlYW4sIHZhbHVlLnZhbHVlKCkpOworI2Vsc2UgLy8gRlRMX1VTRVNfQjMKICAg
ICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWVUb1Bh
c3MgPSBtX291dC56ZXJvRXh0KHZhbHVlLnZhbHVlKCksIG1fb3V0LmludDMyKTsKICAgICAgICAg
ICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0Qm9vbGVhbiwgdmFs
dWVUb1Bhc3MpOwogICAgICAgICB9CisjZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgCiAg
ICAgICAgIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChub2RlKTsKICAgICAgICAgaWYgKGlz
VmFsaWQodmFsdWUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQu
Y3BwCShyZXZpc2lvbiAxOTM1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEZU
TF9KSVQpCiAKICNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIkIz
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCiAjaW5jbHVkZSAiQjNTdGFja21hcFZhbHVlLmgi
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgpAQCAt
NTAsNyArNTEsOSBAQCBPU1JFeGl0RGVzY3JpcHRvcjo6T1NSRXhpdERlc2NyaXB0b3IoCiAgICAg
OiBtX3Byb2ZpbGVEYXRhRm9ybWF0KHByb2ZpbGVEYXRhRm9ybWF0KQogICAgICwgbV92YWx1ZVBy
b2ZpbGUodmFsdWVQcm9maWxlKQogICAgICwgbV92YWx1ZXMobnVtYmVyT2ZBcmd1bWVudHMsIG51
bWJlck9mTG9jYWxzKQorI2lmICFGVExfVVNFU19CMwogICAgICwgbV9pc0ludmFsaWRhdGlvblBv
aW50KGZhbHNlKQorI2VuZGlmIC8vICFGVExfVVNFU19CMwogewogfQogCkBAIC02NSw1MyArNjgs
NjUgQEAgdm9pZCBPU1JFeGl0RGVzY3JpcHRvcjo6dmFsaWRhdGVSZWZlcmVuYwogCiAjaWYgRlRM
X1VTRVNfQjMKIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBPU1JFeGl0RGVzY3JpcHRvcjo6ZW1pdE9T
UkV4aXQoCi0gICAgU3RhdGUmIHN0YXRlLCBPU1JFeGl0RGVzY3JpcHRvckltcGwqIGV4aXREZXNj
cmlwdG9ySW1wbCwgQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zLCB1bnNpZ25lZCBvZmZzZXQpCisgICAgU3RhdGUmIHN0YXRlLCBFeGl0S2lu
ZCBleGl0S2luZCwgY29uc3QgTm9kZU9yaWdpbiYgbm9kZU9yaWdpbiwgQ0NhbGxIZWxwZXJzJiBq
aXQsCisgICAgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMsIHVuc2lnbmVk
IG9mZnNldCwgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVmUHRyPE9TUkV4aXRI
YW5kbGU+IGhhbmRsZSA9IHByZXBhcmVPU1JFeGl0SGFuZGxlKHN0YXRlLCBleGl0RGVzY3JpcHRv
ckltcGwsIHBhcmFtcywgb2Zmc2V0KTsKKyAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gaGFuZGxl
ID0KKyAgICAgICAgcHJlcGFyZU9TUkV4aXRIYW5kbGUoc3RhdGUsIGV4aXRLaW5kLCBub2RlT3Jp
Z2luLCBwYXJhbXMsIG9mZnNldCwgaXNFeGNlcHRpb25IYW5kbGVyKTsKICAgICBoYW5kbGUtPmVt
aXRFeGl0VGh1bmsoaml0KTsKICAgICByZXR1cm4gaGFuZGxlOwogfQogCiBSZWZQdHI8T1NSRXhp
dEhhbmRsZT4gT1NSRXhpdERlc2NyaXB0b3I6OmVtaXRPU1JFeGl0TGF0ZXIoCi0gICAgU3RhdGUm
IHN0YXRlLCBPU1JFeGl0RGVzY3JpcHRvckltcGwqIGV4aXREZXNjcmlwdG9ySW1wbCwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMsIHVuc2lnbmVkIG9mZnNldCkKKyAgICBT
dGF0ZSYgc3RhdGUsIEV4aXRLaW5kIGV4aXRLaW5kLCBjb25zdCBOb2RlT3JpZ2luJiBub2RlT3Jp
Z2luLAorICAgIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zLCB1bnNpZ25l
ZCBvZmZzZXQsIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyKQogewotICAgIFJlZlB0cjxPU1JFeGl0
SGFuZGxlPiBoYW5kbGUgPSBwcmVwYXJlT1NSRXhpdEhhbmRsZShzdGF0ZSwgZXhpdERlc2NyaXB0
b3JJbXBsLCBwYXJhbXMsIG9mZnNldCk7Ci0gICAgcGFyYW1zLmNvbnRleHQtPmxhdGVQYXRocy5h
cHBlbmQoCi0gICAgICAgIGNyZWF0ZVNoYXJlZFRhc2s8QWlyOjpHZW5lcmF0aW9uQ29udGV4dDo6
TGF0ZVBhdGhGdW5jdGlvbj4oCi0gICAgICAgICAgICBbaGFuZGxlXSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmKSB7Ci0gICAgICAgICAgICAgICAgaGFuZGxlLT5l
bWl0RXhpdFRodW5rKGppdCk7Ci0gICAgICAgICAgICB9KSk7CisgICAgUmVmUHRyPE9TUkV4aXRI
YW5kbGU+IGhhbmRsZSA9CisgICAgICAgIHByZXBhcmVPU1JFeGl0SGFuZGxlKHN0YXRlLCBleGl0
S2luZCwgbm9kZU9yaWdpbiwgcGFyYW1zLCBvZmZzZXQsIGlzRXhjZXB0aW9uSGFuZGxlcik7Cisg
ICAgcGFyYW1zLmFkZExhdGVQYXRoKAorICAgICAgICBbaGFuZGxlXSAoQ0NhbGxIZWxwZXJzJiBq
aXQpIHsKKyAgICAgICAgICAgIGhhbmRsZS0+ZW1pdEV4aXRUaHVuayhqaXQpOworICAgICAgICB9
KTsKICAgICByZXR1cm4gaGFuZGxlOwogfQogCiBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gT1NSRXhp
dERlc2NyaXB0b3I6OnByZXBhcmVPU1JFeGl0SGFuZGxlKAotICAgIFN0YXRlJiBzdGF0ZSwgT1NS
RXhpdERlc2NyaXB0b3JJbXBsKiBleGl0RGVzY3JpcHRvckltcGwsIGNvbnN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zLCB1bnNpZ25lZCBvZmZzZXQpCisgICAgU3RhdGUmIHN0YXRl
LCBFeGl0S2luZCBleGl0S2luZCwgY29uc3QgTm9kZU9yaWdpbiYgbm9kZU9yaWdpbiwKKyAgICBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcywgdW5zaWduZWQgb2Zmc2V0LCBi
b29sIGlzRXhjZXB0aW9uSGFuZGxlcikKIHsKICAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXRlLmpp
dENvZGUtPm9zckV4aXQuc2l6ZSgpOwotICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBoYW5kbGUg
PSBhZG9wdFJlZigKLSAgICAgICAgbmV3IE9TUkV4aXRIYW5kbGUoaW5kZXgsIHN0YXRlLmppdENv
ZGUtPm9zckV4aXQuYWxsb2ModGhpcywgKmV4aXREZXNjcmlwdG9ySW1wbCkpKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBvZmZzZXQ7IGkgPCBwYXJhbXMucmVwcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgaGFuZGxlLT5leGl0Lm1fdmFsdWVSZXBzLmFwcGVuZChwYXJhbXMucmVwc1tpXSk7Ci0gICAg
aGFuZGxlLT5leGl0Lm1fdmFsdWVSZXBzLnNocmlua1RvRml0KCk7CisgICAgT1NSRXhpdCYgZXhp
dCA9IHN0YXRlLmppdENvZGUtPm9zckV4aXQuYWxsb2MoCisgICAgICAgIHRoaXMsIGV4aXRLaW5k
LCBub2RlT3JpZ2luLmZvckV4aXQsIG5vZGVPcmlnaW4uc2VtYW50aWMsIGlzRXhjZXB0aW9uSGFu
ZGxlcik7CisgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRsZSA9IGFkb3B0UmVmKG5ldyBP
U1JFeGl0SGFuZGxlKGluZGV4LCBleGl0KSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gb2Zmc2V0
OyBpIDwgcGFyYW1zLnNpemUoKTsgKytpKQorICAgICAgICBleGl0Lm1fdmFsdWVSZXBzLmFwcGVu
ZChwYXJhbXNbaV0pOworICAgIGV4aXQubV92YWx1ZVJlcHMuc2hyaW5rVG9GaXQoKTsKICAgICBy
ZXR1cm4gaGFuZGxlOwogfQogI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAKKyNpZiBGVExfVVNFU19C
MwogT1NSRXhpdDo6T1NSRXhpdCgKLSAgICBPU1JFeGl0RGVzY3JpcHRvciogZGVzY3JpcHRvciwg
T1NSRXhpdERlc2NyaXB0b3JJbXBsJiBleGl0RGVzY3JpcHRvckltcGwKLSNpZiAhRlRMX1VTRVNf
QjMKLSAgICAsIHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgKLSNlbmRpZiAvLyAhRlRMX1VT
RVNfQjMKLSAgICApCisgICAgT1NSRXhpdERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsCisgICAgRXhp
dEtpbmQgZXhpdEtpbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luRm9yRXhpdFByb2ZpbGUsCisgICAgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIpCisgICAgOiBP
U1JFeGl0QmFzZShleGl0S2luZCwgY29kZU9yaWdpbiwgY29kZU9yaWdpbkZvckV4aXRQcm9maWxl
KQorICAgICwgbV9kZXNjcmlwdG9yKGRlc2NyaXB0b3IpCit7CisgICAgbV9pc0V4Y2VwdGlvbkhh
bmRsZXIgPSBpc0V4Y2VwdGlvbkhhbmRsZXI7Cit9CisjZWxzZSAvLyBGVExfVVNFU19CMworT1NS
RXhpdDo6T1NSRXhpdCgKKyAgICBPU1JFeGl0RGVzY3JpcHRvciogZGVzY3JpcHRvciwgT1NSRXhp
dERlc2NyaXB0b3JJbXBsJiBleGl0RGVzY3JpcHRvckltcGwsCisgICAgdWludDMyX3Qgc3RhY2tt
YXBSZWNvcmRJbmRleCkKICAgICA6IE9TUkV4aXRCYXNlKGV4aXREZXNjcmlwdG9ySW1wbC5tX2tp
bmQsIGV4aXREZXNjcmlwdG9ySW1wbC5tX2NvZGVPcmlnaW4sIGV4aXREZXNjcmlwdG9ySW1wbC5t
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSkKICAgICAsIG1fZGVzY3JpcHRvcihkZXNjcmlwdG9y
KQotI2lmICFGVExfVVNFU19CMwogICAgICwgbV9zdGFja21hcFJlY29yZEluZGV4KHN0YWNrbWFw
UmVjb3JkSW5kZXgpCi0jZW5kaWYgLy8gIUZUTF9VU0VTX0IzCiAgICAgLCBtX2V4Y2VwdGlvblR5
cGUoZXhpdERlc2NyaXB0b3JJbXBsLm1fZXhjZXB0aW9uVHlwZSkKIHsKICAgICBtX2lzRXhjZXB0
aW9uSGFuZGxlciA9IGV4aXREZXNjcmlwdG9ySW1wbC5tX2V4Y2VwdGlvblR5cGUgIT0gRXhjZXB0
aW9uVHlwZTo6Tm9uZTsKIH0KKyNlbmRpZiAvLyBGVExfVVNFU19CMwogCiBDb2RlTG9jYXRpb25K
dW1wIE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKiBmdGxDb2RlQmxv
Y2spIGNvbnN0CiB7CkBAIC0xOTYsNyArMjExLDYgQEAgdm9pZCBPU1JFeGl0OjpyZWNvdmVyUmVn
aXN0ZXJzRnJvbVNwaWxsUwogICAgICAgICB9CiAgICAgfQogfQotI2VuZGlmIC8vICFGVExfVVNF
U19CMwogCiBib29sIE9TUkV4aXQ6OndpbGxBcnJpdmVBdEV4aXRGcm9tSW5kaXJlY3RFeGNlcHRp
b25DaGVjaygpIGNvbnN0CiB7CkBAIC0yNjAsNiArMjc0LDcgQEAgYm9vbCBPU1JFeGl0OjpuZWVk
c1JlZ2lzdGVyUmVjb3ZlcnlPbkdlbgogICAgIC8vIHJlY292ZXIgdGhlIHNwaWxsZWQgcmVnaXN0
ZXJzLgogICAgIHJldHVybiBtX2V4Y2VwdGlvblR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6SlNDYWxs
OwogfQorI2VuZGlmIC8vICFGVExfVVNFU19CMwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lvbiAx
OTM1MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKICNpbmNs
dWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKKyNpbmNsdWRl
ICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdEJhc2UuaCIKICNpbmNsdWRl
ICJGVExBYmJyZXZpYXRlZFR5cGVzLmgiCiAjaW5jbHVkZSAiRlRMRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb24uaCIKQEAgLTUxLDE3ICs1MiwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNz
IFRyYWNrZWRSZWZlcmVuY2VzOwogCiBuYW1lc3BhY2UgQjMgewotc3RydWN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtczsKK2NsYXNzIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczsKIG5hbWVzcGFj
ZSBBaXIgewogc3RydWN0IEdlbmVyYXRpb25Db250ZXh0OwogfSAvLyBuYW1lc3BhY2UgQWlyCiB9
IC8vIG5hbWVzcGFjZSBCMwogCituYW1lc3BhY2UgREZHIHsKK3N0cnVjdCBOb2RlT3JpZ2luOwor
fSAvLyBuYW1lc3BhY2UgREZHOworCiBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgU3RhdGU7CiBz
dHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3JJbXBsOworc3RydWN0IE9TUkV4aXRIYW5kbGU7CiAKKyNp
ZiAhRlRMX1VTRVNfQjMKIGVudW0gY2xhc3MgRXhjZXB0aW9uVHlwZSA6IHVpbnQ4X3QgewogICAg
IE5vbmUsCiAgICAgQ0NhbGxFeGNlcHRpb24sCkBAIC03NSw2ICs4Miw3IEBAIGVudW0gY2xhc3Mg
RXhjZXB0aW9uVHlwZSA6IHVpbnQ4X3QgewogfTsKIAogYm9vbCBleGNlcHRpb25UeXBlV2lsbEFy
cml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKEV4Y2VwdGlvblR5cGUpOworI2VuZGlmIC8v
ICFGVExfVVNFU19CMwogCiBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3IgewogICAgIE9TUkV4aXRE
ZXNjcmlwdG9yKApAQCAtOTEsOSArOTksMTEgQEAgc3RydWN0IE9TUkV4aXREZXNjcmlwdG9yIHsK
ICAgICAKICAgICBPcGVyYW5kczxFeGl0VmFsdWU+IG1fdmFsdWVzOwogICAgIEJhZzxFeGl0VGlt
ZU9iamVjdE1hdGVyaWFsaXphdGlvbj4gbV9tYXRlcmlhbGl6YXRpb25zOwotICAgIAorCisjaWYg
IUZUTF9VU0VTX0IzCiAgICAgdWludDMyX3QgbV9zdGFja21hcElEOwogICAgIGJvb2wgbV9pc0lu
dmFsaWRhdGlvblBvaW50OworI2VuZGlmIC8vICFGVExfVVNFU19CMwogICAgIAogICAgIHZvaWQg
dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJik7CiAKQEAgLTEwNSw3
ICsxMTUsOCBAQCBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3IgewogICAgIC8vIG9uIHRoZSBncm91
bmQuIEl0IGNvbnRhaW5zIGluZm9ybWF0aW9uIHRoYXQgaXMgbW9zdGx5IG5vdCB1c2VmdWwgaWYg
eW91IHVzZSB0aGlzIEFQSSwgc2luY2UgYWZ0ZXIKICAgICAvLyB0aGlzIGNhbGwsIHRoZSBPU1JF
eGl0IGlzIHNpbXBseSByZWFkeSB0byBnby4KICAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gZW1p
dE9TUkV4aXQoCi0gICAgICAgIFN0YXRlJiwgT1NSRXhpdERlc2NyaXB0b3JJbXBsKiwgQ0NhbGxI
ZWxwZXJzJiwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYsIHVuc2lnbmVkIG9m
ZnNldCk7CisgICAgICAgIFN0YXRlJiwgRXhpdEtpbmQsIGNvbnN0IERGRzo6Tm9kZU9yaWdpbiYs
IENDYWxsSGVscGVycyYsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLAorICAg
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSAwLCBib29sIGlzRXhjZXB0aW9uSGFuZGxlciA9IGZhbHNl
KTsKIAogICAgIC8vIEluIHNvbWUgY2FzZXMgeW91IHdhbnQgYW4gT1NSRXhpdCB0byBjb21lIGlu
dG8gZXhpc3RlbmNlLCBidXQgeW91IGRvbid0IHdhbnQgdG8gZW1pdCBpdCByaWdodCBub3cuCiAg
ICAgLy8gVGhpcyB3aWxsIGVtaXQgdGhlIE9TUiBleGl0IGluIGEgbGF0ZSBwYXRoLiBZb3UgY2Fu
J3QgYmUgc3VyZSBleGFjdGx5IHdoZW4gdGhhdCB3aWxsIGhhcHBlbiwgYnV0CkBAIC0xMTYsMTYg
KzEyNywxOSBAQCBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3IgewogICAgIC8vIGhhdmUgYSBwbGFj
ZSB0byBqdW1wIHRvIGZvciBPU1IgZXhpdC4gSXQgZG9lc24ndCBjYXJlIHdoZXJlIHRoYXQgT1NS
IGV4aXQgaXMgZW1pdHRlZCBzbyBsb25nIGFzIGl0CiAgICAgLy8gZXZlbnR1YWxseSBnZXRzIGFj
Y2VzcyB0byBpdHMgbGFiZWwuCiAgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGVtaXRPU1JFeGl0
TGF0ZXIoCi0gICAgICAgIFN0YXRlJiwgT1NSRXhpdERlc2NyaXB0b3JJbXBsKiwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYsIHVuc2lnbmVkIG9mZnNldCk7CisgICAgICAgIFN0
YXRlJiwgRXhpdEtpbmQsIGNvbnN0IERGRzo6Tm9kZU9yaWdpbiYsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmLAorICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSAwLCBib29sIGlz
RXhjZXB0aW9uSGFuZGxlciA9IGZhbHNlKTsKIAogICAgIC8vIFRoaXMgaXMgdGhlIGxvdy1sZXZl
bCBpbnRlcmZhY2UuIEl0IHdpbGwgY3JlYXRlIGEgaGFuZGxlIHJlcHJlc2VudGluZyB0aGUgZGVz
aXJlIHRvIGVtaXQgY29kZSBmb3IKICAgICAvLyBhbiBPU1IgZXhpdC4gWW91IGNhbiBjYWxsIE9T
UkV4aXRIYW5kbGU6OmVtaXRFeGl0VGh1bmsoKSBvbmNlIHlvdSBoYXZlIGEgcGxhY2UgdG8gZW1p
dCBpdC4gTm90ZQogICAgIC8vIHRoYXQgdGhlIGFib3ZlIHR3byBBUElzIGFyZSB3cml0dGVuIGlu
IHRlcm1zIG9mIHRoaXMgYW5kIE9TUkV4aXRIYW5kbGU6OmVtaXRFeGl0VGh1bmsoKS4KICAgICBS
ZWZQdHI8T1NSRXhpdEhhbmRsZT4gcHJlcGFyZU9TUkV4aXRIYW5kbGUoCi0gICAgICAgIFN0YXRl
JiwgT1NSRXhpdERlc2NyaXB0b3JJbXBsKiwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYsIHVuc2lnbmVkIG9mZnNldCk7CisgICAgICAgIFN0YXRlJiwgRXhpdEtpbmQsIGNvbnN0
IERGRzo6Tm9kZU9yaWdpbiYsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLAor
ICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSAwLCBib29sIGlzRXhjZXB0aW9uSGFuZGxlciA9IGZh
bHNlKTsKICNlbmRpZiAvLyBGVExfVVNFU19CMwogfTsKIAorI2lmICFGVExfVVNFU19CMwogc3Ry
dWN0IE9TUkV4aXREZXNjcmlwdG9ySW1wbCB7CiAgICAgT1NSRXhpdERlc2NyaXB0b3JJbXBsKEV4
aXRLaW5kIGtpbmQsIENvZGVPcmlnaW4gZXhpdE9yaWdpbiwgQ29kZU9yaWdpbiBmb3JFeGl0UHJv
ZmlsZSwgRXhjZXB0aW9uVHlwZSBleGNlcHRpb25UeXBlKQogICAgICAgICA6IG1fa2luZChraW5k
KQpAQCAtMTQyLDEzICsxNTYsMTYgQEAgc3RydWN0IE9TUkV4aXREZXNjcmlwdG9ySW1wbCB7CiAg
ICAgQ29kZU9yaWdpbiBtX3NlbWFudGljQ29kZU9yaWdpbkZvckNhbGxGcmFtZUhlYWRlcjsKICAg
ICBIYW5kbGVySW5mbyBtX2Jhc2VsaW5lRXhjZXB0aW9uSGFuZGxlcjsKIH07CisjZW5kaWYgLy8g
IUZUTF9VU0VTX0IzCiAKIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIERGRzo6T1NSRXhpdEJhc2Ug
ewogICAgIE9TUkV4aXQoCi0gICAgICAgIE9TUkV4aXREZXNjcmlwdG9yKiwgT1NSRXhpdERlc2Ny
aXB0b3JJbXBsJgotI2lmICFGVExfVVNFU19CMwotICAgICAgICAsIHVpbnQzMl90IHN0YWNrbWFw
UmVjb3JkSW5kZXgKLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKKyAgICAgICAgT1NSRXhpdERlc2Ny
aXB0b3IqLAorI2lmIEZUTF9VU0VTX0IzCisgICAgICAgIEV4aXRLaW5kLCBDb2RlT3JpZ2luLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgYm9vbCBpc0V4Y2VwdGlvbkhhbmRs
ZXIKKyNlbHNlIC8vIEZUTF9VU0VTX0IzCisgICAgICAgIE9TUkV4aXREZXNjcmlwdG9ySW1wbCYs
IHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgKKyNlbmRpZiAvLyBGVExfVVNFU19CMwogICAg
ICAgICApOwogCiAgICAgT1NSRXhpdERlc2NyaXB0b3IqIG1fZGVzY3JpcHRvcjsKQEAgLTE1Nywx
NSArMTc0LDE4IEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIERGRzo6T1NSRXhpdEJhc2UKICAg
ICAvLyBUaGlzIHRlbGxzIHVzIHdoZXJlIHRvIHBsYWNlIGEganVtcC4KICAgICBDb2RlTG9jYXRp
b25KdW1wIG1fcGF0Y2hhYmxlSnVtcDsKICAgICBWZWN0b3I8QjM6OlZhbHVlUmVwPiBtX3ZhbHVl
UmVwczsKKyAgICAvLyBUcnVlIGlmIHRoaXMgZXhpdCBpcyB1c2VkIGFzIGFuIGV4Y2VwdGlvbiBo
YW5kbGVyIGZvciB1bndpbmRpbmcuIFRoaXMgaGFwcGVucyB0byBvbmx5IGJlIHNldCB3aGVuCisg
ICAgLy8gaXNFeGNlcHRpb25IYW5kbGVyIGlzIHRydWUsIGJ1dCBhbGwgdGhpcyBhY3R1YWxseSBt
ZWFucyBpcyB0aGF0IHRoZSBPU1IgZXhpdCB3aWxsIGFzc3VtZSB0aGF0IHRoZQorICAgIC8vIG1h
Y2hpbmUgc3RhdGUgaXMgYXMgaXQgd291bGQgYmUgY29taW5nIG91dCBvZiBnZW5lcmljVW53aW5k
LgorICAgIGJvb2wgbV9pc1Vud2luZEhhbmRsZXIgeyBmYWxzZSB9OwogI2Vsc2UgLy8gRlRMX1VT
RVNfQjMKICAgICAvLyBPZmZzZXQgd2l0aGluIHRoZSBleGl0IHN0dWJzIG9mIHRoZSBzdHViIGZv
ciB0aGlzIGV4aXQuCiAgICAgdW5zaWduZWQgbV9wYXRjaGFibGVDb2RlT2Zmc2V0OwogICAgIC8v
IE9mZnNldCB3aXRoaW4gU3RhY2ttYXA6OnJlY29yZHMKICAgICB1aW50MzJfdCBtX3N0YWNrbWFw
UmVjb3JkSW5kZXg7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICBFeGNlcHRpb25UeXBlIG1f
ZXhjZXB0aW9uVHlwZTsKLQogICAgIFJlZ2lzdGVyU2V0IHJlZ2lzdGVyc1RvUHJlc2VydmVGb3JD
YWxsVGhhdE1pZ2h0VGhyb3c7CisjZW5kaWYgLy8gRlRMX1VTRVNfQjMKIAogICAgIENvZGVMb2Nh
dGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0bENvZGVCbG9jaykg
Y29uc3Q7CiAgICAgdm9pZCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxv
Y2sqIHByb2ZpbGVkQ29kZUJsb2NrKQpAQCAtMTc3LDEyICsxOTcsMTIgQEAgc3RydWN0IE9TUkV4
aXQgOiBwdWJsaWMgREZHOjpPU1JFeGl0QmFzZQogICAgIHZvaWQgZ2F0aGVyUmVnaXN0ZXJzVG9T
cGlsbEZvckNhbGxJZkV4Y2VwdGlvbihTdGFja01hcHMmLCBTdGFja01hcHM6OlJlY29yZCYpOwog
ICAgIHZvaWQgc3BpbGxSZWdpc3RlcnNUb1NwaWxsU2xvdChDQ2FsbEhlbHBlcnMmLCBpbnQzMl90
IHN0YWNrU3BpbGxTbG90KTsKICAgICB2b2lkIHJlY292ZXJSZWdpc3RlcnNGcm9tU3BpbGxTbG90
KENDYWxsSGVscGVycyYgaml0LCBpbnQzMl90IHN0YWNrU3BpbGxTbG90KTsKLSNlbmRpZiAvLyAh
RlRMX1VTRVNfQjMKIAogICAgIGJvb2wgd2lsbEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53
aW5kKCkgY29uc3Q7CiAgICAgYm9vbCB3aWxsQXJyaXZlQXRFeGl0RnJvbUluZGlyZWN0RXhjZXB0
aW9uQ2hlY2soKSBjb25zdDsKICAgICBib29sIHdpbGxBcnJpdmVBdE9TUkV4aXRGcm9tQ2FsbE9w
ZXJhdGlvbigpIGNvbnN0OwogICAgIGJvb2wgbmVlZHNSZWdpc3RlclJlY292ZXJ5T25HZW5lcmlj
VW53aW5kT1NSRXhpdFBhdGgoKSBjb25zdDsKKyNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKIH07CiAK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBp
bGVyLmNwcAkocmV2aXNpb24gMTkzNTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsMjMgKzIwNywzNCBA
QCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICBDQ2FsbEhlbHBlcnMgaml0KHZtLCBjb2Rl
QmxvY2spOwogCiAgICAgLy8gVGhlIGZpcnN0IHRoaW5nIHdlIG5lZWQgdG8gZG8gaXMgcmVzdGFi
bGlzaCBvdXIgZnJhbWUgaW4gdGhlIGNhc2Ugb2YgYW4gZXhjZXB0aW9uLgotICAgIGlmIChleGl0
LndpbGxBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJpY1Vud2luZCgpKSB7CisgICAgaWYgKAorI2lm
IEZUTF9VU0VTX0IzCisgICAgICAgIGV4aXQubV9pc1Vud2luZEhhbmRsZXIKKyNlbHNlIC8vIEZU
TF9VU0VTX0IzCisgICAgICAgIGV4aXQud2lsbEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53
aW5kKCkKKyNlbmRpZiAvLyBGVExfVVNFU19CMworICAgICAgICApIHsKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQodm0tPmNhbGxGcmFtZUZvckNhdGNoKTsgLy8gVGhlIGZpcnN0IHRpbWUgd2UgaGl0
IHRoaXMgZXhpdCwgbGlrZSBhdCBhbGwgb3RoZXIgdGltZXMsIHRoaXMgZmllbGQgc2hvdWxkIGJl
IG5vbi1udWxsLgogICAgICAgICBqaXQucmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNQ2FsbGVlU2F2
ZXNCdWZmZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIodm0tPmFkZHJlc3NPZkNhbGxGcmFtZUZv
ckNhdGNoKCksIE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFja1Bv
aW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLAogICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKIAorI2lmICFGVExfVVNFU19CMwogICAgICAgICBpZiAoZXhpdC5uZWVkc1JlZ2lz
dGVyUmVjb3ZlcnlPbkdlbmVyaWNVbndpbmRPU1JFeGl0UGF0aCgpKQogICAgICAgICAgICAgZXhp
dC5yZWNvdmVyUmVnaXN0ZXJzRnJvbVNwaWxsU2xvdChqaXQsIGppdENvZGUtPm9zckV4aXRGcm9t
R2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90KTsKKyNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKIAog
ICAgICAgICAvLyBEbyBhIHB1c2hUb1NhdmUgYmVjYXVzZSB0aGF0J3Mgd2hhdCB0aGUgZXhpdCBj
b21waWxlciBiZWxvdyBleHBlY3RzIHRoZSBzdGFjawogICAgICAgICAvLyB0byBsb29rIGxpa2Ug
YmVjYXVzZSB0aGF0J3MgdGhlIGxhc3QgdGhpbmcgdGhlIEV4aXRUaHVua0dlbmVyYXRvciBkb2Vz
LiBUaGUgY29kZQogICAgICAgICAvLyBiZWxvdyBkb2Vzbid0IGFjdHVhbGx5IHVzZSB0aGUgdmFs
dWUgdGhhdCB3YXMgcHVzaGVkLCBidXQgaXQgZG9lcyByZWx5IG9uIHRoZQogICAgICAgICAvLyBn
ZW5lcmFsIHNoYXBlIG9mIHRoZSBzdGFjayBiZWluZyBhcyBpdCBpcyBpbiB0aGUgbm9uLWV4Y2Vw
dGlvbiBPU1IgY2FzZS4KICAgICAgICAgaml0LnB1c2hUb1NhdmVJbW1lZGlhdGVXaXRob3V0VG91
Y2hpbmdSZWdpc3RlcnMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHhiYWRiZWVmKSk7Ci0g
ICAgfSBlbHNlIGlmIChleGl0LndpbGxBcnJpdmVBdE9TUkV4aXRGcm9tQ2FsbE9wZXJhdGlvbigp
KQorICAgIH0KKyNpZiAhRlRMX1VTRVNfQjMKKyAgICBpZiAoZXhpdC53aWxsQXJyaXZlQXRPU1JF
eGl0RnJvbUNhbGxPcGVyYXRpb24oKSkKICAgICAgICAgZXhpdC5yZWNvdmVyUmVnaXN0ZXJzRnJv
bVNwaWxsU2xvdChqaXQsIGppdENvZGUtPm9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNrU3Bp
bGxTbG90KTsKKyNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKICAgICAKIAogICAgIC8vIFdlIG5lZWQg
c2NyYXRjaCBzcGFjZSB0byBzYXZlIGFsbCByZWdpc3RlcnMsIHRvIGJ1aWxkIHVwIHRoZSBKUyBz
dGFjaywgdG8gZGVhbCB3aXRoIHVud2luZApAQCAtNjAzLDExICs2MTQsMTcgQEAgZXh0ZXJuICJD
IiB2b2lkKiBjb21waWxlRlRMT1NSRXhpdChFeGVjUwogICAgICAgICBkYXRhTG9nKCIgICAgT3Jp
Z2luOiAiLCBleGl0Lm1fY29kZU9yaWdpbiwgIlxuIik7CiAgICAgICAgIGlmIChleGl0Lm1fY29k
ZU9yaWdpbkZvckV4aXRQcm9maWxlICE9IGV4aXQubV9jb2RlT3JpZ2luKQogICAgICAgICAgICAg
ZGF0YUxvZygiICAgIE9yaWdpbiBmb3IgZXhpdCBwcm9maWxlOiAiLCBleGl0Lm1fY29kZU9yaWdp
bkZvckV4aXRQcm9maWxlLCAiXG4iKTsKKyNpZiAhRlRMX1VTRVNfQjMKICAgICAgICAgZGF0YUxv
ZygiICAgIEV4aXQgc3RhY2ttYXAgSUQ6ICIsIGV4aXQubV9kZXNjcmlwdG9yLT5tX3N0YWNrbWFw
SUQsICJcbiIpOworI2VuZGlmIC8vICFGVExfVVNFU19CMwogICAgICAgICBkYXRhTG9nKCIgICAg
Q3VycmVudCBjYWxsIHNpdGUgaW5kZXg6ICIsIGV4ZWMtPmNhbGxTaXRlSW5kZXgoKS5iaXRzKCks
ICJcbiIpOwotICAgICAgICBkYXRhTG9nKCIgICAgRXhpdCBpcyBleGNlcHRpb24gaGFuZGxlcjog
IiwgZXhpdC5tX2lzRXhjZXB0aW9uSGFuZGxlciwKLSAgICAgICAgICAgICIgd2lsbCBhcnJpdmUg
YXQgZXhpdCBmcm9tIGdlbmVyaWNVbndpbmQoKTogIiwgZXhpdC53aWxsQXJyaXZlQXRPU1JFeGl0
RnJvbUdlbmVyaWNVbndpbmQoKSwgCi0gICAgICAgICAgICAiIHdpbGwgYXJyaXZlIGF0IGV4aXQg
ZnJvbSBsYXp5IHNsb3cgcGF0aDogIiwgZXhpdC5tX2V4Y2VwdGlvblR5cGUgPT0gRXhjZXB0aW9u
VHlwZTo6TGF6eVNsb3dQYXRoLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiICAgIEV4aXQgaXMg
ZXhjZXB0aW9uIGhhbmRsZXI6ICIsIGV4aXQubV9pc0V4Y2VwdGlvbkhhbmRsZXIsICJcbiIpOwor
I2lmIEZUTF9VU0VTX0IzCisgICAgICAgIGRhdGFMb2coIiAgICBJcyB1bndpbmQgaGFuZGxlcjog
IiwgZXhpdC5tX2lzVW53aW5kSGFuZGxlciwgIlxuIik7CisjZWxzZSAvLyBGVExfVVNFU19CMwor
ICAgICAgICBkYXRhTG9nKCIgICAgV2lsbCBhcnJpdmUgYXQgZXhpdCBmcm9tIGdlbmVyaWNVbndp
bmQoKTogIiwgZXhpdC53aWxsQXJyaXZlQXRPU1JFeGl0RnJvbUdlbmVyaWNVbndpbmQoKSwgIlxu
Iik7CisgICAgICAgIGRhdGFMb2coIiAgICBXaWxsIGFycml2ZSBhdCBleGl0IGZyb20gbGF6eSBz
bG93IHBhdGg6ICIsIGV4aXQubV9leGNlcHRpb25UeXBlID09IEV4Y2VwdGlvblR5cGU6OkxhenlT
bG93UGF0aCwgIlxuIik7CisjZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgZGF0YUxvZygi
ICAgIEV4aXQgdmFsdWVzOiAiLCBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMsICJcbiIpOwog
ICAgICAgICBpZiAoIWV4aXQubV9kZXNjcmlwdG9yLT5tX21hdGVyaWFsaXphdGlvbnMuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgTWF0ZXJpYWxpemF0aW9uczpcbiIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMTkzNTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC05NiwxMiArOTYsMTQgQEAgcHVibGljOgogI2lmIEVOQUJMRShNQVNNX1BST0JFKQogICAgIFNl
Z21lbnRlZFZlY3RvcjxQcm9iZURlc2NyaXB0b3I+IHByb2JlczsKICNlbmRpZgorI2lmICFGVExf
VVNFU19CMwogICAgIFZlY3RvcjxKU0NhbGw+IGpzQ2FsbHM7CiAgICAgVmVjdG9yPEpTQ2FsbFZh
cmFyZ3M+IGpzQ2FsbFZhcmFyZ3NlczsKICAgICBWZWN0b3I8SlNUYWlsQ2FsbD4ganNUYWlsQ2Fs
bHM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGNvZGVTZWN0aW9uTmFtZXM7CiAgICAgVmVjdG9yPENT
dHJpbmc+IGRhdGFTZWN0aW9uTmFtZXM7CiAgICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXREZXNj
cmlwdG9ySW1wbD4gb3NyRXhpdERlc2NyaXB0b3JJbXBsczsKKyNlbmRpZiAvLyAhRlRMX1VTRVNf
QjMKICAgICB2b2lkKiB1bndpbmREYXRhU2VjdGlvbjsKICAgICBzaXplX3QgdW53aW5kRGF0YVNl
Y3Rpb25TaXplOwogICAgIFJlZlB0cjxEYXRhU2VjdGlvbj4gc3RhY2ttYXBzU2VjdGlvbjsK
</data>
<flag name="review"
          id="291741"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>