<?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>170210</bug_id>
          
          <creation_ts>2017-03-28 15:51:40 -0700</creation_ts>
          <short_desc>LinkBuffer and ExecutableAllocator shouldn&apos;t have anything to do with VM</short_desc>
          <delta_ts>2017-03-29 15:56:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>168264</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1292149</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-28 15:51:40 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292267</commentid>
    <comment_count>1</comment_count>
      <attachid>305695</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-28 19:42:23 -0700</bug_when>
    <thetext>Created attachment 305695
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292550</commentid>
    <comment_count>2</comment_count>
      <attachid>305779</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-29 13:36:42 -0700</bug_when>
    <thetext>Created attachment 305779
WIP

lets see what EWS thinks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292551</commentid>
    <comment_count>3</comment_count>
      <attachid>305780</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-29 13:38:35 -0700</bug_when>
    <thetext>Created attachment 305780
WIP

added webcore change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292561</commentid>
    <comment_count>4</comment_count>
      <attachid>305783</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-29 14:05:08 -0700</bug_when>
    <thetext>Created attachment 305783
WIP

fixed some bad lambda capture</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292570</commentid>
    <comment_count>5</comment_count>
      <attachid>305788</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-29 14:17:14 -0700</bug_when>
    <thetext>Created attachment 305788
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292572</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-03-29 14:20:25 -0700</bug_when>
    <thetext>Attachment 305788 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 52 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>1292580</commentid>
    <comment_count>7</comment_count>
      <attachid>305788</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-03-29 14:28:13 -0700</bug_when>
    <thetext>Comment on attachment 305788
patch

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

r=me with suggestions.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:5984
&gt; +        VM* vm = &amp;this-&gt;vm();

nit: can we use a VM&amp; instead?

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:6282
&gt; +        VM* vm = &amp;this-&gt;vm();

Ditto.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:6408
&gt; +        VM* vm = &amp;this-&gt;vm();

Ditto.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:6678
&gt; +        VM* vm = &amp;this-&gt;vm();

Ditto.

&gt; Source/JavaScriptCore/jit/ExecutableAllocator.h:141
&gt; +private:
&gt; +

nit: can you put the empty line before the private: section instead of after?

&gt; Source/JavaScriptCore/runtime/VM.cpp:169
&gt;  #if ENABLE(ASSEMBLER)
&gt; -    , executableAllocator(*this)
&gt;  #endif

Remove these lines altogether.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292584</commentid>
    <comment_count>8</comment_count>
      <attachid>305788</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-29 14:32:19 -0700</bug_when>
    <thetext>Comment on attachment 305788
patch

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

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:5984
&gt;&gt; +        VM* vm = &amp;this-&gt;vm();
&gt; 
&gt; nit: can we use a VM&amp; instead?

The reason I did this is that changing to VM&amp; would require 2 more lines of code. And it&apos;s also a bit more in line with the style in FTLLower to get a pointer. In principle, I agree, though. We know the thing will never be null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292585</commentid>
    <comment_count>9</comment_count>
      <attachid>305794</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-29 14:33:10 -0700</bug_when>
    <thetext>Created attachment 305794
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292618</commentid>
    <comment_count>10</comment_count>
      <attachid>305794</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-29 15:55:57 -0700</bug_when>
    <thetext>Comment on attachment 305794
patch for landing

Clearing flags on attachment: 305794

Committed r214571: &lt;http://trac.webkit.org/changeset/214571&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292619</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-29 15:56:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305695</attachid>
            <date>2017-03-28 19:42:23 -0700</date>
            <delta_ts>2017-03-29 13:36:42 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>37934</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cAkocmV2aXNpb24gMjE0NTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUg
IkpJVENvZGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5o
IgotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBpbGF0aW9uVGhyZWFkLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtMjQyLDggKzI0MSw3IEBAIHZvaWQgTGlua0J1ZmZlcjo6YWxs
b2NhdGUoTWFjcm9Bc3NlbWJsZXIKICAgICAgICAgaW5pdGlhbFNpemUgPSBtYWNyb0Fzc2VtYmxl
ci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQobV92bSAh
PSBudWxscHRyKTsKLSAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBtX3ZtLT5leGVjdXRhYmxlQWxs
b2NhdG9yLmFsbG9jYXRlKCptX3ZtLCBpbml0aWFsU2l6ZSwgb3duZXJVSUQsIGVmZm9ydCk7Cisg
ICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCku
YWxsb2NhdGUoaW5pdGlhbFNpemUsIG93bmVyVUlELCBlZmZvcnQpOwogICAgIGlmICghbV9leGVj
dXRhYmxlTWVtb3J5KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb2RlID0gbV9leGVjdXRhYmxl
TWVtb3J5LT5zdGFydCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9MaW5rQnVmZmVyLmgJKHJldmlzaW9uIDIxNDUwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgVk07CiAKIC8vIExp
bmtCdWZmZXI6CiAvLwpAQCAtNzksMTEgKzc4LDEwIEBAIGNsYXNzIExpbmtCdWZmZXIgewogI2Vu
ZGlmCiAKIHB1YmxpYzoKLSAgICBMaW5rQnVmZmVyKFZNJiB2bSwgTWFjcm9Bc3NlbWJsZXImIG1h
Y3JvQXNzZW1ibGVyLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
ID0gSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCkKKyAgICBMaW5rQnVmZmVyKE1hY3JvQXNzZW1i
bGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCA9IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpCiAgICAgICAgIDogbV9zaXplKDAp
CiAgICAgICAgICwgbV9kaWRBbGxvY2F0ZShmYWxzZSkKICAgICAgICAgLCBtX2NvZGUoMCkKLSAg
ICAgICAgLCBtX3ZtKCZ2bSkKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9jb21wbGV0ZWQo
ZmFsc2UpCiAjZW5kaWYKQEAgLTk1LDcgKzkzLDYgQEAgcHVibGljOgogICAgICAgICA6IG1fc2l6
ZShzaXplKQogICAgICAgICAsIG1fZGlkQWxsb2NhdGUoZmFsc2UpCiAgICAgICAgICwgbV9jb2Rl
KGNvZGUpCi0gICAgICAgICwgbV92bSgwKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBtX2Nv
bXBsZXRlZChmYWxzZSkKICNlbmRpZgpAQCAtMjUzLDggKzI1MCw2IEBAIHB1YmxpYzoKICAgICBi
b29sIHdhc0FscmVhZHlEaXNhc3NlbWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FscmVhZHlEaXNh
c3NlbWJsZWQ7IH0KICAgICB2b2lkIGRpZEFscmVhZHlEaXNhc3NlbWJsZSgpIHsgbV9hbHJlYWR5
RGlzYXNzZW1ibGVkID0gdHJ1ZTsgfQogCi0gICAgVk0mIHZtKCkgeyByZXR1cm4gKm1fdm07IH0K
LQogcHJpdmF0ZToKICNpZiBFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAgICAgaW50IGV4ZWN1
dGFibGVPZmZzZXRGb3IoaW50IGxvY2F0aW9uKQpAQCAtMzA1LDcgKzMwMCw2IEBAIHByaXZhdGU6
CiAjZW5kaWYKICAgICBib29sIG1fZGlkQWxsb2NhdGU7CiAgICAgdm9pZCogbV9jb2RlOwotICAg
IFZNKiBtX3ZtOwogI2lmbmRlZiBOREVCVUcKICAgICBib29sIG1fY29tcGxldGVkOwogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAkocmV2aXNpb24gMjE0
NTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgQ29tcGlsYXRpb24gY29tcGlsZShWTSYgdm0sIFByb2Nl
ZHVyZSYgcAogICAgIAogICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKICAgICBnZW5lcmF0ZShw
cm9jLCBqaXQpOwotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgaml0LCBudWxscHRyKTsK
KyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRyKTsKIAogICAgIHJldHVybiBD
b21waWxhdGlvbihGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiQjM6OkNvbXBpbGF0aW9uIikp
LCBwcm9jLnJlbGVhc2VCeXByb2R1Y3RzKCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5jcHAJKHJldmlzaW9uIDIxNDUwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEzNiw3ICsxMzEzNiw3IEBAIHZvaWQg
dGVzdEVudHJ5U3dpdGNoU2ltcGxlKCkKICAgICAKICAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsK
ICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0s
IGppdCwgbnVsbHB0cik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0cik7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
cHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVHdv
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDEpKTsKICAgICBD
b2RlTG9jYXRpb25MYWJlbCBsYWJlbFRocmVlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2Mu
ZW50cnlwb2ludExhYmVsKDIpKTsKQEAgLTEzMTY5LDcgKzEzMTY5LDcgQEAgdm9pZCB0ZXN0RW50
cnlTd2l0Y2hOb0VudHJ5U3dpdGNoKCkKICAgICAKICAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsK
ICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0s
IGppdCwgbnVsbHB0cik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0cik7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
cHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVHdv
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDEpKTsKICAgICBD
b2RlTG9jYXRpb25MYWJlbCBsYWJlbFRocmVlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2Mu
ZW50cnlwb2ludExhYmVsKDIpKTsKQEAgLTEzMjU2LDcgKzEzMjU2LDcgQEAgdm9pZCB0ZXN0RW50
cnlTd2l0Y2hXaXRoQ29tbW9uUGF0aHMoKQogICAgIAogICAgIENDYWxsSGVscGVycyBqaXQodm0p
OwogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7Ci0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2
bSwgaml0LCBudWxscHRyKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRy
KTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxU
d28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMSkpOwogICAg
IENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVGhyZWUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJv
Yy5lbnRyeXBvaW50TGFiZWwoMikpOwpAQCAtMTMzNzMsNyArMTMzNzMsNyBAQCB2b2lkIHRlc3RF
bnRyeVN3aXRjaFdpdGhDb21tb25QYXRoc0FuZE5vCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzIGpp
dCh2bSk7CiAgICAgZ2VuZXJhdGUocHJvYywgaml0KTsKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZm
ZXIoKnZtLCBqaXQsIG51bGxwdHIpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIG51
bGxwdHIpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25lID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDApKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBs
YWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgxKSk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxUaHJlZSA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zihwcm9jLmVudHJ5cG9pbnRMYWJlbCgyKSk7CkBAIC0xMzQ1MSw3ICsxMzQ1MSw3IEBAIHZvaWQg
dGVzdEVudHJ5U3dpdGNoTG9vcCgpCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CiAg
ICAgZ2VuZXJhdGUocHJvYywgaml0KTsKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBq
aXQsIG51bGxwdHIpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIG51bGxwdHIpOwog
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHBy
b2MuZW50cnlwb2ludExhYmVsKDApKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFR3byA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgxKSk7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAJKHJldmlzaW9uIDIx
NDUwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxhdGlv
bj4gY29tcGlsZQogICAgIHByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2MuY29kZSgpKTsKICAgICBD
Q2FsbEhlbHBlcnMgaml0KHZtKTsKICAgICBnZW5lcmF0ZShwcm9jLmNvZGUoKSwgaml0KTsKLSAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIG51bGxwdHIpOworICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcihqaXQsIG51bGxwdHIpOwogCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8QjM6OkNvbXBpbGF0aW9uPigKICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAo
InRlc3RhaXIgY29tcGlsYXRpb24iKSksIHByb2MucmVsZWFzZUJ5cHJvZHVjdHMoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3Bw
CShyZXZpc2lvbiAyMTQ1MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIGNv
bXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKIAogICAgICAgICBleGl0Q29tcGlsZXIuY29t
cGlsZUV4aXQoZXhpdCwgb3BlcmFuZHMsIHJlY292ZXJ5KTsKICAgICAgICAgCi0gICAgICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIGNvZGVCbG9jayk7CisgICAgICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBjb2RlQmxvY2spOwogICAgICAgICBleGl0Lm1fY29kZSA9
IEZJTkFMSVpFX0NPREVfSUYoCiAgICAgICAgICAgICBzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8
fCBPcHRpb25zOjp2ZXJib3NlT1NSKCksCiAgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkocmV2aXNpb24gMjE0NTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxMiw3ICsxMDEy
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICBt
X2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKHJlcXVpcmVkQnl0ZXMpLCBKSVRDb21waWxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OmNh
bGxlZUZyYW1lU2xvdChDYWxsRnJhbWVTbG90OjpjYWxsZWUpLndpdGhPZmZzZXQoUGF5bG9hZE9m
ZnNldCksIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKS53aXRoT2Zmc2V0KFRhZ09m
ZnNldCksIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgbV9qaXQuZW1pdER1bWJWaXJ0dWFsQ2Fs
bChpbmZvKTsKKyAgICAgICAgbV9qaXQuZW1pdER1bWJWaXJ0dWFsQ2FsbCgqbV9qaXQudm0oKSwg
aW5mbyk7CiAgICAgICAgIAogICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgc2V0
UmVzdWx0QW5kUmVzZXRTdGFjaygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMTQ1MDgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NjYsNyArOTY2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9k
ZSogbm9kZQogICAgICAgICAvLyBUaGlzIGlzIHRoZSBwYXJ0IHdoZXJlIHdlIG1lYW50IHRvIG1h
a2UgYSBub3JtYWwgY2FsbC4gT29wcy4KICAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0z
MihyZXF1aXJlZEJ5dGVzKSwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAg
ICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBtX2ppdC5lbWl0RHVtYlZp
cnR1YWxDYWxsKGNhbGxMaW5rSW5mbyk7CisgICAgICAgIG1faml0LmVtaXREdW1iVmlydHVhbENh
bGwoKm1faml0LnZtKCksIGNhbGxMaW5rSW5mbyk7CiAgICAgICAgIAogICAgICAgICBkb25lLmxp
bmsoJm1faml0KTsKICAgICAgICAgc2V0UmVzdWx0QW5kUmVzZXRTdGFjaygpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAkocmV2aXNpb24gMjE0NTA4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05Myw3ICs5Myw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblQK
ICAgICAKICAgICBqaXQuanVtcChNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ2bS0+
b3NyRXhpdEp1bXBEZXN0aW5hdGlvbikpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhmdW5j
dGlvbkNhbGwsIGNvbXBpbGVPU1JFeGl0KTsKICAgICAKQEAgLTE0MCw3ICsxNDAsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgb3NyRW50cnlUaHVua0dlbmVyCiAKICAgICBqaXQuanVtcChHUFJJ
bmZvOjpyZWdUMSk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJERkcg
T1NSIGVudHJ5IHRodW5rIikpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExhenlTbG93UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCShyZXZpc2lvbiAyMTQ1MDgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDcgKzY1LDcgQEAgdm9pZCBMYXp5U2xvd1BhdGg6OmdlbmVyYXRlKENvZGVCbG9jayogYwogCiAg
ICAgbV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CiAKLSAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVz
dFN1Y2NlZWQpOwogICAgIGxpbmtCdWZmZXIubGluayhwYXJhbXMuZG9uZUp1bXBzLCBtX2RvbmUp
OwogICAgIGlmIChtX2V4Y2VwdGlvblRhcmdldCkKICAgICAgICAgbGlua0J1ZmZlci5saW5rKGV4
Y2VwdGlvbkp1bXBzLCBtX2V4Y2VwdGlvblRhcmdldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMTQ1MDgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY5MTQsOCArNjkxNCw5IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCk7CiAg
ICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCi0gICAgICAgICAgICBb
PV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgeworICAgICAgICAgICAgWz0sICZ2bV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgICAg
ICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBzdGF0ZS0+aml0Q29kZS0+Y29tbW9u
LmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgCkBA
IC02OTQ4LDcgKzY5NDksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVxdWlyZWRCeXRl
cyksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICAgICAgICAg
IGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgIGppdC5lbWl0RHVtYlZp
cnR1YWxDYWxsKGNhbGxMaW5rSW5mbyk7CisgICAgICAgICAgICAgICAgaml0LmVtaXREdW1iVmly
dHVhbENhbGwodm0sIGNhbGxMaW5rSW5mbyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3Bw
CShyZXZpc2lvbiAyMTQ1MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5MSw3ICs0OTEsNyBAQCBzdGF0aWMg
dm9pZCBjb21waWxlU3R1YigKICAgICByZWlmeUlubGluZWRDYWxsRnJhbWVzKGppdCwgZXhpdCk7
CiAgICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KGppdCwgZXhpdCk7CiAgICAgCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgY29kZUJsb2NrKTsKICAgICBleGl0Lm1fY29kZSA9IEZJTkFMSVpFX0NP
REVfSUYoCiAgICAgICAgIHNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlRlRMT1NSRXhpdCgpLAogICAgICAgICBwYXRjaEJ1
ZmZlciwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHJldmlz
aW9uIDIxNDUwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgZ2VuZXJpY0dlbmUKIAogICAgIGppdC5yZXQoKTsKICAgICAKLSAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmso
ZnVuY3Rpb25DYWxsLCBnZW5lcmF0aW9uRnVuY3Rpb24pOwogICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCAoIiVzIiwgbmFtZSkpOwogfQpAQCAtMjIyLDcgKzIyMiw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVua0cKICAgICAKICAgICBqaXQucmV0
KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHZtLCBqaXQsIEdMT0JBTF9USFVOS19J
RCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAg
ICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihrZXkuY2FsbFRhcmdldCgpKSk7
CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiRlRMIHNsb3cgcGF0aCBj
YWxsIHRodW5rIGZvciAlcyIsIHRvQ1N0cmluZyhrZXkpLmRhdGEoKSkpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24g
MjE0NTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MjQsMTQgKzYyNCwxNCBAQCB2b2lkIEFzc2VtYmx5SGVscGVy
czo6cmVzdG9yZUNhbGxlZVNhdmVzCiAjZW5kaWYKIH0KIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6
OmVtaXREdW1iVmlydHVhbENhbGwoQ2FsbExpbmtJbmZvKiBpbmZvKQordm9pZCBBc3NlbWJseUhl
bHBlcnM6OmVtaXREdW1iVmlydHVhbENhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8pCiB7
CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgQ2Fs
bCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzaygKICAgICAgICAgWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
dmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKCZsaW5rQnVmZmVyLnZtKCksICppbmZvKTsK
LSAgICAgICAgICAgIGluZm8tPnNldFNsb3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1
YWxUaHVuaywgbGlua0J1ZmZlci52bSgpLCBudWxscHRyLCB0cnVlKSk7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKCZ2bSwg
KmluZm8pOworICAgICAgICAgICAgaW5mby0+c2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRp
bmUodmlydHVhbFRodW5rLCAmdm0sIG51bGxwdHIsIHRydWUpKTsKICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCh2aXJ0dWFsVGh1bmsuY29kZSgpKSk7
CiAgICAgICAgIH0pOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCShyZXZpc2lvbiAyMTQ1MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYyLDcgKzE0NjIsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6VW5kZWZpbmVkLCB0cnVlKTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBlbWl0RHVtYlZpcnR1YWxDYWxsKENhbGxMaW5rSW5mbyop
OworICAgIHZvaWQgZW1pdER1bWJWaXJ0dWFsQ2FsbChWTSYsIENhbGxMaW5rSW5mbyopOwogICAg
IAogICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcEZv
cihDb2RlQmxvY2sqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMTQ1MDgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMTEsMTUgKzMxMSwyNSBAQCBwcml2YXRlOgogfTsKIAogc3RhdGljIEZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yOworc3RhdGljIEV4ZWN1dGFibGVBbGxvY2F0b3Iq
IGV4ZWN1dGFibGVBbGxvY2F0b3I7CiAKIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlh
bGl6ZUFsbG9jYXRvcigpCiB7CiAgICAgQVNTRVJUKCFhbGxvY2F0b3IpOwogICAgIGFsbG9jYXRv
ciA9IG5ldyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKTsKICAgICBDb2RlUHJvZmls
aW5nOjpub3RpZnlBbGxvY2F0b3IoYWxsb2NhdG9yKTsKKworICAgIGV4ZWN1dGFibGVBbGxvY2F0
b3IgPSBuZXcgRXhlY3V0YWJsZUFsbG9jYXRvcjsKK30KKworRXhlY3V0YWJsZUFsbG9jYXRvciYg
RXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkKK3sKKyAgICBBU1NFUlQoYWxsb2NhdG9y
KTsKKyAgICBBU1NFUlQoZXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgcmV0dXJuICpleGVjdXRh
YmxlQWxsb2NhdG9yOwogfQogCi1FeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2Nh
dG9yKFZNJikKK0V4ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IoKQogewog
ICAgIEFTU0VSVChhbGxvY2F0b3IpOwogfQpAQCAtMzYyLDcgKzM3Miw3IEBAIGRvdWJsZSBFeGVj
dXRhYmxlQWxsb2NhdG9yOjptZW1vcnlQcmVzc3UKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1S
ZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2Nh
dGUoVk0mLCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCitSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwg
SklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIGlmIChPcHRpb25zOjpsb2dFeGVj
dXRhYmxlQWxsb2NhdGlvbigpKSB7CiAgICAgICAgIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3Mg
c3RhdHMgPSBhbGxvY2F0b3ItPmN1cnJlbnRTdGF0aXN0aWNzKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMjE0
NTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDggKzU1LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNs
YXNzIFZNOwotCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaml0QWxsb2NhdGlvbkdyYW51bGUgPSAz
MjsKIAogdHlwZWRlZiBXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGUgRXhlY3V0YWJsZU1lbW9yeUhh
bmRsZTsKQEAgLTExNyw5ICsxMTUsNyBAQCBjbGFzcyBFeGVjdXRhYmxlQWxsb2NhdG9yIHsKICAg
ICBlbnVtIFByb3RlY3Rpb25TZXR0aW5nIHsgV3JpdGFibGUsIEV4ZWN1dGFibGUgfTsKIAogcHVi
bGljOgotICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IoVk0mKTsKLSAgICB+RXhlY3V0YWJsZUFsbG9j
YXRvcigpOwotICAgIAorICAgIEV4ZWN1dGFibGVBbGxvY2F0b3ImIHNpbmdsZXRvbigpOwogICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVBbGxvY2F0b3IoKTsKIAogICAgIGJvb2wgaXNWYWxpZCgp
IGNvbnN0OwpAQCAtMTM0LDEzICsxMzAsMTcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1
bXBQcm9maWxlKCkgeyB9CiAjZW5kaWYKIAotICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFu
ZGxlPiBhbGxvY2F0ZShWTSYsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJ
VENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4g
YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRp
b25FZmZvcnQpOwogCiAgICAgYm9vbCBpc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShjb25zdCBBYnN0
cmFjdExvY2tlciYsIHZvaWQqIGFkZHJlc3MpOwogCiAgICAgc3RhdGljIHNpemVfdCBjb21taXR0
ZWRCeXRlQ291bnQoKTsKIAogICAgIExvY2smIGdldExvY2soKSBjb25zdDsKK3ByaXZhdGU6CisK
KyAgICBFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CisgICAgfkV4ZWN1dGFibGVBbGxvY2F0b3IoKTsK
IH07CiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKSAmJiBFTkFCTEUoQVNTRU1CTEVSKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjE0NTA4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTYsNyArNzE2LDcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBtX2Rp
c2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpk
ZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0
cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqbV92bSwgKnRoaXMsIG1fY29kZUJsb2NrLCBl
ZmZvcnQpKTsKKyAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4o
bmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBlZmZvcnQpKTsKIAogICAgIGRvdWJs
ZSBhZnRlciA9IDA7CiAgICAgaWYgKFVOTElLRUxZKGNvbXB1dGVDb21waWxlVGltZXMoKSkpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjE0NTA4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIxLDcgKzEyMSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJ
bnN0cnUKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJl
Z2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJS
ZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0RHVtYlZpcnR1YWxDYWxsKGlu
Zm8pOworICAgIGVtaXREdW1iVmlydHVhbENhbGwoKnZtKCksIGluZm8pOwogICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAg
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUTWF0aElDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRNYXRoSUMuaAkocmV2aXNpb24gMjE0NTA4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRNYXRoSUMuaAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDcgKzE2MCw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRJbmxpbmUpIHsKICAgICAgICAgICAgICAg
ICBhdXRvIGp1bXBUb0RvbmUgPSBqaXQuanVtcCgpOwogCi0gICAgICAgICAgICAgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWls
KTsKKyAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBjb2RlQmxvY2ss
IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgICAgICAgICAgICAgaWYgKCFsaW5rQnVmZmVy
LmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGdlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzLCBzbG93UGF0aFN0YXJ0TG9jYXRpb24o
KSk7CiAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9Eb25lLCBkb25l
TG9jYXRpb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyMTQ1MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBA
QCBKSVQ6OkNvZGVSZWYgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2CiAgICAganVtcFRvRXhj
ZXB0aW9uSGFuZGxlcigpOwogCiAgICAgLy8gQWxsIHRyYW1wb2xpbmVzIGNvbnN0cnVjdGVkISBj
b3B5IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0IHRoZSBwb2ludGVycyBvbiB0aGUg
TWFjaGluZSBvYmplY3QuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgKnRoaXMs
IEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xP
QkFMX1RIVU5LX0lEKTsKIAogICAgIHBhdGNoQnVmZmVyLmxpbmsobmF0aXZlQ2FsbCwgRnVuY3Rp
b25QdHIoZnVuYykpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkpJ
VCBDVEkgbmF0aXZlIGNhbGwiKSk7CkBAIC0xMDYxLDcgKzEwNjEsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJl
Z1QwKTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX3ZtLCAqdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5
cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4
ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlW
YWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmso
c2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zm
c2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjE0NTA4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTExOSw3ICsxMTE5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3Bl
cgogICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkp
KSwgcmVnVDApOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKm1fdm0sICp0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmso
YmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVG
cm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNl
dChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIu
bGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6
Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVs
QXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCShyZXZpc2lvbiAyMTQ1MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNyArMTc3LDcgQEAg
SklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZQogICAgIGppdC5tb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVnVDApOwogICAgIGppdC5yZXQoKTsKICAgICAKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCAoIlN0cmluZyBnZXRfYnlfdmFsIHN0dWIiKSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CShyZXZpc2lvbiAyMTQ1MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBKSVQ6OkNvZGVS
ZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lCiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTMy
KDApLCByZWdUMCk7CiAgICAgaml0LnJldCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsICgiU3RyaW5nIGdldF9ieV92YWwgc3R1YiIpKTsKIH0KIApAQCAtMTMzNiw3ICsx
MzM2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAgIAog
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1f
dm0sICp0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhp
cywgbV9jb2RlQmxvY2spOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29k
ZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJs
ZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8t
PnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2Fz
ZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4
ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlW
YWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwpAQCAtMTM2Miw3ICsxMzYyLDcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2FjaAogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuID0gZW1pdEdldEJ5VmFsV2l0aENhY2hlZElkKGJ5VmFsSW5mbywgY3VycmVu
dEluc3RydWN0aW9uLCBwcm9wZXJ0eU5hbWUsIGZhc3REb25lQ2FzZSwgc2xvd0RvbmVDYXNlLCBz
bG93Q2FzZXMpOwogCiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywgbV9jb2Rl
QmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVz
cy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQ
YXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYXN0RG9uZUNhc2UsIGJ5VmFsSW5mby0+YmFk
VHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAg
ICAgcGF0Y2hCdWZmZXIubGluayhzbG93RG9uZUNhc2UsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAu
bGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9OZXh0SG90UGF0aCkpOwpAQCAt
MTQxOSw3ICsxNDE5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJ
bgogICAgIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fdm0sICp0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwg
Q29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0
YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbElu
Zm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93
Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJv
bUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQo
YnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAgIHBhdGNoQnVmZmVyLmxp
bmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+
YmFkVHlwZUp1bXBUb0RvbmUpKTsKQEAgLTE0NTMsNyArMTQ1Myw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2gKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbiA9
IGVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChieVZhbEluZm8sIGN1cnJlbnRJbnN0cnVjdGlvbiwg
cHV0S2luZCwgcHJvcGVydHlOYW1lLCBkb25lQ2FzZXMsIHNsb3dDYXNlcyk7CiAKICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOwogICAgIHBhdGNoQnVmZmVyLmxpbmso
c2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zm
c2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGRvbmVDYXNlcywgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5
VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tz
LmVtcHR5KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlz
aW9uIDIxNDUwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwo
CiAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpy
ZWdUNCk7CiAgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsK
ICAgICAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih2bSwgc3R1YkppdCwgb3duZXIs
IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihzdHVi
Sml0LCBvd25lciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAocGF0Y2hCdWZmZXIu
ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAgICAgICBsaW5rVmlydHVhbEZvcihleGVjLCBjYWxs
TGlua0luZm8pOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkocmV2aXNpb24gMjE0NTA4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE2Niw3ICsxNjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmaW5hbGl6ZShNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmFs
bGJhY2ssIGNvbnN0IGNoYXIqIHRodW5rS2luZCkKICAgICAgICAgewotICAgICAgICAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgKnRoaXMsIEdMT0JBTF9USFVOS19JRCk7CisgICAg
ICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQpOwog
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2ZhaWx1cmVzLCBDb2RlTG9jYXRpb25MYWJl
bChmYWxsYmFjaykpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2Fs
bHMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxz
W2ldLmZpcnN0LCBtX2NhbGxzW2ldLnNlY29uZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyMTQ1MDgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc3LDcgKzc3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJv
bQogICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGppdC5qdW1wVG9FeGNl
cHRpb25IYW5kbGVyKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBH
TE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxf
VEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIlRocm93
IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwogfQogCkBAIC0xNDIsNyAr
MTQyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcgogICAgIAog
ICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtDYWxsKTsKICAgICAKLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxpbmsgY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7
CiB9CiAKQEAgLTE1NCw3ICsxNTQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHlt
b3JwaGljQ2FsCiAgICAgCiAgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua1Bv
bHltb3JwaGljQ2FsbCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGpp
dCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJM
aW5rIHBvbHltb3JwaGljIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwogfQogCkBAIC0yMjMsNyAr
MjIzLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxUaHVua0ZvcihWTQogICAgIAog
ICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvblZpcnR1YWxDYWxsKTsKICAgICAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwKICAgICAgICAgKCJWaXJ0dWFs
ICVzIHNsb3cgcGF0aCB0aHVuayIsCkBAIC0zODIsNyArMzgyLDcgQEAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogCiAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRs
ZXIoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVO
S19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7
CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgibmF0aXZlICVzJXMgdHJh
bXBvbGluZSIsIGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRoU2F2ZWRUYWdzID8gIlRhaWwg
V2l0aCBTYXZlZCBUYWdzICIgOiBlbnRyeVR5cGUgPT0gRW50ZXJWaWFKdW1wV2l0aG91dFNhdmVk
VGFncyA/ICJUYWlsIFdpdGhvdXQgU2F2ZWQgVGFncyAiIDogIiIsIHRvQ1N0cmluZyhraW5kKS5k
YXRhKCkpKTsKIH0KIApAQCAtNTI5LDcgKzUyOSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBh
cml0eUZpeHVwR2VuZXJhdG8KICAgICBqaXQucmV0KCk7CiAjZW5kaWYKIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsICgiZml4dXAgYXJpdHkiKSk7CiB9CiAKQEAgLTUzOSw3ICs1Mzks
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdW5yZWFjaGFibGVHZW5lcmF0CiAKICAgICBqaXQu
YnJlYWtwb2ludCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xP
QkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJ1bnJlYWNo
YWJsZSB0aHVuayIpKTsKIH0KIApAQCAtMTEyNyw3ICsxMTI3LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1bgogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgp
OwogICAgIGppdC5yZXQoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBq
aXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lEKTsKICAgICBsaW5rQnVmZmVyLmxpbmsobm9Db2RlLCBDb2RlTG9jYXRpb25M
YWJlbCh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyh2bSkp
KTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKICAgICAgICAgbGlua0J1ZmZlciwgKCJTcGVj
aWFsaXplZCB0aHVuayBmb3IgYm91bmQgZnVuY3Rpb24gY2FsbHMgd2l0aCBubyBhcmd1bWVudHMi
KSk7CkBAIC0xMTY3LDcgKzExNjcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNl
cHRpb25Gcm9tCiAgICAgICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CiAgICAg
fTsKIAotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lE
KTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAg
IGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd1dhc21FeGNlcHRpb24pOwogICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKAogICAgICAgICBsaW5rQnVmZmVyLCAoIlRocm93IGV4Y2VwdGlvbiBmcm9t
IFdhc20iKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5r
cy5jcHAJKHJldmlzaW9uIDIxNDUwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZVRodQogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNl
SklUOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4odGFyZ2V0KSksIEpTSW50ZXJm
YWNlSklUOjpyZWdUMCk7CiAgICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKICAg
ICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQp
OworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxMSW50ICVzIHByb2xvZ3VlIHRo
dW5rIiwgdGh1bmtLaW5kKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyMTQ1MDgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQyLDcgKzM0Miw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGFrZVNh
bXBsZShjb25zdCAKIAogICAgICAgICBMb2NrSG9sZGVyIG1hY2hpbmVUaHJlYWRzTG9ja2VyKG1f
dm0uaGVhcC5tYWNoaW5lVGhyZWFkcygpLmdldExvY2soKSk7CiAgICAgICAgIExvY2tIb2xkZXIg
Y29kZUJsb2NrU2V0TG9ja2VyKG1fdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5nZXRMb2NrKCkpOwot
ICAgICAgICBMb2NrSG9sZGVyIGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIobV92bS5leGVjdXRh
YmxlQWxsb2NhdG9yLmdldExvY2soKSk7CisgICAgICAgIExvY2tIb2xkZXIgZXhlY3V0YWJsZUFs
bG9jYXRvckxvY2tlcihFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24oKS5nZXRMb2NrKCkp
OwogCiAgICAgICAgIGJvb2wgZGlkU3VzcGVuZCA9IG1fanNjRXhlY3V0aW9uVGhyZWFkLT5zdXNw
ZW5kKCk7CiAgICAgICAgIGlmIChkaWRTdXNwZW5kKSB7CkBAIC0zNjQsNyArMzY0LDcgQEAgdm9p
ZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IAogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgLy8gRklYTUU6IExldHMgaGF2ZSBhIHdheSBvZiBkZXRlY3Rpbmcgd2hlbiB3ZSdy
ZSBwYXJzaW5nIGNvZGUuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUyNzYxCi0gICAgICAgICAgICBpZiAobV92bS5leGVjdXRhYmxlQWxs
b2NhdG9yLmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIs
IG1hY2hpbmVQQykpIHsKKyAgICAgICAgICAgIGlmIChFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5n
bGV0b24oKS5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShleGVjdXRhYmxlQWxsb2NhdG9yTG9ja2Vy
LCBtYWNoaW5lUEMpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fdm0uaXNFeGVjdXRpbmdJblJl
Z0V4cEpJVCkgewogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UncmUgZXhlY3V0aW5n
IGEgcmVnZXhwLiBMZXRzIGdhdGhlciBtb3JlIGludGVyc3RpbmcgZGF0YS4KICAgICAgICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjcy
OQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjE0NTA4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjYsNyArMTY2LDYgQEAgc3RhdGljIGJvb2wgZW5hYmxlQXNzZW1ibGVyKEV4ZWN1dGFi
bGVBbAogVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIDogbV9h
cGlMb2NrKGFkb3B0UmVmKG5ldyBKU0xvY2sodGhpcykpKQogI2lmIEVOQUJMRShBU1NFTUJMRVIp
Ci0gICAgLCBleGVjdXRhYmxlQWxsb2NhdG9yKCp0aGlzKQogI2VuZGlmCiAgICAgLCBoZWFwKHRo
aXMsIGhlYXBUeXBlKQogICAgICwgYXV4aWxpYXJ5U3BhY2UoIkF1eGlsaWFyeSIsIGhlYXAsIEFs
bG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkF1eGls
aWFyeSkpCkBAIC0xOTgsNyArMTk3LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBl
IGhlYXBUeXBlKQogICAgICwgbV9ydFRyYWNlTGlzdChuZXcgUlRUcmFjZUxpc3QoKSkKICNlbmRp
ZgogI2lmIEVOQUJMRShBU1NFTUJMRVIpCi0gICAgLCBtX2NhblVzZUFzc2VtYmxlcihlbmFibGVB
c3NlbWJsZXIoZXhlY3V0YWJsZUFsbG9jYXRvcikpCisgICAgLCBtX2NhblVzZUFzc2VtYmxlcihl
bmFibGVBc3NlbWJsZXIoRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkpKQogI2VuZGlm
CiAjaWYgRU5BQkxFKEpJVCkKICAgICAsIG1fY2FuVXNlSklUKG1fY2FuVXNlQXNzZW1ibGVyICYm
IE9wdGlvbnM6OnVzZUpJVCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShy
ZXZpc2lvbiAyMTQ1MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yODUsMTQgKzI4NSw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEpT
TG9jaz4gbV9hcGlMb2NrOwogCiBwdWJsaWM6Ci0jaWYgRU5BQkxFKEFTU0VNQkxFUikKLSAgICAv
LyBleGVjdXRhYmxlQWxsb2NhdG9yIHNob3VsZCBiZSBkZXN0cnVjdGVkIGFmdGVyIHRoZSBoZWFw
LCBhcyB0aGUgaGVhcCBjYW4gY2FsbCBleGVjdXRhYmxlQWxsb2NhdG9yCi0gICAgLy8gaW4gaXRz
IGRlc3RydWN0b3IuCi0gICAgRXhlY3V0YWJsZUFsbG9jYXRvciBleGVjdXRhYmxlQWxsb2NhdG9y
OwotI2VuZGlmCi0KLSAgICAvLyBUaGUgaGVhcCBzaG91bGQgYmUganVzdCBhZnRlciBleGVjdXRh
YmxlQWxsb2NhdG9yIGFuZCBiZWZvcmUgb3RoZXIgbWVtYmVycyB0byBlbnN1cmUgdGhhdCBpdCdz
Ci0gICAgLy8gZGVzdHJ1Y3RlZCBhZnRlciBhbGwgdGhlIG9iamVjdHMgdGhhdCByZWZlcmVuY2Ug
aXQuCiAgICAgSGVhcCBoZWFwOwogICAgIAogICAgIFN1YnNwYWNlIGF1eGlsaWFyeVNwYWNlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHJldmlzaW9u
IDIxNDUwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTAsNyArMjUwLDcgQEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxs
VHJhcEJyZWFrcG9pbnRzKAogICAgICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVy
IHRyeSBhZ2FpbiBsYXRlci4KIAogICAgIHsKLSAgICAgICAgYXV0byBhbGxvY2F0b3IgPSB2bS5l
eGVjdXRhYmxlQWxsb2NhdG9yOworICAgICAgICBhdXRvJiBhbGxvY2F0b3IgPSBFeGVjdXRhYmxl
QWxsb2NhdG9yOjpzaW5nbGV0b24oKTsKICAgICAgICAgYXV0byBhbGxvY2F0b3JMb2NrZXIgPSB0
cnlIb2xkTG9jayhhbGxvY2F0b3IuZ2V0TG9jaygpKTsKICAgICAgICAgaWYgKCFhbGxvY2F0b3JM
b2NrZXIpCiAgICAgICAgICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBh
Z2FpbiBsYXRlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVj
dG9yLmNwcAkocmV2aXNpb24gMjE0NTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L1ZNSW5zcGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIGF1dG8g
Vk1JbnNwZWN0b3I6OmlzVmFsaWRFeGVjdXRhYmxlTWVtb3IKICAgICBib29sIGZvdW5kID0gZmFs
c2U7CiAgICAgYm9vbCBoYXNUaW1lb3V0ID0gZmFsc2U7CiAgICAgaXRlcmF0ZShbJl0gKFZNJiB2
bSkgLT4gRnVuY3RvclN0YXR1cyB7Ci0gICAgICAgIGF1dG8gYWxsb2NhdG9yID0gdm0uZXhlY3V0
YWJsZUFsbG9jYXRvcjsKKyAgICAgICAgYXV0byYgYWxsb2NhdG9yID0gRXhlY3V0YWJsZUFsbG9j
YXRvcjo6c2luZ2xldG9uKCk7CiAgICAgICAgIGF1dG8mIGxvY2sgPSBhbGxvY2F0b3IuZ2V0TG9j
aygpOwogCiAgICAgICAgIGJvb2wgaXNTYWZlVG9Mb2NrID0gZW5zdXJlSXNTYWZlVG9Mb2NrKGxv
Y2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAko
cmV2aXNpb24gMjE0NTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgICAgICAgICAgICAgIEFTU0VSVCghIXZtLT5j
YWxsRnJhbWVGb3JDYXRjaCk7CiAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICBMaW5rQnVm
ZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgICAgICAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKGNhbGwsIHRocm93QmFkSTY0KTsKICAgICAgICAgICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW52YWxp
ZCBpNjQgdXNlIGluIGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCkpOwogICAgICAgICB9CkBAIC00
MTIsNyArNDEyLDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQog
ICAgICAgICB9KTsKICAgICB9CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0
LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRy
KHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9uKHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpOwogICAgIENvZGVMb2NhdGlv
bkxhYmVsIGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2sp
KTsKQEAgLTQ2Miw3ICs0NjIsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21U
b1dhc20oCiAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0Y2gsIFdlYkFzc2VtYmx5
RnVuY3Rpb246Om9mZnNldE9mV2FzbUVudHJ5UG9pbnRDb2RlKCkpLCBzY3JhdGNoKTsKICAgICBq
aXQuanVtcChzY3JhdGNoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQs
IEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiV2Vi
QXNzZW1ibHktPldlYkFzc2VtYmx5IGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCkpOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCShyZXZpc2lvbiAyMTQ1
MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2NiwxMyArMjY2LDEzIEBAIHZvaWQgUGxhbjo6Y29tcGxldGUoY29uc3QgQWJz
dHJhY3RMb2NrZXIKICAgICAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2Vz
W2Z1bmN0aW9uSW5kZXhdOwogICAgICAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmVEZXNjcmlw
dGlvbiA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KS0+
dG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcihtX3ZtLCAqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0
cik7CisgICAgICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53
YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CiAgICAgICAgICAgICAgICAgICAgIG1fd2FzbUlu
dGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlv
biA9CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9u
PihGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHkgZnVuY3Rpb25bJWldICVz
IiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlRGVzY3JpcHRpb24uYXNjaWkoKS5kYXRhKCkpKSwg
V1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogICAgICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKG1fdm0sICpjb250ZXh0LmpzRW50cnlwb2ludEpJVCwgbnVsbHB0cik7Cisg
ICAgICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC5qc0VudHJ5
cG9pbnRKSVQsIG51bGxwdHIpOwogICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
Y29udGV4dC5qc0VudHJ5cG9pbnRUb1dhc21FbnRyeXBvaW50Q2FsbCwgRnVuY3Rpb25QdHIobV93
YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50LmNvbXBp
bGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogCiAgICAgICAgICAgICAgICAg
ICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5qc1RvV2FzbUVudHJ5
cG9pbnQuY29tcGlsYXRpb24gPQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
ckpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJ
VC5jcHAJKHJldmlzaW9uIDIxNDUwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjc0LDcgKzI2NzQsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGdlbmVyYXRlKCk7CiAgICAgICAgIGJhY2t0cmFjaygpOwogCi0gICAgICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcigqdm0sICp0aGlzLCBSRUdFWFBfQ09ERV9JRCwgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp0aGlzLCBSRUdFWFBf
Q09ERV9JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgaWYgKGxpbmtCdWZmZXIu
ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAgICAgICAgICAgaml0T2JqZWN0LnNldEZhbGxCYWNr
KHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305779</attachid>
            <date>2017-03-29 13:36:42 -0700</date>
            <delta_ts>2017-03-29 13:38:35 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>118653</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUg
IkpJVENvZGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5o
IgotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBpbGF0aW9uVGhyZWFkLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtMjQyLDggKzI0MSw3IEBAIHZvaWQgTGlua0J1ZmZlcjo6YWxs
b2NhdGUoTWFjcm9Bc3NlbWJsZXIKICAgICAgICAgaW5pdGlhbFNpemUgPSBtYWNyb0Fzc2VtYmxl
ci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQobV92bSAh
PSBudWxscHRyKTsKLSAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBtX3ZtLT5leGVjdXRhYmxlQWxs
b2NhdG9yLmFsbG9jYXRlKCptX3ZtLCBpbml0aWFsU2l6ZSwgb3duZXJVSUQsIGVmZm9ydCk7Cisg
ICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCku
YWxsb2NhdGUoaW5pdGlhbFNpemUsIG93bmVyVUlELCBlZmZvcnQpOwogICAgIGlmICghbV9leGVj
dXRhYmxlTWVtb3J5KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb2RlID0gbV9leGVjdXRhYmxl
TWVtb3J5LT5zdGFydCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9MaW5rQnVmZmVyLmgJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgVk07CiAKIC8vIExp
bmtCdWZmZXI6CiAvLwpAQCAtNzksMTEgKzc4LDEwIEBAIGNsYXNzIExpbmtCdWZmZXIgewogI2Vu
ZGlmCiAKIHB1YmxpYzoKLSAgICBMaW5rQnVmZmVyKFZNJiB2bSwgTWFjcm9Bc3NlbWJsZXImIG1h
Y3JvQXNzZW1ibGVyLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
ID0gSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCkKKyAgICBMaW5rQnVmZmVyKE1hY3JvQXNzZW1i
bGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCA9IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpCiAgICAgICAgIDogbV9zaXplKDAp
CiAgICAgICAgICwgbV9kaWRBbGxvY2F0ZShmYWxzZSkKICAgICAgICAgLCBtX2NvZGUoMCkKLSAg
ICAgICAgLCBtX3ZtKCZ2bSkKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9jb21wbGV0ZWQo
ZmFsc2UpCiAjZW5kaWYKQEAgLTk1LDcgKzkzLDYgQEAgcHVibGljOgogICAgICAgICA6IG1fc2l6
ZShzaXplKQogICAgICAgICAsIG1fZGlkQWxsb2NhdGUoZmFsc2UpCiAgICAgICAgICwgbV9jb2Rl
KGNvZGUpCi0gICAgICAgICwgbV92bSgwKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBtX2Nv
bXBsZXRlZChmYWxzZSkKICNlbmRpZgpAQCAtMjUzLDggKzI1MCw2IEBAIHB1YmxpYzoKICAgICBi
b29sIHdhc0FscmVhZHlEaXNhc3NlbWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FscmVhZHlEaXNh
c3NlbWJsZWQ7IH0KICAgICB2b2lkIGRpZEFscmVhZHlEaXNhc3NlbWJsZSgpIHsgbV9hbHJlYWR5
RGlzYXNzZW1ibGVkID0gdHJ1ZTsgfQogCi0gICAgVk0mIHZtKCkgeyByZXR1cm4gKm1fdm07IH0K
LQogcHJpdmF0ZToKICNpZiBFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAgICAgaW50IGV4ZWN1
dGFibGVPZmZzZXRGb3IoaW50IGxvY2F0aW9uKQpAQCAtMzA1LDcgKzMwMCw2IEBAIHByaXZhdGU6
CiAjZW5kaWYKICAgICBib29sIG1fZGlkQWxsb2NhdGU7CiAgICAgdm9pZCogbV9jb2RlOwotICAg
IFZNKiBtX3ZtOwogI2lmbmRlZiBOREVCVUcKICAgICBib29sIG1fY29tcGxldGVkOwogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAkocmV2aXNpb24gMjE0
NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CiAKLUNvbXBpbGF0aW9uIGNvbXBpbGUoVk0mIHZtLCBQcm9jZWR1cmUmIHByb2MsIHVuc2lnbmVk
IG9wdExldmVsKQorQ29tcGlsYXRpb24gY29tcGlsZShQcm9jZWR1cmUmIHByb2MsIHVuc2lnbmVk
IG9wdExldmVsKQogewogICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCJDb21waWxhdGlvbiIp
OwogICAgIApAQCAtNDYsNyArNDYsNyBAQCBDb21waWxhdGlvbiBjb21waWxlKFZNJiB2bSwgUHJv
Y2VkdXJlJiBwCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9j
LCBqaXQpOwotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgaml0LCBudWxscHRyKTsKKyAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRyKTsKIAogICAgIHJldHVybiBDb21w
aWxhdGlvbihGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiQjM6OkNvbXBpbGF0aW9uIikpLCBw
cm9jLnJlbGVhc2VCeXByb2R1Y3RzKCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29tcGlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbXBpbGUuaAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tcGlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIFByb2Nl
ZHVyZTsKIC8vIFRoZW4geW91IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2ZSBmb3Ig
YXMgbG9uZyBhcyB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHJ1biB0aGUgY29kZS4KIC8vIElmIHRo
aXMgQVBJIGZlZWxzIHRvbyBoaWdoLWxldmVsLCB5b3UgY2FuIHVzZSBCMzo6Z2VuZXJhdGUoKSBk
aXJlY3RseS4KIAotSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24gY29tcGlsZShWTSYsIFBy
b2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitKU19FWFBPUlRfUFJJVkFURSBDb21w
aWxhdGlvbiBjb21waWxlKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDYgQEAKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlB1cmVOYU4uaCIKLSNp
bmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPGNtYXRoPgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNs
dWRlIDx3dGYvRmFzdFRMUy5oPgpAQCAtMTE4LDExICsxMTcsOSBAQCBTdGF0aWNMb2NrIGNyYXNo
TG9jazsKICAgICAgICAgQ1JBU0goKTsgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCi1WTSogdm07
Ci0KLXN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZShQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKQorc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9u
PiBjb21waWxlUHJvYyhQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAx
KQogewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPihCMzo6Y29tcGls
ZSgqdm0sIHByb2NlZHVyZSwgb3B0TGV2ZWwpKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxDb21waWxhdGlvbj4oQjM6OmNvbXBpbGUocHJvY2VkdXJlLCBvcHRMZXZlbCkpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CkBAIC0xNDEsNyArMTM4
LDcgQEAgVCBpbnZva2UoY29uc3QgQ29tcGlsYXRpb24mIGNvZGUsIEFyZ3VtZQogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogVCBjb21waWxlQW5kUnVuKFByb2Nl
ZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogewotICAgIHJldHVybiBp
bnZva2U8VD4oKmNvbXBpbGUocHJvY2VkdXJlKSwgYXJndW1lbnRzLi4uKTsKKyAgICByZXR1cm4g
aW52b2tlPFQ+KCpjb21waWxlUHJvYyhwcm9jZWR1cmUpLCBhcmd1bWVudHMuLi4pOwogfQogCiB2
b2lkIGxvd2VyVG9BaXJGb3JUZXN0aW5nKFByb2NlZHVyZSYgcHJvYykKQEAgLTMxMiw3ICszMDks
NyBAQCB2b2lkIHRlc3RMb2FkQWNxNDIoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmeCksCiAgICAgICAgICAgICAwLCBIZWFwUmFu
Z2UoNDIpLCBIZWFwUmFuZ2UoNDIpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2Mp
OworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGlmIChpc0FSTTY0KCkp
CiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGRhIik7CiAgICAgQ0hFQ0so
aW52b2tlPGludD4oKmNvZGUpID09IDQyKTsKQEAgLTYxNSw3ICs2MTIsNyBAQCB2b2lkIHRlc3RB
ZGRBcmdaZXJvSW1tWkRlZigpCiAgICAgICAgICAgICBhcmcsCiAgICAgICAgICAgICBjb25zdFpl
cm8pKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYywgMCk7CisgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYywgMCk7CiAgICAgQ0hFQ0soaW52b2tlPGludDY0X3Q+KCpjb2Rl
LCAweDAxMjM0NTY3ODlhYmNkZWYpID09IDB4ODlhYmNkZWYpOwogfQogCkBAIC02MzIsNyArNjI5
LDcgQEAgdm9pZCB0ZXN0QWRkTG9hZFR3aWNlKCkKICAgICAgICAgICAgIHByb2MsIFJldHVybiwg
T3JpZ2luKCksCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwg
T3JpZ2luKCksIGxvYWQsIGxvYWQpKTsKIAotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MsIG9wdExldmVsKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYywgb3B0
TGV2ZWwpOwogICAgICAgICBDSEVDSyhpbnZva2U8aW50MzJfdD4oKmNvZGUpID09IDQyICogMik7
CiAgICAgfTsKIApAQCAtOTg0LDcgKzk4MSw3IEBAIHZvaWQgdGVzdE11bExvYWRUd2ljZSgpCiAg
ICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBNdWwsIE9yaWdpbigpLCBsb2FkLCBsb2FkKSk7CiAKLSAgICAg
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jLCBvcHRMZXZlbCk7CisgICAgICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MsIG9wdExldmVsKTsKICAgICAgICAgQ0hFQ0soaW52b2tlPGlu
dDMyX3Q+KCpjb2RlKSA9PSA0MiAqIDQyKTsKICAgICB9OwogCkBAIC0xMDA0LDcgKzEwMDEsNyBA
QCB2b2lkIHRlc3RNdWxBZGRBcmdzTGVmdCgpCiAgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBtdWx0aXBsaWVkLCBhcmcyKTsKICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgYWRk
ZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDY0T3BlcmFuZHMo
KTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTEwMjgsNyArMTAyNSw3IEBA
IHZvaWQgdGVzdE11bEFkZEFyZ3NSaWdodCgpCiAgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBhcmcwLCBtdWx0aXBsaWVkKTsKICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgYWRk
ZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDY0T3BlcmFuZHMo
KTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTEwNTUsNyArMTA1Miw3IEBA
IHZvaWQgdGVzdE11bEFkZEFyZ3NMZWZ0MzIoKQogICAgIFZhbHVlKiBhZGRlZCA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgbXVsdGlwbGllZCwgYXJnMik7CiAg
ICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIGFk
ZGVkKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIHRlc3RWYWx1ZXMgPSBpbnQzMk9wZXJhbmRz
KCk7CiAgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CkBAIC0xMDgyLDcgKzEwNzksNyBA
QCB2b2lkIHRlc3RNdWxBZGRBcmdzUmlnaHQzMigpCiAgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBhcmcwLCBtdWx0aXBsaWVkKTsK
ICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
YWRkZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDMyT3BlcmFu
ZHMoKTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTExMDYsNyArMTEwMyw3
IEBAIHZvaWQgdGVzdE11bFN1YkFyZ3NMZWZ0KCkKICAgICBWYWx1ZSogYWRkZWQgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIG11bHRpcGxpZWQsIGFyZzIpOwog
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBh
ZGRlZCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgYXV0byB0ZXN0VmFsdWVzID0gaW50NjRPcGVyYW5k
cygpOwogICAgIGZvciAoYXV0byBhIDogdGVzdFZhbHVlcykgewpAQCAtMTEzMCw3ICsxMTI3LDcg
QEAgdm9pZCB0ZXN0TXVsU3ViQXJnc1JpZ2h0KCkKICAgICBWYWx1ZSogYWRkZWQgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIGFyZzAsIG11bHRpcGxpZWQpOwog
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBh
ZGRlZCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgYXV0byB0ZXN0VmFsdWVzID0gaW50NjRPcGVyYW5k
cygpOwogICAgIGZvciAoYXV0byBhIDogdGVzdFZhbHVlcykgewpAQCAtMTE1Nyw3ICsxMTU0LDcg
QEAgdm9pZCB0ZXN0TXVsU3ViQXJnc0xlZnQzMigpCiAgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCBtdWx0aXBsaWVkLCBhcmcyKTsK
ICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
YWRkZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDMyT3BlcmFu
ZHMoKTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTExODQsNyArMTE4MSw3
IEBAIHZvaWQgdGVzdE11bFN1YkFyZ3NSaWdodDMyKCkKICAgICBWYWx1ZSogYWRkZWQgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIGFyZzAsIG11bHRpcGxpZWQp
OwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBhZGRlZCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgYXV0byB0ZXN0VmFsdWVzID0gaW50MzJPcGVy
YW5kcygpOwogICAgIGZvciAoYXV0byBhIDogdGVzdFZhbHVlcykgewpAQCAtMTIwOCw3ICsxMjA1
LDcgQEAgdm9pZCB0ZXN0TXVsTmVnQXJncygpCiAgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCB6ZXJvLCBtdWx0aXBsaWVkKTsKICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgYWRk
ZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDY0T3BlcmFuZHMo
KTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTEyMzIsNyArMTIyOSw3IEBA
IHZvaWQgdGVzdE11bE5lZ0FyZ3MzMigpCiAgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCB6ZXJvLCBtdWx0aXBsaWVkKTsKICAgICBy
b290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgYWRkZWQp
OwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21w
aWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDMyT3BlcmFuZHMoKTsK
ICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTQ2MzYsNyArNDYzMyw3IEBAIHZv
aWQgdGVzdENvbXBhcmVGbG9hdFRvRG91YmxlVGhyb3VnaFBoaSgKICAgICBWYWx1ZSogZXF1YWwg
PSB0YWlsLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEVxdWFsLCBPcmlnaW4oKSwgZG91YmxlSW5w
dXQsIGFyZzJBc0ZSb3VuZGVkRG91YmxlKTsKICAgICB0YWlsLT5hcHBlbmROZXdDb250cm9sVmFs
dWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgZXF1YWwpOwogCi0gICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpbnQz
Ml90IGludGVnZXJBID0gYml0d2lzZV9jYXN0PGludDMyX3Q+KGEpOwogICAgIGRvdWJsZSBkb3Vi
bGVCID0gYjsKICAgICBDSEVDSyhpbnZva2U8aW50NjRfdD4oKmNvZGUsIDEsIGludGVnZXJBLCBk
b3VibGVCKSA9PSAoYSA9PSBiKSk7CkBAIC00Njg1LDcgKzQ2ODIsNyBAQCB2b2lkIHRlc3REb3Vi
bGVUb0Zsb2F0VGhyb3VnaFBoaShmbG9hdCB2CiAgICAgVmFsdWUqIGZsb2F0UmVzdWx0ID0gdGFp
bC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBEb3VibGVUb0Zsb2F0LCBPcmlnaW4oKSwgZG91Ymxl
SW5wdXQpOwogICAgIHRhaWwtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCBmbG9hdFJlc3VsdCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGlzSWRlbnRpY2Fs
KGludm9rZTxmbG9hdD4oKmNvZGUsIDEsIGJpdHdpc2VfY2FzdDxpbnQzMl90Pih2YWx1ZSkpLCB2
YWx1ZSArIDQyLjVmKSk7CiAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqY29k
ZSwgMCwgYml0d2lzZV9jYXN0PGludDMyX3Q+KHZhbHVlKSksIHN0YXRpY19jYXN0PGZsb2F0PihN
X1BJKSkpOwogfQpAQCAtNDc0MCw3ICs0NzM3LDcgQEAgdm9pZCB0ZXN0UmVkdWNlRmxvYXRUb0Rv
dWJsZVZhbGlkYXRlcygpCiAgICAgICAgICAgICByZXN1bHQpOwogICAgIHRhaWwtPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwogCi0gICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpjb2RlLCAxKSwgMTEuNWYg
KiAxMS41ZiArIHN0YXRpY19jYXN0PGZsb2F0PihiaXR3aXNlX2Nhc3Q8ZG91YmxlPihzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oMSkpKSArIDExLjVmKSk7CiAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52
b2tlPGZsb2F0PigqY29kZSwgMCksIDEwLjVmICogMTAuNWYgKyBzdGF0aWNfY2FzdDxmbG9hdD4o
Yml0d2lzZV9jYXN0PGRvdWJsZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDApKSkgKyAxMC41Zikp
OwogfQpAQCAtNDc4MCw3ICs0Nzc3LDcgQEAgdm9pZCB0ZXN0RG91YmxlUHJvZHVjZXJQaGlUb0Zs
b2F0Q29udmVycwogICAgIFZhbHVlKiBmbG9hdFJlc3VsdCA9IHRhaWwtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgRG91YmxlVG9GbG9hdCwgT3JpZ2luKCksIGZpbmFsQWRkKTsKICAgICB0YWlsLT5h
cHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgZmxvYXRSZXN1bHQp
OwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21w
aWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpjb2Rl
LCAxLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSwgdmFsdWUgKyB2YWx1ZSkpOwogICAg
IENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKmNvZGUsIDAsIGJpdHdpc2VfY2FzdDxp
bnQzMl90Pih2YWx1ZSkpLCA0Mi41ZiArIHZhbHVlKSk7CiB9CkBAIC00ODI5LDcgKzQ4MjYsNyBA
QCB2b2lkIHRlc3REb3VibGVQcm9kdWNlclBoaVRvRmxvYXRDb252ZXJzCiAKICAgICB0YWlsLT5h
cHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgZG91YmxlQWRkKTsK
IAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGls
ZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGRvdWJsZT4oKmNvZGUs
IDEsIGJpdHdpc2VfY2FzdDxpbnQzMl90Pih2YWx1ZSkpLCAodmFsdWUgKyB2YWx1ZSkgKyBzdGF0
aWNfY2FzdDxkb3VibGU+KHZhbHVlKSkpOwogICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxk
b3VibGU+KCpjb2RlLCAwLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSwgc3RhdGljX2Nh
c3Q8ZG91YmxlPigoNDIuNWYgKyB2YWx1ZSkgKyA0Mi41ZikpKTsKIH0KQEAgLTQ4NjksNyArNDg2
Niw3IEBAIHZvaWQgdGVzdERvdWJsZVByb2R1Y2VyUGhpV2l0aE5vbkZsb2F0Q28KICAgICBWYWx1
ZSogZmxvYXRSZXN1bHQgPSB0YWlsLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIERvdWJsZVRvRmxv
YXQsIE9yaWdpbigpLCBmaW5hbEFkZCk7CiAgICAgdGFpbC0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KHByb2MsIFJldHVybiwgT3JpZ2luKCksIGZsb2F0UmVzdWx0KTsKIAotICAgIGF1dG8gY29kZSA9
IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAg
Q0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqY29kZSwgMSwgYml0d2lzZV9jYXN0PGlu
dDMyX3Q+KHZhbHVlKSksIHZhbHVlICsgdmFsdWUpKTsKICAgICBDSEVDSyhpc0lkZW50aWNhbChp
bnZva2U8ZmxvYXQ+KCpjb2RlLCAwLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGNvbnN0VmFsdWUgKyB2YWx1ZSkpKTsKIH0KQEAgLTUyMjUsNyArNTIy
Miw3IEBAIHZvaWQgdGVzdElUb0Q2NEFyZygpCiAgICAgVmFsdWUqIHNyY0FzRG91YmxlID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgc3JjKTsKICAgICByb290
LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgc3JjQXNEb3Vi
bGUpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICBmb3IgKGF1dG8gdGVzdFZhbHVlIDogaW50NjRPcGVyYW5k
cygpKQogICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZG91YmxlPigqY29kZSwgdGVz
dFZhbHVlLnZhbHVlKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPih0ZXN0VmFsdWUudmFsdWUpKSk7CiB9
CkBAIC01MjM4LDcgKzUyMzUsNyBAQCB2b2lkIHRlc3RJVG9GNjRBcmcoKQogICAgIFZhbHVlKiBz
cmNBc0Zsb2F0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9GLCBPcmlnaW4oKSwg
c3JjKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgc3JjQXNGbG9hdCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGZvciAoYXV0byB0ZXN0VmFsdWUg
OiBpbnQ2NE9wZXJhbmRzKCkpCiAgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9h
dD4oKmNvZGUsIHRlc3RWYWx1ZS52YWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pih0ZXN0VmFsdWUu
dmFsdWUpKSk7CiB9CkBAIC01MjUyLDcgKzUyNDksNyBAQCB2b2lkIHRlc3RJVG9EMzJBcmcoKQog
ICAgIFZhbHVlKiBzcmNBc0RvdWJsZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRv
RCwgT3JpZ2luKCksIHNyYyk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IFJldHVybiwgT3JpZ2luKCksIHNyY0FzRG91YmxlKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBp
bGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgZm9yIChh
dXRvIHRlc3RWYWx1ZSA6IGludDMyT3BlcmFuZHMoKSkKICAgICAgICAgQ0hFQ0soaXNJZGVudGlj
YWwoaW52b2tlPGRvdWJsZT4oKmNvZGUsIHRlc3RWYWx1ZS52YWx1ZSksIHN0YXRpY19jYXN0PGRv
dWJsZT4odGVzdFZhbHVlLnZhbHVlKSkpOwogfQpAQCAtNTI2Niw3ICs1MjYzLDcgQEAgdm9pZCB0
ZXN0SVRvRjMyQXJnKCkKICAgICBWYWx1ZSogc3JjQXNGbG9hdCA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgSVRvRiwgT3JpZ2luKCksIHNyYyk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHNyY0FzRmxvYXQpOwogCi0gICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKICAgICBmb3IgKGF1dG8gdGVzdFZhbHVlIDogaW50MzJPcGVyYW5kcygpKQogICAgICAgICBD
SEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpjb2RlLCB0ZXN0VmFsdWUudmFsdWUpLCBz
dGF0aWNfY2FzdDxmbG9hdD4odGVzdFZhbHVlLnZhbHVlKSkpOwogfQpAQCAtNTI4MCw3ICs1Mjc3
LDcgQEAgdm9pZCB0ZXN0SVRvRDY0TWVtKCkKICAgICBWYWx1ZSogc3JjQXNEb3VibGUgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9yaWdpbigpLCBsb2FkZWRTcmMpOwogICAg
IHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBzcmNB
c0RvdWJsZSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGludDY0X3QgaW5NZW1vcnlWYWx1ZTsKICAgICBm
b3IgKGF1dG8gdGVzdFZhbHVlIDogaW50NjRPcGVyYW5kcygpKSB7CiAgICAgICAgIGluTWVtb3J5
VmFsdWUgPSB0ZXN0VmFsdWUudmFsdWU7CkBAIC01Mjk4LDcgKzUyOTUsNyBAQCB2b2lkIHRlc3RJ
VG9GNjRNZW0oKQogICAgIFZhbHVlKiBzcmNBc0Zsb2F0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBJVG9GLCBPcmlnaW4oKSwgbG9hZGVkU3JjKTsKICAgICByb290LT5hcHBlbmROZXdD
b250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgc3JjQXNGbG9hdCk7CiAKLSAgICBh
dXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHBy
b2MpOwogICAgIGludDY0X3QgaW5NZW1vcnlWYWx1ZTsKICAgICBmb3IgKGF1dG8gdGVzdFZhbHVl
IDogaW50NjRPcGVyYW5kcygpKSB7CiAgICAgICAgIGluTWVtb3J5VmFsdWUgPSB0ZXN0VmFsdWUu
dmFsdWU7CkBAIC01MzE2LDcgKzUzMTMsNyBAQCB2b2lkIHRlc3RJVG9EMzJNZW0oKQogICAgIFZh
bHVlKiBzcmNBc0RvdWJsZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3Jp
Z2luKCksIGxvYWRlZFNyYyk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IFJldHVybiwgT3JpZ2luKCksIHNyY0FzRG91YmxlKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBp
bGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaW50MzJf
dCBpbk1lbW9yeVZhbHVlOwogICAgIGZvciAoYXV0byB0ZXN0VmFsdWUgOiBpbnQzMk9wZXJhbmRz
KCkpIHsKICAgICAgICAgaW5NZW1vcnlWYWx1ZSA9IHRlc3RWYWx1ZS52YWx1ZTsKQEAgLTUzMzQs
NyArNTMzMSw3IEBAIHZvaWQgdGVzdElUb0YzMk1lbSgpCiAgICAgVmFsdWUqIHNyY0FzRmxvYXQg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0YsIE9yaWdpbigpLCBsb2FkZWRTcmMp
OwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBzcmNBc0Zsb2F0KTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaW50MzJfdCBpbk1lbW9yeVZhbHVlOwog
ICAgIGZvciAoYXV0byB0ZXN0VmFsdWUgOiBpbnQzMk9wZXJhbmRzKCkpIHsKICAgICAgICAgaW5N
ZW1vcnlWYWx1ZSA9IHRlc3RWYWx1ZS52YWx1ZTsKQEAgLTUzOTIsNyArNTM4OSw3IEBAIHZvaWQg
dGVzdElUb0RSZWR1Y2VkVG9JVG9GNjRBcmcoKQogICAgIFZhbHVlKiBmbG9hdFJlc3VsdCA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgRG91YmxlVG9GbG9hdCwgT3JpZ2luKCksIHNyY0Fz
RG91YmxlKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgZmxvYXRSZXN1bHQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBmb3IgKGF1dG8gdGVzdFZh
bHVlIDogaW50NjRPcGVyYW5kcygpKQogICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8
ZmxvYXQ+KCpjb2RlLCB0ZXN0VmFsdWUudmFsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4odGVzdFZh
bHVlLnZhbHVlKSkpOwogfQpAQCAtNTQwNyw3ICs1NDA0LDcgQEAgdm9pZCB0ZXN0SVRvRFJlZHVj
ZWRUb0lUb0YzMkFyZygpCiAgICAgVmFsdWUqIGZsb2F0UmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBEb3VibGVUb0Zsb2F0LCBPcmlnaW4oKSwgc3JjQXNEb3VibGUpOwogICAg
IHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBmbG9h
dFJlc3VsdCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGZvciAoYXV0byB0ZXN0VmFsdWUgOiBpbnQzMk9w
ZXJhbmRzKCkpCiAgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKmNvZGUs
IHRlc3RWYWx1ZS52YWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pih0ZXN0VmFsdWUudmFsdWUpKSk7
CiB9CkBAIC01Nzg5LDcgKzU3ODYsNyBAQCB2b2lkIHRlc3RTdG9yZVJlbEFkZExvYWRBY3EzMihp
bnQgYW1vdW50CiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRv
IGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OwogICAgIGlmIChpc0FSTTY0KCkpIHsKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNv
ZGUsICJsZGEiKTsKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJzdGwiKTsK
QEAgLTU4NjIsNyArNTg1OSw3IEBAIHZvaWQgdGVzdFN0b3JlUmVsQWRkTG9hZEFjcTgoaW50IGFt
b3VudCwKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAg
ICAgaWYgKGlzQVJNNjQoKSkgewogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwg
ImxkYSIpOwogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInN0bCIpOwpAQCAt
NTkwMSw3ICs1ODk4LDcgQEAgdm9pZCB0ZXN0U3RvcmVSZWxBZGRGZW5jZUxvYWRBY3E4KGludCBh
bQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICByb290LT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0g
Y29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBp
ZiAoaXNBUk02NCgpKSB7CiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGRh
Iik7CiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAic3RsIik7CkBAIC01OTc0
LDcgKzU5NzEsNyBAQCB2b2lkIHRlc3RTdG9yZVJlbEFkZExvYWRBY3ExNihpbnQgYW1vdW50CiAg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGlmIChp
c0FSTTY0KCkpIHsKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJsZGEiKTsK
ICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJzdGwiKTsKQEAgLTYwNDMsNyAr
NjA0MCw3IEBAIHZvaWQgdGVzdFN0b3JlUmVsQWRkTG9hZEFjcTY0KGludCBhbW91bnQKICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaWYgKGlzQVJN
NjQoKSkgewogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxkYSIpOwogICAg
ICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInN0bCIpOwpAQCAtNzA0OSw3ICs3MDQ2
LDcgQEAgdm9pZCB0ZXN0QnJhbmNoKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwK
ICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCA0MikgPT0g
MSk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDApID09IDApOwogfQpAQCAtNzA3NCw3
ICs3MDcxLDcgQEAgdm9pZCB0ZXN0QnJhbmNoUHRyKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2Rl
LCBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oNDIpKSA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8aW50
PigqY29kZSwgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDApKSA9PSAwKTsKIH0KQEAgLTcxMDcsNyAr
NzEwNCw3IEBAIHZvaWQgdGVzdERpYW1vbmQoKQogICAgIGVsc2VSZXN1bHQtPnNldFBoaShwaGkp
OwogICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBwaGkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09
IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KQEAgLTcxMzcs
NyArNzEzNCw3IEBAIHZvaWQgdGVzdEJyYW5jaE5vdEVxdWFsKCkKICAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnQ+
KCpjb2RlLCA0MikgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDApID09IDAp
OwogfQpAQCAtNzE2Nyw3ICs3MTY0LDcgQEAgdm9pZCB0ZXN0QnJhbmNoTm90RXF1YWxDb21tdXRl
KCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwog
ICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCA0MikgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tl
PGludD4oKmNvZGUsIDApID09IDApOwogfQpAQCAtNzIwMCw3ICs3MTk3LDcgQEAgdm9pZCB0ZXN0
QnJhbmNoTm90RXF1YWxOb3RFcXVhbCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
CiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09
IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KQEAgLTcyMzAs
NyArNzIyNyw3IEBAIHZvaWQgdGVzdEJyYW5jaEVxdWFsKCkKICAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCAxKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpj
b2RlLCA0MikgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDApID09IDApOwog
fQpAQCAtNzI2Myw3ICs3MjYwLDcgQEAgdm9pZCB0ZXN0QnJhbmNoRXF1YWxFcXVhbCgpCiAgICAg
ICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVD
SyhpbnZva2U8aW50PigqY29kZSwgNDIpID09IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpj
b2RlLCAwKSA9PSAwKTsKIH0KQEAgLTcyOTMsNyArNzI5MCw3IEBAIHZvaWQgdGVzdEJyYW5jaEVx
dWFsQ29tbXV0ZSgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVs
c2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSkpOwogCi0g
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09IDEpOwogICAgIENI
RUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KQEAgLTczMjYsNyArNzMyMyw3IEBA
IHZvaWQgdGVzdEJyYW5jaEVxdWFsRXF1YWwxKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmln
aW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCAxKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCA0
MikgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDApID09IDApOwogfQpAQCAt
Nzc0MSw3ICs3NzM4LDcgQEAgdm9pZCB0ZXN0QnJhbmNoTG9hZFB0cigpCiAgICAgICAgIHByb2Ms
IFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpbnRwdHJfdCBjb25k
OwogICAgIGNvbmQgPSA0MjsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJmNvbmQpID09
IDEpOwpAQCAtNzc3MSw3ICs3NzY4LDcgQEAgdm9pZCB0ZXN0QnJhbmNoTG9hZDMyKCkKICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGludDMy
X3QgY29uZDsKICAgICBjb25kID0gNDI7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZj
b25kKSA9PSAxKTsKQEAgLTc4MDEsNyArNzc5OCw3IEBAIHZvaWQgdGVzdEJyYW5jaExvYWQ4Uygp
CiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2Rl
ID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAg
ICBpbnQ4X3QgY29uZDsKICAgICBjb25kID0gLTE7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNv
ZGUsICZjb25kKSA9PSAxKTsKQEAgLTc4MzEsNyArNzgyOCw3IEBAIHZvaWQgdGVzdEJyYW5jaExv
YWQ4WigpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNl
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKICAgICB1aW50OF90IGNvbmQ7CiAgICAgY29uZCA9IDE7CiAgICAgQ0hFQ0soaW52b2tlPGlu
dD4oKmNvZGUsICZjb25kKSA9PSAxKTsKQEAgLTc4NjEsNyArNzg1OCw3IEBAIHZvaWQgdGVzdEJy
YW5jaExvYWQxNlMoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICBl
bHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAot
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAgICAgaW50MTZfdCBjb25kOwogICAgIGNvbmQgPSAtMTsKICAgICBDSEVDSyhp
bnZva2U8aW50PigqY29kZSwgJmNvbmQpID09IDEpOwpAQCAtNzg5MSw3ICs3ODg4LDcgQEAgdm9p
ZCB0ZXN0QnJhbmNoTG9hZDE2WigpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAg
ICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
MCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICB1aW50MTZfdCBjb25kOwogICAgIGNvbmQgPSAxOwogICAg
IENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmY29uZCkgPT0gMSk7CkBAIC03OTMxLDcgKzc5Mjgs
NyBAQCB2b2lkIHRlc3RCcmFuY2g4V2l0aExvYWQ4WkluZGV4KCkKICAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIHVpbnQzMl90IGNvbmQ7CiAg
ICAgY29uZCA9IDB4ZmZmZmZmZmZVOyAvLyBBbGwgYnl0ZXMgYXJlIDB4ZmYuCiAgICAgQ0hFQ0so
aW52b2tlPGludD4oKmNvZGUsICZjb25kIC0gMiwgKHNpemVvZih1aW50MzJfdCkgKiAyKSA+PiBs
b2dTY2FsZSkgPT0gMSk7CkBAIC04MDY4LDcgKzgwNjUsNyBAQCB2b2lkIHRlc3RDb21wbGV4KHVu
c2lnbmVkIG51bVZhcnMsIHVuc2lnCiAKICAgICBjdXJyZW50LT5hcHBlbmROZXdDb250cm9sVmFs
dWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgdmFyc1swXSk7CiAKLSAgICBjb21waWxlKHByb2Mp
OworICAgIGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgZG91YmxlIGFmdGVyID0gbW9ub3Rvbmlj
YWxseUluY3JlYXNpbmdUaW1lTVMoKTsKICAgICBkYXRhTG9nKHRvQ1N0cmluZygiICAgIFRoYXQg
dG9vayAiLCBhZnRlciAtIGJlZm9yZSwgIiBtcy5cbiIpKTsKQEAgLTg2MTcsNyArODYxNCw3IEBA
IHZvaWQgdGVzdFNpbXBsZUNoZWNrKCkKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
CiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIAogICAgIENIRUNL
KGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29k
ZSwgMSkgPT0gNDIpOwpAQCAtODYzNiw3ICs4NjMzLDcgQEAgdm9pZCB0ZXN0Q2hlY2tGYWxzZSgp
CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAogICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
MCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICAKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSkgPT0g
MCk7CiB9CkBAIC04NjYyLDcgKzg2NTksNyBAQCB2b2lkIHRlc3RDaGVja1RydWUoKQogICAgIHJv
b3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAot
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAgICAgCiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUpID09IDQyKTsKIH0K
QEAgLTg2OTMsNyArODY5MCw3IEBAIHZvaWQgdGVzdENoZWNrTGVzc1RoYW4oKQogICAgIHJvb3Qt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
cm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAg
IGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CiAgICAgCiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDQyKSA9PSAwKTsKICAg
ICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMTAwMCkgPT0gMCk7CkBAIC04NzM5LDcgKzg3MzYs
NyBAQCB2b2lkIHRlc3RDaGVja01lZ2FDb21ibygpCiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKAogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGlu
dDhfdCB2YWx1ZTsKICAgICB2YWx1ZSA9IDQyOwpAQCAtODc5NCw3ICs4NzkxLDcgQEAgdm9pZCB0
ZXN0Q2hlY2tUcmlja3lNZWdhQ29tYm8oKQogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZSgKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBpbnQ4X3Qg
dmFsdWU7CiAgICAgdmFsdWUgPSA0MjsKQEAgLTg4NTgsNyArODg1NSw3IEBAIHZvaWQgdGVzdENo
ZWNrVHdvTWVnYUNvbWJvcygpCiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAogICAg
ICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGludDhfdCB2YWx1ZTsK
ICAgICB2YWx1ZSA9IDQyOwpAQCAtODkzOSw3ICs4OTM2LDcgQEAgdm9pZCB0ZXN0Q2hlY2tUd29O
b25SZWR1bmRhbnRNZWdhQ29tYm9zKAogICAgIGVsc2VDYXNlLT5hcHBlbmROZXdDb250cm9sVmFs
dWUoCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIGVsc2VDYXNlLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNDUpKTsKIAotICAgIGF1dG8gY29kZSA9IGNv
bXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBp
bnQ4X3QgdmFsdWU7CiAKQEAgLTg5OTQsNyArODk5MSw3IEBAIHZvaWQgdGVzdENoZWNrQWRkSW1t
KCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tBZGQpKTsKIAotICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CiAKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMCkgPT0gNDIuMCk7CiAgICAgQ0hF
Q0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDEpID09IDQzLjApOwpAQCAtOTAzMCw3ICs5MDI3LDcg
QEAgdm9pZCB0ZXN0Q2hlY2tBZGRJbW1Db21tdXRlKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmln
aW4oKSwgY2hlY2tBZGQpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8ZG91Ymxl
PigqY29kZSwgMCkgPT0gNDIuMCk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDEp
ID09IDQzLjApOwpAQCAtOTA2NSw3ICs5MDYyLDcgQEAgdm9pZCB0ZXN0Q2hlY2tBZGRJbW1Tb21l
UmVnaXN0ZXIoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9yaWdpbigpLCBjaGVja0FkZCkpOwogCi0g
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwKSA9PSA0Mi4wKTsK
ICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMSkgPT0gNDMuMCk7CkBAIC05MTAyLDcg
KzkwOTksNyBAQCB2b2lkIHRlc3RDaGVja0FkZCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2lu
KCksIGNoZWNrQWRkKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4o
KmNvZGUsIDAsIDQyKSA9PSA0Mi4wKTsKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwg
MSwgNDIpID09IDQzLjApOwpAQCAtOTEzNSw3ICs5MTMyLDcgQEAgdm9pZCB0ZXN0Q2hlY2tBZGQ2
NCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrQWRkKSk7CiAKLSAgICBhdXRv
IGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDBsbCwgNDJsbCkgPT0gNDIuMCk7
CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDFsbCwgNDJsbCkgPT0gNDMuMCk7CkBA
IC05MTU2LDcgKzkxNTMsNyBAQCB2b2lkIHRlc3RDaGVja0FkZEZvbGQoaW50IGEsIGludCBiKQog
ICAgICAgICB9KTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgY2hlY2tBZGQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxp
bnQ+KCpjb2RlKSA9PSBhICsgYik7CiB9CkBAIC05MTc3LDcgKzkxNzQsNyBAQCB2b2lkIHRlc3RD
aGVja0FkZEZvbGRGYWlsKGludCBhLCBpbnQgYikKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIGNoZWNrQWRkKTsKIAot
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSkgPT0gNDIpOwogfQpAQCAt
OTI4NCw3ICs5MjgxLDcgQEAgdm9pZCB0ZXN0Q2hlY2tBZGRTZWxmT3ZlcmZsb3c2NCgpCiAKICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2hl
Y2tBZGQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxpbnQ2NF90PigqY29kZSwg
MGxsKSA9PSAwKTsKICAgICBDSEVDSyhpbnZva2U8aW50NjRfdD4oKmNvZGUsIDFsbCkgPT0gMik7
CkBAIC05MzE1LDcgKzkzMTIsNyBAQCB2b2lkIHRlc3RDaGVja0FkZFNlbGZPdmVyZmxvdzMyKCkK
IAogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBjaGVja0FkZCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGludDMyX3Q+KCpj
b2RlLCAwbGwpID09IDApOwogICAgIENIRUNLKGludm9rZTxpbnQzMl90PigqY29kZSwgMWxsKSA9
PSAyKTsKQEAgLTkzNTAsNyArOTM0Nyw3IEBAIHZvaWQgdGVzdENoZWNrU3ViSW1tKCkKICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tTdWIpKTsKIAotICAgIGF1dG8gY29kZSA9IGNv
bXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBD
SEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMCkgPT0gLTQyLjApOwogICAgIENIRUNLKGludm9r
ZTxkb3VibGU+KCpjb2RlLCAxKSA9PSAtNDEuMCk7CkBAIC05MzkyLDcgKzkzODksNyBAQCB2b2lk
IHRlc3RDaGVja1N1YkJhZEltbSgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNr
U3ViKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDAp
ID09IC1zdGF0aWNfY2FzdDxkb3VibGU+KGJhZEltbSkpOwogICAgIENIRUNLKGludm9rZTxkb3Vi
bGU+KCpjb2RlLCAtMSkgPT0gLXN0YXRpY19jYXN0PGRvdWJsZT4oYmFkSW1tKSAtIDEpOwpAQCAt
OTQyOSw3ICs5NDI2LDcgQEAgdm9pZCB0ZXN0Q2hlY2tTdWIoKQogICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLAogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0Qs
IE9yaWdpbigpLCBjaGVja1N1YikpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxk
b3VibGU+KCpjb2RlLCAwLCA0MikgPT0gLTQyLjApOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+
KCpjb2RlLCAxLCA0MikgPT0gLTQxLjApOwpAQCAtOTQ2Nyw3ICs5NDY0LDcgQEAgdm9pZCB0ZXN0
Q2hlY2tTdWI2NCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrU3ViKSk7CiAK
LSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDBsbCwgNDJsbCkg
PT0gLTQyLjApOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAxbGwsIDQybGwpID09
IC00MS4wKTsKQEAgLTk0ODgsNyArOTQ4NSw3IEBAIHZvaWQgdGVzdENoZWNrU3ViRm9sZChpbnQg
YSwgaW50IGIpCiAgICAgICAgIH0pOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjaGVja1N1Yik7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hF
Q0soaW52b2tlPGludD4oKmNvZGUpID09IGEgLSBiKTsKIH0KQEAgLTk1MDksNyArOTUwNiw3IEBA
IHZvaWQgdGVzdENoZWNrU3ViRm9sZEZhaWwoaW50IGEsIGludCBiKQogICAgICAgICB9KTsKICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2hl
Y2tTdWIpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlKSA9PSA0
Mik7CiB9CkBAIC05NTM4LDcgKzk1MzUsNyBAQCB2b2lkIHRlc3RDaGVja05lZygpCiAgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrTmVnKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hF
Q0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDApID09IDAuMCk7CiAgICAgQ0hFQ0soaW52b2tlPGRv
dWJsZT4oKmNvZGUsIDEpID09IC0xLjApOwpAQCAtOTU2OCw3ICs5NTY1LDcgQEAgdm9pZCB0ZXN0
Q2hlY2tOZWc2NCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrTmVnKSk7CiAK
LSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDBsbCkgPT0gMC4w
KTsKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMWxsKSA9PSAtMS4wKTsKQEAgLTk2
MDUsNyArOTYwMiw3IEBAIHZvaWQgdGVzdENoZWNrTXVsKCkKICAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBP
cmlnaW4oKSwgY2hlY2tNdWwpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Cisg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8ZG91
YmxlPigqY29kZSwgMCwgNDIpID09IDAuMCk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNv
ZGUsIDEsIDQyKSA9PSA0Mi4wKTsKQEAgLTk2NDYsNyArOTY0Myw3IEBAIHZvaWQgdGVzdENoZWNr
TXVsTWVtb3J5KCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tNdWwpKTsKIAot
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAKICAgICBsZWZ0ID0gMDsKICAgICByaWdodCA9IDQyOwpAQCAtOTY5Myw3ICs5
NjkwLDcgQEAgdm9pZCB0ZXN0Q2hlY2tNdWwyKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmln
aW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4o
KSwgY2hlY2tNdWwpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigq
Y29kZSwgMCkgPT0gMC4wKTsKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMSkgPT0g
Mi4wKTsKQEAgLTk3MjYsNyArOTcyMyw3IEBAIHZvaWQgdGVzdENoZWNrTXVsNjQoKQogICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIElUb0QsIE9yaWdpbigpLCBjaGVja011bCkpOwogCi0gICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENI
RUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwLCA0MikgPT0gMC4wKTsKICAgICBDSEVDSyhpbnZv
a2U8ZG91YmxlPigqY29kZSwgMSwgNDIpID09IDQyLjApOwpAQCAtOTc0Nyw3ICs5NzQ0LDcgQEAg
dm9pZCB0ZXN0Q2hlY2tNdWxGb2xkKGludCBhLCBpbnQgYikKICAgICAgICAgfSk7CiAgICAgcm9v
dC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIGNoZWNrTXVs
KTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29t
cGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSkgPT0gYSAqIGIp
OwogfQpAQCAtOTc2OCw3ICs5NzY1LDcgQEAgdm9pZCB0ZXN0Q2hlY2tNdWxGb2xkRmFpbChpbnQg
YSwgaW50IGIpCiAgICAgICAgIH0pOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjaGVja011bCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hF
Q0soaW52b2tlPGludD4oKmNvZGUpID09IDQyKTsKIH0KQEAgLTk4ODQsNyArOTg4MSw3IEBAIHZv
aWQgdGVzdENoZWNrTXVsNjRTU2hyKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwK
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hl
Y2tNdWwpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwg
MGxsLCA0MmxsKSA9PSAwLjApOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAxbGws
IDQybGwpID09IDAuMCk7CkBAIC0xMDczNCw3ICsxMDczMSw3IEBAIHZvaWQgdGVzdFN3aXRjaCh1
bnNpZ25lZCBkZWdyZWUsIHVuc2lnbmUKICAgICAgICAgc3dpdGNoVmFsdWUtPmFwcGVuZENhc2Uo
U3dpdGNoQ2FzZShnYXAgKiBpLCBGcmVxdWVudGVkQmxvY2sobmV3QmxvY2spKSk7CiAgICAgfQog
Ci0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxl
UHJvYyhwcm9jKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZWdyZWU7ICsraSkg
ewogICAgICAgICBDSEVDSyhpbnZva2U8aW50MzJfdD4oKmNvZGUsIGkgKiBnYXAsIDQyLCAxMSkg
PT0gKChpICYgMSkgPyAxMSA6IDQyKSk7CkBAIC0xMDc3Nyw3ICsxMDc3NCw3IEBAIHZvaWQgdGVz
dFN3aXRjaENoaWxsRGl2KHVuc2lnbmVkIGRlZ3JlZSwKICAgICAgICAgc3dpdGNoVmFsdWUtPmFw
cGVuZENhc2UoU3dpdGNoQ2FzZShnYXAgKiBpLCBGcmVxdWVudGVkQmxvY2sobmV3QmxvY2spKSk7
CiAgICAgfQogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZWdy
ZWU7ICsraSkgewogICAgICAgICBkYXRhTG9nKCJpID0gIiwgaSwgIlxuIik7CkBAIC0xMDgxNiw3
ICsxMDgxMyw3IEBAIHZvaWQgdGVzdFN3aXRjaFRhcmdldHRpbmdTYW1lQmxvY2soKQogICAgIHN3
aXRjaFZhbHVlLT5hcHBlbmRDYXNlKFN3aXRjaENhc2UoMywgRnJlcXVlbnRlZEJsb2NrKG90aGVy
VGFyZ2V0KSkpOwogICAgIHN3aXRjaFZhbHVlLT5hcHBlbmRDYXNlKFN3aXRjaENhc2UoMTMsIEZy
ZXF1ZW50ZWRCbG9jayhvdGhlclRhcmdldCkpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgMjA7ICsraSkgewogICAgICAgICBpbnQzMl90IGV4cGVjdGVkID0g
KGkgPT0gMyB8fCBpID09IDEzKSA/IDQyIDogNTsKQEAgLTEwODQ0LDcgKzEwODQxLDcgQEAgdm9p
ZCB0ZXN0U3dpdGNoVGFyZ2V0dGluZ1NhbWVCbG9ja0ZvbGRQYQogICAgIHN3aXRjaFZhbHVlLT5h
cHBlbmRDYXNlKFN3aXRjaENhc2UoMywgRnJlcXVlbnRlZEJsb2NrKG90aGVyVGFyZ2V0KSkpOwog
ICAgIHN3aXRjaFZhbHVlLT5hcHBlbmRDYXNlKFN3aXRjaENhc2UoMTMsIEZyZXF1ZW50ZWRCbG9j
ayhvdGhlclRhcmdldCkpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgMjA7ICsraSkgewogICAgICAgICBpbnQzMl90IGV4cGVjdGVkID0gKGkgPT0gMyB8fCBp
ID09IDEzKSA/IGkgOiA0MjsKQEAgLTExMjAyLDcgKzExMTk5LDcgQEAgdm9pZCB0ZXN0QmFzaWNT
ZWxlY3QoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpLAogICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjIpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnRwdHJfdD4oKmNv
ZGUsIDQyLCAxLCAyKSA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCA0
MiwgNjQyNDYyLCAzMjUzMykgPT0gNjQyNDYyKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+
KCpjb2RlLCA0MywgMSwgMikgPT0gMik7CkBAIC0xMTIyMSw3ICsxMTIxOCw3IEBAIHZvaWQgdGVz
dFNlbGVjdFRlc3QoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpLAogICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjIpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnRwdHJf
dD4oKmNvZGUsIDQyLCAxLCAyKSA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpj
b2RlLCA0MiwgNjQyNDYyLCAzMjUzMykgPT0gNjQyNDYyKTsKICAgICBDSEVDSyhpbnZva2U8aW50
cHRyX3Q+KCpjb2RlLCAwLCAxLCAyKSA9PSAyKTsKQEAgLTExMjQzLDcgKzExMjQwLDcgQEAgdm9p
ZCB0ZXN0U2VsZWN0Q29tcGFyZURvdWJsZSgpCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCks
CiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBp
bGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0so
aW52b2tlPGludHB0cl90PigqY29kZSwgLTEuMCwgMS4wLCAxLCAyKSA9PSAxKTsKICAgICBDSEVD
SyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCA0Mi41LCA0Mi41MSwgNjQyNDYyLCAzMjUzMykgPT0g
NjQyNDYyKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBQTmFOLCAwLjAsIDEs
IDIpID09IDIpOwpAQCAtMTEzNDAsNyArMTEzMzcsNyBAQCB2b2lkIHRlc3RTZWxlY3REb3VibGUo
KQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjApLAogICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQ
UjEpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCA0Miwg
MS41LCAyLjYpID09IDEuNSk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDQyLCA2
NDI0NjIuNywgMzI1MzMuOCkgPT0gNjQyNDYyLjcpOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+
KCpjb2RlLCA0MywgMS45LCAyLjApID09IDIuMCk7CkBAIC0xMTM1OSw3ICsxMTM1Niw3IEBAIHZv
aWQgdGVzdFNlbGVjdERvdWJsZVRlc3QoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjApLAog
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjEpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxl
KHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGlu
dm9rZTxkb3VibGU+KCpjb2RlLCA0MiwgMS41LCAyLjYpID09IDEuNSk7CiAgICAgQ0hFQ0soaW52
b2tlPGRvdWJsZT4oKmNvZGUsIDQyLCA2NDI0NjIuNywgMzI1MzMuOCkgPT0gNjQyNDYyLjcpOwog
ICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwLCAxLjksIDIuMCkgPT0gMi4wKTsKQEAg
LTExMzgxLDcgKzExMzc4LDcgQEAgdm9pZCB0ZXN0U2VsZWN0RG91YmxlQ29tcGFyZURvdWJsZSgp
CiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMiksCiAgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBS
MykpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIC0xLjAs
IDEuMCwgMS4xLCAyLjIpID09IDEuMSk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUs
IDQyLjUsIDQyLjUxLCA2NDI0NjIuMywgMzI1MzMuNCkgPT0gNjQyNDYyLjMpOwogICAgIENIRUNL
KGludm9rZTxkb3VibGU+KCpjb2RlLCBQTmFOLCAwLjAsIDEuNSwgMi42KSA9PSAyLjYpOwpAQCAt
MTE0NjcsNyArMTE0NjQsNyBAQCB2b2lkIHRlc3RTZWxlY3REb3VibGVDb21wYXJlRG91YmxlKGJv
b2wgCiAgICAgICAgICAgICAgICAgICAgIGFyZzEpLAogICAgICAgICAgICAgICAgIGFyZzIsCiAg
ICAgICAgICAgICAgICAgYXJnMykpOwotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2Mp
OworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgICAgICBmb3Ig
KGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91YmxlPigpKSB7CiAgICAgICAg
ICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRvdWJsZT4oKSkg
ewpAQCAtMTE0OTQsNyArMTE0OTEsNyBAQCB2b2lkIHRlc3RTZWxlY3REb3VibGVDb21wYXJlRG91
YmxlKGJvb2wgCiAgICAgICAgIGtlZXBWYWx1ZXNMaXZlLT5zZXRHZW5lcmF0b3IoWyZdIChDQ2Fs
bEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7IH0pOwogCiAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBy
ZXN1bHQpOwotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgICAgICBmb3IgKGF1dG8mIGxlZnQgOiBm
bG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91YmxlPigpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8m
IHJpZ2h0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRvdWJsZT4oKSkgewpAQCAtMTE1MjEsNyAr
MTE1MTgsNyBAQCB2b2lkIHRlc3RTZWxlY3REb3VibGVDb21wYXJlRG91YmxlKGJvb2wgCiAgICAg
ICAgIGtlZXBWYWx1ZXNMaXZlLT5zZXRHZW5lcmF0b3IoWyZdIChDQ2FsbEhlbHBlcnMmLCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7IH0pOwogCiAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwotICAgICAg
ICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxl
UHJvYyhwcm9jKTsKIAogICAgICAgICBmb3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3Bl
cmFuZHM8ZG91YmxlPigpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRp
bmdQb2ludE9wZXJhbmRzPGRvdWJsZT4oKSkgewpAQCAtMTE1NDksNyArMTE1NDYsNyBAQCB2b2lk
IHRlc3RTZWxlY3REb3VibGVDb21wYXJlRG91YmxlKGJvb2wgCiAgICAgICAgIGtlZXBWYWx1ZXNM
aXZlLT5zZXRHZW5lcmF0b3IoWyZdIChDQ2FsbEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmKSB7IH0pOwogCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwotICAgICAgICBhdXRvIGNvZGUgPSBj
b21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAog
ICAgICAgICBmb3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91YmxlPigp
KSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRz
PGRvdWJsZT4oKSkgewpAQCAtMTE1NzUsNyArMTE1NzIsNyBAQCB2b2lkIHRlc3RTZWxlY3REb3Vi
bGVDb21wYXJlRG91YmxlKGJvb2wgCiAgICAgICAgICAgICAgICAgICAgIGFyZzEpLAogICAgICAg
ICAgICAgICAgIGFyZzIsCiAgICAgICAgICAgICAgICAgYXJnMCkpOwotICAgICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKIAogICAgICAgICBmb3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91
YmxlPigpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9w
ZXJhbmRzPGRvdWJsZT4oKSkgewpAQCAtMTE2MDEsNyArMTE1OTgsNyBAQCB2b2lkIHRlc3RTZWxl
Y3REb3VibGVDb21wYXJlRG91YmxlKGJvb2wgCiAgICAgICAgIGtlZXBWYWx1ZXNMaXZlLT5zZXRH
ZW5lcmF0b3IoWyZdIChDQ2FsbEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7IH0pOwogCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgICAgICBm
b3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91YmxlPigpKSB7CiAgICAg
ICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRvdWJsZT4o
KSkgewpAQCAtMTE2NTMsNyArMTE2NTAsNyBAQCB2b2lkIHRlc3RTZWxlY3RGbG9hdENvbXBhcmVG
bG9hdChib29sICgqCiAgICAgICAgICAgICAgICAgICAgIGFyZzEpLAogICAgICAgICAgICAgICAg
IGFyZzIsCiAgICAgICAgICAgICAgICAgYXJnMykpOwotICAgICAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAg
ICAgICBmb3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpIHsK
ICAgICAgICAgICAgIGZvciAoYXV0byYgcmlnaHQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8Zmxv
YXQ+KCkpIHsKQEAgLTExNjg4LDcgKzExNjg1LDcgQEAgdm9pZCB0ZXN0U2VsZWN0RmxvYXRDb21w
YXJlRmxvYXQoYm9vbCAoKgogICAgICAgICBrZWVwVmFsdWVzTGl2ZS0+c2V0R2VuZXJhdG9yKFsm
XSAoQ0NhbGxIZWxwZXJzJiwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeyB9KTsK
IAogICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgcmVzdWx0KTsKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICAgICAgZm9yIChhdXRvJiBs
ZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZsb2F0PigpKSB7CiAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZsb2F0PigpKSB7CkBAIC0xMTcy
Myw3ICsxMTcyMCw3IEBAIHZvaWQgdGVzdFNlbGVjdEZsb2F0Q29tcGFyZUZsb2F0KGJvb2wgKCoK
ICAgICAgICAga2VlcFZhbHVlc0xpdmUtPnNldEdlbmVyYXRvcihbJl0gKENDYWxsSGVscGVycyYs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsgfSk7CiAKICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7Ci0g
ICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOwogCiAgICAgICAgIGZvciAoYXV0byYgbGVmdCA6IGZsb2F0aW5nUG9p
bnRPcGVyYW5kczxmbG9hdD4oKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZs
b2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSkgewpAQCAtMTE3NTksNyArMTE3NTYsNyBAQCB2
b2lkIHRlc3RTZWxlY3RGbG9hdENvbXBhcmVGbG9hdChib29sICgqCiAgICAgICAgIGtlZXBWYWx1
ZXNMaXZlLT5zZXRHZW5lcmF0b3IoWyZdIChDQ2FsbEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7IH0pOwogCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwotICAgICAgICBhdXRvIGNvZGUg
PSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
IAogICAgICAgICBmb3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+
KCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgcmlnaHQgOiBmbG9hdGluZ1BvaW50T3BlcmFu
ZHM8ZmxvYXQ+KCkpIHsKQEAgLTExNzkxLDcgKzExNzg4LDcgQEAgdm9pZCB0ZXN0U2VsZWN0Rmxv
YXRDb21wYXJlRmxvYXQoYm9vbCAoKgogICAgICAgICAgICAgICAgICAgICBhcmcxKSwKICAgICAg
ICAgICAgICAgICBhcmcyLAogICAgICAgICAgICAgICAgIGFyZzApKTsKLSAgICAgICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CiAKICAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZs
b2F0PigpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9w
ZXJhbmRzPGZsb2F0PigpKSB7CkBAIC0xMTgyMyw3ICsxMTgyMCw3IEBAIHZvaWQgdGVzdFNlbGVj
dEZsb2F0Q29tcGFyZUZsb2F0KGJvb2wgKCoKICAgICAgICAga2VlcFZhbHVlc0xpdmUtPnNldEdl
bmVyYXRvcihbJl0gKENDYWxsSGVscGVycyYsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsgfSk7CiAKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIHJlc3VsdCk7Ci0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJv
Yyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgICAgIGZv
ciAoYXV0byYgbGVmdCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSkgewogICAgICAg
ICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSkg
ewpAQCAtMTE4NjAsNyArMTE4NTcsNyBAQCB2b2lkIHRlc3RTZWxlY3RGb2xkKGludHB0cl90IHZh
bHVlKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAogICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnRwdHJfdD4oKmNvZGUs
IDEsIDIpID09ICh2YWx1ZSA9PSA0MiA/IDEgOiAyKSk7CiAgICAgQ0hFQ0soaW52b2tlPGludHB0
cl90PigqY29kZSwgNjQyNDYyLCAzMjUzMykgPT0gKHZhbHVlID09IDQyID8gNjQyNDYyIDogMzI1
MzMpKTsKIH0KQEAgLTExODgzLDcgKzExODgwLDcgQEAgdm9pZCB0ZXN0U2VsZWN0SW52ZXJ0KCkK
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIy
KSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCA0Miwg
MSwgMikgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwgNDIsIDY0MjQ2
MiwgMzI1MzMpID09IDY0MjQ2Mik7CiAgICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwg
NDMsIDEsIDIpID09IDIpOwpAQCAtMTE5MjYsNyArMTE5MjMsNyBAQCB2b2lkIHRlc3RDaGVja1Nl
bGVjdCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwog
ICAgIENIRUNLKGdlbmVyYXRpb25Db3VudCA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8aW50Pigq
Y29kZSwgdHJ1ZSkgPT0gMCk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIGZhbHNlKSA9
PSA2NjYpOwpAQCAtMTE5OTcsNyArMTE5OTQsNyBAQCB2b2lkIHRlc3RDaGVja1NlbGVjdENoZWNr
U2VsZWN0KCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CiAgICAgQ0hFQ0soZ2VuZXJhdGlvbkNvdW50ID09IDEpOwogICAgIENIRUNLKGdlbmVyYXRpb25D
b3VudDIgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIHRydWUsIHRydWUpID09
IDApOwpAQCAtMTIwNDMsNyArMTIwNDAsNyBAQCB2b2lkIHRlc3RDaGVja1NlbGVjdEFuZENTRSgp
CiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYWRkVmFsdWUsIGFkZFZhbHVlMikpOwogCi0g
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKICAgICBDSEVDSyhnZW5lcmF0aW9uQ291bnQgPT0gMSk7CiAgICAgQ0hFQ0soaW52
b2tlPGludD4oKmNvZGUsIHRydWUpID09IDApOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2Rl
LCBmYWxzZSkgPT0gNjY2KTsKQEAgLTEyNDUyLDcgKzEyNDQ5LDcgQEAgdm9pZCB0ZXN0VHJpdmlh
bEluZmluaXRlTG9vcCgpCiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1
bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcCkpOwogICAgIGxvb3AtPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3Ap
KTsKIAotICAgIGNvbXBpbGUocHJvYyk7CisgICAgY29tcGlsZVByb2MocHJvYyk7CiB9CiAKIHZv
aWQgdGVzdEZvbGRQYXRoRXF1YWwoKQpAQCAtMTI0NzcsNyArMTI0NzQsNyBAQCB2b2lkIHRlc3RG
b2xkUGF0aEVxdWFsKCkKICAgICAgICAgZWxzZUJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KAogICAg
ICAgICAgICAgcHJvYywgRXF1YWwsIE9yaWdpbigpLCBhcmcsIGVsc2VCbG9jay0+YXBwZW5kTmV3
PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSkpOwogCi0gICAgYXV0byBjb2RlID0g
Y29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBD
SEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCAwKSA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8
aW50cHRyX3Q+KCpjb2RlLCAxKSA9PSAwKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpj
b2RlLCA0MikgPT0gMCk7CkBAIC0xMjQ5NCw3ICsxMjQ5MSw3IEBAIHZvaWQgdGVzdExTaGlmdFNl
bGYzMigpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgYXJnLCBhcmcpKTsKIAotICAgIGF1
dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CiAKICAgICBhdXRvIGNoZWNrID0gWyZdIChpbnQzMl90IHZhbHVlKSB7CiAgICAgICAgIENI
RUNLKGludm9rZTxpbnQzMl90PigqY29kZSwgdmFsdWUpID09IHZhbHVlIDw8ICh2YWx1ZSAmIDMx
KSk7CkBAIC0xMjUxNyw3ICsxMjUxNCw3IEBAIHZvaWQgdGVzdFJTaGlmdFNlbGYzMigpCiAgICAg
ICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgU1NociwgT3JpZ2luKCksIGFyZywgYXJnKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBj
b21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAg
YXV0byBjaGVjayA9IFsmXSAoaW50MzJfdCB2YWx1ZSkgewogICAgICAgICBDSEVDSyhpbnZva2U8
aW50MzJfdD4oKmNvZGUsIHZhbHVlKSA9PSB2YWx1ZSA+PiAodmFsdWUgJiAzMSkpOwpAQCAtMTI1
NDAsNyArMTI1MzcsNyBAQCB2b2lkIHRlc3RVUlNoaWZ0U2VsZjMyKCkKICAgICAgICAgcHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBa
U2hyLCBPcmlnaW4oKSwgYXJnLCBhcmcpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJv
Yyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIGNoZWNr
ID0gWyZdICh1aW50MzJfdCB2YWx1ZSkgewogICAgICAgICBDSEVDSyhpbnZva2U8dWludDMyX3Q+
KCpjb2RlLCB2YWx1ZSkgPT0gdmFsdWUgPj4gKHZhbHVlICYgMzEpKTsKQEAgLTEyNTYyLDcgKzEy
NTU5LDcgQEAgdm9pZCB0ZXN0TFNoaWZ0U2VsZjY0KCkKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKICAgICAgICAgICAgIHByb2MsIFNobCwgT3JpZ2luKCksIGFyZywgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksIGFyZykpKTsKIAotICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CiAKICAgICBhdXRvIGNoZWNrID0gWyZdIChpbnQ2NF90IHZhbHVlKSB7CiAgICAgICAgIENIRUNL
KGludm9rZTxpbnQ2NF90PigqY29kZSwgdmFsdWUpID09IHZhbHVlIDw8ICh2YWx1ZSAmIDYzKSk7
CkBAIC0xMjU4Niw3ICsxMjU4Myw3IEBAIHZvaWQgdGVzdFJTaGlmdFNlbGY2NCgpCiAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCiAgICAgICAgICAgICBwcm9jLCBTU2hyLCBPcmlnaW4o
KSwgYXJnLCByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwgYXJn
KSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gY2hlY2sgPSBbJl0gKGludDY0X3QgdmFsdWUp
IHsKICAgICAgICAgQ0hFQ0soaW52b2tlPGludDY0X3Q+KCpjb2RlLCB2YWx1ZSkgPT0gdmFsdWUg
Pj4gKHZhbHVlICYgNjMpKTsKQEAgLTEyNjEwLDcgKzEyNjA3LDcgQEAgdm9pZCB0ZXN0VVJTaGlm
dFNlbGY2NCgpCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCiAgICAgICAgICAgICBw
cm9jLCBaU2hyLCBPcmlnaW4oKSwgYXJnLCByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRy
dW5jLCBPcmlnaW4oKSwgYXJnKSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gY2hlY2sgPSBb
Jl0gKHVpbnQ2NF90IHZhbHVlKSB7CiAgICAgICAgIENIRUNLKGludm9rZTx1aW50NjRfdD4oKmNv
ZGUsIHZhbHVlKSA9PSB2YWx1ZSA+PiAodmFsdWUgJiA2MykpOwpAQCAtMTI2NDMsNyArMTI2NDAs
NyBAQCB2b2lkIHRlc3RQYXRjaHBvaW50RG91YmxlUmVncygpCiAKICAgICByb290LT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7CiAKLSAg
ICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9j
KHByb2MpOwogICAgIENIRUNLKG51bUNhbGxzID09IDEpOwogICAgIENIRUNLKGludm9rZTxkb3Vi
bGU+KCpjb2RlLCA0Mi41KSA9PSA0Mi41KTsKIH0KQEAgLTEyNjc2LDcgKzEyNjczLDcgQEAgdm9p
ZCB0ZXN0U3BpbGxEZWZTbWFsbGVyVGhhblVzZSgpCiAgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgZm9yY2VTcGlsbCwgYXJnNjQp
OwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCByZXN1bHQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNv
ZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50NjRfdD4oKmNvZGUs
IDB4ZmZmZmZmZmYwMDAwMDAwMCkgPT0gMCk7CiB9CiAKQEAgLTEyNzMwLDcgKzEyNzI3LDcgQEAg
dm9pZCB0ZXN0U3BpbGxVc2VMYXJnZXJUaGFuRGVmKCkKICAgICBlbHNlUmVzdWx0LT5zZXRQaGko
cGhpKTsKICAgICB0YWlsLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgcGhpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBj
b2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52b2tlPHVpbnQ2NF90PigqY29k
ZSwgMSwgMHhmZmZmZmZmZjAwMDAwMDAwKSA9PSAwKTsKICAgICBDSEVDSyhpbnZva2U8dWludDY0
X3Q+KCpjb2RlLCAwLCAweGZmZmZmZmZmMDAwMDAwMDApID09IDB4ZmZmZmZmZmYwMDAwMDAwMCk7
CiAKQEAgLTEyODEyLDcgKzEyODA5LDcgQEAgdm9pZCB0ZXN0TGF0ZVJlZ2lzdGVyKCkKICAgICAg
ICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIHNlY29uZFBhdGNocG9pbnQpOwogICAgIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52
b2tlPHVpbnQ2NF90PigqY29kZSkgPT0gcmVzdWx0KTsKIH0KIApAQCAtMTI5ODYsNyArMTI5ODMs
NyBAQCB2b2lkIHRlc3RJbnRlcnByZXRlcigpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksCiAgICAgICAgIHN0b3AtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBwb2lu
dGVyVHlwZSgpLCAwKSk7CiAgICAgCi0gICAgYXV0byBpbnRlcnByZXRlciA9IGNvbXBpbGUocHJv
Yyk7CisgICAgYXV0byBpbnRlcnByZXRlciA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIAogICAg
IFZlY3RvcjxpbnRwdHJfdD4gZGF0YTsKICAgICBWZWN0b3I8aW50cHRyX3Q+IGNvZGU7CkBAIC0x
MzEzNiw3ICsxMzEzMyw3IEBAIHZvaWQgdGVzdEVudHJ5U3dpdGNoU2ltcGxlKCkKICAgICAKICAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7Ci0gICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIoaml0LCBudWxscHRyKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSk7CiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFiZWxUd28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBv
aW50TGFiZWwoMSkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVGhyZWUgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMikpOwpAQCAtMTMxNjksNyArMTMx
NjYsNyBAQCB2b2lkIHRlc3RFbnRyeVN3aXRjaE5vRW50cnlTd2l0Y2goKQogICAgIAogICAgIEND
YWxsSGVscGVycyBqaXQ7CiAgICAgZ2VuZXJhdGUocHJvYywgaml0KTsKLSAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoKnZtLCBqaXQsIG51bGxwdHIpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cihqaXQsIG51bGxwdHIpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25lID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDApKTsKICAgICBDb2RlTG9jYXRp
b25MYWJlbCBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRM
YWJlbCgxKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxUaHJlZSA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgyKSk7CkBAIC0xMzI1Niw3ICsxMzI1Myw3
IEBAIHZvaWQgdGVzdEVudHJ5U3dpdGNoV2l0aENvbW1vblBhdGhzKCkKICAgICAKICAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7Ci0gICAgTGlua0J1ZmZlciBs
aW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
aml0LCBudWxscHRyKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSk7CiAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgbGFiZWxUd28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFi
ZWwoMSkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVGhyZWUgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMikpOwpAQCAtMTMzNzMsNyArMTMzNzAsNyBA
QCB2b2lkIHRlc3RFbnRyeVN3aXRjaFdpdGhDb21tb25QYXRoc0FuZE5vCiAgICAgCiAgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwotICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KGppdCwgbnVsbHB0cik7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOwogICAgIENvZGVMb2NhdGlv
bkxhYmVsIGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExh
YmVsKDEpKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFRocmVlID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDIpKTsKQEAgLTEzNDUxLDcgKzEzNDQ4LDcg
QEAgdm9pZCB0ZXN0RW50cnlTd2l0Y2hMb29wKCkKICAgICAKICAgICBDQ2FsbEhlbHBlcnMgaml0
OwogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7Ci0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2
bSwgaml0LCBudWxscHRyKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRy
KTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxU
d28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMSkpOwogICAg
IApAQCAtMTM1MDAsNyArMTM0OTcsNyBAQCB2b2lkIHRlc3RTb21lRWFybHlSZWdpc3RlcigpCiAg
ICAgICAgIAogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIHBhdGNocG9pbnQpOwogICAgICAgICAKLSAgICAgICAgY29tcGlsZShwcm9jKTsKKyAg
ICAgICAgY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIENIRUNLKHJhbkZpcnN0UGF0Y2hwb2lu
dCk7CiAgICAgICAgIENIRUNLKHJhblNlY29uZFBhdGNocG9pbnQpOwogICAgIH07CkBAIC0xMzYx
NCw3ICsxMzYxMSw3IEBAIHZvaWQgdGVzdFRlcm1pbmFsUGF0Y2hwb2ludFRoYXROZWVkc1RvQmUK
ICAgICAKICAgICBzbG93UGF0aC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLCBzbG93UGF0aC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDIw
KSk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50PigqY29kZSksIDEw
KTsKIH0KIApAQCAtMTM3MDIsNyArMTM2OTksNyBAQCB2b2lkIHRlc3RUZXJtaW5hbFBhdGNocG9p
bnRUaGF0TmVlZHNUb0JlCiAgICAgT3B0aW9uczo6bWF4QjNUYWlsRHVwQmxvY2tTaXplKCkgPSAw
OwogICAgIE9wdGlvbnM6Om1heEIzVGFpbER1cEJsb2NrU3VjY2Vzc29ycygpID0gMDsKIAotICAg
IGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKmNvZGUsIDEpLCAxKTsKICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqY29kZSwgMCksIDApOwogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpjb2RlLCA0MiksIDY2Nik7CkBAIC0xMzc3Niw3ICsxMzc3Myw3IEBAIHZvaWQgdGVzdFBhdGNo
cG9pbnRUZXJtaW5hbFJldHVyblZhbHVlKGIKICAgICBzbG93UGF0aFVwc2lsb24tPnNldFBoaShw
aGkpOwogICAgIGNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCBwaGkpOwogICAgIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KmNvZGUsIDApLCAzMSk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKmNvZGUsIDEpLCAzMik7
CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKmNvZGUsIDQxKSwgNzIpOwpAQCAtMTM3OTQsNyAr
MTM3OTEsNyBAQCB2b2lkIHRlc3RNZW1vcnlGZW5jZSgpCiAgICAgcm9vdC0+YXBwZW5kTmV3PEZl
bmNlVmFsdWU+KHByb2MsIE9yaWdpbigpKTsKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdp
bigpLCBJbnQzMiwgNDIpKTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpjb2RlKSwgNDIpOwogICAgIGlmIChpc1g4NigpKQogICAgICAgICBjaGVja1VzZXNJbnN0
cnVjdGlvbigqY29kZSwgImxvY2sgb3IgJDB4MCwgKCVyc3ApIik7CkBAIC0xMzgxMyw3ICsxMzgx
MCw3IEBAIHZvaWQgdGVzdFN0b3JlRmVuY2UoKQogICAgIHJvb3QtPmFwcGVuZE5ldzxGZW5jZVZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgSGVhcFJhbmdlOjp0b3AoKSwgSGVhcFJhbmdlKCkpOwogICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcm9vdC0+YXBw
ZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDMyLCA0MikpOwogICAgIAotICAgIGF1
dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKmNvZGUpLCA0Mik7CiAgICAgY2hlY2tEb2Vz
Tm90VXNlSW5zdHJ1Y3Rpb24oKmNvZGUsICJsb2NrIik7CiAgICAgY2hlY2tEb2VzTm90VXNlSW5z
dHJ1Y3Rpb24oKmNvZGUsICJtZmVuY2UiKTsKQEAgLTEzODMwLDcgKzEzODI3LDcgQEAgdm9pZCB0
ZXN0TG9hZEZlbmNlKCkKICAgICByb290LT5hcHBlbmROZXc8RmVuY2VWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEhlYXBSYW5nZSgpLCBIZWFwUmFuZ2U6OnRvcCgpKTsKICAgICByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZEludENvbnN0YW50
KHByb2MsIE9yaWdpbigpLCBJbnQzMiwgNDIpKTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpjb2RlKSwgNDIpOwogICAgIGNoZWNrRG9lc05vdFVzZUluc3RydWN0
aW9uKCpjb2RlLCAibG9jayIpOwogICAgIGNoZWNrRG9lc05vdFVzZUluc3RydWN0aW9uKCpjb2Rl
LCAibWZlbmNlIik7CkBAIC0xNDA1NSw3ICsxNDA1Miw3IEBAIHZvaWQgdGVzdFBDT3JpZ2luTWFw
RG9lc250SW5zZXJ0Tm9wcygpCiAKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJl
dHVybiwgT3JpZ2luKCkpOwogCi0gICAgY29tcGlsZShwcm9jKTsKKyAgICBjb21waWxlUHJvYyhw
cm9jKTsKIH0KIAogdm9pZCB0ZXN0UGluUmVnaXN0ZXJzKCkKQEAgLTE0MDkwLDcgKzE0MDg3LDcg
QEAgdm9pZCB0ZXN0UGluUmVnaXN0ZXJzKCkKICAgICAgICAgICAgICAgICBDSEVDS19FUShwYXJh
bXNbMF0uZ3ByKCksIEdQUkluZm86OnJlZ0NTMCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKLSAgICAgICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAgICAgICAgIGJvb2wgdXNlc0NTUnMgPSBmYWxzZTsKICAgICAgICAgZm9yIChB
aXI6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYy5jb2RlKCkpIHsKICAgICAgICAgICAgIGZvciAo
QWlyOjpJbnN0JiBpbnN0IDogKmJsb2NrKSB7CkBAIC0xNDEyOSw3ICsxNDEyNiw3IEBAIHZvaWQg
dGVzdFg4NkxlYUFkZEFkZFNobExlZnQoKQogICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQ
dHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwMCkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNvZGUg
PSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAg
IGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGVhIDB4NjQoJXJkaSwlcnNpLDQpLCAlcmF4
Iik7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludHB0cl90PigqY29kZSwgMSwgMiksICgxICsgKDIg
PDwgMikpICsgMTAwKTsKIH0KQEAgLTE0MTUxLDcgKzE0MTQ4LDcgQEAgdm9pZCB0ZXN0WDg2TGVh
QWRkQWRkU2hsUmlnaHQoKQogICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDEwMCkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxl
KHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGNoZWNrVXNl
c0luc3RydWN0aW9uKCpjb2RlLCAibGVhIDB4NjQoJXJkaSwlcnNpLDQpLCAlcmF4Iik7CiAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludHB0cl90PigqY29kZSwgMSwgMiksICgxICsgKDIgPDwgMikpICsg
MTAwKTsKIH0KQEAgLTE0MTcwLDcgKzE0MTY3LDcgQEAgdm9pZCB0ZXN0WDg2TGVhQWRkQWRkKCkK
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAx
MDApKTsKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCks
IHJlc3VsdCk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50cHRyX3Q+
KCpjb2RlLCAxLCAyKSwgKDEgKyAyKSArIDEwMCk7CiAgICAgY2hlY2tEaXNhc3NlbWJseSgKICAg
ICAgICAgKmNvZGUsCkBAIC0xNDE5NSw3ICsxNDE5Miw3IEBAIHZvaWQgdGVzdFg4NkxlYUFkZFNo
bFJpZ2h0KCkKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAyKSkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2Mp
OworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGNoZWNrVXNlc0luc3Ry
dWN0aW9uKCpjb2RlLCAibGVhICglcmRpLCVyc2ksNCksICVyYXgiKTsKICAgICBDSEVDS19FUShp
bnZva2U8aW50cHRyX3Q+KCpjb2RlLCAxLCAyKSwgMSArICgyIDw8IDIpKTsKIH0KQEAgLTE0MjE0
LDcgKzE0MjExLDcgQEAgdm9pZCB0ZXN0WDg2TGVhQWRkU2hsTGVmdFNjYWxlMSgpCiAgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpKTsK
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3Vs
dCk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50cHRyX3Q+KCpjb2Rl
LCAxLCAyKSwgMSArIDIpOwogICAgIGNoZWNrRGlzYXNzZW1ibHkoCiAgICAgICAgICpjb2RlLApA
QCAtMTQyMzksNyArMTQyMzYsNyBAQCB2b2lkIHRlc3RYODZMZWFBZGRTaGxMZWZ0U2NhbGUyKCkK
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCAxKSkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpj
b2RlLCAibGVhICglcmRpLCVyc2ksMiksICVyYXgiKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50
cHRyX3Q+KCpjb2RlLCAxLCAyKSwgMSArICgyIDw8IDEpKTsKIH0KQEAgLTE0MjU4LDcgKzE0MjU1
LDcgQEAgdm9pZCB0ZXN0WDg2TGVhQWRkU2hsTGVmdFNjYWxlNCgpCiAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLCByZXN1bHQpOwogICAgIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24o
KmNvZGUsICJsZWEgKCVyZGksJXJzaSw0KSwgJXJheCIpOwogICAgIENIRUNLX0VRKGludm9rZTxp
bnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAxICsgKDIgPDwgMikpOwogfQpAQCAtMTQyNzcsNyArMTQy
NzQsNyBAQCB2b2lkIHRlc3RYODZMZWFBZGRTaGxMZWZ0U2NhbGU4KCkKICAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAzKSkpOwogICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKICAg
ICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBp
bGVQcm9jKHByb2MpOwogICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGVhICglcmRp
LCVyc2ksOCksICVyYXgiKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCAx
LCAyKSwgMSArICgyIDw8IDMpKTsKIH0KQEAgLTE0Mjk2LDcgKzE0MjkzLDcgQEAgdm9pZCB0ZXN0
QWRkU2hsMzIoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDMyKSkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLX0VRKGlu
dm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAxICsgKHN0YXRpY19jYXN0PGludHB0cl90Pigy
KSA8PCBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMzIpKSk7CiB9CiAKQEAgLTE0MzE0LDcgKzE0MzEx
LDcgQEAgdm9pZCB0ZXN0QWRkU2hsNjQoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDY0KSkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwog
ICAgIENIRUNLX0VRKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAxICsgMik7CiB9CiAK
QEAgLTE0MzMyLDcgKzE0MzI5LDcgQEAgdm9pZCB0ZXN0QWRkU2hsNjUoKQogICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDY1KSkpOwogICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsK
ICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEs
IDIpLCAxICsgKDIgPDwgMSkpOwogfQogCkBAIC0xNDM5Niw3ICsxNDM5Myw3IEBAIHZvaWQgdGVz
dExvYWRCYXNlSW5kZXhTaGlmdDIoKQogICAgICAgICAgICAgICAgICAgICBwcm9jLCBTaGwsIE9y
aWdpbigpLAogICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCiAgICAgICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAy
KSkpKSk7Ci0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICBpZiAoaXNYODYoKSkKICAgICAgICAgY2hlY2tVc2VzSW5z
dHJ1Y3Rpb24oKmNvZGUsICIoJXJkaSwlcnNpLDQpIik7CiAgICAgaW50MzJfdCB2YWx1ZSA9IDEy
MzQxMjM0OwpAQCAtMTQ0MjAsNyArMTQ0MTcsNyBAQCB2b2lkIHRlc3RMb2FkQmFzZUluZGV4U2hp
ZnQzMigpCiAgICAgICAgICAgICAgICAgICAgIHByb2MsIFNobCwgT3JpZ2luKCksCiAgICAgICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKICAgICAgICAgICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDMyKSkpKSk7Ci0gICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKICAgICBpbnQzMl90IHZhbHVlID0gMTIzNDEyMzQ7CiAgICAgY2hhciogcHRyID0gYml0d2lz
ZV9jYXN0PGNoYXIqPigmdmFsdWUpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDsg
KytpKQpAQCAtMTQ0MzcsNyArMTQ0MzQsNyBAQCB2b2lkIHRlc3RPcHRpbWl6ZU1hdGVyaWFsaXph
dGlvbigpCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmln
aW4oKSwgMHgxMjM0MjM0NTM0NTZsbHUgKyAzNSkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGls
ZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBib29sIGZv
dW5kID0gZmFsc2U7CiAgICAgZm9yIChBaXI6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYy5jb2Rl
KCkpIHsKICAgICAgICAgZm9yIChBaXI6Okluc3QmIGluc3QgOiAqYmxvY2spIHsKQEAgLTE0NDkz
LDcgKzE0NDkwLDcgQEAgdm9pZCB0ZXN0QXRvbWljV2Vha0NBUygpCiAgICAgICAgIAogICAgICAg
ICBkb25lLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOwogICAgICAg
ICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVl
WzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDUyNCw3ICsxNDUyMSw3IEBA
IHZvaWQgdGVzdEF0b21pY1dlYWtDQVMoKQogICAgICAgICAKICAgICAgICAgZG9uZS0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKICAgICAgICAgCi0gICAgICAgIGF1
dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9j
KHByb2MpOwogICAgICAgICBUIHZhbHVlWzJdOwogICAgICAgICB2YWx1ZVswXSA9IDQyOwogICAg
ICAgICB2YWx1ZVsxXSA9IDEzOwpAQCAtMTQ1NTgsNyArMTQ1NTUsNyBAQCB2b2lkIHRlc3RBdG9t
aWNXZWFrQ0FTKCkKICAgICAgICAgCiAgICAgICAgIGZhaWwtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgUmV0dXJuLCBPcmlnaW4oKSk7CiAgICAgICAgIAotICAgICAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICAg
ICAgVCB2YWx1ZVsyXTsKICAgICAgICAgdmFsdWVbMF0gPSA0MjsKICAgICAgICAgdmFsdWVbMV0g
PSAxMzsKQEAgLTE0NjAwLDcgKzE0NTk3LDcgQEAgdm9pZCB0ZXN0QXRvbWljV2Vha0NBUygpCiAg
ICAgICAgIAogICAgICAgICBmYWlsLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3Jp
Z2luKCkpOwogICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAg
ICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07
CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDYy
Niw3ICsxNDYyMyw3IEBAIHZvaWQgdGVzdEF0b21pY1dlYWtDQVMoKQogICAgICAgICAgICAgICAg
IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCAweGJlZWYpLAog
ICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOwogICAgICAgICAKLSAgICAgICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAg
ICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDY1NSw3ICsxNDY1Miw3IEBAIHZvaWQgdGVzdEF0b21p
Y1dlYWtDQVMoKQogICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpLAogICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAw
KSkpOwogICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAg
ICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDY4Miw3
ICsxNDY3OSw3IEBAIHZvaWQgdGVzdEF0b21pY1dlYWtDQVMoKQogICAgICAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKSwKICAgICAgICAgICAgICAgICA0MikpOwogICAgICAgICAKLSAgICAgICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAg
ICAgICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDc0Niw3ICsxNDc0Myw3IEBAIHZvaWQgdGVzdEF0
b21pY1N0cm9uZ0NBUygpCiAgICAgICAgIAogICAgICAgICBmYWlsLT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOwogICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0g
Y29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAg
ICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVl
WzFdID0gMTM7CkBAIC0xNDc4Nyw3ICsxNDc4NCw3IEBAIHZvaWQgdGVzdEF0b21pY1N0cm9uZ0NB
UygpCiAgICAgICAgIAogICAgICAgICBmYWlsLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVy
biwgT3JpZ2luKCkpOwogICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFs
dWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBA
IC0xNDgyOCw3ICsxNDgyNSw3IEBAIHZvaWQgdGVzdEF0b21pY1N0cm9uZ0NBUygpCiAgICAgICAg
IAogICAgICAgICBmYWlsLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkp
OwogICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAg
ICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDg1Myw3ICsx
NDg1MCw3IEBAIHZvaWQgdGVzdEF0b21pY1N0cm9uZ0NBUygpCiAgICAgICAgICAgICAgICAgcm9v
dC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDB4YmVlZiksCiAgICAg
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSk7CiAgICAgICAgIAotICAgICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKICAgICAgICAgVCB2YWx1ZVsyXTsKICAgICAgICAgdmFsdWVbMF0gPSA0MjsKICAgICAgICAg
dmFsdWVbMV0gPSAxMzsKQEAgLTE0ODg1LDcgKzE0ODgyLDcgQEAgdm9pZCB0ZXN0QXRvbWljU3Ry
b25nQ0FTKCkKICAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSwKICAgICAgICAg
ICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgNDIp
KSk7CiAgICAgICAgIAotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICAgICAgVCB2YWx1ZVsyXTsKICAg
ICAgICAgdmFsdWVbMF0gPSA0MjsKICAgICAgICAgdmFsdWVbMV0gPSAxMzsKQEAgLTE0OTE2LDcg
KzE0OTEzLDcgQEAgdm9pZCB0ZXN0QXRvbWljU3Ryb25nQ0FTKCkKICAgICAgICAgICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDQyKSksCiAg
ICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIDApKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFs
dWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBA
IC0xNDk5Nyw3ICsxNDk5NCw3IEBAIHZvaWQgdGVzdEF0b21pY1hjaGcoQjM6Ok9wY29kZSBvcGNv
ZGUpCiAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2lu
KCksIHR5cGUsIDEpLAogICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOwogICAgIAot
ICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICAgICAgVCB2YWx1ZVsyXTsKICAgICAgICAgdmFsdWVbMF0g
PSA1OwogICAgICAgICB2YWx1ZVsxXSA9IDEwMDsKQEAgLTE1MDE3LDcgKzE1MDE0LDcgQEAgdm9p
ZCB0ZXN0QXRvbWljWGNoZyhCMzo6T3Bjb2RlIG9wY29kZSkKICAgICAgICAgICAgICAgICByb290
LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgNDIpLAogICAgICAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOwogICAgIAotICAgICAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICAg
ICAgVCB2YWx1ZVsyXTsKICAgICAgICAgdmFsdWVbMF0gPSA1OwogICAgICAgICB2YWx1ZVsxXSA9
IDEwMDsKQEAgLTE1MDM2LDcgKzE1MDMzLDcgQEAgdm9pZCB0ZXN0QXRvbWljWGNoZyhCMzo6T3Bj
b2RlIG9wY29kZSkKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CiAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSk7CiAgICAgCi0gICAgICAg
IGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOwogICAgICAgICBUIHZhbHVlWzJdOwogICAgICAgICB2YWx1ZVswXSA9IDU7CiAg
ICAgICAgIHZhbHVlWzFdID0gMTAwOwpAQCAtMTUwNTYsNyArMTUwNTMsNyBAQCB2b2lkIHRlc3RB
dG9taWNYY2hnKEIzOjpPcGNvZGUgb3Bjb2RlKQogICAgICAgICAgICAgMCwgSGVhcFJhbmdlKDQy
KSwgSGVhcFJhbmdlKCkpOwogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJl
dHVybiwgT3JpZ2luKCkpOwogICAgIAotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2Mp
OworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICAgICAgVCB2YWx1
ZVsyXTsKICAgICAgICAgdmFsdWVbMF0gPSA1OwogICAgICAgICB2YWx1ZVsxXSA9IDEwMDsKQEAg
LTE1MDg5LDcgKzE1MDg2LDcgQEAgdm9pZCB0ZXN0RGVwZW5kMzIoKQogICAgIHZhbHVlc1swXSA9
IDQyOwogICAgIHZhbHVlc1sxXSA9IDB4YmVlZjsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGlmIChp
c0FSTTY0KCkpCiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiZW9yIik7CiAg
ICAgZWxzZSBpZiAoaXNYODYoKSkgewpAQCAtMTUxMTksNyArMTUxMTYsNyBAQCB2b2lkIHRlc3RE
ZXBlbmQ2NCgpCiAgICAgdmFsdWVzWzBdID0gNDI7CiAgICAgdmFsdWVzWzFdID0gMHhiZWVmOwog
ICAgIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29t
cGlsZVByb2MocHJvYyk7CiAgICAgaWYgKGlzQVJNNjQoKSkKICAgICAgICAgY2hlY2tVc2VzSW5z
dHJ1Y3Rpb24oKmNvZGUsICJlb3IiKTsKICAgICBlbHNlIGlmIChpc1g4NigpKSB7CkBAIC0xNTE1
NCw3ICsxNTE1MSw3IEBAIHZvaWQgdGVzdFdhc21Cb3VuZHNDaGVjayh1bnNpZ25lZCBvZmZzZXQK
ICAgICBWYWx1ZSogcmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIDB4NDIpOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDS19FUShpbnZv
a2U8aW50MzJfdD4oKmNvZGUsIDEsIDIgKyBvZmZzZXQpLCAweDQyKTsKICAgICBDSEVDS19FUShp
bnZva2U8aW50MzJfdD4oKmNvZGUsIDMsIDIgKyBvZmZzZXQpLCA0Mik7CiAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludDMyX3Q+KCpjb2RlLCAyLCAyICsgb2Zmc2V0KSwgNDIpOwpAQCAtMTUyMDUsNyAr
MTUyMDIsNyBAQCB2b2lkIHRlc3RXYXNtQWRkcmVzcygpCiAgICAgaW5jVXBzaWxvbi0+c2V0UGhp
KGluZGV4UGhpKTsKIAogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpbnZva2U8dm9pZD4oKmNvZGUsIGxvb3BD
b3VudCwgbnVtVG9TdG9yZSwgdmFsdWVzLmRhdGEoKSk7CiAgICAgZm9yICh1bnNpZ25lZCB2YWx1
ZSA6IHZhbHVlcykKICAgICAgICAgQ0hFQ0tfRVEobnVtVG9TdG9yZSwgdmFsdWUpOwpAQCAtMTUz
MTgsNyArMTUzMTUsNiBAQCBkb3VibGUgbmVnYXRpdmVaZXJvKCkKIHZvaWQgcnVuKGNvbnN0IGNo
YXIqIGZpbHRlcikKIHsKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLSAgICB2bSA9
ICZWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOwogCiAgICAgRGVxdWU8UmVmUHRyPFNo
YXJlZFRhc2s8dm9pZCgpPj4+IHRhc2tzOwogCkBAIC0xNTk5OSw3ICsxNTk5NSw3IEBAIHZvaWQg
cnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdFRydW5jKChzdGF0aWNfY2FzdDxp
bnQ2NF90PigxKSA8PCA0MCkgKyA0MikpOwogICAgIFJVTih0ZXN0QWRkMSg0NSkpOwogICAgIFJV
Tih0ZXN0QWRkMVB0cig1MSkpOwotICAgIFJVTih0ZXN0QWRkMVB0cihiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KHZtKSkpOworICAgIFJVTih0ZXN0QWRkMVB0cihzdGF0aWNfY2FzdDxpbnRwdHJfdD4o
MHhiYWFkYmVlZikpKTsKICAgICBSVU4odGVzdE5lZzMyKDUyKSk7CiAgICAgUlVOKHRlc3ROZWdQ
dHIoNTMpKTsKICAgICBSVU4odGVzdFN0b3JlQWRkTG9hZDMyKDQ2KSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1
ZmZlci5oIgogI2luY2x1ZGUgIlB1cmVOYU4uaCIKLSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUg
PGNtYXRoPgogI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxzdHJpbmc+CkBAIC04MCwxNCArNzks
MTIgQEAgU3RhdGljTG9jayBjcmFzaExvY2s7CiAgICAgICAgIENSQVNIKCk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGls
ZSAoZmFsc2UpCiAKLVZNKiB2bTsKLQogc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxhdGlvbj4g
Y29tcGlsZShCMzo6UHJvY2VkdXJlJiBwcm9jKQogewogICAgIHByZXBhcmVGb3JHZW5lcmF0aW9u
KHByb2MuY29kZSgpKTsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKHByb2Mu
Y29kZSgpLCBqaXQpOwotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0
cik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0cik7CiAKICAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAogICAgICAgICBGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsICgidGVzdGFpciBjb21waWxhdGlvbiIpKSwgcHJvYy5yZWxlYXNlQnlw
cm9kdWN0cygpKTsKQEAgLTE4NDksNyArMTg0Niw2IEBAIHZvaWQgdGVzdFg4NlZNVUxTREJhc2VJ
bmRleE5lZWRSZXgoKQogdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogewogICAgIEpTQzo6
aW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAgIHZtID0gJlZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5s
ZWFrUmVmKCk7CiAKICAgICBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4gdGFza3M7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vz
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE0
LDcgKzUxNCw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAg
ICAgICAgY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nID0gc3RhdGUuY2FsbFNpdGVJ
bmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nKCk7CiAgICAgfQogCi0gICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CiAgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkRpZCBmYWlsIHRvIGFsbG9jYXRlLlxu
Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCw3ICszOTQsNyBAQCB2b2lkIEpJVENv
bXBpbGVyOjpjb21waWxlKCkKICAgICBtX3NwZWN1bGF0aXZlLT5jcmVhdGVPU1JFbnRyaWVzKCk7
CiAgICAgc2V0RW5kT2ZDb2RlKCk7CiAKLSAgICBhdXRvIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPExpbmtCdWZmZXI+KCp2bSgpLCAqdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0
aW9uQ2FuRmFpbCk7CisgICAgYXV0byBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5r
QnVmZmVyPigqdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAg
aWYgKGxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgbV9ncmFwaC5t
X3BsYW4uZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+KG1fZ3Jh
cGgubV9wbGFuKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDg4LDcgKzQ4OCw3IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAgICAgc2V0RW5kT2ZDb2RlKCk7CiAKICAgICAv
LyA9PT0gTGluayA9PT0KLSAgICBhdXRvIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExp
bmtCdWZmZXI+KCp2bSgpLCAqdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CisgICAgYXV0byBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPigq
dGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKGxpbmtC
dWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgbV9ncmFwaC5tX3BsYW4uZmlu
YWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+KG1fZ3JhcGgubV9wbGFu
KTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
YXp5SlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdMYXp5SlNWYWx1ZS5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksNyArMjI5
LDcgQEAgdm9pZCBMYXp5SlNWYWx1ZTo6ZW1pdChDQ2FsbEhlbHBlcnMmIGppdAogICAgIAogICAg
IGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgW2NvZGVCbG9jaywgbGFiZWwsIHRoaXNWYWx1ZV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVhbFZhbHVl
ID0gdGhpc1ZhbHVlLmdldFZhbHVlKGxpbmtCdWZmZXIudm0oKSk7CisgICAgICAgICAgICBKU1Zh
bHVlIHJlYWxWYWx1ZSA9IHRoaXNWYWx1ZS5nZXRWYWx1ZSgqY29kZUJsb2NrLT52bSgpKTsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlYWxWYWx1ZS5pc0NlbGwoKSk7CiAKICAgICAgICAg
ICAgIGNvZGVCbG9jay0+YWRkQ29uc3RhbnQocmVhbFZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDIx
NDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgY29tcGlsZU9TUkV4aXQo
RXhlY1N0YXRlKiBleGVjKQogCiAgICAgICAgIGV4aXRDb21waWxlci5jb21waWxlRXhpdCgqdm0s
IGV4aXQsIG9wZXJhbmRzLCByZWNvdmVyeSk7CiAgICAgICAgIAotICAgICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp2bSwgaml0LCBjb2RlQmxvY2spOworICAgICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgY29kZUJsb2NrKTsKICAgICAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTEla
RV9DT0RFX0lGKAogICAgICAgICAgICAgc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9u
czo6dmVyYm9zZU9TUigpLAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTIsNyArMTAxMiw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgbV9qaXQuYWRk
UHRyKFRydXN0ZWRJbW0zMihyZXF1aXJlZEJ5dGVzKSwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpjYWxsZWVGcmFt
ZVNsb3QoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKS53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpLCBH
UFJJbmZvOjpyZWdUMCk7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6Y2FsbGVl
RnJhbWVTbG90KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkud2l0aE9mZnNldChUYWdPZmZzZXQpLCBH
UFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIG1faml0LmVtaXREdW1iVmlydHVhbENhbGwoaW5mbyk7
CisgICAgICAgIG1faml0LmVtaXREdW1iVmlydHVhbENhbGwoKm1faml0LnZtKCksIGluZm8pOwog
ICAgICAgICAKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIHNldFJlc3VsdEFu
ZFJlc2V0U3RhY2soKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTY2LDcgKzk2Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUK
ICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcGFydCB3aGVyZSB3ZSBtZWFudCB0byBtYWtlIGEgbm9y
bWFsIGNhbGwuIE9vcHMuCiAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIocmVxdWly
ZWRCeXRlcyksIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIG1f
aml0LmxvYWQ2NChKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVTbG90KENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgbV9qaXQuZW1pdER1bWJWaXJ0dWFsQ2Fs
bChjYWxsTGlua0luZm8pOworICAgICAgICBtX2ppdC5lbWl0RHVtYlZpcnR1YWxDYWxsKCptX2pp
dC52bSgpLCBjYWxsTGlua0luZm8pOwogICAgICAgICAKICAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CiAgICAgICAgIHNldFJlc3VsdEFuZFJlc2V0U3RhY2soKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyAr
OTMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAgICAgCiAg
ICAgaml0Lmp1bXAoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmdm0tPm9zckV4aXRK
dW1wRGVzdGluYXRpb24pKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
aml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQpOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxs
LCBjb21waWxlT1NSRXhpdCk7CiAgICAgCkBAIC0xNDAsNyArMTQwLDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG9zckVudHJ5VGh1bmtHZW5lcgogCiAgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVn
VDEpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9U
SFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiREZHIE9TUiBlbnRy
eSB0aHVuayIpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21w
aWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBp
bGUuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsOCArMTQxLDcgQEAgdm9pZCBjb21w
aWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKTsKICAgICAgICAg
fSk7CiAKLSAgICBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPExpbmtCdWZmZXI+KAotICAgICAgICB2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBp
bGF0aW9uQ2FuRmFpbCk7CisgICAgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyID0g
c3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKICAgICBpZiAoc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5k
aWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgIHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0
cnVlOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExhenlTbG93UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMYXp5U2xvd1BhdGguY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDgg
KzU1LDYgQEAgdm9pZCBMYXp5U2xvd1BhdGg6OmdlbmVyYXRlKENvZGVCbG9jayogYwogewogICAg
IFJFTEVBU0VfQVNTRVJUKCFtX3N0dWIpOwogCi0gICAgVk0mIHZtID0gKmNvZGVCbG9jay0+dm0o
KTsKLQogICAgIENDYWxsSGVscGVycyBqaXQoY29kZUJsb2NrKTsKICAgICBHZW5lcmF0aW9uUGFy
YW1zIHBhcmFtczsKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbkp1bXBzOwpA
QCAtNjUsNyArNjMsNyBAQCB2b2lkIExhenlTbG93UGF0aDo6Z2VuZXJhdGUoQ29kZUJsb2NrKiBj
CiAKICAgICBtX2dlbmVyYXRvci0+cnVuKGppdCwgcGFyYW1zKTsKIAotICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQp
OworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25NdXN0U3VjY2VlZCk7CiAgICAgbGlua0J1ZmZlci5saW5rKHBhcmFtcy5kb25lSnVtcHMsIG1f
ZG9uZSk7CiAgICAgaWYgKG1fZXhjZXB0aW9uVGFyZ2V0KQogICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoZXhjZXB0aW9uSnVtcHMsIG1fZXhjZXB0aW9uVGFyZ2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDcgKzE2Miw3
IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoKTsKICAgICAgICAgICAgIG1haW5QYXRoSnVtcHMuYXBwZW5kKGppdC5qdW1wKCkp
OwogCi0gICAgICAgICAgICBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVy
Pih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgICAg
ICBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPihqaXQsIGNvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgICAgIGlmIChsaW5rQnVmZmVyLT5k
aWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZh
aWxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTg2LDcgKzE4Niw3IEBA
IHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1
ZSgpOwogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbWFpblBhdGhKdW1wID0gaml0Lmp1bXAo
KTsKICAgICAgICAgCi0gICAgICAgIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtC
dWZmZXI+KHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAg
ICAgbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4oaml0LCBjb2RlQmxv
Y2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgICAgIGlmIChsaW5rQnVmZmVyLT5kaWRG
YWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgICAgICBzdGF0ZS5hbGxvY2F0aW9uRmFpbGVkID0g
dHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjAxOSw3ICs2MDE5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewog
ICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1Yihs
aW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUtPnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0
aW9uUHRyKGxpbmtDYWxsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKApAQCAtNjMyOSw3ICs2MzI5
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAg
ICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnZt
KCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtD
YWxsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKApAQCAtNjU4Miw3ICs2NTgyLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAg
IFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5j
b2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnZtKCkuZ2V0Q1RJU3R1
YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKApAQCAtNjg2MSw3ICs2ODYx
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAg
ICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnZt
KCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtD
YWxsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKApAQCAt
NjkyMiw4ICs2OTIyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiA9IGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsKICAgICAgICAg
U3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKLSAgICAgICAgICAgIFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgICAgICBbPSwgJnZtXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAgICAgIENh
bGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5p
cXVlQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICAKQEAgLTY5NTYs
NyArNjk1Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihyZXF1aXJlZEJ5dGVzKSwgQ0Nh
bGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICAgICAgaml0Lmxv
YWQ2NChDQ2FsbEhlbHBlcnM6OmNhbGxlZUZyYW1lU2xvdChDYWxsRnJhbWVTbG90OjpjYWxsZWUp
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgaml0LmVtaXREdW1iVmlydHVhbENh
bGwoY2FsbExpbmtJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXQuZW1pdER1bWJWaXJ0dWFsQ2Fs
bCh2bSwgY2FsbExpbmtJbmZvKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBk
b25lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlz
aW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBp
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkxLDcgKzQ5MSw3IEBAIHN0YXRpYyB2b2lkIGNv
bXBpbGVTdHViKAogICAgIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoaml0LCBleGl0KTsKICAgICBh
ZGp1c3RBbmRKdW1wVG9UYXJnZXQoKnZtLCBqaXQsIGV4aXQpOwogICAgIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIGNvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihqaXQsIGNvZGVCbG9jayk7CiAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTElaRV9DT0RF
X0lGKAogICAgICAgICBzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjp2ZXJib3Nl
T1NSKCkgfHwgT3B0aW9uczo6dmVyYm9zZUZUTE9TUkV4aXQoKSwKICAgICAgICAgcGF0Y2hCdWZm
ZXIsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRIYW5kbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRs
ZS5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdEhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEzICs0NCwxNCBAQCB2b2lk
IE9TUkV4aXRIYW5kbGU6OmVtaXRFeGl0VGh1bmsoU3RhdGUmCiAgICAgaml0LnB1c2hUb1NhdmVJ
bW1lZGlhdGVXaXRob3V0VG91Y2hpbmdSZWdpc3RlcnMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoaW5kZXgpKTsKICAgICBDQ2FsbEhlbHBlcnM6OlBhdGNoYWJsZUp1bXAganVtcCA9IGppdC5w
YXRjaGFibGVKdW1wKCk7CiAgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IHNlbGYgPSB0aGlzOwor
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKAotICAgICAgICBb
c2VsZiwganVtcCwgbXlMYWJlbCwgY29tcGlsYXRpb25dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgIFtzZWxmLCBqdW1wLCBteUxhYmVsLCBjb21waWxhdGlvbiwgJnZtXSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgc2VsZi0+ZXhpdC5tX3BhdGNoYWJs
ZUp1bXAgPSBDb2RlTG9jYXRpb25KdW1wKGxpbmtCdWZmZXIubG9jYXRpb25PZihqdW1wKSk7CiAK
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKICAgICAgICAgICAgICAgICBqdW1wLm1fanVt
cCwKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLnZtKCkuZ2V0
Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0
aW9uVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgICAgICAgICAgaWYgKGNvbXBpbGF0aW9u
KQogICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5hZGRPU1JFeGl0U2l0ZSh7IGxpbmtCdWZm
ZXIubG9jYXRpb25PZihteUxhYmVsKS5leGVjdXRhYmxlQWRkcmVzcygpIH0pOwogICAgICAgICB9
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5j
cHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xv
d1BhdGhDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDE2ICsxMTgsMTQgQEAgU2xvd1Bh
dGhDYWxsS2V5IFNsb3dQYXRoQ2FsbENvbnRleHQ6OmtleQogICAgIHJldHVybiBTbG93UGF0aENh
bGxLZXkobV90aHVua1NhdmVTZXQsIGNhbGxUYXJnZXQsIG1fYXJndW1lbnRSZWdpc3RlcnMsIG1f
b2Zmc2V0KTsKIH0KIAotU2xvd1BhdGhDYWxsIFNsb3dQYXRoQ2FsbENvbnRleHQ6Om1ha2VDYWxs
KHZvaWQqIGNhbGxUYXJnZXQpCitTbG93UGF0aENhbGwgU2xvd1BhdGhDYWxsQ29udGV4dDo6bWFr
ZUNhbGwoVk0mIHZtLCB2b2lkKiBjYWxsVGFyZ2V0KQogewogICAgIFNsb3dQYXRoQ2FsbCByZXN1
bHQgPSBTbG93UGF0aENhbGwobV9qaXQuY2FsbCgpLCBrZXlXaXRoVGFyZ2V0KGNhbGxUYXJnZXQp
KTsKIAogICAgIG1faml0LmFkZExpbmtUYXNrKAotICAgICAgICBbcmVzdWx0XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgVk0mIHZtID0gbGlua0J1ZmZlci52bSgpOwot
CisgICAgICAgIFtyZXN1bHQsICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHVuayA9Ci0gICAgICAgICAgICAgICAgdm0u
ZnRsVGh1bmtzLT5nZXRTbG93UGF0aENhbGxUaHVuayh2bSwgcmVzdWx0LmtleSgpKTsKKyAgICAg
ICAgICAgICAgICB2bS5mdGxUaHVua3MtPmdldFNsb3dQYXRoQ2FsbFRodW5rKHJlc3VsdC5rZXko
KSk7CiAKICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhyZXN1bHQuY2FsbCgpLCBDb2RlTG9j
YXRpb25MYWJlbCh0aHVuay5jb2RlKCkpKTsKICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDIxNDU0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogCiAgICAgLy8gTk9URTogVGhlIGNhbGwgdGhh
dCB0aGlzIHJldHVybnMgaXMgYWxyZWFkeSBnb2luZyB0byBiZSBsaW5rZWQgYnkgdGhlIEpJVCB1
c2luZyBhZGRMaW5rVGFzaygpLAogICAgIC8vIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHlvdSB0
byBsaW5rIGl0IHlvdXJzZWxmLgotICAgIFNsb3dQYXRoQ2FsbCBtYWtlQ2FsbCh2b2lkKiBjYWxs
VGFyZ2V0KTsKKyAgICBTbG93UGF0aENhbGwgbWFrZUNhbGwoVk0mLCB2b2lkKiBjYWxsVGFyZ2V0
KTsKIAogcHJpdmF0ZToKICAgICBTbG93UGF0aENhbGxLZXkga2V5V2l0aFRhcmdldCh2b2lkKiBj
YWxsVGFyZ2V0KSBjb25zdDsKQEAgLTg0LDcgKzg0LDcgQEAgU2xvd1BhdGhDYWxsIGNhbGxPcGVy
YXRpb24oCiAgICAgewogICAgICAgICBTbG93UGF0aENhbGxDb250ZXh0IGNvbnRleHQodXNlZFJl
Z2lzdGVycywgaml0LCBzaXplb2YuLi4oQXJndW1lbnRUeXBlcykgKyAxLCByZXN1bHRHUFIpOwog
ICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZ3VtZW50cy4uLik7Ci0g
ICAgICAgIGNhbGwgPSBjb250ZXh0Lm1ha2VDYWxsKGZ1bmN0aW9uLnZhbHVlKCkpOworICAgICAg
ICBjYWxsID0gY29udGV4dC5tYWtlQ2FsbCh2bSwgZnVuY3Rpb24udmFsdWUoKSk7CiAgICAgfQog
ICAgIGlmIChleGNlcHRpb25UYXJnZXQpCiAgICAgICAgIGV4Y2VwdGlvblRhcmdldC0+YXBwZW5k
KGppdC5lbWl0RXhjZXB0aW9uQ2hlY2sodm0pKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFRodW5rcy5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBA
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJpY0dlbmUKIAogICAgIGppdC5yZXQo
KTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhV
TktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQp
OwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxsLCBnZW5lcmF0aW9uRnVuY3Rpb24p
OwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIiVzIiwgbmFtZSkpOwog
fQpAQCAtMTY0LDcgKzE2NCw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ2xvYmJlckNoZWNrKEFz
c2VtYmwKICAgICB9CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVu
a0dlbmVyYXRvcihWTSYgdm0sIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKGNvbnN0IFNsb3dQYXRoQ2Fs
bEtleSYga2V5KQogewogICAgIEFzc2VtYmx5SGVscGVycyBqaXQobnVsbHB0cik7CiAgICAgCkBA
IC0yMjIsNyArMjIyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5r
RwogICAgIAogICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIodm0s
IGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRy
KGtleS5jYWxsVGFyZ2V0KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgKCJGVEwgc2xvdyBwYXRoIGNhbGwgdGh1bmsgZm9yICVzIiwgdG9DU3RyaW5nKGtleSkuZGF0
YSgpKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHJldmlz
aW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIEZUTCB7CiAKIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7CiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZN
Kik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IoVk0m
LCBjb25zdCBTbG93UGF0aENhbGxLZXkmKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0
aENhbGxUaHVua0dlbmVyYXRvcihjb25zdCBTbG93UGF0aENhbGxLZXkmKTsKIAogdGVtcGxhdGU8
dHlwZW5hbWUgS2V5VHlwZUFyZ3VtZW50Pgogc3RydWN0IFRodW5rTWFwIHsKQEAgLTU0LDEzICs1
NCwxMyBAQCBzdHJ1Y3QgVGh1bmtNYXAgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlLCB0
eXBlbmFtZSBHZW5lcmF0b3JUeXBlPgogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlSWZO
ZWNlc3NhcnkoCi0gICAgVk0mIHZtLCBNYXBUeXBlJiBtYXAsIGNvbnN0IHR5cGVuYW1lIE1hcFR5
cGU6OktleVR5cGUmIGtleSwgR2VuZXJhdG9yVHlwZSBnZW5lcmF0b3IpCisgICAgTWFwVHlwZSYg
bWFwLCBjb25zdCB0eXBlbmFtZSBNYXBUeXBlOjpLZXlUeXBlJiBrZXksIEdlbmVyYXRvclR5cGUg
Z2VuZXJhdG9yKQogewogICAgIHR5cGVuYW1lIE1hcFR5cGU6OlRvVGh1bmtNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtYXAubV90b1RodW5rLmZpbmQoa2V5KTsKICAgICBpZiAoaXRlciAhPSBtYXAubV90
b1RodW5rLmVuZCgpKQogICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CiAgICAgCi0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHJlc3VsdCA9IGdlbmVyYXRvcih2bSwga2V5KTsKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgcmVzdWx0ID0gZ2VuZXJhdG9yKGtleSk7CiAgICAgbWFwLm1fdG9U
aHVuay5hZGQoa2V5LCByZXN1bHQpOwogICAgIG1hcC5tX2Zyb21UaHVuay5hZGQocmVzdWx0LmNv
ZGUoKSwga2V5KTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNzYsMTAgKzc2LDEwIEBAIHR5cGVu
YW1lIE1hcFR5cGU6OktleVR5cGUga2V5Rm9yVGh1bmsoTWEKIAogY2xhc3MgVGh1bmtzIHsKIHB1
YmxpYzoKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2V0U2xvd1BhdGhDYWxsVGh1bmsoVk0m
IHZtLCBjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgZ2V0U2xvd1BhdGhDYWxsVGh1bmsoY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpCiAgICAg
ewogICAgICAgICByZXR1cm4gZ2VuZXJhdGVJZk5lY2Vzc2FyeSgKLSAgICAgICAgICAgIHZtLCBt
X3Nsb3dQYXRoQ2FsbFRodW5rcywga2V5LCBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcik7Cisg
ICAgICAgICAgICBtX3Nsb3dQYXRoQ2FsbFRodW5rcywga2V5LCBzbG93UGF0aENhbGxUaHVua0dl
bmVyYXRvcik7CiAgICAgfQogICAgIAogICAgIFNsb3dQYXRoQ2FsbEtleSBrZXlGb3JTbG93UGF0
aENhbGxUaHVuayhNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcHRyKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjE0NTQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MjcsMTQgKzYyNywxNCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9y
ZUNhbGxlZVNhdmVzCiAjZW5kaWYKIH0KIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXREdW1i
VmlydHVhbENhbGwoQ2FsbExpbmtJbmZvKiBpbmZvKQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVt
aXREdW1iVmlydHVhbENhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8pCiB7CiAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0g
bmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzaygKLSAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRo
dW5rID0gdmlydHVhbFRodW5rRm9yKCZsaW5rQnVmZmVyLnZtKCksICppbmZvKTsKLSAgICAgICAg
ICAgIGluZm8tPnNldFNsb3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuaywg
bGlua0J1ZmZlci52bSgpLCBudWxscHRyLCB0cnVlKSk7CisgICAgICAgIFs9LCAmdm1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
dmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKCZ2bSwgKmluZm8pOworICAgICAgICAgICAg
aW5mby0+c2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5rLCB2bSwg
bnVsbHB0ciwgdHJ1ZSkpOwogICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIENvZGVM
b2NhdGlvbkxhYmVsKHZpcnR1YWxUaHVuay5jb2RlKCkpKTsKICAgICAgICAgfSk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9u
IDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MDksNyArMTQwOSw3IEBAIHB1YmxpYzoKICAgICAgICAgZnVu
Y3RvcihUeXBlb2ZUeXBlOjpVbmRlZmluZWQsIHRydWUpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGVtaXREdW1iVmlydHVhbENhbGwoQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0RHVtYlZp
cnR1YWxDYWxsKFZNJiwgQ2FsbExpbmtJbmZvKik7CiAgICAgCiAgICAgVmVjdG9yPEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9jayopOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5j
cHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMSwxNSArMzExLDI1IEBAIHBy
aXZhdGU6CiB9OwogCiBzdGF0aWMgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxv
Y2F0b3I7CitzdGF0aWMgRXhlY3V0YWJsZUFsbG9jYXRvciogZXhlY3V0YWJsZUFsbG9jYXRvcjsK
IAogdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxsb2NhdG9yKCkKIHsKICAg
ICBBU1NFUlQoIWFsbG9jYXRvcik7CiAgICAgYWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvcigpOwogICAgIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcihh
bGxvY2F0b3IpOworCisgICAgZXhlY3V0YWJsZUFsbG9jYXRvciA9IG5ldyBFeGVjdXRhYmxlQWxs
b2NhdG9yOworfQorCitFeGVjdXRhYmxlQWxsb2NhdG9yJiBFeGVjdXRhYmxlQWxsb2NhdG9yOjpz
aW5nbGV0b24oKQoreworICAgIEFTU0VSVChhbGxvY2F0b3IpOworICAgIEFTU0VSVChleGVjdXRh
YmxlQWxsb2NhdG9yKTsKKyAgICByZXR1cm4gKmV4ZWN1dGFibGVBbGxvY2F0b3I7CiB9CiAKLUV4
ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IoVk0mKQorRXhlY3V0YWJsZUFs
bG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcigpCiB7CiAgICAgQVNTRVJUKGFsbG9jYXRvcik7
CiB9CkBAIC0zNjIsNyArMzcyLDcgQEAgZG91YmxlIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1lbW9y
eVByZXNzdQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShWTSYsIHNpemVfdCBzaXplSW5C
eXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK1JlZlB0
cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShz
aXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBl
ZmZvcnQpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0V4ZWN1dGFibGVBbGxvY2F0aW9uKCkpIHsK
ICAgICAgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBzdGF0cyA9IGFsbG9jYXRvci0+Y3Vy
cmVudFN0YXRpc3RpY3MoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
OCArNTUsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07Ci0KIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBqaXRBbGxvY2F0aW9uR3JhbnVsZSA9IDMyOwogCiB0eXBlZGVmIFdURjo6TWV0
YUFsbG9jYXRvckhhbmRsZSBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlOwpAQCAtMTE3LDkgKzExNSw3
IEBAIGNsYXNzIEV4ZWN1dGFibGVBbGxvY2F0b3IgewogICAgIGVudW0gUHJvdGVjdGlvblNldHRp
bmcgeyBXcml0YWJsZSwgRXhlY3V0YWJsZSB9OwogCiBwdWJsaWM6Ci0gICAgRXhlY3V0YWJsZUFs
bG9jYXRvcihWTSYpOwotICAgIH5FeGVjdXRhYmxlQWxsb2NhdG9yKCk7Ci0gICAgCisgICAgc3Rh
dGljIEV4ZWN1dGFibGVBbGxvY2F0b3ImIHNpbmdsZXRvbigpOwogICAgIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemVBbGxvY2F0b3IoKTsKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwpAQCAtMTM0
LDEzICsxMzAsMTcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBQcm9maWxlKCkgeyB9
CiAjZW5kaWYKIAotICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0ZShW
TSYsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZm
b3J0KTsKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90
IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCiAg
ICAgYm9vbCBpc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShjb25zdCBBYnN0cmFjdExvY2tlciYsIHZv
aWQqIGFkZHJlc3MpOwogCiAgICAgc3RhdGljIHNpemVfdCBjb21taXR0ZWRCeXRlQ291bnQoKTsK
IAogICAgIExvY2smIGdldExvY2soKSBjb25zdDsKK3ByaXZhdGU6CisKKyAgICBFeGVjdXRhYmxl
QWxsb2NhdG9yKCk7CisgICAgfkV4ZWN1dGFibGVBbGxvY2F0b3IoKTsKIH07CiAKICNlbmRpZiAv
LyBFTkFCTEUoSklUKSAmJiBFTkFCTEUoQVNTRU1CTEVSKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTYsNyArNzE2LDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0
RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVu
ZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdp
bigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihu
ZXcgTGlua0J1ZmZlcigqbV92bSwgKnRoaXMsIG1fY29kZUJsb2NrLCBlZmZvcnQpKTsKKyAgICBt
X2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIo
KnRoaXMsIG1fY29kZUJsb2NrLCBlZmZvcnQpKTsKIAogICAgIGRvdWJsZSBhZnRlciA9IDA7CiAg
ICAgaWYgKFVOTElLRUxZKGNvbXB1dGVDb21waWxlVGltZXMoKSkpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEy
MSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnUKICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9m
KFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0RHVtYlZpcnR1YWxDYWxsKGluZm8pOworICAgIGVtaXRE
dW1iVmlydHVhbENhbGwoKnZtKCksIGluZm8pOwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0
aElDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMu
aAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRo
SUMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgZ2VuZXJhdGVPdXRPZkxpbmUoVk0mIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgRnVuY3Rpb25QdHIgY2FsbFJlcGxhY2VtZW50KQorICAg
IHZvaWQgZ2VuZXJhdGVPdXRPZkxpbmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1bmN0aW9uUHRy
IGNhbGxSZXBsYWNlbWVudCkKICAgICB7CiAgICAgICAgIGF1dG8gbGlua0p1bXBUb091dE9mTGlu
ZVNuaXBwZXQgPSBbJl0gKCkgewogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxv
Y2spOwpAQCAtMTYwLDcgKzE2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChnZW5lcmF0
ZWRJbmxpbmUpIHsKICAgICAgICAgICAgICAgICBhdXRvIGp1bXBUb0RvbmUgPSBqaXQuanVtcCgp
OwogCi0gICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCBqaXQsIGNvZGVC
bG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAgICAgICAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGdlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1
bXBzLCBzbG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CiAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhqdW1wVG9Eb25lLCBkb25lTG9jYXRpb24oKSk7CkBAIC0yMDAsNyArMjAwLDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGVuZEp1bXBM
aXN0LmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAg
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25D
YW5GYWlsKTsKICAgICAgICAgICAgIGlmIChsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNjEsNyArMTA2MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9w
ZXIKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlzLCBtX2NvZGVC
bG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOwog
ICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRk
cmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Ns
b3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxh
YmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJl
dHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRy
ZXNzVG9TbG93UGF0aCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTE5LDcgKzExMTksNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAgICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CiAgICAgSnVtcCBkb25l
ID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgKnRoaXMsIG1f
Y29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9j
ayk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJl
bChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVz
c1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0
aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJl
c3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVy
bkFkZHJlc3NUb1Nsb3dQYXRoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNzUsNyArMjM3
NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKICAgICBBU1NF
UlQoYXJpdGhQcm9maWxlKTsKICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRSSFMob3Ax
LCBvcDIpOwogICAgIGF1dG8gbm9uT3B0aW1pemVWYXJpYW50ID0gb3BlcmF0aW9uVmFsdWVBZGRQ
cm9maWxlZE5vT3B0aW1pemU7Ci0gICAgYWRkSUMtPmdlbmVyYXRlT3V0T2ZMaW5lKCp2bSwgZXhl
Yy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CisgICAgYWRkSUMtPmdlbmVyYXRl
T3V0T2ZMaW5lKGV4ZWMtPmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOwogCiAjaWYg
RU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgZXhlYy0+Y29kZUJsb2NrKCktPmR1bXBNYXRoSUNT
dGF0cygpOwpAQCAtMjQwOCw3ICsyNDA4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25WYQogICAgIGF1dG8gbm9uT3B0aW1pemVWYXJpYW50ID0gb3BlcmF0aW9uVmFs
dWVBZGROb09wdGltaXplOwogICAgIGlmIChBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGFk
ZElDLT5hcml0aFByb2ZpbGUoKSkKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTQW5k
UkhTKG9wMSwgb3AyKTsKLSAgICBhZGRJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoKnZtLCBleGVjLT5j
b2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsKKyAgICBhZGRJQy0+Z2VuZXJhdGVPdXRP
ZkxpbmUoZXhlYy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CiAKICNpZiBFTkFC
TEUoTUFUSF9JQ19TVEFUUykKICAgICBleGVjLT5jb2RlQmxvY2soKS0+ZHVtcE1hdGhJQ1N0YXRz
KCk7CkBAIC0yNDg1LDcgKzI0ODUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblZhCiAgICAgYXV0byBub25PcHRpbWl6ZVZhcmlhbnQgPSBvcGVyYXRpb25WYWx1ZU11
bE5vT3B0aW1pemU7CiAgICAgaWYgKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbXVsSUMt
PmFyaXRoUHJvZmlsZSgpKQogICAgICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRSSFMo
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikp
OwotICAgIG11bElDLT5nZW5lcmF0ZU91dE9mTGluZSgqdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBu
b25PcHRpbWl6ZVZhcmlhbnQpOworICAgIG11bElDLT5nZW5lcmF0ZU91dE9mTGluZShleGVjLT5j
b2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NU
QVRTKQogICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5kdW1wTWF0aElDU3RhdHMoKTsKQEAgLTI1MTIs
NyArMjUxMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKICAg
ICBBU1NFUlQoYXJpdGhQcm9maWxlKTsKICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRS
SFMoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
MikpOwogICAgIGF1dG8gbm9uT3B0aW1pemVWYXJpYW50ID0gb3BlcmF0aW9uVmFsdWVNdWxQcm9m
aWxlZE5vT3B0aW1pemU7Ci0gICAgbXVsSUMtPmdlbmVyYXRlT3V0T2ZMaW5lKCp2bSwgZXhlYy0+
Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CisgICAgbXVsSUMtPmdlbmVyYXRlT3V0
T2ZMaW5lKGV4ZWMtPmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOwogCiAjaWYgRU5B
QkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgZXhlYy0+Y29kZUJsb2NrKCktPmR1bXBNYXRoSUNTdGF0
cygpOwpAQCAtMjU4Myw3ICsyNTgzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25BcgogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbmVnSUMtPmFyaXRo
UHJvZmlsZSgpOwogICAgIEFTU0VSVChhcml0aFByb2ZpbGUpOwogICAgIGFyaXRoUHJvZmlsZS0+
b2JzZXJ2ZUxIUyhvcGVyYW5kKTsKLSAgICBuZWdJQy0+Z2VuZXJhdGVPdXRPZkxpbmUodm0sIGV4
ZWMtPmNvZGVCbG9jaygpLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkKTsKKyAgICBuZWdJ
Qy0+Z2VuZXJhdGVPdXRPZkxpbmUoZXhlYy0+Y29kZUJsb2NrKCksIG9wZXJhdGlvbkFyaXRoTmVn
YXRlUHJvZmlsZWQpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgZXhlYy0+Y29k
ZUJsb2NrKCktPmR1bXBNYXRoSUNTdGF0cygpOwpAQCAtMjYwNyw3ICsyNjA3LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcgogCiAgICAgaWYgKEFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbmVnSUMtPmFyaXRoUHJvZmlsZSgpKQogICAgICAgICBhcml0aFBy
b2ZpbGUtPm9ic2VydmVMSFMob3BlcmFuZCk7Ci0gICAgbmVnSUMtPmdlbmVyYXRlT3V0T2ZMaW5l
KHZtLCBleGVjLT5jb2RlQmxvY2soKSwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOworICAgIG5lZ0lD
LT5nZW5lcmF0ZU91dE9mTGluZShleGVjLT5jb2RlQmxvY2soKSwgb3BlcmF0aW9uQXJpdGhOZWdh
dGUpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgZXhlYy0+Y29kZUJsb2NrKCkt
PmR1bXBNYXRoSUNTdGF0cygpOwpAQCAtMjY3NSw3ICsyNjc1LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogICAgIGF1dG8gbm9uT3B0aW1pemVWYXJpYW50ID0g
b3BlcmF0aW9uVmFsdWVTdWJOb09wdGltaXplOwogICAgIGlmIChBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9IHN1YklDLT5hcml0aFByb2ZpbGUoKSkKICAgICAgICAgYXJpdGhQcm9maWxlLT5v
YnNlcnZlTEhTQW5kUkhTKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDIpKTsKLSAgICBzdWJJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoKnZtLCBleGVj
LT5jb2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsKKyAgICBzdWJJQy0+Z2VuZXJhdGVP
dXRPZkxpbmUoZXhlYy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CiAKICNpZiBF
TkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBleGVjLT5jb2RlQmxvY2soKS0+ZHVtcE1hdGhJQ1N0
YXRzKCk7CkBAIC0yNzAxLDcgKzI3MDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblZhCiAgICAgQVNTRVJUKGFyaXRoUHJvZmlsZSk7CiAgICAgYXJpdGhQcm9maWxl
LT5vYnNlcnZlTEhTQW5kUkhTKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRPcDIpKTsKICAgICBhdXRvIG5vbk9wdGltaXplVmFyaWFudCA9IG9wZXJh
dGlvblZhbHVlU3ViUHJvZmlsZWROb09wdGltaXplOwotICAgIHN1YklDLT5nZW5lcmF0ZU91dE9m
TGluZSgqdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOworICAgIHN1
YklDLT5nZW5lcmF0ZU91dE9mTGluZShleGVjLT5jb2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJp
YW50KTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGV4ZWMtPmNvZGVCbG9jaygp
LT5kdW1wTWF0aElDU3RhdHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCBjbGFz
cyBTdHJ1Y3R1cmU7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKIGNsYXNzIFN5bWJvbDsKIGNs
YXNzIFN5bWJvbFRhYmxlOworY2xhc3MgVk07CiBjbGFzcyBXYXRjaHBvaW50U2V0OwogCiBzdHJ1
Y3QgQnlWYWxJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzcsNyArMTc3LDcgQEAgSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxT
dHViR2VuZQogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogICAgIGppdC5y
ZXQoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxf
VEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIlN0cmluZyBnZXRf
YnlfdmFsIHN0dWIiKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODgsNyArODgsNyBAQCBKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lCiAg
ICAgaml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAgICAgaml0LnJldCgpOwogICAg
IAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiU3RyaW5nIGdldF9ieV92YWwgc3R1
YiIpKTsKIH0KIApAQCAtMTMzNiw3ICsxMzM2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlWYWwoQnlWYWxJbgogICAgIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOwogICAgIAogICAgIHBhdGNo
QnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSku
bGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAg
cGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFs
dWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkp
OwpAQCAtMTM2Miw3ICsxMzYyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWxX
aXRoQ2FjaAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuID0gZW1pdEdldEJ5VmFsV2l0aENh
Y2hlZElkKGJ5VmFsSW5mbywgY3VycmVudEluc3RydWN0aW9uLCBwcm9wZXJ0eU5hbWUsIGZhc3RE
b25lQ2FzZSwgc2xvd0RvbmVDYXNlLCBzbG93Q2FzZXMpOwogCiAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX3ZtLCAqdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywg
Q29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0
YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbElu
Zm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYXN0
RG9uZUNhc2UsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8t
PmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93RG9uZUNhc2Us
IGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVK
dW1wVG9OZXh0SG90UGF0aCkpOwpAQCAtMTQxOSw3ICsxNDE5LDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
IAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlzLCBtX2NvZGVCbG9jayk7
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOwogICAgIHBh
dGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgp
KSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAg
ICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3Mu
dmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0
aCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5s
YWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKQEAgLTE0NTMsNyAr
MTQ1Myw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2gKICAgICBK
SVRQdXRCeUlkR2VuZXJhdG9yIGdlbiA9IGVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChieVZhbElu
Zm8sIGN1cnJlbnRJbnN0cnVjdGlvbiwgcHV0S2luZCwgcHJvcGVydHlOYW1lLCBkb25lQ2FzZXMs
IHNsb3dDYXNlcyk7CiAKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2Nr
LT5tX2xvY2spOwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlzLCBtX2Nv
ZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2sp
OwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNy
b0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRy
ZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xv
d1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmVDYXNlcywgYnlWYWxJbmZvLT5iYWRU
eXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKICAg
ICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKSVRTdHViUm91dGluZVNldDsK
K2NsYXNzIFZNOwogCiAvLyBUaGlzIGlzIGEgYmFzZS1jbGFzcyBmb3IgSklUIHN0dWIgcm91dGlu
ZXMsIGFuZCBhbHNvIHRoZSBjbGFzcyB5b3Ugd2FudAogLy8gdG8gaW5zdGFudGlhdGUgZGlyZWN0
bHkgaWYgeW91IGhhdmUgYSByb3V0aW5lIHRoYXQgZG9lcyBub3QgbmVlZCBhbnkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEs
NyArOTEsNyBAQCB2b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxvY2sqCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKICAgICAgICAga2V5ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5ld0NhbGxl
ZUZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICBuZXdDYWxsZWVGdW5jdGlv
biA9IEZ1bmN0aW9uUHRyKAotICAgICAgICAgICAgdGh1bmtzLmdldFNsb3dQYXRoQ2FsbFRodW5r
KHZtLCBrZXkpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHRodW5r
cy5nZXRTbG93UGF0aENhbGxUaHVuayhrZXkpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsK
ICAgICB9CiAjZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKICAgICBVTlVTRURfUEFSQU0oY29kZUJs
b2NrKTsKQEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAg
c3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7
CiAgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKICAgICAg
ICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih2bSwgc3R1YkppdCwgb3duZXIsIEpJVENv
bXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihzdHViSml0LCBv
d25lciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFp
bFRvQWxsb2NhdGUoKSkgewogICAgICAgICBsaW5rVmlydHVhbEZvcihleGVjLCBjYWxsTGlua0lu
Zm8pOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nw
ZWNpYWxpemVkVGh1bmtKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTE2Niw3ICsxNjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBmaW5hbGl6ZShNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmFsbGJhY2ss
IGNvbnN0IGNoYXIqIHRodW5rS2luZCkKICAgICAgICAgewotICAgICAgICAgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV92bSwgKnRoaXMsIEdMT0JBTF9USFVOS19JRCk7CisgICAgICAgICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQpOwogICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2ZhaWx1cmVzLCBDb2RlTG9jYXRpb25MYWJlbChmYWxs
YmFjaykpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6
ZSgpOyBpKyspCiAgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzW2ldLmZp
cnN0LCBtX2NhbGxzW2ldLnNlY29uZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3
LDcgKzc3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQogICAg
IGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGppdC5qdW1wVG9FeGNlcHRpb25I
YW5kbGVyKCp2bSk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9C
QUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIlRocm93IGV4
Y2VwdGlvbiBmcm9tIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwogfQogCkBAIC0xNDIsNyArMTQy
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcgogICAgIAogICAg
IHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtDYWxsKTsKICAgICAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxpbmsgY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7CiB9
CiAKQEAgLTE1NCw3ICsxNTQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3Jw
aGljQ2FsCiAgICAgCiAgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua1BvbHlt
b3JwaGljQ2FsbCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMaW5r
IHBvbHltb3JwaGljIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwogfQogCkBAIC0yMjMsNyArMjIz
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxUaHVua0ZvcihWTQogICAgIAogICAg
IHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvblZpcnR1YWxDYWxsKTsKICAgICAKLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwKICAgICAgICAgKCJWaXJ0dWFsICVz
IHNsb3cgcGF0aCB0aHVuayIsCkBAIC0zODIsNyArMzgyLDcgQEAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogCiAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIo
KnZtKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVO
S19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7
CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgibmF0aXZlICVzJXMgdHJh
bXBvbGluZSIsIGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRoU2F2ZWRUYWdzID8gIlRhaWwg
V2l0aCBTYXZlZCBUYWdzICIgOiBlbnRyeVR5cGUgPT0gRW50ZXJWaWFKdW1wV2l0aG91dFNhdmVk
VGFncyA/ICJUYWlsIFdpdGhvdXQgU2F2ZWQgVGFncyAiIDogIiIsIHRvQ1N0cmluZyhraW5kKS5k
YXRhKCkpKTsKIH0KIApAQCAtNTI5LDcgKzUyOSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBh
cml0eUZpeHVwR2VuZXJhdG8KICAgICBqaXQucmV0KCk7CiAjZW5kaWYKIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsICgiZml4dXAgYXJpdHkiKSk7CiB9CiAKQEAgLTUzOSw3ICs1Mzks
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdW5yZWFjaGFibGVHZW5lcmF0CiAKICAgICBqaXQu
YnJlYWtwb2ludCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xP
QkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJ1bnJlYWNo
YWJsZSB0aHVuayIpKTsKIH0KIApAQCAtMTEyNyw3ICsxMTI3LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1bgogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgp
OwogICAgIGppdC5yZXQoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBq
aXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lEKTsKICAgICBsaW5rQnVmZmVyLmxpbmsobm9Db2RlLCBDb2RlTG9jYXRpb25M
YWJlbCh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyh2bSkp
KTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKICAgICAgICAgbGlua0J1ZmZlciwgKCJTcGVj
aWFsaXplZCB0aHVuayBmb3IgYm91bmQgZnVuY3Rpb24gY2FsbHMgd2l0aCBubyBhcmd1bWVudHMi
KSk7CkBAIC0xMTY3LDcgKzExNjcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNl
cHRpb25Gcm9tCiAgICAgICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CiAgICAg
fTsKIAotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lE
KTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAg
IGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd1dhc21FeGNlcHRpb24pOwogICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKAogICAgICAgICBsaW5rQnVmZmVyLCAoIlRocm93IGV4Y2VwdGlvbiBmcm9t
IFdhc20iKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5r
cy5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZVRodQogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNl
SklUOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4odGFyZ2V0KSksIEpTSW50ZXJm
YWNlSklUOjpyZWdUMCk7CiAgICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKICAg
ICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQp
OworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxMSW50ICVzIHByb2xvZ3VlIHRo
dW5rIiwgdGh1bmtLaW5kKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQyLDcgKzM0Miw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGFrZVNh
bXBsZShjb25zdCAKIAogICAgICAgICBMb2NrSG9sZGVyIG1hY2hpbmVUaHJlYWRzTG9ja2VyKG1f
dm0uaGVhcC5tYWNoaW5lVGhyZWFkcygpLmdldExvY2soKSk7CiAgICAgICAgIExvY2tIb2xkZXIg
Y29kZUJsb2NrU2V0TG9ja2VyKG1fdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5nZXRMb2NrKCkpOwot
ICAgICAgICBMb2NrSG9sZGVyIGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIobV92bS5leGVjdXRh
YmxlQWxsb2NhdG9yLmdldExvY2soKSk7CisgICAgICAgIExvY2tIb2xkZXIgZXhlY3V0YWJsZUFs
bG9jYXRvckxvY2tlcihFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24oKS5nZXRMb2NrKCkp
OwogCiAgICAgICAgIGJvb2wgZGlkU3VzcGVuZCA9IG1fanNjRXhlY3V0aW9uVGhyZWFkLT5zdXNw
ZW5kKCk7CiAgICAgICAgIGlmIChkaWRTdXNwZW5kKSB7CkBAIC0zNjQsNyArMzY0LDcgQEAgdm9p
ZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IAogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgLy8gRklYTUU6IExldHMgaGF2ZSBhIHdheSBvZiBkZXRlY3Rpbmcgd2hlbiB3ZSdy
ZSBwYXJzaW5nIGNvZGUuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUyNzYxCi0gICAgICAgICAgICBpZiAobV92bS5leGVjdXRhYmxlQWxs
b2NhdG9yLmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIs
IG1hY2hpbmVQQykpIHsKKyAgICAgICAgICAgIGlmIChFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5n
bGV0b24oKS5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShleGVjdXRhYmxlQWxsb2NhdG9yTG9ja2Vy
LCBtYWNoaW5lUEMpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fdm0uaXNFeGVjdXRpbmdJblJl
Z0V4cEpJVCkgewogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UncmUgZXhlY3V0aW5n
IGEgcmVnZXhwLiBMZXRzIGdhdGhlciBtb3JlIGludGVyc3RpbmcgZGF0YS4KICAgICAgICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjcy
OQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjE0NTQ3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjYsNyArMTY2LDYgQEAgc3RhdGljIGJvb2wgZW5hYmxlQXNzZW1ibGVyKEV4ZWN1dGFi
bGVBbAogVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIDogbV9h
cGlMb2NrKGFkb3B0UmVmKG5ldyBKU0xvY2sodGhpcykpKQogI2lmIEVOQUJMRShBU1NFTUJMRVIp
Ci0gICAgLCBleGVjdXRhYmxlQWxsb2NhdG9yKCp0aGlzKQogI2VuZGlmCiAgICAgLCBoZWFwKHRo
aXMsIGhlYXBUeXBlKQogICAgICwgYXV4aWxpYXJ5U3BhY2UoIkF1eGlsaWFyeSIsIGhlYXAsIEFs
bG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkF1eGls
aWFyeSkpCkBAIC0xOTgsNyArMTk3LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBl
IGhlYXBUeXBlKQogICAgICwgbV9ydFRyYWNlTGlzdChuZXcgUlRUcmFjZUxpc3QoKSkKICNlbmRp
ZgogI2lmIEVOQUJMRShBU1NFTUJMRVIpCi0gICAgLCBtX2NhblVzZUFzc2VtYmxlcihlbmFibGVB
c3NlbWJsZXIoZXhlY3V0YWJsZUFsbG9jYXRvcikpCisgICAgLCBtX2NhblVzZUFzc2VtYmxlcihl
bmFibGVBc3NlbWJsZXIoRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkpKQogI2VuZGlm
CiAjaWYgRU5BQkxFKEpJVCkKICAgICAsIG1fY2FuVXNlSklUKG1fY2FuVXNlQXNzZW1ibGVyICYm
IE9wdGlvbnM6OnVzZUpJVCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShy
ZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yODUsMTQgKzI4NSw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEpT
TG9jaz4gbV9hcGlMb2NrOwogCiBwdWJsaWM6Ci0jaWYgRU5BQkxFKEFTU0VNQkxFUikKLSAgICAv
LyBleGVjdXRhYmxlQWxsb2NhdG9yIHNob3VsZCBiZSBkZXN0cnVjdGVkIGFmdGVyIHRoZSBoZWFw
LCBhcyB0aGUgaGVhcCBjYW4gY2FsbCBleGVjdXRhYmxlQWxsb2NhdG9yCi0gICAgLy8gaW4gaXRz
IGRlc3RydWN0b3IuCi0gICAgRXhlY3V0YWJsZUFsbG9jYXRvciBleGVjdXRhYmxlQWxsb2NhdG9y
OwotI2VuZGlmCi0KLSAgICAvLyBUaGUgaGVhcCBzaG91bGQgYmUganVzdCBhZnRlciBleGVjdXRh
YmxlQWxsb2NhdG9yIGFuZCBiZWZvcmUgb3RoZXIgbWVtYmVycyB0byBlbnN1cmUgdGhhdCBpdCdz
Ci0gICAgLy8gZGVzdHJ1Y3RlZCBhZnRlciBhbGwgdGhlIG9iamVjdHMgdGhhdCByZWZlcmVuY2Ug
aXQuCiAgICAgSGVhcCBoZWFwOwogICAgIAogICAgIFN1YnNwYWNlIGF1eGlsaWFyeVNwYWNlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHJldmlzaW9u
IDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTAsNyArMjUwLDcgQEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxs
VHJhcEJyZWFrcG9pbnRzKAogICAgICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVy
IHRyeSBhZ2FpbiBsYXRlci4KIAogICAgIHsKLSAgICAgICAgYXV0byBhbGxvY2F0b3IgPSB2bS5l
eGVjdXRhYmxlQWxsb2NhdG9yOworICAgICAgICBhdXRvJiBhbGxvY2F0b3IgPSBFeGVjdXRhYmxl
QWxsb2NhdG9yOjpzaW5nbGV0b24oKTsKICAgICAgICAgYXV0byBhbGxvY2F0b3JMb2NrZXIgPSB0
cnlIb2xkTG9jayhhbGxvY2F0b3IuZ2V0TG9jaygpKTsKICAgICAgICAgaWYgKCFhbGxvY2F0b3JM
b2NrZXIpCiAgICAgICAgICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBh
Z2FpbiBsYXRlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVj
dG9yLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L1ZNSW5zcGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDggKzEwNyw4IEBAIGF1dG8g
Vk1JbnNwZWN0b3I6OmlzVmFsaWRFeGVjdXRhYmxlTWVtb3IKICNpZiBFTkFCTEUoSklUKQogICAg
IGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICBib29sIGhhc1RpbWVvdXQgPSBmYWxzZTsKLSAgICBp
dGVyYXRlKFsmXSAoVk0mIHZtKSAtPiBGdW5jdG9yU3RhdHVzIHsKLSAgICAgICAgYXV0byBhbGxv
Y2F0b3IgPSB2bS5leGVjdXRhYmxlQWxsb2NhdG9yOworICAgIGl0ZXJhdGUoWyZdIChWTSYpIC0+
IEZ1bmN0b3JTdGF0dXMgeworICAgICAgICBhdXRvJiBhbGxvY2F0b3IgPSBFeGVjdXRhYmxlQWxs
b2NhdG9yOjpzaW5nbGV0b24oKTsKICAgICAgICAgYXV0byYgbG9jayA9IGFsbG9jYXRvci5nZXRM
b2NrKCk7CiAKICAgICAgICAgYm9vbCBpc1NhZmVUb0xvY2sgPSBlbnN1cmVJc1NhZmVUb0xvY2so
bG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3Bw
CShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmlu
ZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAgICAgICAgICAgICAgICAgQVNTRVJUKCEhdm0t
PmNhbGxGcmFtZUZvckNhdGNoKTsKICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICAgICAgICAg
IExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dCYWRJNjQpOwogICAgICAgICAgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbnZh
bGlkIGk2NCB1c2UgaW4gaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KSk7CiAgICAgICAgIH0KQEAg
LTQxMiw3ICs0MTIsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZN
CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBq
aXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25Q
dHIodm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBjYWxsUmV0dXJuTG9jYXRpb24o
cGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSk7CiAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgaG90UGF0aEJlZ2luKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YodGFyZ2V0VG9DaGVj
aykpOwpAQCAtNDI2LDcgKzQyNiw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2Fz
bVRvSnMoVk0KICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3Nl
bWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZURl
c2NyaXB0aW9uLmFzY2lpKCkuZGF0YSgpKSk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgd2FzbVRvV2FzbShWTSogdm0sIHVuc2lnbmVkIGltcG9ydEluZGV4KQorc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9XYXNtKHVuc2lnbmVkIGltcG9ydEluZGV4KQogewog
ICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVy
SW5mbzo6Z2V0KCk7CiAgICAgSklUIGppdDsKQEAgLTQ2Miw3ICs0NjIsNyBAQCBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub1dhc20oCiAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRy
ZXNzKHNjcmF0Y2gsIFdlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNldE9mV2FzbUVudHJ5UG9pbnRD
b2RlKCkpLCBzY3JhdGNoKTsKICAgICBqaXQuanVtcChzY3JhdGNoKTsKIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsICgiV2ViQXNzZW1ibHktPldlYkFzc2VtYmx5IGltcG9ydFslaV0i
LCBpbXBvcnRJbmRleCkpOwogfQogCkBAIC00NzAsNyArNDcwLDcgQEAgV2FzbUV4aXRTdHVicyBl
eGl0U3R1YkdlbmVyYXRvcihWTSogdm0sIAogewogICAgIFdhc21FeGl0U3R1YnMgc3R1YnM7CiAg
ICAgc3R1YnMud2FzbVRvSnMgPSB3YXNtVG9Kcyh2bSwgY2FsbExpbmtJbmZvcywgc2lnbmF0dXJl
SW5kZXgsIGltcG9ydEluZGV4KTsKLSAgICBzdHVicy53YXNtVG9XYXNtID0gd2FzbVRvV2FzbSh2
bSwgaW1wb3J0SW5kZXgpOworICAgIHN0dWJzLndhc21Ub1dhc20gPSB3YXNtVG9XYXNtKGltcG9y
dEluZGV4KTsKICAgICByZXR1cm4gc3R1YnM7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGxhbi5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY3LDEzICsyNjcs
MTMgQEAgdm9pZCBQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlcgogICAgICAgICAg
ICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07CiAgICAg
ICAgICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZURlc2NyaXB0aW9uID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldCgmbV92bSwgc2lnbmF0dXJlSW5kZXgpLT50b1N0cmluZygpOwogICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKG1fdm0s
ICpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxs
cHRyKTsKICAgICAgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rp
b25JbmRleF0tPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0KICAgICAgICAgICAgICAgICAg
ICAgc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KEZJTkFMSVpFX0NPREUobGlua0J1
ZmZlciwgKCJXZWJBc3NlbWJseSBmdW5jdGlvblslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBzaWdu
YXR1cmVEZXNjcmlwdGlvbi5hc2NpaSgpLmRhdGEoKSkpLCBXVEZNb3ZlKGNvbnRleHQud2FzbUVu
dHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIobV92bSwgKmNv
bnRleHQuanNFbnRyeXBvaW50SklULCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0LmpzRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CiAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjb250ZXh0LmpzRW50cnlwb2ludFRv
V2FzbUVudHJ5cG9pbnRDYWxsLCBGdW5jdGlvblB0cihtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tm
dW5jdGlvbkluZGV4XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpKSk7CiAKICAgICAgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5j
dGlvbnNbZnVuY3Rpb25JbmRleF0tPmpzVG9XYXNtRW50cnlwb2ludC5jb21waWxhdGlvbiA9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNpb24gMjE0NTQ3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2NDYsNyArMjY0Niw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9p
ZCBjb21waWxlKFZNKiB2bSwgWWFyckNvZGVCbG9jayYgaml0T2JqZWN0KQorICAgIHZvaWQgY29t
cGlsZShZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QpCiAgICAgewogICAgICAgICBnZW5lcmF0ZUVu
dGVyKCk7CiAKQEAgLTI2NzQsNyArMjY3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgZ2VuZXJhdGUo
KTsKICAgICAgICAgYmFja3RyYWNrKCk7CiAKLSAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KCp2bSwgKnRoaXMsIFJFR0VYUF9DT0RFX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAg
ICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnRoaXMsIFJFR0VYUF9DT0RFX0lELCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOwogICAgICAgICBpZiAobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0
ZSgpKSB7CiAgICAgICAgICAgICBqaXRPYmplY3Quc2V0RmFsbEJhY2sodHJ1ZSk7CiAgICAgICAg
ICAgICByZXR1cm47CkBAIC0yNzI5LDkgKzI3MjksOSBAQCBwcml2YXRlOgogdm9pZCBqaXRDb21w
aWxlKFlhcnJQYXR0ZXJuJiBwYXR0ZXJuLCBZYXJyQ2hhclNpemUgY2hhclNpemUsIFZNKiB2bSwg
WWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBZYXJySklUQ29tcGlsZU1vZGUgbW9kZSkKIHsKICAg
ICBpZiAobW9kZSA9PSBNYXRjaE9ubHkpCi0gICAgICAgIFlhcnJHZW5lcmF0b3I8TWF0Y2hPbmx5
Pih2bSwgcGF0dGVybiwgY2hhclNpemUpLmNvbXBpbGUodm0sIGppdE9iamVjdCk7CisgICAgICAg
IFlhcnJHZW5lcmF0b3I8TWF0Y2hPbmx5Pih2bSwgcGF0dGVybiwgY2hhclNpemUpLmNvbXBpbGUo
aml0T2JqZWN0KTsKICAgICBlbHNlCi0gICAgICAgIFlhcnJHZW5lcmF0b3I8SW5jbHVkZVN1YnBh
dHRlcm5zPih2bSwgcGF0dGVybiwgY2hhclNpemUpLmNvbXBpbGUodm0sIGppdE9iamVjdCk7Cisg
ICAgICAgIFlhcnJHZW5lcmF0b3I8SW5jbHVkZVN1YnBhdHRlcm5zPih2bSwgcGF0dGVybiwgY2hh
clNpemUpLmNvbXBpbGUoaml0T2JqZWN0KTsKIH0KIAogfX0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305780</attachid>
            <date>2017-03-29 13:38:35 -0700</date>
            <delta_ts>2017-03-29 14:05:08 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>120565</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUg
IkpJVENvZGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5o
IgotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBpbGF0aW9uVGhyZWFkLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtMjQyLDggKzI0MSw3IEBAIHZvaWQgTGlua0J1ZmZlcjo6YWxs
b2NhdGUoTWFjcm9Bc3NlbWJsZXIKICAgICAgICAgaW5pdGlhbFNpemUgPSBtYWNyb0Fzc2VtYmxl
ci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQobV92bSAh
PSBudWxscHRyKTsKLSAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBtX3ZtLT5leGVjdXRhYmxlQWxs
b2NhdG9yLmFsbG9jYXRlKCptX3ZtLCBpbml0aWFsU2l6ZSwgb3duZXJVSUQsIGVmZm9ydCk7Cisg
ICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCku
YWxsb2NhdGUoaW5pdGlhbFNpemUsIG93bmVyVUlELCBlZmZvcnQpOwogICAgIGlmICghbV9leGVj
dXRhYmxlTWVtb3J5KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb2RlID0gbV9leGVjdXRhYmxl
TWVtb3J5LT5zdGFydCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9MaW5rQnVmZmVyLmgJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgVk07CiAKIC8vIExp
bmtCdWZmZXI6CiAvLwpAQCAtNzksMTEgKzc4LDEwIEBAIGNsYXNzIExpbmtCdWZmZXIgewogI2Vu
ZGlmCiAKIHB1YmxpYzoKLSAgICBMaW5rQnVmZmVyKFZNJiB2bSwgTWFjcm9Bc3NlbWJsZXImIG1h
Y3JvQXNzZW1ibGVyLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
ID0gSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCkKKyAgICBMaW5rQnVmZmVyKE1hY3JvQXNzZW1i
bGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCA9IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpCiAgICAgICAgIDogbV9zaXplKDAp
CiAgICAgICAgICwgbV9kaWRBbGxvY2F0ZShmYWxzZSkKICAgICAgICAgLCBtX2NvZGUoMCkKLSAg
ICAgICAgLCBtX3ZtKCZ2bSkKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9jb21wbGV0ZWQo
ZmFsc2UpCiAjZW5kaWYKQEAgLTk1LDcgKzkzLDYgQEAgcHVibGljOgogICAgICAgICA6IG1fc2l6
ZShzaXplKQogICAgICAgICAsIG1fZGlkQWxsb2NhdGUoZmFsc2UpCiAgICAgICAgICwgbV9jb2Rl
KGNvZGUpCi0gICAgICAgICwgbV92bSgwKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBtX2Nv
bXBsZXRlZChmYWxzZSkKICNlbmRpZgpAQCAtMjUzLDggKzI1MCw2IEBAIHB1YmxpYzoKICAgICBi
b29sIHdhc0FscmVhZHlEaXNhc3NlbWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FscmVhZHlEaXNh
c3NlbWJsZWQ7IH0KICAgICB2b2lkIGRpZEFscmVhZHlEaXNhc3NlbWJsZSgpIHsgbV9hbHJlYWR5
RGlzYXNzZW1ibGVkID0gdHJ1ZTsgfQogCi0gICAgVk0mIHZtKCkgeyByZXR1cm4gKm1fdm07IH0K
LQogcHJpdmF0ZToKICNpZiBFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAgICAgaW50IGV4ZWN1
dGFibGVPZmZzZXRGb3IoaW50IGxvY2F0aW9uKQpAQCAtMzA1LDcgKzMwMCw2IEBAIHByaXZhdGU6
CiAjZW5kaWYKICAgICBib29sIG1fZGlkQWxsb2NhdGU7CiAgICAgdm9pZCogbV9jb2RlOwotICAg
IFZNKiBtX3ZtOwogI2lmbmRlZiBOREVCVUcKICAgICBib29sIG1fY29tcGxldGVkOwogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAkocmV2aXNpb24gMjE0
NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CiAKLUNvbXBpbGF0aW9uIGNvbXBpbGUoVk0mIHZtLCBQcm9jZWR1cmUmIHByb2MsIHVuc2lnbmVk
IG9wdExldmVsKQorQ29tcGlsYXRpb24gY29tcGlsZShQcm9jZWR1cmUmIHByb2MsIHVuc2lnbmVk
IG9wdExldmVsKQogewogICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCJDb21waWxhdGlvbiIp
OwogICAgIApAQCAtNDYsNyArNDYsNyBAQCBDb21waWxhdGlvbiBjb21waWxlKFZNJiB2bSwgUHJv
Y2VkdXJlJiBwCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9j
LCBqaXQpOwotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgaml0LCBudWxscHRyKTsKKyAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRyKTsKIAogICAgIHJldHVybiBDb21w
aWxhdGlvbihGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiQjM6OkNvbXBpbGF0aW9uIikpLCBw
cm9jLnJlbGVhc2VCeXByb2R1Y3RzKCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29tcGlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbXBpbGUuaAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tcGlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIFByb2Nl
ZHVyZTsKIC8vIFRoZW4geW91IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2ZSBmb3Ig
YXMgbG9uZyBhcyB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHJ1biB0aGUgY29kZS4KIC8vIElmIHRo
aXMgQVBJIGZlZWxzIHRvbyBoaWdoLWxldmVsLCB5b3UgY2FuIHVzZSBCMzo6Z2VuZXJhdGUoKSBk
aXJlY3RseS4KIAotSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24gY29tcGlsZShWTSYsIFBy
b2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitKU19FWFBPUlRfUFJJVkFURSBDb21w
aWxhdGlvbiBjb21waWxlKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDYgQEAKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlB1cmVOYU4uaCIKLSNp
bmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPGNtYXRoPgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNs
dWRlIDx3dGYvRmFzdFRMUy5oPgpAQCAtMTE4LDExICsxMTcsOSBAQCBTdGF0aWNMb2NrIGNyYXNo
TG9jazsKICAgICAgICAgQ1JBU0goKTsgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCi1WTSogdm07
Ci0KLXN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZShQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKQorc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9u
PiBjb21waWxlUHJvYyhQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAx
KQogewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPihCMzo6Y29tcGls
ZSgqdm0sIHByb2NlZHVyZSwgb3B0TGV2ZWwpKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxDb21waWxhdGlvbj4oQjM6OmNvbXBpbGUocHJvY2VkdXJlLCBvcHRMZXZlbCkpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CkBAIC0xNDEsNyArMTM4
LDcgQEAgVCBpbnZva2UoY29uc3QgQ29tcGlsYXRpb24mIGNvZGUsIEFyZ3VtZQogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogVCBjb21waWxlQW5kUnVuKFByb2Nl
ZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogewotICAgIHJldHVybiBp
bnZva2U8VD4oKmNvbXBpbGUocHJvY2VkdXJlKSwgYXJndW1lbnRzLi4uKTsKKyAgICByZXR1cm4g
aW52b2tlPFQ+KCpjb21waWxlUHJvYyhwcm9jZWR1cmUpLCBhcmd1bWVudHMuLi4pOwogfQogCiB2
b2lkIGxvd2VyVG9BaXJGb3JUZXN0aW5nKFByb2NlZHVyZSYgcHJvYykKQEAgLTMxMiw3ICszMDks
NyBAQCB2b2lkIHRlc3RMb2FkQWNxNDIoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmeCksCiAgICAgICAgICAgICAwLCBIZWFwUmFu
Z2UoNDIpLCBIZWFwUmFuZ2UoNDIpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2Mp
OworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGlmIChpc0FSTTY0KCkp
CiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGRhIik7CiAgICAgQ0hFQ0so
aW52b2tlPGludD4oKmNvZGUpID09IDQyKTsKQEAgLTYxNSw3ICs2MTIsNyBAQCB2b2lkIHRlc3RB
ZGRBcmdaZXJvSW1tWkRlZigpCiAgICAgICAgICAgICBhcmcsCiAgICAgICAgICAgICBjb25zdFpl
cm8pKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYywgMCk7CisgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYywgMCk7CiAgICAgQ0hFQ0soaW52b2tlPGludDY0X3Q+KCpjb2Rl
LCAweDAxMjM0NTY3ODlhYmNkZWYpID09IDB4ODlhYmNkZWYpOwogfQogCkBAIC02MzIsNyArNjI5
LDcgQEAgdm9pZCB0ZXN0QWRkTG9hZFR3aWNlKCkKICAgICAgICAgICAgIHByb2MsIFJldHVybiwg
T3JpZ2luKCksCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwg
T3JpZ2luKCksIGxvYWQsIGxvYWQpKTsKIAotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MsIG9wdExldmVsKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYywgb3B0
TGV2ZWwpOwogICAgICAgICBDSEVDSyhpbnZva2U8aW50MzJfdD4oKmNvZGUpID09IDQyICogMik7
CiAgICAgfTsKIApAQCAtOTg0LDcgKzk4MSw3IEBAIHZvaWQgdGVzdE11bExvYWRUd2ljZSgpCiAg
ICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBNdWwsIE9yaWdpbigpLCBsb2FkLCBsb2FkKSk7CiAKLSAgICAg
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jLCBvcHRMZXZlbCk7CisgICAgICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MsIG9wdExldmVsKTsKICAgICAgICAgQ0hFQ0soaW52b2tlPGlu
dDMyX3Q+KCpjb2RlKSA9PSA0MiAqIDQyKTsKICAgICB9OwogCkBAIC0xMDA0LDcgKzEwMDEsNyBA
QCB2b2lkIHRlc3RNdWxBZGRBcmdzTGVmdCgpCiAgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBtdWx0aXBsaWVkLCBhcmcyKTsKICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgYWRk
ZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDY0T3BlcmFuZHMo
KTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTEwMjgsNyArMTAyNSw3IEBA
IHZvaWQgdGVzdE11bEFkZEFyZ3NSaWdodCgpCiAgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBhcmcwLCBtdWx0aXBsaWVkKTsKICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgYWRk
ZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDY0T3BlcmFuZHMo
KTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTEwNTUsNyArMTA1Miw3IEBA
IHZvaWQgdGVzdE11bEFkZEFyZ3NMZWZ0MzIoKQogICAgIFZhbHVlKiBhZGRlZCA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgbXVsdGlwbGllZCwgYXJnMik7CiAg
ICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIGFk
ZGVkKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIHRlc3RWYWx1ZXMgPSBpbnQzMk9wZXJhbmRz
KCk7CiAgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CkBAIC0xMDgyLDcgKzEwNzksNyBA
QCB2b2lkIHRlc3RNdWxBZGRBcmdzUmlnaHQzMigpCiAgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBhcmcwLCBtdWx0aXBsaWVkKTsK
ICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
YWRkZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDMyT3BlcmFu
ZHMoKTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTExMDYsNyArMTEwMyw3
IEBAIHZvaWQgdGVzdE11bFN1YkFyZ3NMZWZ0KCkKICAgICBWYWx1ZSogYWRkZWQgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIG11bHRpcGxpZWQsIGFyZzIpOwog
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBh
ZGRlZCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgYXV0byB0ZXN0VmFsdWVzID0gaW50NjRPcGVyYW5k
cygpOwogICAgIGZvciAoYXV0byBhIDogdGVzdFZhbHVlcykgewpAQCAtMTEzMCw3ICsxMTI3LDcg
QEAgdm9pZCB0ZXN0TXVsU3ViQXJnc1JpZ2h0KCkKICAgICBWYWx1ZSogYWRkZWQgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIGFyZzAsIG11bHRpcGxpZWQpOwog
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBh
ZGRlZCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgYXV0byB0ZXN0VmFsdWVzID0gaW50NjRPcGVyYW5k
cygpOwogICAgIGZvciAoYXV0byBhIDogdGVzdFZhbHVlcykgewpAQCAtMTE1Nyw3ICsxMTU0LDcg
QEAgdm9pZCB0ZXN0TXVsU3ViQXJnc0xlZnQzMigpCiAgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCBtdWx0aXBsaWVkLCBhcmcyKTsK
ICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
YWRkZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDMyT3BlcmFu
ZHMoKTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTExODQsNyArMTE4MSw3
IEBAIHZvaWQgdGVzdE11bFN1YkFyZ3NSaWdodDMyKCkKICAgICBWYWx1ZSogYWRkZWQgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIGFyZzAsIG11bHRpcGxpZWQp
OwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBhZGRlZCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgYXV0byB0ZXN0VmFsdWVzID0gaW50MzJPcGVy
YW5kcygpOwogICAgIGZvciAoYXV0byBhIDogdGVzdFZhbHVlcykgewpAQCAtMTIwOCw3ICsxMjA1
LDcgQEAgdm9pZCB0ZXN0TXVsTmVnQXJncygpCiAgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCB6ZXJvLCBtdWx0aXBsaWVkKTsKICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgYWRk
ZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDY0T3BlcmFuZHMo
KTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTEyMzIsNyArMTIyOSw3IEBA
IHZvaWQgdGVzdE11bE5lZ0FyZ3MzMigpCiAgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCB6ZXJvLCBtdWx0aXBsaWVkKTsKICAgICBy
b290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgYWRkZWQp
OwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21w
aWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDMyT3BlcmFuZHMoKTsK
ICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTQ2MzYsNyArNDYzMyw3IEBAIHZv
aWQgdGVzdENvbXBhcmVGbG9hdFRvRG91YmxlVGhyb3VnaFBoaSgKICAgICBWYWx1ZSogZXF1YWwg
PSB0YWlsLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEVxdWFsLCBPcmlnaW4oKSwgZG91YmxlSW5w
dXQsIGFyZzJBc0ZSb3VuZGVkRG91YmxlKTsKICAgICB0YWlsLT5hcHBlbmROZXdDb250cm9sVmFs
dWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgZXF1YWwpOwogCi0gICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpbnQz
Ml90IGludGVnZXJBID0gYml0d2lzZV9jYXN0PGludDMyX3Q+KGEpOwogICAgIGRvdWJsZSBkb3Vi
bGVCID0gYjsKICAgICBDSEVDSyhpbnZva2U8aW50NjRfdD4oKmNvZGUsIDEsIGludGVnZXJBLCBk
b3VibGVCKSA9PSAoYSA9PSBiKSk7CkBAIC00Njg1LDcgKzQ2ODIsNyBAQCB2b2lkIHRlc3REb3Vi
bGVUb0Zsb2F0VGhyb3VnaFBoaShmbG9hdCB2CiAgICAgVmFsdWUqIGZsb2F0UmVzdWx0ID0gdGFp
bC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBEb3VibGVUb0Zsb2F0LCBPcmlnaW4oKSwgZG91Ymxl
SW5wdXQpOwogICAgIHRhaWwtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCBmbG9hdFJlc3VsdCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGlzSWRlbnRpY2Fs
KGludm9rZTxmbG9hdD4oKmNvZGUsIDEsIGJpdHdpc2VfY2FzdDxpbnQzMl90Pih2YWx1ZSkpLCB2
YWx1ZSArIDQyLjVmKSk7CiAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqY29k
ZSwgMCwgYml0d2lzZV9jYXN0PGludDMyX3Q+KHZhbHVlKSksIHN0YXRpY19jYXN0PGZsb2F0PihN
X1BJKSkpOwogfQpAQCAtNDc0MCw3ICs0NzM3LDcgQEAgdm9pZCB0ZXN0UmVkdWNlRmxvYXRUb0Rv
dWJsZVZhbGlkYXRlcygpCiAgICAgICAgICAgICByZXN1bHQpOwogICAgIHRhaWwtPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwogCi0gICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpjb2RlLCAxKSwgMTEuNWYg
KiAxMS41ZiArIHN0YXRpY19jYXN0PGZsb2F0PihiaXR3aXNlX2Nhc3Q8ZG91YmxlPihzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oMSkpKSArIDExLjVmKSk7CiAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52
b2tlPGZsb2F0PigqY29kZSwgMCksIDEwLjVmICogMTAuNWYgKyBzdGF0aWNfY2FzdDxmbG9hdD4o
Yml0d2lzZV9jYXN0PGRvdWJsZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDApKSkgKyAxMC41Zikp
OwogfQpAQCAtNDc4MCw3ICs0Nzc3LDcgQEAgdm9pZCB0ZXN0RG91YmxlUHJvZHVjZXJQaGlUb0Zs
b2F0Q29udmVycwogICAgIFZhbHVlKiBmbG9hdFJlc3VsdCA9IHRhaWwtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgRG91YmxlVG9GbG9hdCwgT3JpZ2luKCksIGZpbmFsQWRkKTsKICAgICB0YWlsLT5h
cHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgZmxvYXRSZXN1bHQp
OwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21w
aWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpjb2Rl
LCAxLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSwgdmFsdWUgKyB2YWx1ZSkpOwogICAg
IENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKmNvZGUsIDAsIGJpdHdpc2VfY2FzdDxp
bnQzMl90Pih2YWx1ZSkpLCA0Mi41ZiArIHZhbHVlKSk7CiB9CkBAIC00ODI5LDcgKzQ4MjYsNyBA
QCB2b2lkIHRlc3REb3VibGVQcm9kdWNlclBoaVRvRmxvYXRDb252ZXJzCiAKICAgICB0YWlsLT5h
cHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgZG91YmxlQWRkKTsK
IAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGls
ZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGRvdWJsZT4oKmNvZGUs
IDEsIGJpdHdpc2VfY2FzdDxpbnQzMl90Pih2YWx1ZSkpLCAodmFsdWUgKyB2YWx1ZSkgKyBzdGF0
aWNfY2FzdDxkb3VibGU+KHZhbHVlKSkpOwogICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxk
b3VibGU+KCpjb2RlLCAwLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSwgc3RhdGljX2Nh
c3Q8ZG91YmxlPigoNDIuNWYgKyB2YWx1ZSkgKyA0Mi41ZikpKTsKIH0KQEAgLTQ4NjksNyArNDg2
Niw3IEBAIHZvaWQgdGVzdERvdWJsZVByb2R1Y2VyUGhpV2l0aE5vbkZsb2F0Q28KICAgICBWYWx1
ZSogZmxvYXRSZXN1bHQgPSB0YWlsLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIERvdWJsZVRvRmxv
YXQsIE9yaWdpbigpLCBmaW5hbEFkZCk7CiAgICAgdGFpbC0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KHByb2MsIFJldHVybiwgT3JpZ2luKCksIGZsb2F0UmVzdWx0KTsKIAotICAgIGF1dG8gY29kZSA9
IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAg
Q0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqY29kZSwgMSwgYml0d2lzZV9jYXN0PGlu
dDMyX3Q+KHZhbHVlKSksIHZhbHVlICsgdmFsdWUpKTsKICAgICBDSEVDSyhpc0lkZW50aWNhbChp
bnZva2U8ZmxvYXQ+KCpjb2RlLCAwLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGNvbnN0VmFsdWUgKyB2YWx1ZSkpKTsKIH0KQEAgLTUyMjUsNyArNTIy
Miw3IEBAIHZvaWQgdGVzdElUb0Q2NEFyZygpCiAgICAgVmFsdWUqIHNyY0FzRG91YmxlID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgc3JjKTsKICAgICByb290
LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgc3JjQXNEb3Vi
bGUpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICBmb3IgKGF1dG8gdGVzdFZhbHVlIDogaW50NjRPcGVyYW5k
cygpKQogICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZG91YmxlPigqY29kZSwgdGVz
dFZhbHVlLnZhbHVlKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPih0ZXN0VmFsdWUudmFsdWUpKSk7CiB9
CkBAIC01MjM4LDcgKzUyMzUsNyBAQCB2b2lkIHRlc3RJVG9GNjRBcmcoKQogICAgIFZhbHVlKiBz
cmNBc0Zsb2F0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9GLCBPcmlnaW4oKSwg
c3JjKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgc3JjQXNGbG9hdCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGZvciAoYXV0byB0ZXN0VmFsdWUg
OiBpbnQ2NE9wZXJhbmRzKCkpCiAgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9h
dD4oKmNvZGUsIHRlc3RWYWx1ZS52YWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pih0ZXN0VmFsdWUu
dmFsdWUpKSk7CiB9CkBAIC01MjUyLDcgKzUyNDksNyBAQCB2b2lkIHRlc3RJVG9EMzJBcmcoKQog
ICAgIFZhbHVlKiBzcmNBc0RvdWJsZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRv
RCwgT3JpZ2luKCksIHNyYyk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IFJldHVybiwgT3JpZ2luKCksIHNyY0FzRG91YmxlKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBp
bGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgZm9yIChh
dXRvIHRlc3RWYWx1ZSA6IGludDMyT3BlcmFuZHMoKSkKICAgICAgICAgQ0hFQ0soaXNJZGVudGlj
YWwoaW52b2tlPGRvdWJsZT4oKmNvZGUsIHRlc3RWYWx1ZS52YWx1ZSksIHN0YXRpY19jYXN0PGRv
dWJsZT4odGVzdFZhbHVlLnZhbHVlKSkpOwogfQpAQCAtNTI2Niw3ICs1MjYzLDcgQEAgdm9pZCB0
ZXN0SVRvRjMyQXJnKCkKICAgICBWYWx1ZSogc3JjQXNGbG9hdCA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgSVRvRiwgT3JpZ2luKCksIHNyYyk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHNyY0FzRmxvYXQpOwogCi0gICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKICAgICBmb3IgKGF1dG8gdGVzdFZhbHVlIDogaW50MzJPcGVyYW5kcygpKQogICAgICAgICBD
SEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpjb2RlLCB0ZXN0VmFsdWUudmFsdWUpLCBz
dGF0aWNfY2FzdDxmbG9hdD4odGVzdFZhbHVlLnZhbHVlKSkpOwogfQpAQCAtNTI4MCw3ICs1Mjc3
LDcgQEAgdm9pZCB0ZXN0SVRvRDY0TWVtKCkKICAgICBWYWx1ZSogc3JjQXNEb3VibGUgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9yaWdpbigpLCBsb2FkZWRTcmMpOwogICAg
IHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBzcmNB
c0RvdWJsZSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGludDY0X3QgaW5NZW1vcnlWYWx1ZTsKICAgICBm
b3IgKGF1dG8gdGVzdFZhbHVlIDogaW50NjRPcGVyYW5kcygpKSB7CiAgICAgICAgIGluTWVtb3J5
VmFsdWUgPSB0ZXN0VmFsdWUudmFsdWU7CkBAIC01Mjk4LDcgKzUyOTUsNyBAQCB2b2lkIHRlc3RJ
VG9GNjRNZW0oKQogICAgIFZhbHVlKiBzcmNBc0Zsb2F0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBJVG9GLCBPcmlnaW4oKSwgbG9hZGVkU3JjKTsKICAgICByb290LT5hcHBlbmROZXdD
b250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgc3JjQXNGbG9hdCk7CiAKLSAgICBh
dXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHBy
b2MpOwogICAgIGludDY0X3QgaW5NZW1vcnlWYWx1ZTsKICAgICBmb3IgKGF1dG8gdGVzdFZhbHVl
IDogaW50NjRPcGVyYW5kcygpKSB7CiAgICAgICAgIGluTWVtb3J5VmFsdWUgPSB0ZXN0VmFsdWUu
dmFsdWU7CkBAIC01MzE2LDcgKzUzMTMsNyBAQCB2b2lkIHRlc3RJVG9EMzJNZW0oKQogICAgIFZh
bHVlKiBzcmNBc0RvdWJsZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3Jp
Z2luKCksIGxvYWRlZFNyYyk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IFJldHVybiwgT3JpZ2luKCksIHNyY0FzRG91YmxlKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBp
bGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaW50MzJf
dCBpbk1lbW9yeVZhbHVlOwogICAgIGZvciAoYXV0byB0ZXN0VmFsdWUgOiBpbnQzMk9wZXJhbmRz
KCkpIHsKICAgICAgICAgaW5NZW1vcnlWYWx1ZSA9IHRlc3RWYWx1ZS52YWx1ZTsKQEAgLTUzMzQs
NyArNTMzMSw3IEBAIHZvaWQgdGVzdElUb0YzMk1lbSgpCiAgICAgVmFsdWUqIHNyY0FzRmxvYXQg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0YsIE9yaWdpbigpLCBsb2FkZWRTcmMp
OwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBzcmNBc0Zsb2F0KTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaW50MzJfdCBpbk1lbW9yeVZhbHVlOwog
ICAgIGZvciAoYXV0byB0ZXN0VmFsdWUgOiBpbnQzMk9wZXJhbmRzKCkpIHsKICAgICAgICAgaW5N
ZW1vcnlWYWx1ZSA9IHRlc3RWYWx1ZS52YWx1ZTsKQEAgLTUzOTIsNyArNTM4OSw3IEBAIHZvaWQg
dGVzdElUb0RSZWR1Y2VkVG9JVG9GNjRBcmcoKQogICAgIFZhbHVlKiBmbG9hdFJlc3VsdCA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgRG91YmxlVG9GbG9hdCwgT3JpZ2luKCksIHNyY0Fz
RG91YmxlKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgZmxvYXRSZXN1bHQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBmb3IgKGF1dG8gdGVzdFZh
bHVlIDogaW50NjRPcGVyYW5kcygpKQogICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8
ZmxvYXQ+KCpjb2RlLCB0ZXN0VmFsdWUudmFsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4odGVzdFZh
bHVlLnZhbHVlKSkpOwogfQpAQCAtNTQwNyw3ICs1NDA0LDcgQEAgdm9pZCB0ZXN0SVRvRFJlZHVj
ZWRUb0lUb0YzMkFyZygpCiAgICAgVmFsdWUqIGZsb2F0UmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBEb3VibGVUb0Zsb2F0LCBPcmlnaW4oKSwgc3JjQXNEb3VibGUpOwogICAg
IHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBmbG9h
dFJlc3VsdCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGZvciAoYXV0byB0ZXN0VmFsdWUgOiBpbnQzMk9w
ZXJhbmRzKCkpCiAgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKmNvZGUs
IHRlc3RWYWx1ZS52YWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pih0ZXN0VmFsdWUudmFsdWUpKSk7
CiB9CkBAIC01Nzg5LDcgKzU3ODYsNyBAQCB2b2lkIHRlc3RTdG9yZVJlbEFkZExvYWRBY3EzMihp
bnQgYW1vdW50CiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRv
IGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OwogICAgIGlmIChpc0FSTTY0KCkpIHsKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNv
ZGUsICJsZGEiKTsKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJzdGwiKTsK
QEAgLTU4NjIsNyArNTg1OSw3IEBAIHZvaWQgdGVzdFN0b3JlUmVsQWRkTG9hZEFjcTgoaW50IGFt
b3VudCwKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAg
ICAgaWYgKGlzQVJNNjQoKSkgewogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwg
ImxkYSIpOwogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInN0bCIpOwpAQCAt
NTkwMSw3ICs1ODk4LDcgQEAgdm9pZCB0ZXN0U3RvcmVSZWxBZGRGZW5jZUxvYWRBY3E4KGludCBh
bQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICByb290LT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0g
Y29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBp
ZiAoaXNBUk02NCgpKSB7CiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGRh
Iik7CiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAic3RsIik7CkBAIC01OTc0
LDcgKzU5NzEsNyBAQCB2b2lkIHRlc3RTdG9yZVJlbEFkZExvYWRBY3ExNihpbnQgYW1vdW50CiAg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGlmIChp
c0FSTTY0KCkpIHsKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJsZGEiKTsK
ICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJzdGwiKTsKQEAgLTYwNDMsNyAr
NjA0MCw3IEBAIHZvaWQgdGVzdFN0b3JlUmVsQWRkTG9hZEFjcTY0KGludCBhbW91bnQKICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaWYgKGlzQVJN
NjQoKSkgewogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxkYSIpOwogICAg
ICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInN0bCIpOwpAQCAtNzA0OSw3ICs3MDQ2
LDcgQEAgdm9pZCB0ZXN0QnJhbmNoKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwK
ICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCA0MikgPT0g
MSk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDApID09IDApOwogfQpAQCAtNzA3NCw3
ICs3MDcxLDcgQEAgdm9pZCB0ZXN0QnJhbmNoUHRyKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2Rl
LCBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oNDIpKSA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8aW50
PigqY29kZSwgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDApKSA9PSAwKTsKIH0KQEAgLTcxMDcsNyAr
NzEwNCw3IEBAIHZvaWQgdGVzdERpYW1vbmQoKQogICAgIGVsc2VSZXN1bHQtPnNldFBoaShwaGkp
OwogICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBwaGkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09
IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KQEAgLTcxMzcs
NyArNzEzNCw3IEBAIHZvaWQgdGVzdEJyYW5jaE5vdEVxdWFsKCkKICAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnQ+
KCpjb2RlLCA0MikgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDApID09IDAp
OwogfQpAQCAtNzE2Nyw3ICs3MTY0LDcgQEAgdm9pZCB0ZXN0QnJhbmNoTm90RXF1YWxDb21tdXRl
KCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwog
ICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCA0MikgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tl
PGludD4oKmNvZGUsIDApID09IDApOwogfQpAQCAtNzIwMCw3ICs3MTk3LDcgQEAgdm9pZCB0ZXN0
QnJhbmNoTm90RXF1YWxOb3RFcXVhbCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
CiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09
IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KQEAgLTcyMzAs
NyArNzIyNyw3IEBAIHZvaWQgdGVzdEJyYW5jaEVxdWFsKCkKICAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCAxKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpj
b2RlLCA0MikgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDApID09IDApOwog
fQpAQCAtNzI2Myw3ICs3MjYwLDcgQEAgdm9pZCB0ZXN0QnJhbmNoRXF1YWxFcXVhbCgpCiAgICAg
ICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVD
SyhpbnZva2U8aW50PigqY29kZSwgNDIpID09IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpj
b2RlLCAwKSA9PSAwKTsKIH0KQEAgLTcyOTMsNyArNzI5MCw3IEBAIHZvaWQgdGVzdEJyYW5jaEVx
dWFsQ29tbXV0ZSgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVs
c2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSkpOwogCi0g
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09IDEpOwogICAgIENI
RUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KQEAgLTczMjYsNyArNzMyMyw3IEBA
IHZvaWQgdGVzdEJyYW5jaEVxdWFsRXF1YWwxKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmln
aW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCAxKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCA0
MikgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDApID09IDApOwogfQpAQCAt
Nzc0MSw3ICs3NzM4LDcgQEAgdm9pZCB0ZXN0QnJhbmNoTG9hZFB0cigpCiAgICAgICAgIHByb2Ms
IFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpbnRwdHJfdCBjb25k
OwogICAgIGNvbmQgPSA0MjsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJmNvbmQpID09
IDEpOwpAQCAtNzc3MSw3ICs3NzY4LDcgQEAgdm9pZCB0ZXN0QnJhbmNoTG9hZDMyKCkKICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGludDMy
X3QgY29uZDsKICAgICBjb25kID0gNDI7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZj
b25kKSA9PSAxKTsKQEAgLTc4MDEsNyArNzc5OCw3IEBAIHZvaWQgdGVzdEJyYW5jaExvYWQ4Uygp
CiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2Rl
ID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAg
ICBpbnQ4X3QgY29uZDsKICAgICBjb25kID0gLTE7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNv
ZGUsICZjb25kKSA9PSAxKTsKQEAgLTc4MzEsNyArNzgyOCw3IEBAIHZvaWQgdGVzdEJyYW5jaExv
YWQ4WigpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNl
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKICAgICB1aW50OF90IGNvbmQ7CiAgICAgY29uZCA9IDE7CiAgICAgQ0hFQ0soaW52b2tlPGlu
dD4oKmNvZGUsICZjb25kKSA9PSAxKTsKQEAgLTc4NjEsNyArNzg1OCw3IEBAIHZvaWQgdGVzdEJy
YW5jaExvYWQxNlMoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICBl
bHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAot
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAgICAgaW50MTZfdCBjb25kOwogICAgIGNvbmQgPSAtMTsKICAgICBDSEVDSyhp
bnZva2U8aW50PigqY29kZSwgJmNvbmQpID09IDEpOwpAQCAtNzg5MSw3ICs3ODg4LDcgQEAgdm9p
ZCB0ZXN0QnJhbmNoTG9hZDE2WigpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAg
ICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
MCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICB1aW50MTZfdCBjb25kOwogICAgIGNvbmQgPSAxOwogICAg
IENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmY29uZCkgPT0gMSk7CkBAIC03OTMxLDcgKzc5Mjgs
NyBAQCB2b2lkIHRlc3RCcmFuY2g4V2l0aExvYWQ4WkluZGV4KCkKICAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIHVpbnQzMl90IGNvbmQ7CiAg
ICAgY29uZCA9IDB4ZmZmZmZmZmZVOyAvLyBBbGwgYnl0ZXMgYXJlIDB4ZmYuCiAgICAgQ0hFQ0so
aW52b2tlPGludD4oKmNvZGUsICZjb25kIC0gMiwgKHNpemVvZih1aW50MzJfdCkgKiAyKSA+PiBs
b2dTY2FsZSkgPT0gMSk7CkBAIC04MDY4LDcgKzgwNjUsNyBAQCB2b2lkIHRlc3RDb21wbGV4KHVu
c2lnbmVkIG51bVZhcnMsIHVuc2lnCiAKICAgICBjdXJyZW50LT5hcHBlbmROZXdDb250cm9sVmFs
dWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgdmFyc1swXSk7CiAKLSAgICBjb21waWxlKHByb2Mp
OworICAgIGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgZG91YmxlIGFmdGVyID0gbW9ub3Rvbmlj
YWxseUluY3JlYXNpbmdUaW1lTVMoKTsKICAgICBkYXRhTG9nKHRvQ1N0cmluZygiICAgIFRoYXQg
dG9vayAiLCBhZnRlciAtIGJlZm9yZSwgIiBtcy5cbiIpKTsKQEAgLTg2MTcsNyArODYxNCw3IEBA
IHZvaWQgdGVzdFNpbXBsZUNoZWNrKCkKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
CiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIAogICAgIENIRUNL
KGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29k
ZSwgMSkgPT0gNDIpOwpAQCAtODYzNiw3ICs4NjMzLDcgQEAgdm9pZCB0ZXN0Q2hlY2tGYWxzZSgp
CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAogICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
MCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICAKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSkgPT0g
MCk7CiB9CkBAIC04NjYyLDcgKzg2NTksNyBAQCB2b2lkIHRlc3RDaGVja1RydWUoKQogICAgIHJv
b3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAot
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAgICAgCiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUpID09IDQyKTsKIH0K
QEAgLTg2OTMsNyArODY5MCw3IEBAIHZvaWQgdGVzdENoZWNrTGVzc1RoYW4oKQogICAgIHJvb3Qt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
cm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAg
IGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CiAgICAgCiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDQyKSA9PSAwKTsKICAg
ICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMTAwMCkgPT0gMCk7CkBAIC04NzM5LDcgKzg3MzYs
NyBAQCB2b2lkIHRlc3RDaGVja01lZ2FDb21ibygpCiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKAogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGlu
dDhfdCB2YWx1ZTsKICAgICB2YWx1ZSA9IDQyOwpAQCAtODc5NCw3ICs4NzkxLDcgQEAgdm9pZCB0
ZXN0Q2hlY2tUcmlja3lNZWdhQ29tYm8oKQogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZSgKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBpbnQ4X3Qg
dmFsdWU7CiAgICAgdmFsdWUgPSA0MjsKQEAgLTg4NTgsNyArODg1NSw3IEBAIHZvaWQgdGVzdENo
ZWNrVHdvTWVnYUNvbWJvcygpCiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAogICAg
ICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGludDhfdCB2YWx1ZTsK
ICAgICB2YWx1ZSA9IDQyOwpAQCAtODkzOSw3ICs4OTM2LDcgQEAgdm9pZCB0ZXN0Q2hlY2tUd29O
b25SZWR1bmRhbnRNZWdhQ29tYm9zKAogICAgIGVsc2VDYXNlLT5hcHBlbmROZXdDb250cm9sVmFs
dWUoCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIGVsc2VDYXNlLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNDUpKTsKIAotICAgIGF1dG8gY29kZSA9IGNv
bXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBp
bnQ4X3QgdmFsdWU7CiAKQEAgLTg5OTQsNyArODk5MSw3IEBAIHZvaWQgdGVzdENoZWNrQWRkSW1t
KCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tBZGQpKTsKIAotICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CiAKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMCkgPT0gNDIuMCk7CiAgICAgQ0hF
Q0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDEpID09IDQzLjApOwpAQCAtOTAzMCw3ICs5MDI3LDcg
QEAgdm9pZCB0ZXN0Q2hlY2tBZGRJbW1Db21tdXRlKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmln
aW4oKSwgY2hlY2tBZGQpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8ZG91Ymxl
PigqY29kZSwgMCkgPT0gNDIuMCk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDEp
ID09IDQzLjApOwpAQCAtOTA2NSw3ICs5MDYyLDcgQEAgdm9pZCB0ZXN0Q2hlY2tBZGRJbW1Tb21l
UmVnaXN0ZXIoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9yaWdpbigpLCBjaGVja0FkZCkpOwogCi0g
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwKSA9PSA0Mi4wKTsK
ICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMSkgPT0gNDMuMCk7CkBAIC05MTAyLDcg
KzkwOTksNyBAQCB2b2lkIHRlc3RDaGVja0FkZCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2lu
KCksIGNoZWNrQWRkKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4o
KmNvZGUsIDAsIDQyKSA9PSA0Mi4wKTsKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwg
MSwgNDIpID09IDQzLjApOwpAQCAtOTEzNSw3ICs5MTMyLDcgQEAgdm9pZCB0ZXN0Q2hlY2tBZGQ2
NCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrQWRkKSk7CiAKLSAgICBhdXRv
IGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDBsbCwgNDJsbCkgPT0gNDIuMCk7
CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDFsbCwgNDJsbCkgPT0gNDMuMCk7CkBA
IC05MTU2LDcgKzkxNTMsNyBAQCB2b2lkIHRlc3RDaGVja0FkZEZvbGQoaW50IGEsIGludCBiKQog
ICAgICAgICB9KTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgY2hlY2tBZGQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxp
bnQ+KCpjb2RlKSA9PSBhICsgYik7CiB9CkBAIC05MTc3LDcgKzkxNzQsNyBAQCB2b2lkIHRlc3RD
aGVja0FkZEZvbGRGYWlsKGludCBhLCBpbnQgYikKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIGNoZWNrQWRkKTsKIAot
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSkgPT0gNDIpOwogfQpAQCAt
OTI4NCw3ICs5MjgxLDcgQEAgdm9pZCB0ZXN0Q2hlY2tBZGRTZWxmT3ZlcmZsb3c2NCgpCiAKICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2hl
Y2tBZGQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxpbnQ2NF90PigqY29kZSwg
MGxsKSA9PSAwKTsKICAgICBDSEVDSyhpbnZva2U8aW50NjRfdD4oKmNvZGUsIDFsbCkgPT0gMik7
CkBAIC05MzE1LDcgKzkzMTIsNyBAQCB2b2lkIHRlc3RDaGVja0FkZFNlbGZPdmVyZmxvdzMyKCkK
IAogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBjaGVja0FkZCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGludDMyX3Q+KCpj
b2RlLCAwbGwpID09IDApOwogICAgIENIRUNLKGludm9rZTxpbnQzMl90PigqY29kZSwgMWxsKSA9
PSAyKTsKQEAgLTkzNTAsNyArOTM0Nyw3IEBAIHZvaWQgdGVzdENoZWNrU3ViSW1tKCkKICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tTdWIpKTsKIAotICAgIGF1dG8gY29kZSA9IGNv
bXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBD
SEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMCkgPT0gLTQyLjApOwogICAgIENIRUNLKGludm9r
ZTxkb3VibGU+KCpjb2RlLCAxKSA9PSAtNDEuMCk7CkBAIC05MzkyLDcgKzkzODksNyBAQCB2b2lk
IHRlc3RDaGVja1N1YkJhZEltbSgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNr
U3ViKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDAp
ID09IC1zdGF0aWNfY2FzdDxkb3VibGU+KGJhZEltbSkpOwogICAgIENIRUNLKGludm9rZTxkb3Vi
bGU+KCpjb2RlLCAtMSkgPT0gLXN0YXRpY19jYXN0PGRvdWJsZT4oYmFkSW1tKSAtIDEpOwpAQCAt
OTQyOSw3ICs5NDI2LDcgQEAgdm9pZCB0ZXN0Q2hlY2tTdWIoKQogICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLAogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0Qs
IE9yaWdpbigpLCBjaGVja1N1YikpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxk
b3VibGU+KCpjb2RlLCAwLCA0MikgPT0gLTQyLjApOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+
KCpjb2RlLCAxLCA0MikgPT0gLTQxLjApOwpAQCAtOTQ2Nyw3ICs5NDY0LDcgQEAgdm9pZCB0ZXN0
Q2hlY2tTdWI2NCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrU3ViKSk7CiAK
LSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDBsbCwgNDJsbCkg
PT0gLTQyLjApOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAxbGwsIDQybGwpID09
IC00MS4wKTsKQEAgLTk0ODgsNyArOTQ4NSw3IEBAIHZvaWQgdGVzdENoZWNrU3ViRm9sZChpbnQg
YSwgaW50IGIpCiAgICAgICAgIH0pOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjaGVja1N1Yik7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hF
Q0soaW52b2tlPGludD4oKmNvZGUpID09IGEgLSBiKTsKIH0KQEAgLTk1MDksNyArOTUwNiw3IEBA
IHZvaWQgdGVzdENoZWNrU3ViRm9sZEZhaWwoaW50IGEsIGludCBiKQogICAgICAgICB9KTsKICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2hl
Y2tTdWIpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlKSA9PSA0
Mik7CiB9CkBAIC05NTM4LDcgKzk1MzUsNyBAQCB2b2lkIHRlc3RDaGVja05lZygpCiAgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrTmVnKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hF
Q0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDApID09IDAuMCk7CiAgICAgQ0hFQ0soaW52b2tlPGRv
dWJsZT4oKmNvZGUsIDEpID09IC0xLjApOwpAQCAtOTU2OCw3ICs5NTY1LDcgQEAgdm9pZCB0ZXN0
Q2hlY2tOZWc2NCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrTmVnKSk7CiAK
LSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDBsbCkgPT0gMC4w
KTsKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMWxsKSA9PSAtMS4wKTsKQEAgLTk2
MDUsNyArOTYwMiw3IEBAIHZvaWQgdGVzdENoZWNrTXVsKCkKICAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBP
cmlnaW4oKSwgY2hlY2tNdWwpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Cisg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8ZG91
YmxlPigqY29kZSwgMCwgNDIpID09IDAuMCk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNv
ZGUsIDEsIDQyKSA9PSA0Mi4wKTsKQEAgLTk2NDYsNyArOTY0Myw3IEBAIHZvaWQgdGVzdENoZWNr
TXVsTWVtb3J5KCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tNdWwpKTsKIAot
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAKICAgICBsZWZ0ID0gMDsKICAgICByaWdodCA9IDQyOwpAQCAtOTY5Myw3ICs5
NjkwLDcgQEAgdm9pZCB0ZXN0Q2hlY2tNdWwyKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmln
aW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4o
KSwgY2hlY2tNdWwpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigq
Y29kZSwgMCkgPT0gMC4wKTsKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMSkgPT0g
Mi4wKTsKQEAgLTk3MjYsNyArOTcyMyw3IEBAIHZvaWQgdGVzdENoZWNrTXVsNjQoKQogICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIElUb0QsIE9yaWdpbigpLCBjaGVja011bCkpOwogCi0gICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENI
RUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwLCA0MikgPT0gMC4wKTsKICAgICBDSEVDSyhpbnZv
a2U8ZG91YmxlPigqY29kZSwgMSwgNDIpID09IDQyLjApOwpAQCAtOTc0Nyw3ICs5NzQ0LDcgQEAg
dm9pZCB0ZXN0Q2hlY2tNdWxGb2xkKGludCBhLCBpbnQgYikKICAgICAgICAgfSk7CiAgICAgcm9v
dC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIGNoZWNrTXVs
KTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29t
cGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSkgPT0gYSAqIGIp
OwogfQpAQCAtOTc2OCw3ICs5NzY1LDcgQEAgdm9pZCB0ZXN0Q2hlY2tNdWxGb2xkRmFpbChpbnQg
YSwgaW50IGIpCiAgICAgICAgIH0pOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjaGVja011bCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hF
Q0soaW52b2tlPGludD4oKmNvZGUpID09IDQyKTsKIH0KQEAgLTk4ODQsNyArOTg4MSw3IEBAIHZv
aWQgdGVzdENoZWNrTXVsNjRTU2hyKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwK
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hl
Y2tNdWwpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwg
MGxsLCA0MmxsKSA9PSAwLjApOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAxbGws
IDQybGwpID09IDAuMCk7CkBAIC0xMDczNCw3ICsxMDczMSw3IEBAIHZvaWQgdGVzdFN3aXRjaCh1
bnNpZ25lZCBkZWdyZWUsIHVuc2lnbmUKICAgICAgICAgc3dpdGNoVmFsdWUtPmFwcGVuZENhc2Uo
U3dpdGNoQ2FzZShnYXAgKiBpLCBGcmVxdWVudGVkQmxvY2sobmV3QmxvY2spKSk7CiAgICAgfQog
Ci0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxl
UHJvYyhwcm9jKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZWdyZWU7ICsraSkg
ewogICAgICAgICBDSEVDSyhpbnZva2U8aW50MzJfdD4oKmNvZGUsIGkgKiBnYXAsIDQyLCAxMSkg
PT0gKChpICYgMSkgPyAxMSA6IDQyKSk7CkBAIC0xMDc3Nyw3ICsxMDc3NCw3IEBAIHZvaWQgdGVz
dFN3aXRjaENoaWxsRGl2KHVuc2lnbmVkIGRlZ3JlZSwKICAgICAgICAgc3dpdGNoVmFsdWUtPmFw
cGVuZENhc2UoU3dpdGNoQ2FzZShnYXAgKiBpLCBGcmVxdWVudGVkQmxvY2sobmV3QmxvY2spKSk7
CiAgICAgfQogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZWdy
ZWU7ICsraSkgewogICAgICAgICBkYXRhTG9nKCJpID0gIiwgaSwgIlxuIik7CkBAIC0xMDgxNiw3
ICsxMDgxMyw3IEBAIHZvaWQgdGVzdFN3aXRjaFRhcmdldHRpbmdTYW1lQmxvY2soKQogICAgIHN3
aXRjaFZhbHVlLT5hcHBlbmRDYXNlKFN3aXRjaENhc2UoMywgRnJlcXVlbnRlZEJsb2NrKG90aGVy
VGFyZ2V0KSkpOwogICAgIHN3aXRjaFZhbHVlLT5hcHBlbmRDYXNlKFN3aXRjaENhc2UoMTMsIEZy
ZXF1ZW50ZWRCbG9jayhvdGhlclRhcmdldCkpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgMjA7ICsraSkgewogICAgICAgICBpbnQzMl90IGV4cGVjdGVkID0g
KGkgPT0gMyB8fCBpID09IDEzKSA/IDQyIDogNTsKQEAgLTEwODQ0LDcgKzEwODQxLDcgQEAgdm9p
ZCB0ZXN0U3dpdGNoVGFyZ2V0dGluZ1NhbWVCbG9ja0ZvbGRQYQogICAgIHN3aXRjaFZhbHVlLT5h
cHBlbmRDYXNlKFN3aXRjaENhc2UoMywgRnJlcXVlbnRlZEJsb2NrKG90aGVyVGFyZ2V0KSkpOwog
ICAgIHN3aXRjaFZhbHVlLT5hcHBlbmRDYXNlKFN3aXRjaENhc2UoMTMsIEZyZXF1ZW50ZWRCbG9j
ayhvdGhlclRhcmdldCkpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgMjA7ICsraSkgewogICAgICAgICBpbnQzMl90IGV4cGVjdGVkID0gKGkgPT0gMyB8fCBp
ID09IDEzKSA/IGkgOiA0MjsKQEAgLTExMjAyLDcgKzExMTk5LDcgQEAgdm9pZCB0ZXN0QmFzaWNT
ZWxlY3QoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpLAogICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjIpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnRwdHJfdD4oKmNv
ZGUsIDQyLCAxLCAyKSA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCA0
MiwgNjQyNDYyLCAzMjUzMykgPT0gNjQyNDYyKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+
KCpjb2RlLCA0MywgMSwgMikgPT0gMik7CkBAIC0xMTIyMSw3ICsxMTIxOCw3IEBAIHZvaWQgdGVz
dFNlbGVjdFRlc3QoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpLAogICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjIpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnRwdHJf
dD4oKmNvZGUsIDQyLCAxLCAyKSA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpj
b2RlLCA0MiwgNjQyNDYyLCAzMjUzMykgPT0gNjQyNDYyKTsKICAgICBDSEVDSyhpbnZva2U8aW50
cHRyX3Q+KCpjb2RlLCAwLCAxLCAyKSA9PSAyKTsKQEAgLTExMjQzLDcgKzExMjQwLDcgQEAgdm9p
ZCB0ZXN0U2VsZWN0Q29tcGFyZURvdWJsZSgpCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCks
CiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBp
bGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0so
aW52b2tlPGludHB0cl90PigqY29kZSwgLTEuMCwgMS4wLCAxLCAyKSA9PSAxKTsKICAgICBDSEVD
SyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCA0Mi41LCA0Mi41MSwgNjQyNDYyLCAzMjUzMykgPT0g
NjQyNDYyKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBQTmFOLCAwLjAsIDEs
IDIpID09IDIpOwpAQCAtMTEzNDAsNyArMTEzMzcsNyBAQCB2b2lkIHRlc3RTZWxlY3REb3VibGUo
KQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjApLAogICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQ
UjEpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCA0Miwg
MS41LCAyLjYpID09IDEuNSk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDQyLCA2
NDI0NjIuNywgMzI1MzMuOCkgPT0gNjQyNDYyLjcpOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+
KCpjb2RlLCA0MywgMS45LCAyLjApID09IDIuMCk7CkBAIC0xMTM1OSw3ICsxMTM1Niw3IEBAIHZv
aWQgdGVzdFNlbGVjdERvdWJsZVRlc3QoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjApLAog
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjEpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxl
KHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGlu
dm9rZTxkb3VibGU+KCpjb2RlLCA0MiwgMS41LCAyLjYpID09IDEuNSk7CiAgICAgQ0hFQ0soaW52
b2tlPGRvdWJsZT4oKmNvZGUsIDQyLCA2NDI0NjIuNywgMzI1MzMuOCkgPT0gNjQyNDYyLjcpOwog
ICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwLCAxLjksIDIuMCkgPT0gMi4wKTsKQEAg
LTExMzgxLDcgKzExMzc4LDcgQEAgdm9pZCB0ZXN0U2VsZWN0RG91YmxlQ29tcGFyZURvdWJsZSgp
CiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMiksCiAgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBS
MykpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIC0xLjAs
IDEuMCwgMS4xLCAyLjIpID09IDEuMSk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUs
IDQyLjUsIDQyLjUxLCA2NDI0NjIuMywgMzI1MzMuNCkgPT0gNjQyNDYyLjMpOwogICAgIENIRUNL
KGludm9rZTxkb3VibGU+KCpjb2RlLCBQTmFOLCAwLjAsIDEuNSwgMi42KSA9PSAyLjYpOwpAQCAt
MTE0NjcsNyArMTE0NjQsNyBAQCB2b2lkIHRlc3RTZWxlY3REb3VibGVDb21wYXJlRG91YmxlKGJv
b2wgCiAgICAgICAgICAgICAgICAgICAgIGFyZzEpLAogICAgICAgICAgICAgICAgIGFyZzIsCiAg
ICAgICAgICAgICAgICAgYXJnMykpOwotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2Mp
OworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgICAgICBmb3Ig
KGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91YmxlPigpKSB7CiAgICAgICAg
ICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRvdWJsZT4oKSkg
ewpAQCAtMTE0OTQsNyArMTE0OTEsNyBAQCB2b2lkIHRlc3RTZWxlY3REb3VibGVDb21wYXJlRG91
YmxlKGJvb2wgCiAgICAgICAgIGtlZXBWYWx1ZXNMaXZlLT5zZXRHZW5lcmF0b3IoWyZdIChDQ2Fs
bEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7IH0pOwogCiAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBy
ZXN1bHQpOwotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgICAgICBmb3IgKGF1dG8mIGxlZnQgOiBm
bG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91YmxlPigpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8m
IHJpZ2h0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRvdWJsZT4oKSkgewpAQCAtMTE1MjEsNyAr
MTE1MTgsNyBAQCB2b2lkIHRlc3RTZWxlY3REb3VibGVDb21wYXJlRG91YmxlKGJvb2wgCiAgICAg
ICAgIGtlZXBWYWx1ZXNMaXZlLT5zZXRHZW5lcmF0b3IoWyZdIChDQ2FsbEhlbHBlcnMmLCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7IH0pOwogCiAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwotICAgICAg
ICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxl
UHJvYyhwcm9jKTsKIAogICAgICAgICBmb3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3Bl
cmFuZHM8ZG91YmxlPigpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRp
bmdQb2ludE9wZXJhbmRzPGRvdWJsZT4oKSkgewpAQCAtMTE1NDksNyArMTE1NDYsNyBAQCB2b2lk
IHRlc3RTZWxlY3REb3VibGVDb21wYXJlRG91YmxlKGJvb2wgCiAgICAgICAgIGtlZXBWYWx1ZXNM
aXZlLT5zZXRHZW5lcmF0b3IoWyZdIChDQ2FsbEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmKSB7IH0pOwogCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwotICAgICAgICBhdXRvIGNvZGUgPSBj
b21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAog
ICAgICAgICBmb3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91YmxlPigp
KSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRz
PGRvdWJsZT4oKSkgewpAQCAtMTE1NzUsNyArMTE1NzIsNyBAQCB2b2lkIHRlc3RTZWxlY3REb3Vi
bGVDb21wYXJlRG91YmxlKGJvb2wgCiAgICAgICAgICAgICAgICAgICAgIGFyZzEpLAogICAgICAg
ICAgICAgICAgIGFyZzIsCiAgICAgICAgICAgICAgICAgYXJnMCkpOwotICAgICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKIAogICAgICAgICBmb3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91
YmxlPigpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9w
ZXJhbmRzPGRvdWJsZT4oKSkgewpAQCAtMTE2MDEsNyArMTE1OTgsNyBAQCB2b2lkIHRlc3RTZWxl
Y3REb3VibGVDb21wYXJlRG91YmxlKGJvb2wgCiAgICAgICAgIGtlZXBWYWx1ZXNMaXZlLT5zZXRH
ZW5lcmF0b3IoWyZdIChDQ2FsbEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7IH0pOwogCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgICAgICBm
b3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91YmxlPigpKSB7CiAgICAg
ICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRvdWJsZT4o
KSkgewpAQCAtMTE2NTMsNyArMTE2NTAsNyBAQCB2b2lkIHRlc3RTZWxlY3RGbG9hdENvbXBhcmVG
bG9hdChib29sICgqCiAgICAgICAgICAgICAgICAgICAgIGFyZzEpLAogICAgICAgICAgICAgICAg
IGFyZzIsCiAgICAgICAgICAgICAgICAgYXJnMykpOwotICAgICAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAg
ICAgICBmb3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpIHsK
ICAgICAgICAgICAgIGZvciAoYXV0byYgcmlnaHQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8Zmxv
YXQ+KCkpIHsKQEAgLTExNjg4LDcgKzExNjg1LDcgQEAgdm9pZCB0ZXN0U2VsZWN0RmxvYXRDb21w
YXJlRmxvYXQoYm9vbCAoKgogICAgICAgICBrZWVwVmFsdWVzTGl2ZS0+c2V0R2VuZXJhdG9yKFsm
XSAoQ0NhbGxIZWxwZXJzJiwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeyB9KTsK
IAogICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgcmVzdWx0KTsKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICAgICAgZm9yIChhdXRvJiBs
ZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZsb2F0PigpKSB7CiAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZsb2F0PigpKSB7CkBAIC0xMTcy
Myw3ICsxMTcyMCw3IEBAIHZvaWQgdGVzdFNlbGVjdEZsb2F0Q29tcGFyZUZsb2F0KGJvb2wgKCoK
ICAgICAgICAga2VlcFZhbHVlc0xpdmUtPnNldEdlbmVyYXRvcihbJl0gKENDYWxsSGVscGVycyYs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsgfSk7CiAKICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7Ci0g
ICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOwogCiAgICAgICAgIGZvciAoYXV0byYgbGVmdCA6IGZsb2F0aW5nUG9p
bnRPcGVyYW5kczxmbG9hdD4oKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZs
b2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSkgewpAQCAtMTE3NTksNyArMTE3NTYsNyBAQCB2
b2lkIHRlc3RTZWxlY3RGbG9hdENvbXBhcmVGbG9hdChib29sICgqCiAgICAgICAgIGtlZXBWYWx1
ZXNMaXZlLT5zZXRHZW5lcmF0b3IoWyZdIChDQ2FsbEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7IH0pOwogCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwotICAgICAgICBhdXRvIGNvZGUg
PSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
IAogICAgICAgICBmb3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+
KCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgcmlnaHQgOiBmbG9hdGluZ1BvaW50T3BlcmFu
ZHM8ZmxvYXQ+KCkpIHsKQEAgLTExNzkxLDcgKzExNzg4LDcgQEAgdm9pZCB0ZXN0U2VsZWN0Rmxv
YXRDb21wYXJlRmxvYXQoYm9vbCAoKgogICAgICAgICAgICAgICAgICAgICBhcmcxKSwKICAgICAg
ICAgICAgICAgICBhcmcyLAogICAgICAgICAgICAgICAgIGFyZzApKTsKLSAgICAgICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CiAKICAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZs
b2F0PigpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9w
ZXJhbmRzPGZsb2F0PigpKSB7CkBAIC0xMTgyMyw3ICsxMTgyMCw3IEBAIHZvaWQgdGVzdFNlbGVj
dEZsb2F0Q29tcGFyZUZsb2F0KGJvb2wgKCoKICAgICAgICAga2VlcFZhbHVlc0xpdmUtPnNldEdl
bmVyYXRvcihbJl0gKENDYWxsSGVscGVycyYsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsgfSk7CiAKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIHJlc3VsdCk7Ci0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJv
Yyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgICAgIGZv
ciAoYXV0byYgbGVmdCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSkgewogICAgICAg
ICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSkg
ewpAQCAtMTE4NjAsNyArMTE4NTcsNyBAQCB2b2lkIHRlc3RTZWxlY3RGb2xkKGludHB0cl90IHZh
bHVlKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAogICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnRwdHJfdD4oKmNvZGUs
IDEsIDIpID09ICh2YWx1ZSA9PSA0MiA/IDEgOiAyKSk7CiAgICAgQ0hFQ0soaW52b2tlPGludHB0
cl90PigqY29kZSwgNjQyNDYyLCAzMjUzMykgPT0gKHZhbHVlID09IDQyID8gNjQyNDYyIDogMzI1
MzMpKTsKIH0KQEAgLTExODgzLDcgKzExODgwLDcgQEAgdm9pZCB0ZXN0U2VsZWN0SW52ZXJ0KCkK
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIy
KSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCA0Miwg
MSwgMikgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwgNDIsIDY0MjQ2
MiwgMzI1MzMpID09IDY0MjQ2Mik7CiAgICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwg
NDMsIDEsIDIpID09IDIpOwpAQCAtMTE5MjYsNyArMTE5MjMsNyBAQCB2b2lkIHRlc3RDaGVja1Nl
bGVjdCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwog
ICAgIENIRUNLKGdlbmVyYXRpb25Db3VudCA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8aW50Pigq
Y29kZSwgdHJ1ZSkgPT0gMCk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIGZhbHNlKSA9
PSA2NjYpOwpAQCAtMTE5OTcsNyArMTE5OTQsNyBAQCB2b2lkIHRlc3RDaGVja1NlbGVjdENoZWNr
U2VsZWN0KCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CiAgICAgQ0hFQ0soZ2VuZXJhdGlvbkNvdW50ID09IDEpOwogICAgIENIRUNLKGdlbmVyYXRpb25D
b3VudDIgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIHRydWUsIHRydWUpID09
IDApOwpAQCAtMTIwNDMsNyArMTIwNDAsNyBAQCB2b2lkIHRlc3RDaGVja1NlbGVjdEFuZENTRSgp
CiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYWRkVmFsdWUsIGFkZFZhbHVlMikpOwogCi0g
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKICAgICBDSEVDSyhnZW5lcmF0aW9uQ291bnQgPT0gMSk7CiAgICAgQ0hFQ0soaW52
b2tlPGludD4oKmNvZGUsIHRydWUpID09IDApOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2Rl
LCBmYWxzZSkgPT0gNjY2KTsKQEAgLTEyNDUyLDcgKzEyNDQ5LDcgQEAgdm9pZCB0ZXN0VHJpdmlh
bEluZmluaXRlTG9vcCgpCiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1
bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcCkpOwogICAgIGxvb3AtPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3Ap
KTsKIAotICAgIGNvbXBpbGUocHJvYyk7CisgICAgY29tcGlsZVByb2MocHJvYyk7CiB9CiAKIHZv
aWQgdGVzdEZvbGRQYXRoRXF1YWwoKQpAQCAtMTI0NzcsNyArMTI0NzQsNyBAQCB2b2lkIHRlc3RG
b2xkUGF0aEVxdWFsKCkKICAgICAgICAgZWxzZUJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KAogICAg
ICAgICAgICAgcHJvYywgRXF1YWwsIE9yaWdpbigpLCBhcmcsIGVsc2VCbG9jay0+YXBwZW5kTmV3
PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSkpOwogCi0gICAgYXV0byBjb2RlID0g
Y29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBD
SEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCAwKSA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8
aW50cHRyX3Q+KCpjb2RlLCAxKSA9PSAwKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpj
b2RlLCA0MikgPT0gMCk7CkBAIC0xMjQ5NCw3ICsxMjQ5MSw3IEBAIHZvaWQgdGVzdExTaGlmdFNl
bGYzMigpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgYXJnLCBhcmcpKTsKIAotICAgIGF1
dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CiAKICAgICBhdXRvIGNoZWNrID0gWyZdIChpbnQzMl90IHZhbHVlKSB7CiAgICAgICAgIENI
RUNLKGludm9rZTxpbnQzMl90PigqY29kZSwgdmFsdWUpID09IHZhbHVlIDw8ICh2YWx1ZSAmIDMx
KSk7CkBAIC0xMjUxNyw3ICsxMjUxNCw3IEBAIHZvaWQgdGVzdFJTaGlmdFNlbGYzMigpCiAgICAg
ICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgU1NociwgT3JpZ2luKCksIGFyZywgYXJnKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBj
b21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAg
YXV0byBjaGVjayA9IFsmXSAoaW50MzJfdCB2YWx1ZSkgewogICAgICAgICBDSEVDSyhpbnZva2U8
aW50MzJfdD4oKmNvZGUsIHZhbHVlKSA9PSB2YWx1ZSA+PiAodmFsdWUgJiAzMSkpOwpAQCAtMTI1
NDAsNyArMTI1MzcsNyBAQCB2b2lkIHRlc3RVUlNoaWZ0U2VsZjMyKCkKICAgICAgICAgcHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBa
U2hyLCBPcmlnaW4oKSwgYXJnLCBhcmcpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJv
Yyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIGNoZWNr
ID0gWyZdICh1aW50MzJfdCB2YWx1ZSkgewogICAgICAgICBDSEVDSyhpbnZva2U8dWludDMyX3Q+
KCpjb2RlLCB2YWx1ZSkgPT0gdmFsdWUgPj4gKHZhbHVlICYgMzEpKTsKQEAgLTEyNTYyLDcgKzEy
NTU5LDcgQEAgdm9pZCB0ZXN0TFNoaWZ0U2VsZjY0KCkKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKICAgICAgICAgICAgIHByb2MsIFNobCwgT3JpZ2luKCksIGFyZywgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksIGFyZykpKTsKIAotICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CiAKICAgICBhdXRvIGNoZWNrID0gWyZdIChpbnQ2NF90IHZhbHVlKSB7CiAgICAgICAgIENIRUNL
KGludm9rZTxpbnQ2NF90PigqY29kZSwgdmFsdWUpID09IHZhbHVlIDw8ICh2YWx1ZSAmIDYzKSk7
CkBAIC0xMjU4Niw3ICsxMjU4Myw3IEBAIHZvaWQgdGVzdFJTaGlmdFNlbGY2NCgpCiAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCiAgICAgICAgICAgICBwcm9jLCBTU2hyLCBPcmlnaW4o
KSwgYXJnLCByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwgYXJn
KSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gY2hlY2sgPSBbJl0gKGludDY0X3QgdmFsdWUp
IHsKICAgICAgICAgQ0hFQ0soaW52b2tlPGludDY0X3Q+KCpjb2RlLCB2YWx1ZSkgPT0gdmFsdWUg
Pj4gKHZhbHVlICYgNjMpKTsKQEAgLTEyNjEwLDcgKzEyNjA3LDcgQEAgdm9pZCB0ZXN0VVJTaGlm
dFNlbGY2NCgpCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCiAgICAgICAgICAgICBw
cm9jLCBaU2hyLCBPcmlnaW4oKSwgYXJnLCByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRy
dW5jLCBPcmlnaW4oKSwgYXJnKSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gY2hlY2sgPSBb
Jl0gKHVpbnQ2NF90IHZhbHVlKSB7CiAgICAgICAgIENIRUNLKGludm9rZTx1aW50NjRfdD4oKmNv
ZGUsIHZhbHVlKSA9PSB2YWx1ZSA+PiAodmFsdWUgJiA2MykpOwpAQCAtMTI2NDMsNyArMTI2NDAs
NyBAQCB2b2lkIHRlc3RQYXRjaHBvaW50RG91YmxlUmVncygpCiAKICAgICByb290LT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7CiAKLSAg
ICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9j
KHByb2MpOwogICAgIENIRUNLKG51bUNhbGxzID09IDEpOwogICAgIENIRUNLKGludm9rZTxkb3Vi
bGU+KCpjb2RlLCA0Mi41KSA9PSA0Mi41KTsKIH0KQEAgLTEyNjc2LDcgKzEyNjczLDcgQEAgdm9p
ZCB0ZXN0U3BpbGxEZWZTbWFsbGVyVGhhblVzZSgpCiAgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgZm9yY2VTcGlsbCwgYXJnNjQp
OwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCByZXN1bHQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNv
ZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50NjRfdD4oKmNvZGUs
IDB4ZmZmZmZmZmYwMDAwMDAwMCkgPT0gMCk7CiB9CiAKQEAgLTEyNzMwLDcgKzEyNzI3LDcgQEAg
dm9pZCB0ZXN0U3BpbGxVc2VMYXJnZXJUaGFuRGVmKCkKICAgICBlbHNlUmVzdWx0LT5zZXRQaGko
cGhpKTsKICAgICB0YWlsLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgcGhpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBj
b2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52b2tlPHVpbnQ2NF90PigqY29k
ZSwgMSwgMHhmZmZmZmZmZjAwMDAwMDAwKSA9PSAwKTsKICAgICBDSEVDSyhpbnZva2U8dWludDY0
X3Q+KCpjb2RlLCAwLCAweGZmZmZmZmZmMDAwMDAwMDApID09IDB4ZmZmZmZmZmYwMDAwMDAwMCk7
CiAKQEAgLTEyODEyLDcgKzEyODA5LDcgQEAgdm9pZCB0ZXN0TGF0ZVJlZ2lzdGVyKCkKICAgICAg
ICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIHNlY29uZFBhdGNocG9pbnQpOwogICAgIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52
b2tlPHVpbnQ2NF90PigqY29kZSkgPT0gcmVzdWx0KTsKIH0KIApAQCAtMTI5ODYsNyArMTI5ODMs
NyBAQCB2b2lkIHRlc3RJbnRlcnByZXRlcigpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksCiAgICAgICAgIHN0b3AtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBwb2lu
dGVyVHlwZSgpLCAwKSk7CiAgICAgCi0gICAgYXV0byBpbnRlcnByZXRlciA9IGNvbXBpbGUocHJv
Yyk7CisgICAgYXV0byBpbnRlcnByZXRlciA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIAogICAg
IFZlY3RvcjxpbnRwdHJfdD4gZGF0YTsKICAgICBWZWN0b3I8aW50cHRyX3Q+IGNvZGU7CkBAIC0x
MzEzNiw3ICsxMzEzMyw3IEBAIHZvaWQgdGVzdEVudHJ5U3dpdGNoU2ltcGxlKCkKICAgICAKICAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7Ci0gICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIoaml0LCBudWxscHRyKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSk7CiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFiZWxUd28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBv
aW50TGFiZWwoMSkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVGhyZWUgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMikpOwpAQCAtMTMxNjksNyArMTMx
NjYsNyBAQCB2b2lkIHRlc3RFbnRyeVN3aXRjaE5vRW50cnlTd2l0Y2goKQogICAgIAogICAgIEND
YWxsSGVscGVycyBqaXQ7CiAgICAgZ2VuZXJhdGUocHJvYywgaml0KTsKLSAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoKnZtLCBqaXQsIG51bGxwdHIpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cihqaXQsIG51bGxwdHIpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25lID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDApKTsKICAgICBDb2RlTG9jYXRp
b25MYWJlbCBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRM
YWJlbCgxKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxUaHJlZSA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgyKSk7CkBAIC0xMzI1Niw3ICsxMzI1Myw3
IEBAIHZvaWQgdGVzdEVudHJ5U3dpdGNoV2l0aENvbW1vblBhdGhzKCkKICAgICAKICAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7Ci0gICAgTGlua0J1ZmZlciBs
aW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
aml0LCBudWxscHRyKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSk7CiAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgbGFiZWxUd28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFi
ZWwoMSkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVGhyZWUgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMikpOwpAQCAtMTMzNzMsNyArMTMzNzAsNyBA
QCB2b2lkIHRlc3RFbnRyeVN3aXRjaFdpdGhDb21tb25QYXRoc0FuZE5vCiAgICAgCiAgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwotICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KGppdCwgbnVsbHB0cik7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOwogICAgIENvZGVMb2NhdGlv
bkxhYmVsIGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExh
YmVsKDEpKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFRocmVlID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDIpKTsKQEAgLTEzNDUxLDcgKzEzNDQ4LDcg
QEAgdm9pZCB0ZXN0RW50cnlTd2l0Y2hMb29wKCkKICAgICAKICAgICBDQ2FsbEhlbHBlcnMgaml0
OwogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7Ci0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2
bSwgaml0LCBudWxscHRyKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRy
KTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxU
d28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMSkpOwogICAg
IApAQCAtMTM1MDAsNyArMTM0OTcsNyBAQCB2b2lkIHRlc3RTb21lRWFybHlSZWdpc3RlcigpCiAg
ICAgICAgIAogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIHBhdGNocG9pbnQpOwogICAgICAgICAKLSAgICAgICAgY29tcGlsZShwcm9jKTsKKyAg
ICAgICAgY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIENIRUNLKHJhbkZpcnN0UGF0Y2hwb2lu
dCk7CiAgICAgICAgIENIRUNLKHJhblNlY29uZFBhdGNocG9pbnQpOwogICAgIH07CkBAIC0xMzYx
NCw3ICsxMzYxMSw3IEBAIHZvaWQgdGVzdFRlcm1pbmFsUGF0Y2hwb2ludFRoYXROZWVkc1RvQmUK
ICAgICAKICAgICBzbG93UGF0aC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLCBzbG93UGF0aC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDIw
KSk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50PigqY29kZSksIDEw
KTsKIH0KIApAQCAtMTM3MDIsNyArMTM2OTksNyBAQCB2b2lkIHRlc3RUZXJtaW5hbFBhdGNocG9p
bnRUaGF0TmVlZHNUb0JlCiAgICAgT3B0aW9uczo6bWF4QjNUYWlsRHVwQmxvY2tTaXplKCkgPSAw
OwogICAgIE9wdGlvbnM6Om1heEIzVGFpbER1cEJsb2NrU3VjY2Vzc29ycygpID0gMDsKIAotICAg
IGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKmNvZGUsIDEpLCAxKTsKICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqY29kZSwgMCksIDApOwogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpjb2RlLCA0MiksIDY2Nik7CkBAIC0xMzc3Niw3ICsxMzc3Myw3IEBAIHZvaWQgdGVzdFBhdGNo
cG9pbnRUZXJtaW5hbFJldHVyblZhbHVlKGIKICAgICBzbG93UGF0aFVwc2lsb24tPnNldFBoaShw
aGkpOwogICAgIGNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCBwaGkpOwogICAgIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KmNvZGUsIDApLCAzMSk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKmNvZGUsIDEpLCAzMik7
CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKmNvZGUsIDQxKSwgNzIpOwpAQCAtMTM3OTQsNyAr
MTM3OTEsNyBAQCB2b2lkIHRlc3RNZW1vcnlGZW5jZSgpCiAgICAgcm9vdC0+YXBwZW5kTmV3PEZl
bmNlVmFsdWU+KHByb2MsIE9yaWdpbigpKTsKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdp
bigpLCBJbnQzMiwgNDIpKTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpjb2RlKSwgNDIpOwogICAgIGlmIChpc1g4NigpKQogICAgICAgICBjaGVja1VzZXNJbnN0
cnVjdGlvbigqY29kZSwgImxvY2sgb3IgJDB4MCwgKCVyc3ApIik7CkBAIC0xMzgxMyw3ICsxMzgx
MCw3IEBAIHZvaWQgdGVzdFN0b3JlRmVuY2UoKQogICAgIHJvb3QtPmFwcGVuZE5ldzxGZW5jZVZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgSGVhcFJhbmdlOjp0b3AoKSwgSGVhcFJhbmdlKCkpOwogICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcm9vdC0+YXBw
ZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDMyLCA0MikpOwogICAgIAotICAgIGF1
dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKmNvZGUpLCA0Mik7CiAgICAgY2hlY2tEb2Vz
Tm90VXNlSW5zdHJ1Y3Rpb24oKmNvZGUsICJsb2NrIik7CiAgICAgY2hlY2tEb2VzTm90VXNlSW5z
dHJ1Y3Rpb24oKmNvZGUsICJtZmVuY2UiKTsKQEAgLTEzODMwLDcgKzEzODI3LDcgQEAgdm9pZCB0
ZXN0TG9hZEZlbmNlKCkKICAgICByb290LT5hcHBlbmROZXc8RmVuY2VWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEhlYXBSYW5nZSgpLCBIZWFwUmFuZ2U6OnRvcCgpKTsKICAgICByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZEludENvbnN0YW50
KHByb2MsIE9yaWdpbigpLCBJbnQzMiwgNDIpKTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpjb2RlKSwgNDIpOwogICAgIGNoZWNrRG9lc05vdFVzZUluc3RydWN0
aW9uKCpjb2RlLCAibG9jayIpOwogICAgIGNoZWNrRG9lc05vdFVzZUluc3RydWN0aW9uKCpjb2Rl
LCAibWZlbmNlIik7CkBAIC0xNDA1NSw3ICsxNDA1Miw3IEBAIHZvaWQgdGVzdFBDT3JpZ2luTWFw
RG9lc250SW5zZXJ0Tm9wcygpCiAKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJl
dHVybiwgT3JpZ2luKCkpOwogCi0gICAgY29tcGlsZShwcm9jKTsKKyAgICBjb21waWxlUHJvYyhw
cm9jKTsKIH0KIAogdm9pZCB0ZXN0UGluUmVnaXN0ZXJzKCkKQEAgLTE0MDkwLDcgKzE0MDg3LDcg
QEAgdm9pZCB0ZXN0UGluUmVnaXN0ZXJzKCkKICAgICAgICAgICAgICAgICBDSEVDS19FUShwYXJh
bXNbMF0uZ3ByKCksIEdQUkluZm86OnJlZ0NTMCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKLSAgICAgICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAgICAgICAgIGJvb2wgdXNlc0NTUnMgPSBmYWxzZTsKICAgICAgICAgZm9yIChB
aXI6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYy5jb2RlKCkpIHsKICAgICAgICAgICAgIGZvciAo
QWlyOjpJbnN0JiBpbnN0IDogKmJsb2NrKSB7CkBAIC0xNDEyOSw3ICsxNDEyNiw3IEBAIHZvaWQg
dGVzdFg4NkxlYUFkZEFkZFNobExlZnQoKQogICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQ
dHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwMCkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNvZGUg
PSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAg
IGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGVhIDB4NjQoJXJkaSwlcnNpLDQpLCAlcmF4
Iik7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludHB0cl90PigqY29kZSwgMSwgMiksICgxICsgKDIg
PDwgMikpICsgMTAwKTsKIH0KQEAgLTE0MTUxLDcgKzE0MTQ4LDcgQEAgdm9pZCB0ZXN0WDg2TGVh
QWRkQWRkU2hsUmlnaHQoKQogICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDEwMCkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxl
KHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGNoZWNrVXNl
c0luc3RydWN0aW9uKCpjb2RlLCAibGVhIDB4NjQoJXJkaSwlcnNpLDQpLCAlcmF4Iik7CiAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludHB0cl90PigqY29kZSwgMSwgMiksICgxICsgKDIgPDwgMikpICsg
MTAwKTsKIH0KQEAgLTE0MTcwLDcgKzE0MTY3LDcgQEAgdm9pZCB0ZXN0WDg2TGVhQWRkQWRkKCkK
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAx
MDApKTsKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCks
IHJlc3VsdCk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50cHRyX3Q+
KCpjb2RlLCAxLCAyKSwgKDEgKyAyKSArIDEwMCk7CiAgICAgY2hlY2tEaXNhc3NlbWJseSgKICAg
ICAgICAgKmNvZGUsCkBAIC0xNDE5NSw3ICsxNDE5Miw3IEBAIHZvaWQgdGVzdFg4NkxlYUFkZFNo
bFJpZ2h0KCkKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAyKSkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2Mp
OworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGNoZWNrVXNlc0luc3Ry
dWN0aW9uKCpjb2RlLCAibGVhICglcmRpLCVyc2ksNCksICVyYXgiKTsKICAgICBDSEVDS19FUShp
bnZva2U8aW50cHRyX3Q+KCpjb2RlLCAxLCAyKSwgMSArICgyIDw8IDIpKTsKIH0KQEAgLTE0MjE0
LDcgKzE0MjExLDcgQEAgdm9pZCB0ZXN0WDg2TGVhQWRkU2hsTGVmdFNjYWxlMSgpCiAgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpKTsK
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3Vs
dCk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50cHRyX3Q+KCpjb2Rl
LCAxLCAyKSwgMSArIDIpOwogICAgIGNoZWNrRGlzYXNzZW1ibHkoCiAgICAgICAgICpjb2RlLApA
QCAtMTQyMzksNyArMTQyMzYsNyBAQCB2b2lkIHRlc3RYODZMZWFBZGRTaGxMZWZ0U2NhbGUyKCkK
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCAxKSkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpj
b2RlLCAibGVhICglcmRpLCVyc2ksMiksICVyYXgiKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50
cHRyX3Q+KCpjb2RlLCAxLCAyKSwgMSArICgyIDw8IDEpKTsKIH0KQEAgLTE0MjU4LDcgKzE0MjU1
LDcgQEAgdm9pZCB0ZXN0WDg2TGVhQWRkU2hsTGVmdFNjYWxlNCgpCiAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLCByZXN1bHQpOwogICAgIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24o
KmNvZGUsICJsZWEgKCVyZGksJXJzaSw0KSwgJXJheCIpOwogICAgIENIRUNLX0VRKGludm9rZTxp
bnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAxICsgKDIgPDwgMikpOwogfQpAQCAtMTQyNzcsNyArMTQy
NzQsNyBAQCB2b2lkIHRlc3RYODZMZWFBZGRTaGxMZWZ0U2NhbGU4KCkKICAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAzKSkpOwogICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKICAg
ICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBp
bGVQcm9jKHByb2MpOwogICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGVhICglcmRp
LCVyc2ksOCksICVyYXgiKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCAx
LCAyKSwgMSArICgyIDw8IDMpKTsKIH0KQEAgLTE0Mjk2LDcgKzE0MjkzLDcgQEAgdm9pZCB0ZXN0
QWRkU2hsMzIoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDMyKSkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLX0VRKGlu
dm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAxICsgKHN0YXRpY19jYXN0PGludHB0cl90Pigy
KSA8PCBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMzIpKSk7CiB9CiAKQEAgLTE0MzE0LDcgKzE0MzEx
LDcgQEAgdm9pZCB0ZXN0QWRkU2hsNjQoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDY0KSkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwog
ICAgIENIRUNLX0VRKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAxICsgMik7CiB9CiAK
QEAgLTE0MzMyLDcgKzE0MzI5LDcgQEAgdm9pZCB0ZXN0QWRkU2hsNjUoKQogICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDY1KSkpOwogICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsK
ICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEs
IDIpLCAxICsgKDIgPDwgMSkpOwogfQogCkBAIC0xNDM5Niw3ICsxNDM5Myw3IEBAIHZvaWQgdGVz
dExvYWRCYXNlSW5kZXhTaGlmdDIoKQogICAgICAgICAgICAgICAgICAgICBwcm9jLCBTaGwsIE9y
aWdpbigpLAogICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCiAgICAgICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAy
KSkpKSk7Ci0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICBpZiAoaXNYODYoKSkKICAgICAgICAgY2hlY2tVc2VzSW5z
dHJ1Y3Rpb24oKmNvZGUsICIoJXJkaSwlcnNpLDQpIik7CiAgICAgaW50MzJfdCB2YWx1ZSA9IDEy
MzQxMjM0OwpAQCAtMTQ0MjAsNyArMTQ0MTcsNyBAQCB2b2lkIHRlc3RMb2FkQmFzZUluZGV4U2hp
ZnQzMigpCiAgICAgICAgICAgICAgICAgICAgIHByb2MsIFNobCwgT3JpZ2luKCksCiAgICAgICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKICAgICAgICAgICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDMyKSkpKSk7Ci0gICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKICAgICBpbnQzMl90IHZhbHVlID0gMTIzNDEyMzQ7CiAgICAgY2hhciogcHRyID0gYml0d2lz
ZV9jYXN0PGNoYXIqPigmdmFsdWUpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDsg
KytpKQpAQCAtMTQ0MzcsNyArMTQ0MzQsNyBAQCB2b2lkIHRlc3RPcHRpbWl6ZU1hdGVyaWFsaXph
dGlvbigpCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmln
aW4oKSwgMHgxMjM0MjM0NTM0NTZsbHUgKyAzNSkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGls
ZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBib29sIGZv
dW5kID0gZmFsc2U7CiAgICAgZm9yIChBaXI6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYy5jb2Rl
KCkpIHsKICAgICAgICAgZm9yIChBaXI6Okluc3QmIGluc3QgOiAqYmxvY2spIHsKQEAgLTE0NDkz
LDcgKzE0NDkwLDcgQEAgdm9pZCB0ZXN0QXRvbWljV2Vha0NBUygpCiAgICAgICAgIAogICAgICAg
ICBkb25lLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOwogICAgICAg
ICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVl
WzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDUyNCw3ICsxNDUyMSw3IEBA
IHZvaWQgdGVzdEF0b21pY1dlYWtDQVMoKQogICAgICAgICAKICAgICAgICAgZG9uZS0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKICAgICAgICAgCi0gICAgICAgIGF1
dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9j
KHByb2MpOwogICAgICAgICBUIHZhbHVlWzJdOwogICAgICAgICB2YWx1ZVswXSA9IDQyOwogICAg
ICAgICB2YWx1ZVsxXSA9IDEzOwpAQCAtMTQ1NTgsNyArMTQ1NTUsNyBAQCB2b2lkIHRlc3RBdG9t
aWNXZWFrQ0FTKCkKICAgICAgICAgCiAgICAgICAgIGZhaWwtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgUmV0dXJuLCBPcmlnaW4oKSk7CiAgICAgICAgIAotICAgICAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICAg
ICAgVCB2YWx1ZVsyXTsKICAgICAgICAgdmFsdWVbMF0gPSA0MjsKICAgICAgICAgdmFsdWVbMV0g
PSAxMzsKQEAgLTE0NjAwLDcgKzE0NTk3LDcgQEAgdm9pZCB0ZXN0QXRvbWljV2Vha0NBUygpCiAg
ICAgICAgIAogICAgICAgICBmYWlsLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3Jp
Z2luKCkpOwogICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAg
ICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07
CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDYy
Niw3ICsxNDYyMyw3IEBAIHZvaWQgdGVzdEF0b21pY1dlYWtDQVMoKQogICAgICAgICAgICAgICAg
IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCAweGJlZWYpLAog
ICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOwogICAgICAgICAKLSAgICAgICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAg
ICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDY1NSw3ICsxNDY1Miw3IEBAIHZvaWQgdGVzdEF0b21p
Y1dlYWtDQVMoKQogICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpLAogICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAw
KSkpOwogICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAg
ICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDY4Miw3
ICsxNDY3OSw3IEBAIHZvaWQgdGVzdEF0b21pY1dlYWtDQVMoKQogICAgICAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKSwKICAgICAgICAgICAgICAgICA0MikpOwogICAgICAgICAKLSAgICAgICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAg
ICAgICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDc0Niw3ICsxNDc0Myw3IEBAIHZvaWQgdGVzdEF0
b21pY1N0cm9uZ0NBUygpCiAgICAgICAgIAogICAgICAgICBmYWlsLT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOwogICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0g
Y29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAg
ICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVl
WzFdID0gMTM7CkBAIC0xNDc4Nyw3ICsxNDc4NCw3IEBAIHZvaWQgdGVzdEF0b21pY1N0cm9uZ0NB
UygpCiAgICAgICAgIAogICAgICAgICBmYWlsLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVy
biwgT3JpZ2luKCkpOwogICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFs
dWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBA
IC0xNDgyOCw3ICsxNDgyNSw3IEBAIHZvaWQgdGVzdEF0b21pY1N0cm9uZ0NBUygpCiAgICAgICAg
IAogICAgICAgICBmYWlsLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkp
OwogICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAg
ICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDg1Myw3ICsx
NDg1MCw3IEBAIHZvaWQgdGVzdEF0b21pY1N0cm9uZ0NBUygpCiAgICAgICAgICAgICAgICAgcm9v
dC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDB4YmVlZiksCiAgICAg
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSk7CiAgICAgICAgIAotICAgICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKICAgICAgICAgVCB2YWx1ZVsyXTsKICAgICAgICAgdmFsdWVbMF0gPSA0MjsKICAgICAgICAg
dmFsdWVbMV0gPSAxMzsKQEAgLTE0ODg1LDcgKzE0ODgyLDcgQEAgdm9pZCB0ZXN0QXRvbWljU3Ry
b25nQ0FTKCkKICAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSwKICAgICAgICAg
ICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgNDIp
KSk7CiAgICAgICAgIAotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICAgICAgVCB2YWx1ZVsyXTsKICAg
ICAgICAgdmFsdWVbMF0gPSA0MjsKICAgICAgICAgdmFsdWVbMV0gPSAxMzsKQEAgLTE0OTE2LDcg
KzE0OTEzLDcgQEAgdm9pZCB0ZXN0QXRvbWljU3Ryb25nQ0FTKCkKICAgICAgICAgICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDQyKSksCiAg
ICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIDApKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFs
dWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBA
IC0xNDk5Nyw3ICsxNDk5NCw3IEBAIHZvaWQgdGVzdEF0b21pY1hjaGcoQjM6Ok9wY29kZSBvcGNv
ZGUpCiAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2lu
KCksIHR5cGUsIDEpLAogICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOwogICAgIAot
ICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICAgICAgVCB2YWx1ZVsyXTsKICAgICAgICAgdmFsdWVbMF0g
PSA1OwogICAgICAgICB2YWx1ZVsxXSA9IDEwMDsKQEAgLTE1MDE3LDcgKzE1MDE0LDcgQEAgdm9p
ZCB0ZXN0QXRvbWljWGNoZyhCMzo6T3Bjb2RlIG9wY29kZSkKICAgICAgICAgICAgICAgICByb290
LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgNDIpLAogICAgICAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOwogICAgIAotICAgICAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICAg
ICAgVCB2YWx1ZVsyXTsKICAgICAgICAgdmFsdWVbMF0gPSA1OwogICAgICAgICB2YWx1ZVsxXSA9
IDEwMDsKQEAgLTE1MDM2LDcgKzE1MDMzLDcgQEAgdm9pZCB0ZXN0QXRvbWljWGNoZyhCMzo6T3Bj
b2RlIG9wY29kZSkKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CiAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSk7CiAgICAgCi0gICAgICAg
IGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOwogICAgICAgICBUIHZhbHVlWzJdOwogICAgICAgICB2YWx1ZVswXSA9IDU7CiAg
ICAgICAgIHZhbHVlWzFdID0gMTAwOwpAQCAtMTUwNTYsNyArMTUwNTMsNyBAQCB2b2lkIHRlc3RB
dG9taWNYY2hnKEIzOjpPcGNvZGUgb3Bjb2RlKQogICAgICAgICAgICAgMCwgSGVhcFJhbmdlKDQy
KSwgSGVhcFJhbmdlKCkpOwogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJl
dHVybiwgT3JpZ2luKCkpOwogICAgIAotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2Mp
OworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICAgICAgVCB2YWx1
ZVsyXTsKICAgICAgICAgdmFsdWVbMF0gPSA1OwogICAgICAgICB2YWx1ZVsxXSA9IDEwMDsKQEAg
LTE1MDg5LDcgKzE1MDg2LDcgQEAgdm9pZCB0ZXN0RGVwZW5kMzIoKQogICAgIHZhbHVlc1swXSA9
IDQyOwogICAgIHZhbHVlc1sxXSA9IDB4YmVlZjsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGlmIChp
c0FSTTY0KCkpCiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiZW9yIik7CiAg
ICAgZWxzZSBpZiAoaXNYODYoKSkgewpAQCAtMTUxMTksNyArMTUxMTYsNyBAQCB2b2lkIHRlc3RE
ZXBlbmQ2NCgpCiAgICAgdmFsdWVzWzBdID0gNDI7CiAgICAgdmFsdWVzWzFdID0gMHhiZWVmOwog
ICAgIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29t
cGlsZVByb2MocHJvYyk7CiAgICAgaWYgKGlzQVJNNjQoKSkKICAgICAgICAgY2hlY2tVc2VzSW5z
dHJ1Y3Rpb24oKmNvZGUsICJlb3IiKTsKICAgICBlbHNlIGlmIChpc1g4NigpKSB7CkBAIC0xNTE1
NCw3ICsxNTE1MSw3IEBAIHZvaWQgdGVzdFdhc21Cb3VuZHNDaGVjayh1bnNpZ25lZCBvZmZzZXQK
ICAgICBWYWx1ZSogcmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIDB4NDIpOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDS19FUShpbnZv
a2U8aW50MzJfdD4oKmNvZGUsIDEsIDIgKyBvZmZzZXQpLCAweDQyKTsKICAgICBDSEVDS19FUShp
bnZva2U8aW50MzJfdD4oKmNvZGUsIDMsIDIgKyBvZmZzZXQpLCA0Mik7CiAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludDMyX3Q+KCpjb2RlLCAyLCAyICsgb2Zmc2V0KSwgNDIpOwpAQCAtMTUyMDUsNyAr
MTUyMDIsNyBAQCB2b2lkIHRlc3RXYXNtQWRkcmVzcygpCiAgICAgaW5jVXBzaWxvbi0+c2V0UGhp
KGluZGV4UGhpKTsKIAogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpbnZva2U8dm9pZD4oKmNvZGUsIGxvb3BD
b3VudCwgbnVtVG9TdG9yZSwgdmFsdWVzLmRhdGEoKSk7CiAgICAgZm9yICh1bnNpZ25lZCB2YWx1
ZSA6IHZhbHVlcykKICAgICAgICAgQ0hFQ0tfRVEobnVtVG9TdG9yZSwgdmFsdWUpOwpAQCAtMTUz
MTgsNyArMTUzMTUsNiBAQCBkb3VibGUgbmVnYXRpdmVaZXJvKCkKIHZvaWQgcnVuKGNvbnN0IGNo
YXIqIGZpbHRlcikKIHsKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLSAgICB2bSA9
ICZWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOwogCiAgICAgRGVxdWU8UmVmUHRyPFNo
YXJlZFRhc2s8dm9pZCgpPj4+IHRhc2tzOwogCkBAIC0xNTk5OSw3ICsxNTk5NSw3IEBAIHZvaWQg
cnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdFRydW5jKChzdGF0aWNfY2FzdDxp
bnQ2NF90PigxKSA8PCA0MCkgKyA0MikpOwogICAgIFJVTih0ZXN0QWRkMSg0NSkpOwogICAgIFJV
Tih0ZXN0QWRkMVB0cig1MSkpOwotICAgIFJVTih0ZXN0QWRkMVB0cihiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KHZtKSkpOworICAgIFJVTih0ZXN0QWRkMVB0cihzdGF0aWNfY2FzdDxpbnRwdHJfdD4o
MHhiYWFkYmVlZikpKTsKICAgICBSVU4odGVzdE5lZzMyKDUyKSk7CiAgICAgUlVOKHRlc3ROZWdQ
dHIoNTMpKTsKICAgICBSVU4odGVzdFN0b3JlQWRkTG9hZDMyKDQ2KSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1
ZmZlci5oIgogI2luY2x1ZGUgIlB1cmVOYU4uaCIKLSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUg
PGNtYXRoPgogI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxzdHJpbmc+CkBAIC04MCwxNCArNzks
MTIgQEAgU3RhdGljTG9jayBjcmFzaExvY2s7CiAgICAgICAgIENSQVNIKCk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGls
ZSAoZmFsc2UpCiAKLVZNKiB2bTsKLQogc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxhdGlvbj4g
Y29tcGlsZShCMzo6UHJvY2VkdXJlJiBwcm9jKQogewogICAgIHByZXBhcmVGb3JHZW5lcmF0aW9u
KHByb2MuY29kZSgpKTsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKHByb2Mu
Y29kZSgpLCBqaXQpOwotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0
cik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0cik7CiAKICAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAogICAgICAgICBGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsICgidGVzdGFpciBjb21waWxhdGlvbiIpKSwgcHJvYy5yZWxlYXNlQnlw
cm9kdWN0cygpKTsKQEAgLTE4NDksNyArMTg0Niw2IEBAIHZvaWQgdGVzdFg4NlZNVUxTREJhc2VJ
bmRleE5lZWRSZXgoKQogdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogewogICAgIEpTQzo6
aW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAgIHZtID0gJlZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5s
ZWFrUmVmKCk7CiAKICAgICBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4gdGFza3M7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vz
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE0
LDcgKzUxNCw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAg
ICAgICAgY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nID0gc3RhdGUuY2FsbFNpdGVJ
bmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nKCk7CiAgICAgfQogCi0gICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CiAgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkRpZCBmYWlsIHRvIGFsbG9jYXRlLlxu
Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCw3ICszOTQsNyBAQCB2b2lkIEpJVENv
bXBpbGVyOjpjb21waWxlKCkKICAgICBtX3NwZWN1bGF0aXZlLT5jcmVhdGVPU1JFbnRyaWVzKCk7
CiAgICAgc2V0RW5kT2ZDb2RlKCk7CiAKLSAgICBhdXRvIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPExpbmtCdWZmZXI+KCp2bSgpLCAqdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0
aW9uQ2FuRmFpbCk7CisgICAgYXV0byBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5r
QnVmZmVyPigqdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAg
aWYgKGxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgbV9ncmFwaC5t
X3BsYW4uZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+KG1fZ3Jh
cGgubV9wbGFuKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDg4LDcgKzQ4OCw3IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAgICAgc2V0RW5kT2ZDb2RlKCk7CiAKICAgICAv
LyA9PT0gTGluayA9PT0KLSAgICBhdXRvIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExp
bmtCdWZmZXI+KCp2bSgpLCAqdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CisgICAgYXV0byBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPigq
dGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKGxpbmtC
dWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgbV9ncmFwaC5tX3BsYW4uZmlu
YWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+KG1fZ3JhcGgubV9wbGFu
KTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
YXp5SlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdMYXp5SlNWYWx1ZS5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksNyArMjI5
LDcgQEAgdm9pZCBMYXp5SlNWYWx1ZTo6ZW1pdChDQ2FsbEhlbHBlcnMmIGppdAogICAgIAogICAg
IGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgW2NvZGVCbG9jaywgbGFiZWwsIHRoaXNWYWx1ZV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVhbFZhbHVl
ID0gdGhpc1ZhbHVlLmdldFZhbHVlKGxpbmtCdWZmZXIudm0oKSk7CisgICAgICAgICAgICBKU1Zh
bHVlIHJlYWxWYWx1ZSA9IHRoaXNWYWx1ZS5nZXRWYWx1ZSgqY29kZUJsb2NrLT52bSgpKTsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlYWxWYWx1ZS5pc0NlbGwoKSk7CiAKICAgICAgICAg
ICAgIGNvZGVCbG9jay0+YWRkQ29uc3RhbnQocmVhbFZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDIx
NDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgY29tcGlsZU9TUkV4aXQo
RXhlY1N0YXRlKiBleGVjKQogCiAgICAgICAgIGV4aXRDb21waWxlci5jb21waWxlRXhpdCgqdm0s
IGV4aXQsIG9wZXJhbmRzLCByZWNvdmVyeSk7CiAgICAgICAgIAotICAgICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp2bSwgaml0LCBjb2RlQmxvY2spOworICAgICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgY29kZUJsb2NrKTsKICAgICAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTEla
RV9DT0RFX0lGKAogICAgICAgICAgICAgc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9u
czo6dmVyYm9zZU9TUigpLAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTIsNyArMTAxMiw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgbV9qaXQuYWRk
UHRyKFRydXN0ZWRJbW0zMihyZXF1aXJlZEJ5dGVzKSwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpjYWxsZWVGcmFt
ZVNsb3QoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKS53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpLCBH
UFJJbmZvOjpyZWdUMCk7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6Y2FsbGVl
RnJhbWVTbG90KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkud2l0aE9mZnNldChUYWdPZmZzZXQpLCBH
UFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIG1faml0LmVtaXREdW1iVmlydHVhbENhbGwoaW5mbyk7
CisgICAgICAgIG1faml0LmVtaXREdW1iVmlydHVhbENhbGwoKm1faml0LnZtKCksIGluZm8pOwog
ICAgICAgICAKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIHNldFJlc3VsdEFu
ZFJlc2V0U3RhY2soKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTY2LDcgKzk2Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUK
ICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcGFydCB3aGVyZSB3ZSBtZWFudCB0byBtYWtlIGEgbm9y
bWFsIGNhbGwuIE9vcHMuCiAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIocmVxdWly
ZWRCeXRlcyksIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIG1f
aml0LmxvYWQ2NChKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVTbG90KENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgbV9qaXQuZW1pdER1bWJWaXJ0dWFsQ2Fs
bChjYWxsTGlua0luZm8pOworICAgICAgICBtX2ppdC5lbWl0RHVtYlZpcnR1YWxDYWxsKCptX2pp
dC52bSgpLCBjYWxsTGlua0luZm8pOwogICAgICAgICAKICAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CiAgICAgICAgIHNldFJlc3VsdEFuZFJlc2V0U3RhY2soKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyAr
OTMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAgICAgCiAg
ICAgaml0Lmp1bXAoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmdm0tPm9zckV4aXRK
dW1wRGVzdGluYXRpb24pKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
aml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQpOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxs
LCBjb21waWxlT1NSRXhpdCk7CiAgICAgCkBAIC0xNDAsNyArMTQwLDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG9zckVudHJ5VGh1bmtHZW5lcgogCiAgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVn
VDEpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9U
SFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiREZHIE9TUiBlbnRy
eSB0aHVuayIpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21w
aWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBp
bGUuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsOCArMTQxLDcgQEAgdm9pZCBjb21w
aWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKTsKICAgICAgICAg
fSk7CiAKLSAgICBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPExpbmtCdWZmZXI+KAotICAgICAgICB2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBp
bGF0aW9uQ2FuRmFpbCk7CisgICAgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyID0g
c3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKICAgICBpZiAoc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5k
aWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgIHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0
cnVlOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExhenlTbG93UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMYXp5U2xvd1BhdGguY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDgg
KzU1LDYgQEAgdm9pZCBMYXp5U2xvd1BhdGg6OmdlbmVyYXRlKENvZGVCbG9jayogYwogewogICAg
IFJFTEVBU0VfQVNTRVJUKCFtX3N0dWIpOwogCi0gICAgVk0mIHZtID0gKmNvZGVCbG9jay0+dm0o
KTsKLQogICAgIENDYWxsSGVscGVycyBqaXQoY29kZUJsb2NrKTsKICAgICBHZW5lcmF0aW9uUGFy
YW1zIHBhcmFtczsKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbkp1bXBzOwpA
QCAtNjUsNyArNjMsNyBAQCB2b2lkIExhenlTbG93UGF0aDo6Z2VuZXJhdGUoQ29kZUJsb2NrKiBj
CiAKICAgICBtX2dlbmVyYXRvci0+cnVuKGppdCwgcGFyYW1zKTsKIAotICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQp
OworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25NdXN0U3VjY2VlZCk7CiAgICAgbGlua0J1ZmZlci5saW5rKHBhcmFtcy5kb25lSnVtcHMsIG1f
ZG9uZSk7CiAgICAgaWYgKG1fZXhjZXB0aW9uVGFyZ2V0KQogICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoZXhjZXB0aW9uSnVtcHMsIG1fZXhjZXB0aW9uVGFyZ2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDcgKzE2Miw3
IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoKTsKICAgICAgICAgICAgIG1haW5QYXRoSnVtcHMuYXBwZW5kKGppdC5qdW1wKCkp
OwogCi0gICAgICAgICAgICBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVy
Pih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgICAg
ICBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPihqaXQsIGNvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgICAgIGlmIChsaW5rQnVmZmVyLT5k
aWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZh
aWxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTg2LDcgKzE4Niw3IEBA
IHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1
ZSgpOwogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbWFpblBhdGhKdW1wID0gaml0Lmp1bXAo
KTsKICAgICAgICAgCi0gICAgICAgIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtC
dWZmZXI+KHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAg
ICAgbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4oaml0LCBjb2RlQmxv
Y2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgICAgIGlmIChsaW5rQnVmZmVyLT5kaWRG
YWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgICAgICBzdGF0ZS5hbGxvY2F0aW9uRmFpbGVkID0g
dHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjAxOSw3ICs2MDE5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewog
ICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1Yihs
aW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUtPnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0
aW9uUHRyKGxpbmtDYWxsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKApAQCAtNjMyOSw3ICs2MzI5
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAg
ICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnZt
KCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtD
YWxsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKApAQCAtNjU4Miw3ICs2NTgyLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAg
IFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5j
b2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnZtKCkuZ2V0Q1RJU3R1
YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKApAQCAtNjg2MSw3ICs2ODYx
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAg
ICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnZt
KCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtD
YWxsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKApAQCAt
NjkyMiw4ICs2OTIyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiA9IGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsKICAgICAgICAg
U3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKLSAgICAgICAgICAgIFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgICAgICBbPSwgJnZtXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAgICAgIENh
bGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5p
cXVlQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICAKQEAgLTY5NTYs
NyArNjk1Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihyZXF1aXJlZEJ5dGVzKSwgQ0Nh
bGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICAgICAgaml0Lmxv
YWQ2NChDQ2FsbEhlbHBlcnM6OmNhbGxlZUZyYW1lU2xvdChDYWxsRnJhbWVTbG90OjpjYWxsZWUp
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgaml0LmVtaXREdW1iVmlydHVhbENh
bGwoY2FsbExpbmtJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXQuZW1pdER1bWJWaXJ0dWFsQ2Fs
bCh2bSwgY2FsbExpbmtJbmZvKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBk
b25lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICAgICAgaml0LmFkZFB0cigKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlz
aW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBp
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkxLDcgKzQ5MSw3IEBAIHN0YXRpYyB2b2lkIGNv
bXBpbGVTdHViKAogICAgIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoaml0LCBleGl0KTsKICAgICBh
ZGp1c3RBbmRKdW1wVG9UYXJnZXQoKnZtLCBqaXQsIGV4aXQpOwogICAgIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIGNvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihqaXQsIGNvZGVCbG9jayk7CiAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTElaRV9DT0RF
X0lGKAogICAgICAgICBzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjp2ZXJib3Nl
T1NSKCkgfHwgT3B0aW9uczo6dmVyYm9zZUZUTE9TUkV4aXQoKSwKICAgICAgICAgcGF0Y2hCdWZm
ZXIsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRIYW5kbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRs
ZS5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdEhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEzICs0NCwxNCBAQCB2b2lk
IE9TUkV4aXRIYW5kbGU6OmVtaXRFeGl0VGh1bmsoU3RhdGUmCiAgICAgaml0LnB1c2hUb1NhdmVJ
bW1lZGlhdGVXaXRob3V0VG91Y2hpbmdSZWdpc3RlcnMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoaW5kZXgpKTsKICAgICBDQ2FsbEhlbHBlcnM6OlBhdGNoYWJsZUp1bXAganVtcCA9IGppdC5w
YXRjaGFibGVKdW1wKCk7CiAgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IHNlbGYgPSB0aGlzOwor
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKAotICAgICAgICBb
c2VsZiwganVtcCwgbXlMYWJlbCwgY29tcGlsYXRpb25dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgIFtzZWxmLCBqdW1wLCBteUxhYmVsLCBjb21waWxhdGlvbiwgJnZtXSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgc2VsZi0+ZXhpdC5tX3BhdGNoYWJs
ZUp1bXAgPSBDb2RlTG9jYXRpb25KdW1wKGxpbmtCdWZmZXIubG9jYXRpb25PZihqdW1wKSk7CiAK
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKICAgICAgICAgICAgICAgICBqdW1wLm1fanVt
cCwKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLnZtKCkuZ2V0
Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0
aW9uVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgICAgICAgICAgaWYgKGNvbXBpbGF0aW9u
KQogICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5hZGRPU1JFeGl0U2l0ZSh7IGxpbmtCdWZm
ZXIubG9jYXRpb25PZihteUxhYmVsKS5leGVjdXRhYmxlQWRkcmVzcygpIH0pOwogICAgICAgICB9
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5j
cHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xv
d1BhdGhDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDE2ICsxMTgsMTQgQEAgU2xvd1Bh
dGhDYWxsS2V5IFNsb3dQYXRoQ2FsbENvbnRleHQ6OmtleQogICAgIHJldHVybiBTbG93UGF0aENh
bGxLZXkobV90aHVua1NhdmVTZXQsIGNhbGxUYXJnZXQsIG1fYXJndW1lbnRSZWdpc3RlcnMsIG1f
b2Zmc2V0KTsKIH0KIAotU2xvd1BhdGhDYWxsIFNsb3dQYXRoQ2FsbENvbnRleHQ6Om1ha2VDYWxs
KHZvaWQqIGNhbGxUYXJnZXQpCitTbG93UGF0aENhbGwgU2xvd1BhdGhDYWxsQ29udGV4dDo6bWFr
ZUNhbGwoVk0mIHZtLCB2b2lkKiBjYWxsVGFyZ2V0KQogewogICAgIFNsb3dQYXRoQ2FsbCByZXN1
bHQgPSBTbG93UGF0aENhbGwobV9qaXQuY2FsbCgpLCBrZXlXaXRoVGFyZ2V0KGNhbGxUYXJnZXQp
KTsKIAogICAgIG1faml0LmFkZExpbmtUYXNrKAotICAgICAgICBbcmVzdWx0XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgVk0mIHZtID0gbGlua0J1ZmZlci52bSgpOwot
CisgICAgICAgIFtyZXN1bHQsICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHVuayA9Ci0gICAgICAgICAgICAgICAgdm0u
ZnRsVGh1bmtzLT5nZXRTbG93UGF0aENhbGxUaHVuayh2bSwgcmVzdWx0LmtleSgpKTsKKyAgICAg
ICAgICAgICAgICB2bS5mdGxUaHVua3MtPmdldFNsb3dQYXRoQ2FsbFRodW5rKHJlc3VsdC5rZXko
KSk7CiAKICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhyZXN1bHQuY2FsbCgpLCBDb2RlTG9j
YXRpb25MYWJlbCh0aHVuay5jb2RlKCkpKTsKICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDIxNDU0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogCiAgICAgLy8gTk9URTogVGhlIGNhbGwgdGhh
dCB0aGlzIHJldHVybnMgaXMgYWxyZWFkeSBnb2luZyB0byBiZSBsaW5rZWQgYnkgdGhlIEpJVCB1
c2luZyBhZGRMaW5rVGFzaygpLAogICAgIC8vIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHlvdSB0
byBsaW5rIGl0IHlvdXJzZWxmLgotICAgIFNsb3dQYXRoQ2FsbCBtYWtlQ2FsbCh2b2lkKiBjYWxs
VGFyZ2V0KTsKKyAgICBTbG93UGF0aENhbGwgbWFrZUNhbGwoVk0mLCB2b2lkKiBjYWxsVGFyZ2V0
KTsKIAogcHJpdmF0ZToKICAgICBTbG93UGF0aENhbGxLZXkga2V5V2l0aFRhcmdldCh2b2lkKiBj
YWxsVGFyZ2V0KSBjb25zdDsKQEAgLTg0LDcgKzg0LDcgQEAgU2xvd1BhdGhDYWxsIGNhbGxPcGVy
YXRpb24oCiAgICAgewogICAgICAgICBTbG93UGF0aENhbGxDb250ZXh0IGNvbnRleHQodXNlZFJl
Z2lzdGVycywgaml0LCBzaXplb2YuLi4oQXJndW1lbnRUeXBlcykgKyAxLCByZXN1bHRHUFIpOwog
ICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZ3VtZW50cy4uLik7Ci0g
ICAgICAgIGNhbGwgPSBjb250ZXh0Lm1ha2VDYWxsKGZ1bmN0aW9uLnZhbHVlKCkpOworICAgICAg
ICBjYWxsID0gY29udGV4dC5tYWtlQ2FsbCh2bSwgZnVuY3Rpb24udmFsdWUoKSk7CiAgICAgfQog
ICAgIGlmIChleGNlcHRpb25UYXJnZXQpCiAgICAgICAgIGV4Y2VwdGlvblRhcmdldC0+YXBwZW5k
KGppdC5lbWl0RXhjZXB0aW9uQ2hlY2sodm0pKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFRodW5rcy5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBA
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJpY0dlbmUKIAogICAgIGppdC5yZXQo
KTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhV
TktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQp
OwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxsLCBnZW5lcmF0aW9uRnVuY3Rpb24p
OwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIiVzIiwgbmFtZSkpOwog
fQpAQCAtMTY0LDcgKzE2NCw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ2xvYmJlckNoZWNrKEFz
c2VtYmwKICAgICB9CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVu
a0dlbmVyYXRvcihWTSYgdm0sIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKGNvbnN0IFNsb3dQYXRoQ2Fs
bEtleSYga2V5KQogewogICAgIEFzc2VtYmx5SGVscGVycyBqaXQobnVsbHB0cik7CiAgICAgCkBA
IC0yMjIsNyArMjIyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5r
RwogICAgIAogICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIodm0s
IGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRy
KGtleS5jYWxsVGFyZ2V0KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgKCJGVEwgc2xvdyBwYXRoIGNhbGwgdGh1bmsgZm9yICVzIiwgdG9DU3RyaW5nKGtleSkuZGF0
YSgpKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHJldmlz
aW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIEZUTCB7CiAKIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7CiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZN
Kik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IoVk0m
LCBjb25zdCBTbG93UGF0aENhbGxLZXkmKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0
aENhbGxUaHVua0dlbmVyYXRvcihjb25zdCBTbG93UGF0aENhbGxLZXkmKTsKIAogdGVtcGxhdGU8
dHlwZW5hbWUgS2V5VHlwZUFyZ3VtZW50Pgogc3RydWN0IFRodW5rTWFwIHsKQEAgLTU0LDEzICs1
NCwxMyBAQCBzdHJ1Y3QgVGh1bmtNYXAgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlLCB0
eXBlbmFtZSBHZW5lcmF0b3JUeXBlPgogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlSWZO
ZWNlc3NhcnkoCi0gICAgVk0mIHZtLCBNYXBUeXBlJiBtYXAsIGNvbnN0IHR5cGVuYW1lIE1hcFR5
cGU6OktleVR5cGUmIGtleSwgR2VuZXJhdG9yVHlwZSBnZW5lcmF0b3IpCisgICAgTWFwVHlwZSYg
bWFwLCBjb25zdCB0eXBlbmFtZSBNYXBUeXBlOjpLZXlUeXBlJiBrZXksIEdlbmVyYXRvclR5cGUg
Z2VuZXJhdG9yKQogewogICAgIHR5cGVuYW1lIE1hcFR5cGU6OlRvVGh1bmtNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtYXAubV90b1RodW5rLmZpbmQoa2V5KTsKICAgICBpZiAoaXRlciAhPSBtYXAubV90
b1RodW5rLmVuZCgpKQogICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CiAgICAgCi0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHJlc3VsdCA9IGdlbmVyYXRvcih2bSwga2V5KTsKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgcmVzdWx0ID0gZ2VuZXJhdG9yKGtleSk7CiAgICAgbWFwLm1fdG9U
aHVuay5hZGQoa2V5LCByZXN1bHQpOwogICAgIG1hcC5tX2Zyb21UaHVuay5hZGQocmVzdWx0LmNv
ZGUoKSwga2V5KTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNzYsMTAgKzc2LDEwIEBAIHR5cGVu
YW1lIE1hcFR5cGU6OktleVR5cGUga2V5Rm9yVGh1bmsoTWEKIAogY2xhc3MgVGh1bmtzIHsKIHB1
YmxpYzoKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2V0U2xvd1BhdGhDYWxsVGh1bmsoVk0m
IHZtLCBjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgZ2V0U2xvd1BhdGhDYWxsVGh1bmsoY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpCiAgICAg
ewogICAgICAgICByZXR1cm4gZ2VuZXJhdGVJZk5lY2Vzc2FyeSgKLSAgICAgICAgICAgIHZtLCBt
X3Nsb3dQYXRoQ2FsbFRodW5rcywga2V5LCBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcik7Cisg
ICAgICAgICAgICBtX3Nsb3dQYXRoQ2FsbFRodW5rcywga2V5LCBzbG93UGF0aENhbGxUaHVua0dl
bmVyYXRvcik7CiAgICAgfQogICAgIAogICAgIFNsb3dQYXRoQ2FsbEtleSBrZXlGb3JTbG93UGF0
aENhbGxUaHVuayhNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcHRyKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjE0NTQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MjcsMTQgKzYyNywxNCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9y
ZUNhbGxlZVNhdmVzCiAjZW5kaWYKIH0KIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXREdW1i
VmlydHVhbENhbGwoQ2FsbExpbmtJbmZvKiBpbmZvKQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVt
aXREdW1iVmlydHVhbENhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8pCiB7CiAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0g
bmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzaygKLSAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRo
dW5rID0gdmlydHVhbFRodW5rRm9yKCZsaW5rQnVmZmVyLnZtKCksICppbmZvKTsKLSAgICAgICAg
ICAgIGluZm8tPnNldFNsb3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuaywg
bGlua0J1ZmZlci52bSgpLCBudWxscHRyLCB0cnVlKSk7CisgICAgICAgIFs9LCAmdm1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
dmlydHVhbFRodW5rID0gdmlydHVhbFRodW5rRm9yKCZ2bSwgKmluZm8pOworICAgICAgICAgICAg
aW5mby0+c2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUodmlydHVhbFRodW5rLCB2bSwg
bnVsbHB0ciwgdHJ1ZSkpOwogICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIENvZGVM
b2NhdGlvbkxhYmVsKHZpcnR1YWxUaHVuay5jb2RlKCkpKTsKICAgICAgICAgfSk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9u
IDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MDksNyArMTQwOSw3IEBAIHB1YmxpYzoKICAgICAgICAgZnVu
Y3RvcihUeXBlb2ZUeXBlOjpVbmRlZmluZWQsIHRydWUpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGVtaXREdW1iVmlydHVhbENhbGwoQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0RHVtYlZp
cnR1YWxDYWxsKFZNJiwgQ2FsbExpbmtJbmZvKik7CiAgICAgCiAgICAgVmVjdG9yPEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9jayopOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5j
cHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMSwxNSArMzExLDI1IEBAIHBy
aXZhdGU6CiB9OwogCiBzdGF0aWMgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxv
Y2F0b3I7CitzdGF0aWMgRXhlY3V0YWJsZUFsbG9jYXRvciogZXhlY3V0YWJsZUFsbG9jYXRvcjsK
IAogdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxsb2NhdG9yKCkKIHsKICAg
ICBBU1NFUlQoIWFsbG9jYXRvcik7CiAgICAgYWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvcigpOwogICAgIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcihh
bGxvY2F0b3IpOworCisgICAgZXhlY3V0YWJsZUFsbG9jYXRvciA9IG5ldyBFeGVjdXRhYmxlQWxs
b2NhdG9yOworfQorCitFeGVjdXRhYmxlQWxsb2NhdG9yJiBFeGVjdXRhYmxlQWxsb2NhdG9yOjpz
aW5nbGV0b24oKQoreworICAgIEFTU0VSVChhbGxvY2F0b3IpOworICAgIEFTU0VSVChleGVjdXRh
YmxlQWxsb2NhdG9yKTsKKyAgICByZXR1cm4gKmV4ZWN1dGFibGVBbGxvY2F0b3I7CiB9CiAKLUV4
ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IoVk0mKQorRXhlY3V0YWJsZUFs
bG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcigpCiB7CiAgICAgQVNTRVJUKGFsbG9jYXRvcik7
CiB9CkBAIC0zNjIsNyArMzcyLDcgQEAgZG91YmxlIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1lbW9y
eVByZXNzdQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShWTSYsIHNpemVfdCBzaXplSW5C
eXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK1JlZlB0
cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShz
aXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBl
ZmZvcnQpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0V4ZWN1dGFibGVBbGxvY2F0aW9uKCkpIHsK
ICAgICAgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBzdGF0cyA9IGFsbG9jYXRvci0+Y3Vy
cmVudFN0YXRpc3RpY3MoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
OCArNTUsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVk07Ci0KIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBqaXRBbGxvY2F0aW9uR3JhbnVsZSA9IDMyOwogCiB0eXBlZGVmIFdURjo6TWV0
YUFsbG9jYXRvckhhbmRsZSBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlOwpAQCAtMTE3LDkgKzExNSw3
IEBAIGNsYXNzIEV4ZWN1dGFibGVBbGxvY2F0b3IgewogICAgIGVudW0gUHJvdGVjdGlvblNldHRp
bmcgeyBXcml0YWJsZSwgRXhlY3V0YWJsZSB9OwogCiBwdWJsaWM6Ci0gICAgRXhlY3V0YWJsZUFs
bG9jYXRvcihWTSYpOwotICAgIH5FeGVjdXRhYmxlQWxsb2NhdG9yKCk7Ci0gICAgCisgICAgc3Rh
dGljIEV4ZWN1dGFibGVBbGxvY2F0b3ImIHNpbmdsZXRvbigpOwogICAgIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemVBbGxvY2F0b3IoKTsKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwpAQCAtMTM0
LDEzICsxMzAsMTcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBQcm9maWxlKCkgeyB9
CiAjZW5kaWYKIAotICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0ZShW
TSYsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZm
b3J0KTsKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90
IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCiAg
ICAgYm9vbCBpc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShjb25zdCBBYnN0cmFjdExvY2tlciYsIHZv
aWQqIGFkZHJlc3MpOwogCiAgICAgc3RhdGljIHNpemVfdCBjb21taXR0ZWRCeXRlQ291bnQoKTsK
IAogICAgIExvY2smIGdldExvY2soKSBjb25zdDsKK3ByaXZhdGU6CisKKyAgICBFeGVjdXRhYmxl
QWxsb2NhdG9yKCk7CisgICAgfkV4ZWN1dGFibGVBbGxvY2F0b3IoKTsKIH07CiAKICNlbmRpZiAv
LyBFTkFCTEUoSklUKSAmJiBFTkFCTEUoQVNTRU1CTEVSKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTYsNyArNzE2LDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVXaXRob3V0TGlua2luZyhKSVRDb21waQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0
RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVu
ZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdp
bigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihu
ZXcgTGlua0J1ZmZlcigqbV92bSwgKnRoaXMsIG1fY29kZUJsb2NrLCBlZmZvcnQpKTsKKyAgICBt
X2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIo
KnRoaXMsIG1fY29kZUJsb2NrLCBlZmZvcnQpKTsKIAogICAgIGRvdWJsZSBhZnRlciA9IDA7CiAg
ICAgaWYgKFVOTElLRUxZKGNvbXB1dGVDb21waWxlVGltZXMoKSkpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEy
MSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnUKICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9m
KFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0RHVtYlZpcnR1YWxDYWxsKGluZm8pOworICAgIGVtaXRE
dW1iVmlydHVhbENhbGwoKnZtKCksIGluZm8pOwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0
aElDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMu
aAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRo
SUMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgZ2VuZXJhdGVPdXRPZkxpbmUoVk0mIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgRnVuY3Rpb25QdHIgY2FsbFJlcGxhY2VtZW50KQorICAg
IHZvaWQgZ2VuZXJhdGVPdXRPZkxpbmUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1bmN0aW9uUHRy
IGNhbGxSZXBsYWNlbWVudCkKICAgICB7CiAgICAgICAgIGF1dG8gbGlua0p1bXBUb091dE9mTGlu
ZVNuaXBwZXQgPSBbJl0gKCkgewogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxv
Y2spOwpAQCAtMTYwLDcgKzE2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChnZW5lcmF0
ZWRJbmxpbmUpIHsKICAgICAgICAgICAgICAgICBhdXRvIGp1bXBUb0RvbmUgPSBqaXQuanVtcCgp
OwogCi0gICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCBqaXQsIGNvZGVC
bG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAgICAgICAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGdlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1
bXBzLCBzbG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CiAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhqdW1wVG9Eb25lLCBkb25lTG9jYXRpb24oKSk7CkBAIC0yMDAsNyArMjAwLDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGVuZEp1bXBM
aXN0LmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAgICAg
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25D
YW5GYWlsKTsKICAgICAgICAgICAgIGlmIChsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNjEsNyArMTA2MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9w
ZXIKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlzLCBtX2NvZGVC
bG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOwog
ICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRk
cmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Ns
b3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxh
YmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJl
dHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRy
ZXNzVG9TbG93UGF0aCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTE5LDcgKzExMTksNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAgICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CiAgICAgSnVtcCBkb25l
ID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgKnRoaXMsIG1f
Y29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9j
ayk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJl
bChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVz
c1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0
aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJl
c3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVy
bkFkZHJlc3NUb1Nsb3dQYXRoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNzUsNyArMjM3
NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKICAgICBBU1NF
UlQoYXJpdGhQcm9maWxlKTsKICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRSSFMob3Ax
LCBvcDIpOwogICAgIGF1dG8gbm9uT3B0aW1pemVWYXJpYW50ID0gb3BlcmF0aW9uVmFsdWVBZGRQ
cm9maWxlZE5vT3B0aW1pemU7Ci0gICAgYWRkSUMtPmdlbmVyYXRlT3V0T2ZMaW5lKCp2bSwgZXhl
Yy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CisgICAgYWRkSUMtPmdlbmVyYXRl
T3V0T2ZMaW5lKGV4ZWMtPmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOwogCiAjaWYg
RU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgZXhlYy0+Y29kZUJsb2NrKCktPmR1bXBNYXRoSUNT
dGF0cygpOwpAQCAtMjQwOCw3ICsyNDA4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25WYQogICAgIGF1dG8gbm9uT3B0aW1pemVWYXJpYW50ID0gb3BlcmF0aW9uVmFs
dWVBZGROb09wdGltaXplOwogICAgIGlmIChBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGFk
ZElDLT5hcml0aFByb2ZpbGUoKSkKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTQW5k
UkhTKG9wMSwgb3AyKTsKLSAgICBhZGRJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoKnZtLCBleGVjLT5j
b2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsKKyAgICBhZGRJQy0+Z2VuZXJhdGVPdXRP
ZkxpbmUoZXhlYy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CiAKICNpZiBFTkFC
TEUoTUFUSF9JQ19TVEFUUykKICAgICBleGVjLT5jb2RlQmxvY2soKS0+ZHVtcE1hdGhJQ1N0YXRz
KCk7CkBAIC0yNDg1LDcgKzI0ODUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblZhCiAgICAgYXV0byBub25PcHRpbWl6ZVZhcmlhbnQgPSBvcGVyYXRpb25WYWx1ZU11
bE5vT3B0aW1pemU7CiAgICAgaWYgKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbXVsSUMt
PmFyaXRoUHJvZmlsZSgpKQogICAgICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRSSFMo
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikp
OwotICAgIG11bElDLT5nZW5lcmF0ZU91dE9mTGluZSgqdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBu
b25PcHRpbWl6ZVZhcmlhbnQpOworICAgIG11bElDLT5nZW5lcmF0ZU91dE9mTGluZShleGVjLT5j
b2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NU
QVRTKQogICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5kdW1wTWF0aElDU3RhdHMoKTsKQEAgLTI1MTIs
NyArMjUxMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKICAg
ICBBU1NFUlQoYXJpdGhQcm9maWxlKTsKICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRS
SFMoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
MikpOwogICAgIGF1dG8gbm9uT3B0aW1pemVWYXJpYW50ID0gb3BlcmF0aW9uVmFsdWVNdWxQcm9m
aWxlZE5vT3B0aW1pemU7Ci0gICAgbXVsSUMtPmdlbmVyYXRlT3V0T2ZMaW5lKCp2bSwgZXhlYy0+
Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CisgICAgbXVsSUMtPmdlbmVyYXRlT3V0
T2ZMaW5lKGV4ZWMtPmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOwogCiAjaWYgRU5B
QkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgZXhlYy0+Y29kZUJsb2NrKCktPmR1bXBNYXRoSUNTdGF0
cygpOwpAQCAtMjU4Myw3ICsyNTgzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25BcgogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbmVnSUMtPmFyaXRo
UHJvZmlsZSgpOwogICAgIEFTU0VSVChhcml0aFByb2ZpbGUpOwogICAgIGFyaXRoUHJvZmlsZS0+
b2JzZXJ2ZUxIUyhvcGVyYW5kKTsKLSAgICBuZWdJQy0+Z2VuZXJhdGVPdXRPZkxpbmUodm0sIGV4
ZWMtPmNvZGVCbG9jaygpLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkKTsKKyAgICBuZWdJ
Qy0+Z2VuZXJhdGVPdXRPZkxpbmUoZXhlYy0+Y29kZUJsb2NrKCksIG9wZXJhdGlvbkFyaXRoTmVn
YXRlUHJvZmlsZWQpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgZXhlYy0+Y29k
ZUJsb2NrKCktPmR1bXBNYXRoSUNTdGF0cygpOwpAQCAtMjYwNyw3ICsyNjA3LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcgogCiAgICAgaWYgKEFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbmVnSUMtPmFyaXRoUHJvZmlsZSgpKQogICAgICAgICBhcml0aFBy
b2ZpbGUtPm9ic2VydmVMSFMob3BlcmFuZCk7Ci0gICAgbmVnSUMtPmdlbmVyYXRlT3V0T2ZMaW5l
KHZtLCBleGVjLT5jb2RlQmxvY2soKSwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOworICAgIG5lZ0lD
LT5nZW5lcmF0ZU91dE9mTGluZShleGVjLT5jb2RlQmxvY2soKSwgb3BlcmF0aW9uQXJpdGhOZWdh
dGUpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgZXhlYy0+Y29kZUJsb2NrKCkt
PmR1bXBNYXRoSUNTdGF0cygpOwpAQCAtMjY3NSw3ICsyNjc1LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogICAgIGF1dG8gbm9uT3B0aW1pemVWYXJpYW50ID0g
b3BlcmF0aW9uVmFsdWVTdWJOb09wdGltaXplOwogICAgIGlmIChBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9IHN1YklDLT5hcml0aFByb2ZpbGUoKSkKICAgICAgICAgYXJpdGhQcm9maWxlLT5v
YnNlcnZlTEhTQW5kUkhTKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDIpKTsKLSAgICBzdWJJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoKnZtLCBleGVj
LT5jb2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsKKyAgICBzdWJJQy0+Z2VuZXJhdGVP
dXRPZkxpbmUoZXhlYy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CiAKICNpZiBF
TkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBleGVjLT5jb2RlQmxvY2soKS0+ZHVtcE1hdGhJQ1N0
YXRzKCk7CkBAIC0yNzAxLDcgKzI3MDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblZhCiAgICAgQVNTRVJUKGFyaXRoUHJvZmlsZSk7CiAgICAgYXJpdGhQcm9maWxl
LT5vYnNlcnZlTEhTQW5kUkhTKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRPcDIpKTsKICAgICBhdXRvIG5vbk9wdGltaXplVmFyaWFudCA9IG9wZXJh
dGlvblZhbHVlU3ViUHJvZmlsZWROb09wdGltaXplOwotICAgIHN1YklDLT5nZW5lcmF0ZU91dE9m
TGluZSgqdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOworICAgIHN1
YklDLT5nZW5lcmF0ZU91dE9mTGluZShleGVjLT5jb2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJp
YW50KTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGV4ZWMtPmNvZGVCbG9jaygp
LT5kdW1wTWF0aElDU3RhdHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCBjbGFz
cyBTdHJ1Y3R1cmU7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKIGNsYXNzIFN5bWJvbDsKIGNs
YXNzIFN5bWJvbFRhYmxlOworY2xhc3MgVk07CiBjbGFzcyBXYXRjaHBvaW50U2V0OwogCiBzdHJ1
Y3QgQnlWYWxJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzcsNyArMTc3LDcgQEAgSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxT
dHViR2VuZQogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogICAgIGppdC5y
ZXQoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxf
VEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIlN0cmluZyBnZXRf
YnlfdmFsIHN0dWIiKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODgsNyArODgsNyBAQCBKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lCiAg
ICAgaml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAgICAgaml0LnJldCgpOwogICAg
IAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiU3RyaW5nIGdldF9ieV92YWwgc3R1
YiIpKTsKIH0KIApAQCAtMTMzNiw3ICsxMzM2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlWYWwoQnlWYWxJbgogICAgIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOwogICAgIAogICAgIHBhdGNo
QnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSku
bGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAg
cGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFs
dWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkp
OwpAQCAtMTM2Miw3ICsxMzYyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWxX
aXRoQ2FjaAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuID0gZW1pdEdldEJ5VmFsV2l0aENh
Y2hlZElkKGJ5VmFsSW5mbywgY3VycmVudEluc3RydWN0aW9uLCBwcm9wZXJ0eU5hbWUsIGZhc3RE
b25lQ2FzZSwgc2xvd0RvbmVDYXNlLCBzbG93Q2FzZXMpOwogCiAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX3ZtLCAqdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywg
Q29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0
YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbElu
Zm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYXN0
RG9uZUNhc2UsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8t
PmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93RG9uZUNhc2Us
IGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVK
dW1wVG9OZXh0SG90UGF0aCkpOwpAQCAtMTQxOSw3ICsxNDE5LDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
IAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlzLCBtX2NvZGVCbG9jayk7
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOwogICAgIHBh
dGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgp
KSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CiAg
ICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3Mu
dmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0
aCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5s
YWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKQEAgLTE0NTMsNyAr
MTQ1Myw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2gKICAgICBK
SVRQdXRCeUlkR2VuZXJhdG9yIGdlbiA9IGVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChieVZhbElu
Zm8sIGN1cnJlbnRJbnN0cnVjdGlvbiwgcHV0S2luZCwgcHJvcGVydHlOYW1lLCBkb25lQ2FzZXMs
IHNsb3dDYXNlcyk7CiAKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2Nr
LT5tX2xvY2spOwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlzLCBtX2Nv
ZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2sp
OwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNy
b0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRy
ZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xv
d1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmVDYXNlcywgYnlWYWxJbmZvLT5iYWRU
eXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKICAg
ICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKSVRTdHViUm91dGluZVNldDsK
K2NsYXNzIFZNOwogCiAvLyBUaGlzIGlzIGEgYmFzZS1jbGFzcyBmb3IgSklUIHN0dWIgcm91dGlu
ZXMsIGFuZCBhbHNvIHRoZSBjbGFzcyB5b3Ugd2FudAogLy8gdG8gaW5zdGFudGlhdGUgZGlyZWN0
bHkgaWYgeW91IGhhdmUgYSByb3V0aW5lIHRoYXQgZG9lcyBub3QgbmVlZCBhbnkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEs
NyArOTEsNyBAQCB2b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxvY2sqCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKICAgICAgICAga2V5ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5ld0NhbGxl
ZUZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICBuZXdDYWxsZWVGdW5jdGlv
biA9IEZ1bmN0aW9uUHRyKAotICAgICAgICAgICAgdGh1bmtzLmdldFNsb3dQYXRoQ2FsbFRodW5r
KHZtLCBrZXkpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHRodW5r
cy5nZXRTbG93UGF0aENhbGxUaHVuayhrZXkpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsK
ICAgICB9CiAjZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKICAgICBVTlVTRURfUEFSQU0oY29kZUJs
b2NrKTsKQEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAg
c3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7
CiAgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKICAgICAg
ICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih2bSwgc3R1YkppdCwgb3duZXIsIEpJVENv
bXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihzdHViSml0LCBv
d25lciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFp
bFRvQWxsb2NhdGUoKSkgewogICAgICAgICBsaW5rVmlydHVhbEZvcihleGVjLCBjYWxsTGlua0lu
Zm8pOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nw
ZWNpYWxpemVkVGh1bmtKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTE2Niw3ICsxNjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBmaW5hbGl6ZShNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmFsbGJhY2ss
IGNvbnN0IGNoYXIqIHRodW5rS2luZCkKICAgICAgICAgewotICAgICAgICAgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV92bSwgKnRoaXMsIEdMT0JBTF9USFVOS19JRCk7CisgICAgICAgICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQpOwogICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2ZhaWx1cmVzLCBDb2RlTG9jYXRpb25MYWJlbChmYWxs
YmFjaykpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6
ZSgpOyBpKyspCiAgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzW2ldLmZp
cnN0LCBtX2NhbGxzW2ldLnNlY29uZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3
LDcgKzc3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQogICAg
IGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGppdC5qdW1wVG9FeGNlcHRpb25I
YW5kbGVyKCp2bSk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9C
QUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIlRocm93IGV4
Y2VwdGlvbiBmcm9tIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwogfQogCkBAIC0xNDIsNyArMTQy
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcgogICAgIAogICAg
IHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtDYWxsKTsKICAgICAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxpbmsgY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7CiB9
CiAKQEAgLTE1NCw3ICsxNTQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3Jw
aGljQ2FsCiAgICAgCiAgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua1BvbHlt
b3JwaGljQ2FsbCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMaW5r
IHBvbHltb3JwaGljIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwogfQogCkBAIC0yMjMsNyArMjIz
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxUaHVua0ZvcihWTQogICAgIAogICAg
IHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvblZpcnR1YWxDYWxsKTsKICAgICAKLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwKICAgICAgICAgKCJWaXJ0dWFsICVz
IHNsb3cgcGF0aCB0aHVuayIsCkBAIC0zODIsNyArMzgyLDcgQEAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogCiAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIo
KnZtKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVO
S19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7
CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgibmF0aXZlICVzJXMgdHJh
bXBvbGluZSIsIGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRoU2F2ZWRUYWdzID8gIlRhaWwg
V2l0aCBTYXZlZCBUYWdzICIgOiBlbnRyeVR5cGUgPT0gRW50ZXJWaWFKdW1wV2l0aG91dFNhdmVk
VGFncyA/ICJUYWlsIFdpdGhvdXQgU2F2ZWQgVGFncyAiIDogIiIsIHRvQ1N0cmluZyhraW5kKS5k
YXRhKCkpKTsKIH0KIApAQCAtNTI5LDcgKzUyOSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBh
cml0eUZpeHVwR2VuZXJhdG8KICAgICBqaXQucmV0KCk7CiAjZW5kaWYKIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsICgiZml4dXAgYXJpdHkiKSk7CiB9CiAKQEAgLTUzOSw3ICs1Mzks
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdW5yZWFjaGFibGVHZW5lcmF0CiAKICAgICBqaXQu
YnJlYWtwb2ludCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xP
QkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJ1bnJlYWNo
YWJsZSB0aHVuayIpKTsKIH0KIApAQCAtMTEyNyw3ICsxMTI3LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1bgogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgp
OwogICAgIGppdC5yZXQoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBq
aXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lEKTsKICAgICBsaW5rQnVmZmVyLmxpbmsobm9Db2RlLCBDb2RlTG9jYXRpb25M
YWJlbCh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyh2bSkp
KTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKICAgICAgICAgbGlua0J1ZmZlciwgKCJTcGVj
aWFsaXplZCB0aHVuayBmb3IgYm91bmQgZnVuY3Rpb24gY2FsbHMgd2l0aCBubyBhcmd1bWVudHMi
KSk7CkBAIC0xMTY3LDcgKzExNjcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNl
cHRpb25Gcm9tCiAgICAgICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CiAgICAg
fTsKIAotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lE
KTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAg
IGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd1dhc21FeGNlcHRpb24pOwogICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKAogICAgICAgICBsaW5rQnVmZmVyLCAoIlRocm93IGV4Y2VwdGlvbiBmcm9t
IFdhc20iKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5r
cy5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZVRodQogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNl
SklUOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4odGFyZ2V0KSksIEpTSW50ZXJm
YWNlSklUOjpyZWdUMCk7CiAgICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKICAg
ICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQp
OworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxMSW50ICVzIHByb2xvZ3VlIHRo
dW5rIiwgdGh1bmtLaW5kKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQyLDcgKzM0Miw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGFrZVNh
bXBsZShjb25zdCAKIAogICAgICAgICBMb2NrSG9sZGVyIG1hY2hpbmVUaHJlYWRzTG9ja2VyKG1f
dm0uaGVhcC5tYWNoaW5lVGhyZWFkcygpLmdldExvY2soKSk7CiAgICAgICAgIExvY2tIb2xkZXIg
Y29kZUJsb2NrU2V0TG9ja2VyKG1fdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5nZXRMb2NrKCkpOwot
ICAgICAgICBMb2NrSG9sZGVyIGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIobV92bS5leGVjdXRh
YmxlQWxsb2NhdG9yLmdldExvY2soKSk7CisgICAgICAgIExvY2tIb2xkZXIgZXhlY3V0YWJsZUFs
bG9jYXRvckxvY2tlcihFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24oKS5nZXRMb2NrKCkp
OwogCiAgICAgICAgIGJvb2wgZGlkU3VzcGVuZCA9IG1fanNjRXhlY3V0aW9uVGhyZWFkLT5zdXNw
ZW5kKCk7CiAgICAgICAgIGlmIChkaWRTdXNwZW5kKSB7CkBAIC0zNjQsNyArMzY0LDcgQEAgdm9p
ZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IAogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgLy8gRklYTUU6IExldHMgaGF2ZSBhIHdheSBvZiBkZXRlY3Rpbmcgd2hlbiB3ZSdy
ZSBwYXJzaW5nIGNvZGUuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUyNzYxCi0gICAgICAgICAgICBpZiAobV92bS5leGVjdXRhYmxlQWxs
b2NhdG9yLmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIs
IG1hY2hpbmVQQykpIHsKKyAgICAgICAgICAgIGlmIChFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5n
bGV0b24oKS5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShleGVjdXRhYmxlQWxsb2NhdG9yTG9ja2Vy
LCBtYWNoaW5lUEMpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fdm0uaXNFeGVjdXRpbmdJblJl
Z0V4cEpJVCkgewogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UncmUgZXhlY3V0aW5n
IGEgcmVnZXhwLiBMZXRzIGdhdGhlciBtb3JlIGludGVyc3RpbmcgZGF0YS4KICAgICAgICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjcy
OQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjE0NTQ3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjYsNyArMTY2LDYgQEAgc3RhdGljIGJvb2wgZW5hYmxlQXNzZW1ibGVyKEV4ZWN1dGFi
bGVBbAogVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIDogbV9h
cGlMb2NrKGFkb3B0UmVmKG5ldyBKU0xvY2sodGhpcykpKQogI2lmIEVOQUJMRShBU1NFTUJMRVIp
Ci0gICAgLCBleGVjdXRhYmxlQWxsb2NhdG9yKCp0aGlzKQogI2VuZGlmCiAgICAgLCBoZWFwKHRo
aXMsIGhlYXBUeXBlKQogICAgICwgYXV4aWxpYXJ5U3BhY2UoIkF1eGlsaWFyeSIsIGhlYXAsIEFs
bG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkF1eGls
aWFyeSkpCkBAIC0xOTgsNyArMTk3LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBl
IGhlYXBUeXBlKQogICAgICwgbV9ydFRyYWNlTGlzdChuZXcgUlRUcmFjZUxpc3QoKSkKICNlbmRp
ZgogI2lmIEVOQUJMRShBU1NFTUJMRVIpCi0gICAgLCBtX2NhblVzZUFzc2VtYmxlcihlbmFibGVB
c3NlbWJsZXIoZXhlY3V0YWJsZUFsbG9jYXRvcikpCisgICAgLCBtX2NhblVzZUFzc2VtYmxlcihl
bmFibGVBc3NlbWJsZXIoRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkpKQogI2VuZGlm
CiAjaWYgRU5BQkxFKEpJVCkKICAgICAsIG1fY2FuVXNlSklUKG1fY2FuVXNlQXNzZW1ibGVyICYm
IE9wdGlvbnM6OnVzZUpJVCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShy
ZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yODUsMTQgKzI4NSw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEpT
TG9jaz4gbV9hcGlMb2NrOwogCiBwdWJsaWM6Ci0jaWYgRU5BQkxFKEFTU0VNQkxFUikKLSAgICAv
LyBleGVjdXRhYmxlQWxsb2NhdG9yIHNob3VsZCBiZSBkZXN0cnVjdGVkIGFmdGVyIHRoZSBoZWFw
LCBhcyB0aGUgaGVhcCBjYW4gY2FsbCBleGVjdXRhYmxlQWxsb2NhdG9yCi0gICAgLy8gaW4gaXRz
IGRlc3RydWN0b3IuCi0gICAgRXhlY3V0YWJsZUFsbG9jYXRvciBleGVjdXRhYmxlQWxsb2NhdG9y
OwotI2VuZGlmCi0KLSAgICAvLyBUaGUgaGVhcCBzaG91bGQgYmUganVzdCBhZnRlciBleGVjdXRh
YmxlQWxsb2NhdG9yIGFuZCBiZWZvcmUgb3RoZXIgbWVtYmVycyB0byBlbnN1cmUgdGhhdCBpdCdz
Ci0gICAgLy8gZGVzdHJ1Y3RlZCBhZnRlciBhbGwgdGhlIG9iamVjdHMgdGhhdCByZWZlcmVuY2Ug
aXQuCiAgICAgSGVhcCBoZWFwOwogICAgIAogICAgIFN1YnNwYWNlIGF1eGlsaWFyeVNwYWNlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHJldmlzaW9u
IDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTAsNyArMjUwLDcgQEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxs
VHJhcEJyZWFrcG9pbnRzKAogICAgICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVy
IHRyeSBhZ2FpbiBsYXRlci4KIAogICAgIHsKLSAgICAgICAgYXV0byBhbGxvY2F0b3IgPSB2bS5l
eGVjdXRhYmxlQWxsb2NhdG9yOworICAgICAgICBhdXRvJiBhbGxvY2F0b3IgPSBFeGVjdXRhYmxl
QWxsb2NhdG9yOjpzaW5nbGV0b24oKTsKICAgICAgICAgYXV0byBhbGxvY2F0b3JMb2NrZXIgPSB0
cnlIb2xkTG9jayhhbGxvY2F0b3IuZ2V0TG9jaygpKTsKICAgICAgICAgaWYgKCFhbGxvY2F0b3JM
b2NrZXIpCiAgICAgICAgICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBh
Z2FpbiBsYXRlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVj
dG9yLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L1ZNSW5zcGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDggKzEwNyw4IEBAIGF1dG8g
Vk1JbnNwZWN0b3I6OmlzVmFsaWRFeGVjdXRhYmxlTWVtb3IKICNpZiBFTkFCTEUoSklUKQogICAg
IGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICBib29sIGhhc1RpbWVvdXQgPSBmYWxzZTsKLSAgICBp
dGVyYXRlKFsmXSAoVk0mIHZtKSAtPiBGdW5jdG9yU3RhdHVzIHsKLSAgICAgICAgYXV0byBhbGxv
Y2F0b3IgPSB2bS5leGVjdXRhYmxlQWxsb2NhdG9yOworICAgIGl0ZXJhdGUoWyZdIChWTSYpIC0+
IEZ1bmN0b3JTdGF0dXMgeworICAgICAgICBhdXRvJiBhbGxvY2F0b3IgPSBFeGVjdXRhYmxlQWxs
b2NhdG9yOjpzaW5nbGV0b24oKTsKICAgICAgICAgYXV0byYgbG9jayA9IGFsbG9jYXRvci5nZXRM
b2NrKCk7CiAKICAgICAgICAgYm9vbCBpc1NhZmVUb0xvY2sgPSBlbnN1cmVJc1NhZmVUb0xvY2so
bG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3Bw
CShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmlu
ZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAgICAgICAgICAgICAgICAgQVNTRVJUKCEhdm0t
PmNhbGxGcmFtZUZvckNhdGNoKTsKICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICAgICAgICAg
IExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dCYWRJNjQpOwogICAgICAgICAgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbnZh
bGlkIGk2NCB1c2UgaW4gaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KSk7CiAgICAgICAgIH0KQEAg
LTQxMiw3ICs0MTIsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZN
CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBq
aXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25Q
dHIodm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBjYWxsUmV0dXJuTG9jYXRpb24o
cGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSk7CiAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgaG90UGF0aEJlZ2luKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YodGFyZ2V0VG9DaGVj
aykpOwpAQCAtNDI2LDcgKzQyNiw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2Fz
bVRvSnMoVk0KICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3Nl
bWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZURl
c2NyaXB0aW9uLmFzY2lpKCkuZGF0YSgpKSk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgd2FzbVRvV2FzbShWTSogdm0sIHVuc2lnbmVkIGltcG9ydEluZGV4KQorc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9XYXNtKHVuc2lnbmVkIGltcG9ydEluZGV4KQogewog
ICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVy
SW5mbzo6Z2V0KCk7CiAgICAgSklUIGppdDsKQEAgLTQ2Miw3ICs0NjIsNyBAQCBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub1dhc20oCiAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRy
ZXNzKHNjcmF0Y2gsIFdlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNldE9mV2FzbUVudHJ5UG9pbnRD
b2RlKCkpLCBzY3JhdGNoKTsKICAgICBqaXQuanVtcChzY3JhdGNoKTsKIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsICgiV2ViQXNzZW1ibHktPldlYkFzc2VtYmx5IGltcG9ydFslaV0i
LCBpbXBvcnRJbmRleCkpOwogfQogCkBAIC00NzAsNyArNDcwLDcgQEAgV2FzbUV4aXRTdHVicyBl
eGl0U3R1YkdlbmVyYXRvcihWTSogdm0sIAogewogICAgIFdhc21FeGl0U3R1YnMgc3R1YnM7CiAg
ICAgc3R1YnMud2FzbVRvSnMgPSB3YXNtVG9Kcyh2bSwgY2FsbExpbmtJbmZvcywgc2lnbmF0dXJl
SW5kZXgsIGltcG9ydEluZGV4KTsKLSAgICBzdHVicy53YXNtVG9XYXNtID0gd2FzbVRvV2FzbSh2
bSwgaW1wb3J0SW5kZXgpOworICAgIHN0dWJzLndhc21Ub1dhc20gPSB3YXNtVG9XYXNtKGltcG9y
dEluZGV4KTsKICAgICByZXR1cm4gc3R1YnM7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGxhbi5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY3LDEzICsyNjcs
MTMgQEAgdm9pZCBQbGFuOjpjb21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlcgogICAgICAgICAg
ICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07CiAgICAg
ICAgICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZURlc2NyaXB0aW9uID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldCgmbV92bSwgc2lnbmF0dXJlSW5kZXgpLT50b1N0cmluZygpOwogICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKG1fdm0s
ICpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxs
cHRyKTsKICAgICAgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rp
b25JbmRleF0tPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0KICAgICAgICAgICAgICAgICAg
ICAgc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KEZJTkFMSVpFX0NPREUobGlua0J1
ZmZlciwgKCJXZWJBc3NlbWJseSBmdW5jdGlvblslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBzaWdu
YXR1cmVEZXNjcmlwdGlvbi5hc2NpaSgpLmRhdGEoKSkpLCBXVEZNb3ZlKGNvbnRleHQud2FzbUVu
dHJ5cG9pbnRCeXByb2R1Y3RzKSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIobV92bSwgKmNv
bnRleHQuanNFbnRyeXBvaW50SklULCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKCpjb250ZXh0LmpzRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CiAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjb250ZXh0LmpzRW50cnlwb2ludFRv
V2FzbUVudHJ5cG9pbnRDYWxsLCBGdW5jdGlvblB0cihtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tm
dW5jdGlvbkluZGV4XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpKSk7CiAKICAgICAgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5j
dGlvbnNbZnVuY3Rpb25JbmRleF0tPmpzVG9XYXNtRW50cnlwb2ludC5jb21waWxhdGlvbiA9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNpb24gMjE0NTQ3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2NDYsNyArMjY0Niw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9p
ZCBjb21waWxlKFZNKiB2bSwgWWFyckNvZGVCbG9jayYgaml0T2JqZWN0KQorICAgIHZvaWQgY29t
cGlsZShZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QpCiAgICAgewogICAgICAgICBnZW5lcmF0ZUVu
dGVyKCk7CiAKQEAgLTI2NzQsNyArMjY3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgZ2VuZXJhdGUo
KTsKICAgICAgICAgYmFja3RyYWNrKCk7CiAKLSAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KCp2bSwgKnRoaXMsIFJFR0VYUF9DT0RFX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAg
ICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnRoaXMsIFJFR0VYUF9DT0RFX0lELCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOwogICAgICAgICBpZiAobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0
ZSgpKSB7CiAgICAgICAgICAgICBqaXRPYmplY3Quc2V0RmFsbEJhY2sodHJ1ZSk7CiAgICAgICAg
ICAgICByZXR1cm47CkBAIC0yNzI5LDkgKzI3MjksOSBAQCBwcml2YXRlOgogdm9pZCBqaXRDb21w
aWxlKFlhcnJQYXR0ZXJuJiBwYXR0ZXJuLCBZYXJyQ2hhclNpemUgY2hhclNpemUsIFZNKiB2bSwg
WWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBZYXJySklUQ29tcGlsZU1vZGUgbW9kZSkKIHsKICAg
ICBpZiAobW9kZSA9PSBNYXRjaE9ubHkpCi0gICAgICAgIFlhcnJHZW5lcmF0b3I8TWF0Y2hPbmx5
Pih2bSwgcGF0dGVybiwgY2hhclNpemUpLmNvbXBpbGUodm0sIGppdE9iamVjdCk7CisgICAgICAg
IFlhcnJHZW5lcmF0b3I8TWF0Y2hPbmx5Pih2bSwgcGF0dGVybiwgY2hhclNpemUpLmNvbXBpbGUo
aml0T2JqZWN0KTsKICAgICBlbHNlCi0gICAgICAgIFlhcnJHZW5lcmF0b3I8SW5jbHVkZVN1YnBh
dHRlcm5zPih2bSwgcGF0dGVybiwgY2hhclNpemUpLmNvbXBpbGUodm0sIGppdE9iamVjdCk7Cisg
ICAgICAgIFlhcnJHZW5lcmF0b3I8SW5jbHVkZVN1YnBhdHRlcm5zPih2bSwgcGF0dGVybiwgY2hh
clNpemUpLmNvbXBpbGUoaml0T2JqZWN0KTsKIH0KIAogfX0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjU2LDcgKzI1Niw3IEBAIHN0cnVjdCBCYWNrdHJhY2tpbmdMZXZlbCB7CiBjbGFzcyBTZWxlY3Rv
ckNvZGVHZW5lcmF0b3IgewogcHVibGljOgogICAgIFNlbGVjdG9yQ29kZUdlbmVyYXRvcihjb25z
dCBDU1NTZWxlY3RvciosIFNlbGVjdG9yQ29udGV4dCk7Ci0gICAgU2VsZWN0b3JDb21waWxhdGlv
blN0YXR1cyBjb21waWxlKEpTQzo6Vk0qLCBKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZiYpOwor
ICAgIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29tcGlsZShKU0M6Ok1hY3JvQXNzZW1ibGVy
Q29kZVJlZiYpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBBc3NlbWJsZXI6OlJlZ2lz
dGVySUQgcmV0dXJuUmVnaXN0ZXI7CkBAIC0zOTUsNyArMzk1LDcgQEAgU2VsZWN0b3JDb21waWxh
dGlvblN0YXR1cyBjb21waWxlU2VsZWN0bwogICAgIGlmICghdm0tPmNhblVzZUpJVCgpKQogICAg
ICAgICByZXR1cm4gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6Q2Fubm90Q29tcGlsZTsKICAg
ICBTZWxlY3RvckNvZGVHZW5lcmF0b3IgY29kZUdlbmVyYXRvcihsYXN0U2VsZWN0b3IsIHNlbGVj
dG9yQ29udGV4dCk7Ci0gICAgcmV0dXJuIGNvZGVHZW5lcmF0b3IuY29tcGlsZSh2bSwgY29kZVJl
Zik7CisgICAgcmV0dXJuIGNvZGVHZW5lcmF0b3IuY29tcGlsZShjb2RlUmVmKTsKIH0KIAogc3Rh
dGljIGlubGluZSBGcmFnbWVudFJlbGF0aW9uIGZyYWdtZW50UmVsYXRpb25Gb3JTZWxlY3RvclJl
bGF0aW9uKENTU1NlbGVjdG9yOjpSZWxhdGlvblR5cGUgcmVsYXRpb24pCkBAIC0xMjA4LDcgKzEy
MDgsNyBAQCB2b2lkIGNvbXB1dGVCYWNrdHJhY2tpbmdNZW1vcnlSZXF1aXJlbWVuCiAgICAgfQog
fQogCi1pbmxpbmUgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBTZWxlY3RvckNvZGVHZW5lcmF0
b3I6OmNvbXBpbGUoSlNDOjpWTSogdm0sIEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2Rl
UmVmKQoraW5saW5lIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpjb21waWxlKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlUmVmKQogewogICAg
IHN3aXRjaCAobV9mdW5jdGlvblR5cGUpIHsKICAgICBjYXNlIEZ1bmN0aW9uVHlwZTo6U2ltcGxl
U2VsZWN0b3JDaGVja2VyOgpAQCAtMTIyMyw3ICsxMjIzLDcgQEAgaW5saW5lIFNlbGVjdG9yQ29t
cGlsYXRpb25TdGF0dXMgU2VsZWN0bwogICAgICAgICByZXR1cm4gU2VsZWN0b3JDb21waWxhdGlv
blN0YXR1czo6Q2Fubm90Q29tcGlsZTsKICAgICB9CiAKLSAgICBKU0M6OkxpbmtCdWZmZXIgbGlu
a0J1ZmZlcigqdm0sIG1fYXNzZW1ibGVyLCBDU1NfQ09ERV9JRCwgSlNDOjpKSVRDb21waWxhdGlv
bkNhbkZhaWwpOworICAgIEpTQzo6TGlua0J1ZmZlciBsaW5rQnVmZmVyKG1fYXNzZW1ibGVyLCBD
U1NfQ09ERV9JRCwgSlNDOjpKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmICghbGlua0J1
ZmZlci5pc1ZhbGlkKCkpIHsKICAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBTZWxlY3RvckNvbXBp
bGF0aW9uU3RhdHVzOjpOb3RDb21waWxlZCBidXQgdGhhdCB3b3VsZCBjYXVzZSB1cyB0byByZS1l
bnRlcgogICAgICAgICAvLyB0aGUgQ1NTIEpJVCBldmVyeSB0aW1lIHdlIGV2YWx1YXRlIHRoYXQg
c2VsZWN0b3IuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305783</attachid>
            <date>2017-03-29 14:05:08 -0700</date>
            <delta_ts>2017-03-29 14:17:14 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>124388</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUg
IkpJVENvZGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5o
IgotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBpbGF0aW9uVGhyZWFkLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtMjQyLDggKzI0MSw3IEBAIHZvaWQgTGlua0J1ZmZlcjo6YWxs
b2NhdGUoTWFjcm9Bc3NlbWJsZXIKICAgICAgICAgaW5pdGlhbFNpemUgPSBtYWNyb0Fzc2VtYmxl
ci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQobV92bSAh
PSBudWxscHRyKTsKLSAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBtX3ZtLT5leGVjdXRhYmxlQWxs
b2NhdG9yLmFsbG9jYXRlKCptX3ZtLCBpbml0aWFsU2l6ZSwgb3duZXJVSUQsIGVmZm9ydCk7Cisg
ICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCku
YWxsb2NhdGUoaW5pdGlhbFNpemUsIG93bmVyVUlELCBlZmZvcnQpOwogICAgIGlmICghbV9leGVj
dXRhYmxlTWVtb3J5KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb2RlID0gbV9leGVjdXRhYmxl
TWVtb3J5LT5zdGFydCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9MaW5rQnVmZmVyLmgJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgVk07CiAKIC8vIExp
bmtCdWZmZXI6CiAvLwpAQCAtNzksMTEgKzc4LDEwIEBAIGNsYXNzIExpbmtCdWZmZXIgewogI2Vu
ZGlmCiAKIHB1YmxpYzoKLSAgICBMaW5rQnVmZmVyKFZNJiB2bSwgTWFjcm9Bc3NlbWJsZXImIG1h
Y3JvQXNzZW1ibGVyLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
ID0gSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCkKKyAgICBMaW5rQnVmZmVyKE1hY3JvQXNzZW1i
bGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCA9IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpCiAgICAgICAgIDogbV9zaXplKDAp
CiAgICAgICAgICwgbV9kaWRBbGxvY2F0ZShmYWxzZSkKICAgICAgICAgLCBtX2NvZGUoMCkKLSAg
ICAgICAgLCBtX3ZtKCZ2bSkKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9jb21wbGV0ZWQo
ZmFsc2UpCiAjZW5kaWYKQEAgLTk1LDcgKzkzLDYgQEAgcHVibGljOgogICAgICAgICA6IG1fc2l6
ZShzaXplKQogICAgICAgICAsIG1fZGlkQWxsb2NhdGUoZmFsc2UpCiAgICAgICAgICwgbV9jb2Rl
KGNvZGUpCi0gICAgICAgICwgbV92bSgwKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBtX2Nv
bXBsZXRlZChmYWxzZSkKICNlbmRpZgpAQCAtMjUzLDggKzI1MCw2IEBAIHB1YmxpYzoKICAgICBi
b29sIHdhc0FscmVhZHlEaXNhc3NlbWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FscmVhZHlEaXNh
c3NlbWJsZWQ7IH0KICAgICB2b2lkIGRpZEFscmVhZHlEaXNhc3NlbWJsZSgpIHsgbV9hbHJlYWR5
RGlzYXNzZW1ibGVkID0gdHJ1ZTsgfQogCi0gICAgVk0mIHZtKCkgeyByZXR1cm4gKm1fdm07IH0K
LQogcHJpdmF0ZToKICNpZiBFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAgICAgaW50IGV4ZWN1
dGFibGVPZmZzZXRGb3IoaW50IGxvY2F0aW9uKQpAQCAtMzA1LDcgKzMwMCw2IEBAIHByaXZhdGU6
CiAjZW5kaWYKICAgICBib29sIG1fZGlkQWxsb2NhdGU7CiAgICAgdm9pZCogbV9jb2RlOwotICAg
IFZNKiBtX3ZtOwogI2lmbmRlZiBOREVCVUcKICAgICBib29sIG1fY29tcGxldGVkOwogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAkocmV2aXNpb24gMjE0
NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CiAKLUNvbXBpbGF0aW9uIGNvbXBpbGUoVk0mIHZtLCBQcm9jZWR1cmUmIHByb2MsIHVuc2lnbmVk
IG9wdExldmVsKQorQ29tcGlsYXRpb24gY29tcGlsZShQcm9jZWR1cmUmIHByb2MsIHVuc2lnbmVk
IG9wdExldmVsKQogewogICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCJDb21waWxhdGlvbiIp
OwogICAgIApAQCAtNDYsNyArNDYsNyBAQCBDb21waWxhdGlvbiBjb21waWxlKFZNJiB2bSwgUHJv
Y2VkdXJlJiBwCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9j
LCBqaXQpOwotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgaml0LCBudWxscHRyKTsKKyAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRyKTsKIAogICAgIHJldHVybiBDb21w
aWxhdGlvbihGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiQjM6OkNvbXBpbGF0aW9uIikpLCBw
cm9jLnJlbGVhc2VCeXByb2R1Y3RzKCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29tcGlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbXBpbGUuaAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tcGlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIFByb2Nl
ZHVyZTsKIC8vIFRoZW4geW91IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2ZSBmb3Ig
YXMgbG9uZyBhcyB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHJ1biB0aGUgY29kZS4KIC8vIElmIHRo
aXMgQVBJIGZlZWxzIHRvbyBoaWdoLWxldmVsLCB5b3UgY2FuIHVzZSBCMzo6Z2VuZXJhdGUoKSBk
aXJlY3RseS4KIAotSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24gY29tcGlsZShWTSYsIFBy
b2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CitKU19FWFBPUlRfUFJJVkFURSBDb21w
aWxhdGlvbiBjb21waWxlKFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDYgQEAKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlB1cmVOYU4uaCIKLSNp
bmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPGNtYXRoPgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNs
dWRlIDx3dGYvRmFzdFRMUy5oPgpAQCAtMTE4LDExICsxMTcsOSBAQCBTdGF0aWNMb2NrIGNyYXNo
TG9jazsKICAgICAgICAgQ1JBU0goKTsgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCi1WTSogdm07
Ci0KLXN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZShQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKQorc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9u
PiBjb21waWxlUHJvYyhQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAx
KQogewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPihCMzo6Y29tcGls
ZSgqdm0sIHByb2NlZHVyZSwgb3B0TGV2ZWwpKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxDb21waWxhdGlvbj4oQjM6OmNvbXBpbGUocHJvY2VkdXJlLCBvcHRMZXZlbCkpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CkBAIC0xNDEsNyArMTM4
LDcgQEAgVCBpbnZva2UoY29uc3QgQ29tcGlsYXRpb24mIGNvZGUsIEFyZ3VtZQogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogVCBjb21waWxlQW5kUnVuKFByb2Nl
ZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogewotICAgIHJldHVybiBp
bnZva2U8VD4oKmNvbXBpbGUocHJvY2VkdXJlKSwgYXJndW1lbnRzLi4uKTsKKyAgICByZXR1cm4g
aW52b2tlPFQ+KCpjb21waWxlUHJvYyhwcm9jZWR1cmUpLCBhcmd1bWVudHMuLi4pOwogfQogCiB2
b2lkIGxvd2VyVG9BaXJGb3JUZXN0aW5nKFByb2NlZHVyZSYgcHJvYykKQEAgLTMxMiw3ICszMDks
NyBAQCB2b2lkIHRlc3RMb2FkQWNxNDIoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmeCksCiAgICAgICAgICAgICAwLCBIZWFwUmFu
Z2UoNDIpLCBIZWFwUmFuZ2UoNDIpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2Mp
OworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGlmIChpc0FSTTY0KCkp
CiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGRhIik7CiAgICAgQ0hFQ0so
aW52b2tlPGludD4oKmNvZGUpID09IDQyKTsKQEAgLTYxNSw3ICs2MTIsNyBAQCB2b2lkIHRlc3RB
ZGRBcmdaZXJvSW1tWkRlZigpCiAgICAgICAgICAgICBhcmcsCiAgICAgICAgICAgICBjb25zdFpl
cm8pKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYywgMCk7CisgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYywgMCk7CiAgICAgQ0hFQ0soaW52b2tlPGludDY0X3Q+KCpjb2Rl
LCAweDAxMjM0NTY3ODlhYmNkZWYpID09IDB4ODlhYmNkZWYpOwogfQogCkBAIC02MzIsNyArNjI5
LDcgQEAgdm9pZCB0ZXN0QWRkTG9hZFR3aWNlKCkKICAgICAgICAgICAgIHByb2MsIFJldHVybiwg
T3JpZ2luKCksCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwg
T3JpZ2luKCksIGxvYWQsIGxvYWQpKTsKIAotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MsIG9wdExldmVsKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYywgb3B0
TGV2ZWwpOwogICAgICAgICBDSEVDSyhpbnZva2U8aW50MzJfdD4oKmNvZGUpID09IDQyICogMik7
CiAgICAgfTsKIApAQCAtOTg0LDcgKzk4MSw3IEBAIHZvaWQgdGVzdE11bExvYWRUd2ljZSgpCiAg
ICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBNdWwsIE9yaWdpbigpLCBsb2FkLCBsb2FkKSk7CiAKLSAgICAg
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jLCBvcHRMZXZlbCk7CisgICAgICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MsIG9wdExldmVsKTsKICAgICAgICAgQ0hFQ0soaW52b2tlPGlu
dDMyX3Q+KCpjb2RlKSA9PSA0MiAqIDQyKTsKICAgICB9OwogCkBAIC0xMDA0LDcgKzEwMDEsNyBA
QCB2b2lkIHRlc3RNdWxBZGRBcmdzTGVmdCgpCiAgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBtdWx0aXBsaWVkLCBhcmcyKTsKICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgYWRk
ZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDY0T3BlcmFuZHMo
KTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTEwMjgsNyArMTAyNSw3IEBA
IHZvaWQgdGVzdE11bEFkZEFyZ3NSaWdodCgpCiAgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBhcmcwLCBtdWx0aXBsaWVkKTsKICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgYWRk
ZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDY0T3BlcmFuZHMo
KTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTEwNTUsNyArMTA1Miw3IEBA
IHZvaWQgdGVzdE11bEFkZEFyZ3NMZWZ0MzIoKQogICAgIFZhbHVlKiBhZGRlZCA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgbXVsdGlwbGllZCwgYXJnMik7CiAg
ICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIGFk
ZGVkKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIHRlc3RWYWx1ZXMgPSBpbnQzMk9wZXJhbmRz
KCk7CiAgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CkBAIC0xMDgyLDcgKzEwNzksNyBA
QCB2b2lkIHRlc3RNdWxBZGRBcmdzUmlnaHQzMigpCiAgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBhcmcwLCBtdWx0aXBsaWVkKTsK
ICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
YWRkZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDMyT3BlcmFu
ZHMoKTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTExMDYsNyArMTEwMyw3
IEBAIHZvaWQgdGVzdE11bFN1YkFyZ3NMZWZ0KCkKICAgICBWYWx1ZSogYWRkZWQgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIG11bHRpcGxpZWQsIGFyZzIpOwog
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBh
ZGRlZCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgYXV0byB0ZXN0VmFsdWVzID0gaW50NjRPcGVyYW5k
cygpOwogICAgIGZvciAoYXV0byBhIDogdGVzdFZhbHVlcykgewpAQCAtMTEzMCw3ICsxMTI3LDcg
QEAgdm9pZCB0ZXN0TXVsU3ViQXJnc1JpZ2h0KCkKICAgICBWYWx1ZSogYWRkZWQgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIGFyZzAsIG11bHRpcGxpZWQpOwog
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBh
ZGRlZCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgYXV0byB0ZXN0VmFsdWVzID0gaW50NjRPcGVyYW5k
cygpOwogICAgIGZvciAoYXV0byBhIDogdGVzdFZhbHVlcykgewpAQCAtMTE1Nyw3ICsxMTU0LDcg
QEAgdm9pZCB0ZXN0TXVsU3ViQXJnc0xlZnQzMigpCiAgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCBtdWx0aXBsaWVkLCBhcmcyKTsK
ICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
YWRkZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDMyT3BlcmFu
ZHMoKTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTExODQsNyArMTE4MSw3
IEBAIHZvaWQgdGVzdE11bFN1YkFyZ3NSaWdodDMyKCkKICAgICBWYWx1ZSogYWRkZWQgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIGFyZzAsIG11bHRpcGxpZWQp
OwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBhZGRlZCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgYXV0byB0ZXN0VmFsdWVzID0gaW50MzJPcGVy
YW5kcygpOwogICAgIGZvciAoYXV0byBhIDogdGVzdFZhbHVlcykgewpAQCAtMTIwOCw3ICsxMjA1
LDcgQEAgdm9pZCB0ZXN0TXVsTmVnQXJncygpCiAgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCB6ZXJvLCBtdWx0aXBsaWVkKTsKICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgYWRk
ZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDY0T3BlcmFuZHMo
KTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTEyMzIsNyArMTIyOSw3IEBA
IHZvaWQgdGVzdE11bE5lZ0FyZ3MzMigpCiAgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCB6ZXJvLCBtdWx0aXBsaWVkKTsKICAgICBy
b290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgYWRkZWQp
OwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21w
aWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDMyT3BlcmFuZHMoKTsK
ICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTQ2MzYsNyArNDYzMyw3IEBAIHZv
aWQgdGVzdENvbXBhcmVGbG9hdFRvRG91YmxlVGhyb3VnaFBoaSgKICAgICBWYWx1ZSogZXF1YWwg
PSB0YWlsLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEVxdWFsLCBPcmlnaW4oKSwgZG91YmxlSW5w
dXQsIGFyZzJBc0ZSb3VuZGVkRG91YmxlKTsKICAgICB0YWlsLT5hcHBlbmROZXdDb250cm9sVmFs
dWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgZXF1YWwpOwogCi0gICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpbnQz
Ml90IGludGVnZXJBID0gYml0d2lzZV9jYXN0PGludDMyX3Q+KGEpOwogICAgIGRvdWJsZSBkb3Vi
bGVCID0gYjsKICAgICBDSEVDSyhpbnZva2U8aW50NjRfdD4oKmNvZGUsIDEsIGludGVnZXJBLCBk
b3VibGVCKSA9PSAoYSA9PSBiKSk7CkBAIC00Njg1LDcgKzQ2ODIsNyBAQCB2b2lkIHRlc3REb3Vi
bGVUb0Zsb2F0VGhyb3VnaFBoaShmbG9hdCB2CiAgICAgVmFsdWUqIGZsb2F0UmVzdWx0ID0gdGFp
bC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBEb3VibGVUb0Zsb2F0LCBPcmlnaW4oKSwgZG91Ymxl
SW5wdXQpOwogICAgIHRhaWwtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCBmbG9hdFJlc3VsdCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGlzSWRlbnRpY2Fs
KGludm9rZTxmbG9hdD4oKmNvZGUsIDEsIGJpdHdpc2VfY2FzdDxpbnQzMl90Pih2YWx1ZSkpLCB2
YWx1ZSArIDQyLjVmKSk7CiAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqY29k
ZSwgMCwgYml0d2lzZV9jYXN0PGludDMyX3Q+KHZhbHVlKSksIHN0YXRpY19jYXN0PGZsb2F0PihN
X1BJKSkpOwogfQpAQCAtNDc0MCw3ICs0NzM3LDcgQEAgdm9pZCB0ZXN0UmVkdWNlRmxvYXRUb0Rv
dWJsZVZhbGlkYXRlcygpCiAgICAgICAgICAgICByZXN1bHQpOwogICAgIHRhaWwtPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwogCi0gICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpjb2RlLCAxKSwgMTEuNWYg
KiAxMS41ZiArIHN0YXRpY19jYXN0PGZsb2F0PihiaXR3aXNlX2Nhc3Q8ZG91YmxlPihzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oMSkpKSArIDExLjVmKSk7CiAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52
b2tlPGZsb2F0PigqY29kZSwgMCksIDEwLjVmICogMTAuNWYgKyBzdGF0aWNfY2FzdDxmbG9hdD4o
Yml0d2lzZV9jYXN0PGRvdWJsZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDApKSkgKyAxMC41Zikp
OwogfQpAQCAtNDc4MCw3ICs0Nzc3LDcgQEAgdm9pZCB0ZXN0RG91YmxlUHJvZHVjZXJQaGlUb0Zs
b2F0Q29udmVycwogICAgIFZhbHVlKiBmbG9hdFJlc3VsdCA9IHRhaWwtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgRG91YmxlVG9GbG9hdCwgT3JpZ2luKCksIGZpbmFsQWRkKTsKICAgICB0YWlsLT5h
cHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgZmxvYXRSZXN1bHQp
OwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21w
aWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpjb2Rl
LCAxLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSwgdmFsdWUgKyB2YWx1ZSkpOwogICAg
IENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKmNvZGUsIDAsIGJpdHdpc2VfY2FzdDxp
bnQzMl90Pih2YWx1ZSkpLCA0Mi41ZiArIHZhbHVlKSk7CiB9CkBAIC00ODI5LDcgKzQ4MjYsNyBA
QCB2b2lkIHRlc3REb3VibGVQcm9kdWNlclBoaVRvRmxvYXRDb252ZXJzCiAKICAgICB0YWlsLT5h
cHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgZG91YmxlQWRkKTsK
IAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGls
ZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGRvdWJsZT4oKmNvZGUs
IDEsIGJpdHdpc2VfY2FzdDxpbnQzMl90Pih2YWx1ZSkpLCAodmFsdWUgKyB2YWx1ZSkgKyBzdGF0
aWNfY2FzdDxkb3VibGU+KHZhbHVlKSkpOwogICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxk
b3VibGU+KCpjb2RlLCAwLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSwgc3RhdGljX2Nh
c3Q8ZG91YmxlPigoNDIuNWYgKyB2YWx1ZSkgKyA0Mi41ZikpKTsKIH0KQEAgLTQ4NjksNyArNDg2
Niw3IEBAIHZvaWQgdGVzdERvdWJsZVByb2R1Y2VyUGhpV2l0aE5vbkZsb2F0Q28KICAgICBWYWx1
ZSogZmxvYXRSZXN1bHQgPSB0YWlsLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIERvdWJsZVRvRmxv
YXQsIE9yaWdpbigpLCBmaW5hbEFkZCk7CiAgICAgdGFpbC0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KHByb2MsIFJldHVybiwgT3JpZ2luKCksIGZsb2F0UmVzdWx0KTsKIAotICAgIGF1dG8gY29kZSA9
IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAg
Q0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqY29kZSwgMSwgYml0d2lzZV9jYXN0PGlu
dDMyX3Q+KHZhbHVlKSksIHZhbHVlICsgdmFsdWUpKTsKICAgICBDSEVDSyhpc0lkZW50aWNhbChp
bnZva2U8ZmxvYXQ+KCpjb2RlLCAwLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGNvbnN0VmFsdWUgKyB2YWx1ZSkpKTsKIH0KQEAgLTUyMjUsNyArNTIy
Miw3IEBAIHZvaWQgdGVzdElUb0Q2NEFyZygpCiAgICAgVmFsdWUqIHNyY0FzRG91YmxlID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgc3JjKTsKICAgICByb290
LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgc3JjQXNEb3Vi
bGUpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICBmb3IgKGF1dG8gdGVzdFZhbHVlIDogaW50NjRPcGVyYW5k
cygpKQogICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZG91YmxlPigqY29kZSwgdGVz
dFZhbHVlLnZhbHVlKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPih0ZXN0VmFsdWUudmFsdWUpKSk7CiB9
CkBAIC01MjM4LDcgKzUyMzUsNyBAQCB2b2lkIHRlc3RJVG9GNjRBcmcoKQogICAgIFZhbHVlKiBz
cmNBc0Zsb2F0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9GLCBPcmlnaW4oKSwg
c3JjKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgc3JjQXNGbG9hdCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGZvciAoYXV0byB0ZXN0VmFsdWUg
OiBpbnQ2NE9wZXJhbmRzKCkpCiAgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9h
dD4oKmNvZGUsIHRlc3RWYWx1ZS52YWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pih0ZXN0VmFsdWUu
dmFsdWUpKSk7CiB9CkBAIC01MjUyLDcgKzUyNDksNyBAQCB2b2lkIHRlc3RJVG9EMzJBcmcoKQog
ICAgIFZhbHVlKiBzcmNBc0RvdWJsZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRv
RCwgT3JpZ2luKCksIHNyYyk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IFJldHVybiwgT3JpZ2luKCksIHNyY0FzRG91YmxlKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBp
bGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgZm9yIChh
dXRvIHRlc3RWYWx1ZSA6IGludDMyT3BlcmFuZHMoKSkKICAgICAgICAgQ0hFQ0soaXNJZGVudGlj
YWwoaW52b2tlPGRvdWJsZT4oKmNvZGUsIHRlc3RWYWx1ZS52YWx1ZSksIHN0YXRpY19jYXN0PGRv
dWJsZT4odGVzdFZhbHVlLnZhbHVlKSkpOwogfQpAQCAtNTI2Niw3ICs1MjYzLDcgQEAgdm9pZCB0
ZXN0SVRvRjMyQXJnKCkKICAgICBWYWx1ZSogc3JjQXNGbG9hdCA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgSVRvRiwgT3JpZ2luKCksIHNyYyk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHNyY0FzRmxvYXQpOwogCi0gICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKICAgICBmb3IgKGF1dG8gdGVzdFZhbHVlIDogaW50MzJPcGVyYW5kcygpKQogICAgICAgICBD
SEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpjb2RlLCB0ZXN0VmFsdWUudmFsdWUpLCBz
dGF0aWNfY2FzdDxmbG9hdD4odGVzdFZhbHVlLnZhbHVlKSkpOwogfQpAQCAtNTI4MCw3ICs1Mjc3
LDcgQEAgdm9pZCB0ZXN0SVRvRDY0TWVtKCkKICAgICBWYWx1ZSogc3JjQXNEb3VibGUgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9yaWdpbigpLCBsb2FkZWRTcmMpOwogICAg
IHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBzcmNB
c0RvdWJsZSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGludDY0X3QgaW5NZW1vcnlWYWx1ZTsKICAgICBm
b3IgKGF1dG8gdGVzdFZhbHVlIDogaW50NjRPcGVyYW5kcygpKSB7CiAgICAgICAgIGluTWVtb3J5
VmFsdWUgPSB0ZXN0VmFsdWUudmFsdWU7CkBAIC01Mjk4LDcgKzUyOTUsNyBAQCB2b2lkIHRlc3RJ
VG9GNjRNZW0oKQogICAgIFZhbHVlKiBzcmNBc0Zsb2F0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBJVG9GLCBPcmlnaW4oKSwgbG9hZGVkU3JjKTsKICAgICByb290LT5hcHBlbmROZXdD
b250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgc3JjQXNGbG9hdCk7CiAKLSAgICBh
dXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHBy
b2MpOwogICAgIGludDY0X3QgaW5NZW1vcnlWYWx1ZTsKICAgICBmb3IgKGF1dG8gdGVzdFZhbHVl
IDogaW50NjRPcGVyYW5kcygpKSB7CiAgICAgICAgIGluTWVtb3J5VmFsdWUgPSB0ZXN0VmFsdWUu
dmFsdWU7CkBAIC01MzE2LDcgKzUzMTMsNyBAQCB2b2lkIHRlc3RJVG9EMzJNZW0oKQogICAgIFZh
bHVlKiBzcmNBc0RvdWJsZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3Jp
Z2luKCksIGxvYWRlZFNyYyk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IFJldHVybiwgT3JpZ2luKCksIHNyY0FzRG91YmxlKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBp
bGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaW50MzJf
dCBpbk1lbW9yeVZhbHVlOwogICAgIGZvciAoYXV0byB0ZXN0VmFsdWUgOiBpbnQzMk9wZXJhbmRz
KCkpIHsKICAgICAgICAgaW5NZW1vcnlWYWx1ZSA9IHRlc3RWYWx1ZS52YWx1ZTsKQEAgLTUzMzQs
NyArNTMzMSw3IEBAIHZvaWQgdGVzdElUb0YzMk1lbSgpCiAgICAgVmFsdWUqIHNyY0FzRmxvYXQg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0YsIE9yaWdpbigpLCBsb2FkZWRTcmMp
OwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBzcmNBc0Zsb2F0KTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaW50MzJfdCBpbk1lbW9yeVZhbHVlOwog
ICAgIGZvciAoYXV0byB0ZXN0VmFsdWUgOiBpbnQzMk9wZXJhbmRzKCkpIHsKICAgICAgICAgaW5N
ZW1vcnlWYWx1ZSA9IHRlc3RWYWx1ZS52YWx1ZTsKQEAgLTUzOTIsNyArNTM4OSw3IEBAIHZvaWQg
dGVzdElUb0RSZWR1Y2VkVG9JVG9GNjRBcmcoKQogICAgIFZhbHVlKiBmbG9hdFJlc3VsdCA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgRG91YmxlVG9GbG9hdCwgT3JpZ2luKCksIHNyY0Fz
RG91YmxlKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgZmxvYXRSZXN1bHQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBmb3IgKGF1dG8gdGVzdFZh
bHVlIDogaW50NjRPcGVyYW5kcygpKQogICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8
ZmxvYXQ+KCpjb2RlLCB0ZXN0VmFsdWUudmFsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4odGVzdFZh
bHVlLnZhbHVlKSkpOwogfQpAQCAtNTQwNyw3ICs1NDA0LDcgQEAgdm9pZCB0ZXN0SVRvRFJlZHVj
ZWRUb0lUb0YzMkFyZygpCiAgICAgVmFsdWUqIGZsb2F0UmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBEb3VibGVUb0Zsb2F0LCBPcmlnaW4oKSwgc3JjQXNEb3VibGUpOwogICAg
IHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBmbG9h
dFJlc3VsdCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGZvciAoYXV0byB0ZXN0VmFsdWUgOiBpbnQzMk9w
ZXJhbmRzKCkpCiAgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKmNvZGUs
IHRlc3RWYWx1ZS52YWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pih0ZXN0VmFsdWUudmFsdWUpKSk7
CiB9CkBAIC01Nzg5LDcgKzU3ODYsNyBAQCB2b2lkIHRlc3RTdG9yZVJlbEFkZExvYWRBY3EzMihp
bnQgYW1vdW50CiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRv
IGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OwogICAgIGlmIChpc0FSTTY0KCkpIHsKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNv
ZGUsICJsZGEiKTsKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJzdGwiKTsK
QEAgLTU4NjIsNyArNTg1OSw3IEBAIHZvaWQgdGVzdFN0b3JlUmVsQWRkTG9hZEFjcTgoaW50IGFt
b3VudCwKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAg
ICAgaWYgKGlzQVJNNjQoKSkgewogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwg
ImxkYSIpOwogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInN0bCIpOwpAQCAt
NTkwMSw3ICs1ODk4LDcgQEAgdm9pZCB0ZXN0U3RvcmVSZWxBZGRGZW5jZUxvYWRBY3E4KGludCBh
bQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICByb290LT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0g
Y29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBp
ZiAoaXNBUk02NCgpKSB7CiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGRh
Iik7CiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAic3RsIik7CkBAIC01OTc0
LDcgKzU5NzEsNyBAQCB2b2lkIHRlc3RTdG9yZVJlbEFkZExvYWRBY3ExNihpbnQgYW1vdW50CiAg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGlmIChp
c0FSTTY0KCkpIHsKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJsZGEiKTsK
ICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJzdGwiKTsKQEAgLTYwNDMsNyAr
NjA0MCw3IEBAIHZvaWQgdGVzdFN0b3JlUmVsQWRkTG9hZEFjcTY0KGludCBhbW91bnQKICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaWYgKGlzQVJN
NjQoKSkgewogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxkYSIpOwogICAg
ICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInN0bCIpOwpAQCAtNzA0OSw3ICs3MDQ2
LDcgQEAgdm9pZCB0ZXN0QnJhbmNoKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwK
ICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCA0MikgPT0g
MSk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDApID09IDApOwogfQpAQCAtNzA3NCw3
ICs3MDcxLDcgQEAgdm9pZCB0ZXN0QnJhbmNoUHRyKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2Rl
LCBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oNDIpKSA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8aW50
PigqY29kZSwgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDApKSA9PSAwKTsKIH0KQEAgLTcxMDcsNyAr
NzEwNCw3IEBAIHZvaWQgdGVzdERpYW1vbmQoKQogICAgIGVsc2VSZXN1bHQtPnNldFBoaShwaGkp
OwogICAgIGRvbmUtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBwaGkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09
IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KQEAgLTcxMzcs
NyArNzEzNCw3IEBAIHZvaWQgdGVzdEJyYW5jaE5vdEVxdWFsKCkKICAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnQ+
KCpjb2RlLCA0MikgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDApID09IDAp
OwogfQpAQCAtNzE2Nyw3ICs3MTY0LDcgQEAgdm9pZCB0ZXN0QnJhbmNoTm90RXF1YWxDb21tdXRl
KCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwog
ICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCA0MikgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tl
PGludD4oKmNvZGUsIDApID09IDApOwogfQpAQCAtNzIwMCw3ICs3MTk3LDcgQEAgdm9pZCB0ZXN0
QnJhbmNoTm90RXF1YWxOb3RFcXVhbCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
CiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09
IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KQEAgLTcyMzAs
NyArNzIyNyw3IEBAIHZvaWQgdGVzdEJyYW5jaEVxdWFsKCkKICAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCAxKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpj
b2RlLCA0MikgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDApID09IDApOwog
fQpAQCAtNzI2Myw3ICs3MjYwLDcgQEAgdm9pZCB0ZXN0QnJhbmNoRXF1YWxFcXVhbCgpCiAgICAg
ICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVD
SyhpbnZva2U8aW50PigqY29kZSwgNDIpID09IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpj
b2RlLCAwKSA9PSAwKTsKIH0KQEAgLTcyOTMsNyArNzI5MCw3IEBAIHZvaWQgdGVzdEJyYW5jaEVx
dWFsQ29tbXV0ZSgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVs
c2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSkpOwogCi0g
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09IDEpOwogICAgIENI
RUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KQEAgLTczMjYsNyArNzMyMyw3IEBA
IHZvaWQgdGVzdEJyYW5jaEVxdWFsRXF1YWwxKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmln
aW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCAxKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCA0
MikgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDApID09IDApOwogfQpAQCAt
Nzc0MSw3ICs3NzM4LDcgQEAgdm9pZCB0ZXN0QnJhbmNoTG9hZFB0cigpCiAgICAgICAgIHByb2Ms
IFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpbnRwdHJfdCBjb25k
OwogICAgIGNvbmQgPSA0MjsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJmNvbmQpID09
IDEpOwpAQCAtNzc3MSw3ICs3NzY4LDcgQEAgdm9pZCB0ZXN0QnJhbmNoTG9hZDMyKCkKICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGludDMy
X3QgY29uZDsKICAgICBjb25kID0gNDI7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZj
b25kKSA9PSAxKTsKQEAgLTc4MDEsNyArNzc5OCw3IEBAIHZvaWQgdGVzdEJyYW5jaExvYWQ4Uygp
CiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2Rl
ID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAg
ICBpbnQ4X3QgY29uZDsKICAgICBjb25kID0gLTE7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNv
ZGUsICZjb25kKSA9PSAxKTsKQEAgLTc4MzEsNyArNzgyOCw3IEBAIHZvaWQgdGVzdEJyYW5jaExv
YWQ4WigpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNl
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKICAgICB1aW50OF90IGNvbmQ7CiAgICAgY29uZCA9IDE7CiAgICAgQ0hFQ0soaW52b2tlPGlu
dD4oKmNvZGUsICZjb25kKSA9PSAxKTsKQEAgLTc4NjEsNyArNzg1OCw3IEBAIHZvaWQgdGVzdEJy
YW5jaExvYWQxNlMoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICBl
bHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAot
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAgICAgaW50MTZfdCBjb25kOwogICAgIGNvbmQgPSAtMTsKICAgICBDSEVDSyhp
bnZva2U8aW50PigqY29kZSwgJmNvbmQpID09IDEpOwpAQCAtNzg5MSw3ICs3ODg4LDcgQEAgdm9p
ZCB0ZXN0QnJhbmNoTG9hZDE2WigpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAg
ICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
MCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICB1aW50MTZfdCBjb25kOwogICAgIGNvbmQgPSAxOwogICAg
IENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmY29uZCkgPT0gMSk7CkBAIC03OTMxLDcgKzc5Mjgs
NyBAQCB2b2lkIHRlc3RCcmFuY2g4V2l0aExvYWQ4WkluZGV4KCkKICAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIHVpbnQzMl90IGNvbmQ7CiAg
ICAgY29uZCA9IDB4ZmZmZmZmZmZVOyAvLyBBbGwgYnl0ZXMgYXJlIDB4ZmYuCiAgICAgQ0hFQ0so
aW52b2tlPGludD4oKmNvZGUsICZjb25kIC0gMiwgKHNpemVvZih1aW50MzJfdCkgKiAyKSA+PiBs
b2dTY2FsZSkgPT0gMSk7CkBAIC04MDY4LDcgKzgwNjUsNyBAQCB2b2lkIHRlc3RDb21wbGV4KHVu
c2lnbmVkIG51bVZhcnMsIHVuc2lnCiAKICAgICBjdXJyZW50LT5hcHBlbmROZXdDb250cm9sVmFs
dWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgdmFyc1swXSk7CiAKLSAgICBjb21waWxlKHByb2Mp
OworICAgIGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgZG91YmxlIGFmdGVyID0gbW9ub3Rvbmlj
YWxseUluY3JlYXNpbmdUaW1lTVMoKTsKICAgICBkYXRhTG9nKHRvQ1N0cmluZygiICAgIFRoYXQg
dG9vayAiLCBhZnRlciAtIGJlZm9yZSwgIiBtcy5cbiIpKTsKQEAgLTg2MTcsNyArODYxNCw3IEBA
IHZvaWQgdGVzdFNpbXBsZUNoZWNrKCkKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
CiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIAogICAgIENIRUNL
KGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29k
ZSwgMSkgPT0gNDIpOwpAQCAtODYzNiw3ICs4NjMzLDcgQEAgdm9pZCB0ZXN0Q2hlY2tGYWxzZSgp
CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAogICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
MCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICAKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSkgPT0g
MCk7CiB9CkBAIC04NjYyLDcgKzg2NTksNyBAQCB2b2lkIHRlc3RDaGVja1RydWUoKQogICAgIHJv
b3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAot
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAgICAgCiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUpID09IDQyKTsKIH0K
QEAgLTg2OTMsNyArODY5MCw3IEBAIHZvaWQgdGVzdENoZWNrTGVzc1RoYW4oKQogICAgIHJvb3Qt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
cm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAg
IGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CiAgICAgCiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDQyKSA9PSAwKTsKICAg
ICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMTAwMCkgPT0gMCk7CkBAIC04NzM5LDcgKzg3MzYs
NyBAQCB2b2lkIHRlc3RDaGVja01lZ2FDb21ibygpCiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKAogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGlu
dDhfdCB2YWx1ZTsKICAgICB2YWx1ZSA9IDQyOwpAQCAtODc5NCw3ICs4NzkxLDcgQEAgdm9pZCB0
ZXN0Q2hlY2tUcmlja3lNZWdhQ29tYm8oKQogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZSgKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBpbnQ4X3Qg
dmFsdWU7CiAgICAgdmFsdWUgPSA0MjsKQEAgLTg4NTgsNyArODg1NSw3IEBAIHZvaWQgdGVzdENo
ZWNrVHdvTWVnYUNvbWJvcygpCiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAogICAg
ICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGludDhfdCB2YWx1ZTsK
ICAgICB2YWx1ZSA9IDQyOwpAQCAtODkzOSw3ICs4OTM2LDcgQEAgdm9pZCB0ZXN0Q2hlY2tUd29O
b25SZWR1bmRhbnRNZWdhQ29tYm9zKAogICAgIGVsc2VDYXNlLT5hcHBlbmROZXdDb250cm9sVmFs
dWUoCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIGVsc2VDYXNlLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNDUpKTsKIAotICAgIGF1dG8gY29kZSA9IGNv
bXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBp
bnQ4X3QgdmFsdWU7CiAKQEAgLTg5OTQsNyArODk5MSw3IEBAIHZvaWQgdGVzdENoZWNrQWRkSW1t
KCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tBZGQpKTsKIAotICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CiAKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMCkgPT0gNDIuMCk7CiAgICAgQ0hF
Q0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDEpID09IDQzLjApOwpAQCAtOTAzMCw3ICs5MDI3LDcg
QEAgdm9pZCB0ZXN0Q2hlY2tBZGRJbW1Db21tdXRlKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmln
aW4oKSwgY2hlY2tBZGQpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8ZG91Ymxl
PigqY29kZSwgMCkgPT0gNDIuMCk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDEp
ID09IDQzLjApOwpAQCAtOTA2NSw3ICs5MDYyLDcgQEAgdm9pZCB0ZXN0Q2hlY2tBZGRJbW1Tb21l
UmVnaXN0ZXIoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9yaWdpbigpLCBjaGVja0FkZCkpOwogCi0g
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwKSA9PSA0Mi4wKTsK
ICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMSkgPT0gNDMuMCk7CkBAIC05MTAyLDcg
KzkwOTksNyBAQCB2b2lkIHRlc3RDaGVja0FkZCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2lu
KCksIGNoZWNrQWRkKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4o
KmNvZGUsIDAsIDQyKSA9PSA0Mi4wKTsKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwg
MSwgNDIpID09IDQzLjApOwpAQCAtOTEzNSw3ICs5MTMyLDcgQEAgdm9pZCB0ZXN0Q2hlY2tBZGQ2
NCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrQWRkKSk7CiAKLSAgICBhdXRv
IGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDBsbCwgNDJsbCkgPT0gNDIuMCk7
CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDFsbCwgNDJsbCkgPT0gNDMuMCk7CkBA
IC05MTU2LDcgKzkxNTMsNyBAQCB2b2lkIHRlc3RDaGVja0FkZEZvbGQoaW50IGEsIGludCBiKQog
ICAgICAgICB9KTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgY2hlY2tBZGQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxp
bnQ+KCpjb2RlKSA9PSBhICsgYik7CiB9CkBAIC05MTc3LDcgKzkxNzQsNyBAQCB2b2lkIHRlc3RD
aGVja0FkZEZvbGRGYWlsKGludCBhLCBpbnQgYikKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIGNoZWNrQWRkKTsKIAot
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSkgPT0gNDIpOwogfQpAQCAt
OTI4NCw3ICs5MjgxLDcgQEAgdm9pZCB0ZXN0Q2hlY2tBZGRTZWxmT3ZlcmZsb3c2NCgpCiAKICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2hl
Y2tBZGQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxpbnQ2NF90PigqY29kZSwg
MGxsKSA9PSAwKTsKICAgICBDSEVDSyhpbnZva2U8aW50NjRfdD4oKmNvZGUsIDFsbCkgPT0gMik7
CkBAIC05MzE1LDcgKzkzMTIsNyBAQCB2b2lkIHRlc3RDaGVja0FkZFNlbGZPdmVyZmxvdzMyKCkK
IAogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBjaGVja0FkZCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGludDMyX3Q+KCpj
b2RlLCAwbGwpID09IDApOwogICAgIENIRUNLKGludm9rZTxpbnQzMl90PigqY29kZSwgMWxsKSA9
PSAyKTsKQEAgLTkzNTAsNyArOTM0Nyw3IEBAIHZvaWQgdGVzdENoZWNrU3ViSW1tKCkKICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tTdWIpKTsKIAotICAgIGF1dG8gY29kZSA9IGNv
bXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBD
SEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMCkgPT0gLTQyLjApOwogICAgIENIRUNLKGludm9r
ZTxkb3VibGU+KCpjb2RlLCAxKSA9PSAtNDEuMCk7CkBAIC05MzkyLDcgKzkzODksNyBAQCB2b2lk
IHRlc3RDaGVja1N1YkJhZEltbSgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNr
U3ViKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDAp
ID09IC1zdGF0aWNfY2FzdDxkb3VibGU+KGJhZEltbSkpOwogICAgIENIRUNLKGludm9rZTxkb3Vi
bGU+KCpjb2RlLCAtMSkgPT0gLXN0YXRpY19jYXN0PGRvdWJsZT4oYmFkSW1tKSAtIDEpOwpAQCAt
OTQyOSw3ICs5NDI2LDcgQEAgdm9pZCB0ZXN0Q2hlY2tTdWIoKQogICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLAogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0Qs
IE9yaWdpbigpLCBjaGVja1N1YikpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxk
b3VibGU+KCpjb2RlLCAwLCA0MikgPT0gLTQyLjApOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+
KCpjb2RlLCAxLCA0MikgPT0gLTQxLjApOwpAQCAtOTQ2Nyw3ICs5NDY0LDcgQEAgdm9pZCB0ZXN0
Q2hlY2tTdWI2NCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrU3ViKSk7CiAK
LSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDBsbCwgNDJsbCkg
PT0gLTQyLjApOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAxbGwsIDQybGwpID09
IC00MS4wKTsKQEAgLTk0ODgsNyArOTQ4NSw3IEBAIHZvaWQgdGVzdENoZWNrU3ViRm9sZChpbnQg
YSwgaW50IGIpCiAgICAgICAgIH0pOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjaGVja1N1Yik7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hF
Q0soaW52b2tlPGludD4oKmNvZGUpID09IGEgLSBiKTsKIH0KQEAgLTk1MDksNyArOTUwNiw3IEBA
IHZvaWQgdGVzdENoZWNrU3ViRm9sZEZhaWwoaW50IGEsIGludCBiKQogICAgICAgICB9KTsKICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2hl
Y2tTdWIpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlKSA9PSA0
Mik7CiB9CkBAIC05NTM4LDcgKzk1MzUsNyBAQCB2b2lkIHRlc3RDaGVja05lZygpCiAgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrTmVnKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hF
Q0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDApID09IDAuMCk7CiAgICAgQ0hFQ0soaW52b2tlPGRv
dWJsZT4oKmNvZGUsIDEpID09IC0xLjApOwpAQCAtOTU2OCw3ICs5NTY1LDcgQEAgdm9pZCB0ZXN0
Q2hlY2tOZWc2NCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrTmVnKSk7CiAK
LSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDBsbCkgPT0gMC4w
KTsKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMWxsKSA9PSAtMS4wKTsKQEAgLTk2
MDUsNyArOTYwMiw3IEBAIHZvaWQgdGVzdENoZWNrTXVsKCkKICAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBP
cmlnaW4oKSwgY2hlY2tNdWwpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Cisg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8ZG91
YmxlPigqY29kZSwgMCwgNDIpID09IDAuMCk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNv
ZGUsIDEsIDQyKSA9PSA0Mi4wKTsKQEAgLTk2NDYsNyArOTY0Myw3IEBAIHZvaWQgdGVzdENoZWNr
TXVsTWVtb3J5KCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tNdWwpKTsKIAot
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAKICAgICBsZWZ0ID0gMDsKICAgICByaWdodCA9IDQyOwpAQCAtOTY5Myw3ICs5
NjkwLDcgQEAgdm9pZCB0ZXN0Q2hlY2tNdWwyKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmln
aW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4o
KSwgY2hlY2tNdWwpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigq
Y29kZSwgMCkgPT0gMC4wKTsKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMSkgPT0g
Mi4wKTsKQEAgLTk3MjYsNyArOTcyMyw3IEBAIHZvaWQgdGVzdENoZWNrTXVsNjQoKQogICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIElUb0QsIE9yaWdpbigpLCBjaGVja011bCkpOwogCi0gICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENI
RUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwLCA0MikgPT0gMC4wKTsKICAgICBDSEVDSyhpbnZv
a2U8ZG91YmxlPigqY29kZSwgMSwgNDIpID09IDQyLjApOwpAQCAtOTc0Nyw3ICs5NzQ0LDcgQEAg
dm9pZCB0ZXN0Q2hlY2tNdWxGb2xkKGludCBhLCBpbnQgYikKICAgICAgICAgfSk7CiAgICAgcm9v
dC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIGNoZWNrTXVs
KTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29t
cGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSkgPT0gYSAqIGIp
OwogfQpAQCAtOTc2OCw3ICs5NzY1LDcgQEAgdm9pZCB0ZXN0Q2hlY2tNdWxGb2xkRmFpbChpbnQg
YSwgaW50IGIpCiAgICAgICAgIH0pOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjaGVja011bCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hF
Q0soaW52b2tlPGludD4oKmNvZGUpID09IDQyKTsKIH0KQEAgLTk4ODQsNyArOTg4MSw3IEBAIHZv
aWQgdGVzdENoZWNrTXVsNjRTU2hyKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwK
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hl
Y2tNdWwpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwg
MGxsLCA0MmxsKSA9PSAwLjApOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAxbGws
IDQybGwpID09IDAuMCk7CkBAIC0xMDczNCw3ICsxMDczMSw3IEBAIHZvaWQgdGVzdFN3aXRjaCh1
bnNpZ25lZCBkZWdyZWUsIHVuc2lnbmUKICAgICAgICAgc3dpdGNoVmFsdWUtPmFwcGVuZENhc2Uo
U3dpdGNoQ2FzZShnYXAgKiBpLCBGcmVxdWVudGVkQmxvY2sobmV3QmxvY2spKSk7CiAgICAgfQog
Ci0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxl
UHJvYyhwcm9jKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZWdyZWU7ICsraSkg
ewogICAgICAgICBDSEVDSyhpbnZva2U8aW50MzJfdD4oKmNvZGUsIGkgKiBnYXAsIDQyLCAxMSkg
PT0gKChpICYgMSkgPyAxMSA6IDQyKSk7CkBAIC0xMDc3Nyw3ICsxMDc3NCw3IEBAIHZvaWQgdGVz
dFN3aXRjaENoaWxsRGl2KHVuc2lnbmVkIGRlZ3JlZSwKICAgICAgICAgc3dpdGNoVmFsdWUtPmFw
cGVuZENhc2UoU3dpdGNoQ2FzZShnYXAgKiBpLCBGcmVxdWVudGVkQmxvY2sobmV3QmxvY2spKSk7
CiAgICAgfQogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZWdy
ZWU7ICsraSkgewogICAgICAgICBkYXRhTG9nKCJpID0gIiwgaSwgIlxuIik7CkBAIC0xMDgxNiw3
ICsxMDgxMyw3IEBAIHZvaWQgdGVzdFN3aXRjaFRhcmdldHRpbmdTYW1lQmxvY2soKQogICAgIHN3
aXRjaFZhbHVlLT5hcHBlbmRDYXNlKFN3aXRjaENhc2UoMywgRnJlcXVlbnRlZEJsb2NrKG90aGVy
VGFyZ2V0KSkpOwogICAgIHN3aXRjaFZhbHVlLT5hcHBlbmRDYXNlKFN3aXRjaENhc2UoMTMsIEZy
ZXF1ZW50ZWRCbG9jayhvdGhlclRhcmdldCkpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgMjA7ICsraSkgewogICAgICAgICBpbnQzMl90IGV4cGVjdGVkID0g
KGkgPT0gMyB8fCBpID09IDEzKSA/IDQyIDogNTsKQEAgLTEwODQ0LDcgKzEwODQxLDcgQEAgdm9p
ZCB0ZXN0U3dpdGNoVGFyZ2V0dGluZ1NhbWVCbG9ja0ZvbGRQYQogICAgIHN3aXRjaFZhbHVlLT5h
cHBlbmRDYXNlKFN3aXRjaENhc2UoMywgRnJlcXVlbnRlZEJsb2NrKG90aGVyVGFyZ2V0KSkpOwog
ICAgIHN3aXRjaFZhbHVlLT5hcHBlbmRDYXNlKFN3aXRjaENhc2UoMTMsIEZyZXF1ZW50ZWRCbG9j
ayhvdGhlclRhcmdldCkpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgMjA7ICsraSkgewogICAgICAgICBpbnQzMl90IGV4cGVjdGVkID0gKGkgPT0gMyB8fCBp
ID09IDEzKSA/IGkgOiA0MjsKQEAgLTExMjAyLDcgKzExMTk5LDcgQEAgdm9pZCB0ZXN0QmFzaWNT
ZWxlY3QoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpLAogICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjIpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnRwdHJfdD4oKmNv
ZGUsIDQyLCAxLCAyKSA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCA0
MiwgNjQyNDYyLCAzMjUzMykgPT0gNjQyNDYyKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+
KCpjb2RlLCA0MywgMSwgMikgPT0gMik7CkBAIC0xMTIyMSw3ICsxMTIxOCw3IEBAIHZvaWQgdGVz
dFNlbGVjdFRlc3QoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpLAogICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjIpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnRwdHJf
dD4oKmNvZGUsIDQyLCAxLCAyKSA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpj
b2RlLCA0MiwgNjQyNDYyLCAzMjUzMykgPT0gNjQyNDYyKTsKICAgICBDSEVDSyhpbnZva2U8aW50
cHRyX3Q+KCpjb2RlLCAwLCAxLCAyKSA9PSAyKTsKQEAgLTExMjQzLDcgKzExMjQwLDcgQEAgdm9p
ZCB0ZXN0U2VsZWN0Q29tcGFyZURvdWJsZSgpCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCks
CiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBp
bGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0so
aW52b2tlPGludHB0cl90PigqY29kZSwgLTEuMCwgMS4wLCAxLCAyKSA9PSAxKTsKICAgICBDSEVD
SyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCA0Mi41LCA0Mi41MSwgNjQyNDYyLCAzMjUzMykgPT0g
NjQyNDYyKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCBQTmFOLCAwLjAsIDEs
IDIpID09IDIpOwpAQCAtMTEzNDAsNyArMTEzMzcsNyBAQCB2b2lkIHRlc3RTZWxlY3REb3VibGUo
KQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjApLAogICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQ
UjEpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCA0Miwg
MS41LCAyLjYpID09IDEuNSk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDQyLCA2
NDI0NjIuNywgMzI1MzMuOCkgPT0gNjQyNDYyLjcpOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+
KCpjb2RlLCA0MywgMS45LCAyLjApID09IDIuMCk7CkBAIC0xMTM1OSw3ICsxMTM1Niw3IEBAIHZv
aWQgdGVzdFNlbGVjdERvdWJsZVRlc3QoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjApLAog
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjEpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxl
KHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGlu
dm9rZTxkb3VibGU+KCpjb2RlLCA0MiwgMS41LCAyLjYpID09IDEuNSk7CiAgICAgQ0hFQ0soaW52
b2tlPGRvdWJsZT4oKmNvZGUsIDQyLCA2NDI0NjIuNywgMzI1MzMuOCkgPT0gNjQyNDYyLjcpOwog
ICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwLCAxLjksIDIuMCkgPT0gMi4wKTsKQEAg
LTExMzgxLDcgKzExMzc4LDcgQEAgdm9pZCB0ZXN0U2VsZWN0RG91YmxlQ29tcGFyZURvdWJsZSgp
CiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMiksCiAgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBS
MykpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIC0xLjAs
IDEuMCwgMS4xLCAyLjIpID09IDEuMSk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUs
IDQyLjUsIDQyLjUxLCA2NDI0NjIuMywgMzI1MzMuNCkgPT0gNjQyNDYyLjMpOwogICAgIENIRUNL
KGludm9rZTxkb3VibGU+KCpjb2RlLCBQTmFOLCAwLjAsIDEuNSwgMi42KSA9PSAyLjYpOwpAQCAt
MTE0NjcsNyArMTE0NjQsNyBAQCB2b2lkIHRlc3RTZWxlY3REb3VibGVDb21wYXJlRG91YmxlKGJv
b2wgCiAgICAgICAgICAgICAgICAgICAgIGFyZzEpLAogICAgICAgICAgICAgICAgIGFyZzIsCiAg
ICAgICAgICAgICAgICAgYXJnMykpOwotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2Mp
OworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgICAgICBmb3Ig
KGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91YmxlPigpKSB7CiAgICAgICAg
ICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRvdWJsZT4oKSkg
ewpAQCAtMTE0OTQsNyArMTE0OTEsNyBAQCB2b2lkIHRlc3RTZWxlY3REb3VibGVDb21wYXJlRG91
YmxlKGJvb2wgCiAgICAgICAgIGtlZXBWYWx1ZXNMaXZlLT5zZXRHZW5lcmF0b3IoWyZdIChDQ2Fs
bEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7IH0pOwogCiAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBy
ZXN1bHQpOwotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgICAgICBmb3IgKGF1dG8mIGxlZnQgOiBm
bG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91YmxlPigpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8m
IHJpZ2h0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRvdWJsZT4oKSkgewpAQCAtMTE1MjEsNyAr
MTE1MTgsNyBAQCB2b2lkIHRlc3RTZWxlY3REb3VibGVDb21wYXJlRG91YmxlKGJvb2wgCiAgICAg
ICAgIGtlZXBWYWx1ZXNMaXZlLT5zZXRHZW5lcmF0b3IoWyZdIChDQ2FsbEhlbHBlcnMmLCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7IH0pOwogCiAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwotICAgICAg
ICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxl
UHJvYyhwcm9jKTsKIAogICAgICAgICBmb3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3Bl
cmFuZHM8ZG91YmxlPigpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRp
bmdQb2ludE9wZXJhbmRzPGRvdWJsZT4oKSkgewpAQCAtMTE1NDksNyArMTE1NDYsNyBAQCB2b2lk
IHRlc3RTZWxlY3REb3VibGVDb21wYXJlRG91YmxlKGJvb2wgCiAgICAgICAgIGtlZXBWYWx1ZXNM
aXZlLT5zZXRHZW5lcmF0b3IoWyZdIChDQ2FsbEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmKSB7IH0pOwogCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwotICAgICAgICBhdXRvIGNvZGUgPSBj
b21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAog
ICAgICAgICBmb3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91YmxlPigp
KSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRz
PGRvdWJsZT4oKSkgewpAQCAtMTE1NzUsNyArMTE1NzIsNyBAQCB2b2lkIHRlc3RTZWxlY3REb3Vi
bGVDb21wYXJlRG91YmxlKGJvb2wgCiAgICAgICAgICAgICAgICAgICAgIGFyZzEpLAogICAgICAg
ICAgICAgICAgIGFyZzIsCiAgICAgICAgICAgICAgICAgYXJnMCkpOwotICAgICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKIAogICAgICAgICBmb3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91
YmxlPigpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9w
ZXJhbmRzPGRvdWJsZT4oKSkgewpAQCAtMTE2MDEsNyArMTE1OTgsNyBAQCB2b2lkIHRlc3RTZWxl
Y3REb3VibGVDb21wYXJlRG91YmxlKGJvb2wgCiAgICAgICAgIGtlZXBWYWx1ZXNMaXZlLT5zZXRH
ZW5lcmF0b3IoWyZdIChDQ2FsbEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7IH0pOwogCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgICAgICBm
b3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91YmxlPigpKSB7CiAgICAg
ICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRvdWJsZT4o
KSkgewpAQCAtMTE2NTMsNyArMTE2NTAsNyBAQCB2b2lkIHRlc3RTZWxlY3RGbG9hdENvbXBhcmVG
bG9hdChib29sICgqCiAgICAgICAgICAgICAgICAgICAgIGFyZzEpLAogICAgICAgICAgICAgICAg
IGFyZzIsCiAgICAgICAgICAgICAgICAgYXJnMykpOwotICAgICAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAg
ICAgICBmb3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpIHsK
ICAgICAgICAgICAgIGZvciAoYXV0byYgcmlnaHQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8Zmxv
YXQ+KCkpIHsKQEAgLTExNjg4LDcgKzExNjg1LDcgQEAgdm9pZCB0ZXN0U2VsZWN0RmxvYXRDb21w
YXJlRmxvYXQoYm9vbCAoKgogICAgICAgICBrZWVwVmFsdWVzTGl2ZS0+c2V0R2VuZXJhdG9yKFsm
XSAoQ0NhbGxIZWxwZXJzJiwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeyB9KTsK
IAogICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgcmVzdWx0KTsKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICAgICAgZm9yIChhdXRvJiBs
ZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZsb2F0PigpKSB7CiAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZsb2F0PigpKSB7CkBAIC0xMTcy
Myw3ICsxMTcyMCw3IEBAIHZvaWQgdGVzdFNlbGVjdEZsb2F0Q29tcGFyZUZsb2F0KGJvb2wgKCoK
ICAgICAgICAga2VlcFZhbHVlc0xpdmUtPnNldEdlbmVyYXRvcihbJl0gKENDYWxsSGVscGVycyYs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsgfSk7CiAKICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7Ci0g
ICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOwogCiAgICAgICAgIGZvciAoYXV0byYgbGVmdCA6IGZsb2F0aW5nUG9p
bnRPcGVyYW5kczxmbG9hdD4oKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZs
b2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSkgewpAQCAtMTE3NTksNyArMTE3NTYsNyBAQCB2
b2lkIHRlc3RTZWxlY3RGbG9hdENvbXBhcmVGbG9hdChib29sICgqCiAgICAgICAgIGtlZXBWYWx1
ZXNMaXZlLT5zZXRHZW5lcmF0b3IoWyZdIChDQ2FsbEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7IH0pOwogCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwotICAgICAgICBhdXRvIGNvZGUg
PSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
IAogICAgICAgICBmb3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+
KCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgcmlnaHQgOiBmbG9hdGluZ1BvaW50T3BlcmFu
ZHM8ZmxvYXQ+KCkpIHsKQEAgLTExNzkxLDcgKzExNzg4LDcgQEAgdm9pZCB0ZXN0U2VsZWN0Rmxv
YXRDb21wYXJlRmxvYXQoYm9vbCAoKgogICAgICAgICAgICAgICAgICAgICBhcmcxKSwKICAgICAg
ICAgICAgICAgICBhcmcyLAogICAgICAgICAgICAgICAgIGFyZzApKTsKLSAgICAgICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CiAKICAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZs
b2F0PigpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9w
ZXJhbmRzPGZsb2F0PigpKSB7CkBAIC0xMTgyMyw3ICsxMTgyMCw3IEBAIHZvaWQgdGVzdFNlbGVj
dEZsb2F0Q29tcGFyZUZsb2F0KGJvb2wgKCoKICAgICAgICAga2VlcFZhbHVlc0xpdmUtPnNldEdl
bmVyYXRvcihbJl0gKENDYWxsSGVscGVycyYsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsgfSk7CiAKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIHJlc3VsdCk7Ci0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJv
Yyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgICAgIGZv
ciAoYXV0byYgbGVmdCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSkgewogICAgICAg
ICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSkg
ewpAQCAtMTE4NjAsNyArMTE4NTcsNyBAQCB2b2lkIHRlc3RTZWxlY3RGb2xkKGludHB0cl90IHZh
bHVlKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAogICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxpbnRwdHJfdD4oKmNvZGUs
IDEsIDIpID09ICh2YWx1ZSA9PSA0MiA/IDEgOiAyKSk7CiAgICAgQ0hFQ0soaW52b2tlPGludHB0
cl90PigqY29kZSwgNjQyNDYyLCAzMjUzMykgPT0gKHZhbHVlID09IDQyID8gNjQyNDYyIDogMzI1
MzMpKTsKIH0KQEAgLTExODgzLDcgKzExODgwLDcgQEAgdm9pZCB0ZXN0U2VsZWN0SW52ZXJ0KCkK
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIy
KSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCA0Miwg
MSwgMikgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwgNDIsIDY0MjQ2
MiwgMzI1MzMpID09IDY0MjQ2Mik7CiAgICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwg
NDMsIDEsIDIpID09IDIpOwpAQCAtMTE5MjYsNyArMTE5MjMsNyBAQCB2b2lkIHRlc3RDaGVja1Nl
bGVjdCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwog
ICAgIENIRUNLKGdlbmVyYXRpb25Db3VudCA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8aW50Pigq
Y29kZSwgdHJ1ZSkgPT0gMCk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIGZhbHNlKSA9
PSA2NjYpOwpAQCAtMTE5OTcsNyArMTE5OTQsNyBAQCB2b2lkIHRlc3RDaGVja1NlbGVjdENoZWNr
U2VsZWN0KCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CiAgICAgQ0hFQ0soZ2VuZXJhdGlvbkNvdW50ID09IDEpOwogICAgIENIRUNLKGdlbmVyYXRpb25D
b3VudDIgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIHRydWUsIHRydWUpID09
IDApOwpAQCAtMTIwNDMsNyArMTIwNDAsNyBAQCB2b2lkIHRlc3RDaGVja1NlbGVjdEFuZENTRSgp
CiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYWRkVmFsdWUsIGFkZFZhbHVlMikpOwogCi0g
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKICAgICBDSEVDSyhnZW5lcmF0aW9uQ291bnQgPT0gMSk7CiAgICAgQ0hFQ0soaW52
b2tlPGludD4oKmNvZGUsIHRydWUpID09IDApOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2Rl
LCBmYWxzZSkgPT0gNjY2KTsKQEAgLTEyNDUyLDcgKzEyNDQ5LDcgQEAgdm9pZCB0ZXN0VHJpdmlh
bEluZmluaXRlTG9vcCgpCiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIEp1
bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2sobG9vcCkpOwogICAgIGxvb3AtPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3Ap
KTsKIAotICAgIGNvbXBpbGUocHJvYyk7CisgICAgY29tcGlsZVByb2MocHJvYyk7CiB9CiAKIHZv
aWQgdGVzdEZvbGRQYXRoRXF1YWwoKQpAQCAtMTI0NzcsNyArMTI0NzQsNyBAQCB2b2lkIHRlc3RG
b2xkUGF0aEVxdWFsKCkKICAgICAgICAgZWxzZUJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KAogICAg
ICAgICAgICAgcHJvYywgRXF1YWwsIE9yaWdpbigpLCBhcmcsIGVsc2VCbG9jay0+YXBwZW5kTmV3
PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSkpOwogCi0gICAgYXV0byBjb2RlID0g
Y29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBD
SEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCAwKSA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8
aW50cHRyX3Q+KCpjb2RlLCAxKSA9PSAwKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpj
b2RlLCA0MikgPT0gMCk7CkBAIC0xMjQ5NCw3ICsxMjQ5MSw3IEBAIHZvaWQgdGVzdExTaGlmdFNl
bGYzMigpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgYXJnLCBhcmcpKTsKIAotICAgIGF1
dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CiAKICAgICBhdXRvIGNoZWNrID0gWyZdIChpbnQzMl90IHZhbHVlKSB7CiAgICAgICAgIENI
RUNLKGludm9rZTxpbnQzMl90PigqY29kZSwgdmFsdWUpID09IHZhbHVlIDw8ICh2YWx1ZSAmIDMx
KSk7CkBAIC0xMjUxNyw3ICsxMjUxNCw3IEBAIHZvaWQgdGVzdFJTaGlmdFNlbGYzMigpCiAgICAg
ICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgU1NociwgT3JpZ2luKCksIGFyZywgYXJnKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBj
b21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAg
YXV0byBjaGVjayA9IFsmXSAoaW50MzJfdCB2YWx1ZSkgewogICAgICAgICBDSEVDSyhpbnZva2U8
aW50MzJfdD4oKmNvZGUsIHZhbHVlKSA9PSB2YWx1ZSA+PiAodmFsdWUgJiAzMSkpOwpAQCAtMTI1
NDAsNyArMTI1MzcsNyBAQCB2b2lkIHRlc3RVUlNoaWZ0U2VsZjMyKCkKICAgICAgICAgcHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBa
U2hyLCBPcmlnaW4oKSwgYXJnLCBhcmcpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJv
Yyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIGNoZWNr
ID0gWyZdICh1aW50MzJfdCB2YWx1ZSkgewogICAgICAgICBDSEVDSyhpbnZva2U8dWludDMyX3Q+
KCpjb2RlLCB2YWx1ZSkgPT0gdmFsdWUgPj4gKHZhbHVlICYgMzEpKTsKQEAgLTEyNTYyLDcgKzEy
NTU5LDcgQEAgdm9pZCB0ZXN0TFNoaWZ0U2VsZjY0KCkKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKICAgICAgICAgICAgIHByb2MsIFNobCwgT3JpZ2luKCksIGFyZywgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksIGFyZykpKTsKIAotICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CiAKICAgICBhdXRvIGNoZWNrID0gWyZdIChpbnQ2NF90IHZhbHVlKSB7CiAgICAgICAgIENIRUNL
KGludm9rZTxpbnQ2NF90PigqY29kZSwgdmFsdWUpID09IHZhbHVlIDw8ICh2YWx1ZSAmIDYzKSk7
CkBAIC0xMjU4Niw3ICsxMjU4Myw3IEBAIHZvaWQgdGVzdFJTaGlmdFNlbGY2NCgpCiAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCiAgICAgICAgICAgICBwcm9jLCBTU2hyLCBPcmlnaW4o
KSwgYXJnLCByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwgYXJn
KSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gY2hlY2sgPSBbJl0gKGludDY0X3QgdmFsdWUp
IHsKICAgICAgICAgQ0hFQ0soaW52b2tlPGludDY0X3Q+KCpjb2RlLCB2YWx1ZSkgPT0gdmFsdWUg
Pj4gKHZhbHVlICYgNjMpKTsKQEAgLTEyNjEwLDcgKzEyNjA3LDcgQEAgdm9pZCB0ZXN0VVJTaGlm
dFNlbGY2NCgpCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCiAgICAgICAgICAgICBw
cm9jLCBaU2hyLCBPcmlnaW4oKSwgYXJnLCByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRy
dW5jLCBPcmlnaW4oKSwgYXJnKSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gY2hlY2sgPSBb
Jl0gKHVpbnQ2NF90IHZhbHVlKSB7CiAgICAgICAgIENIRUNLKGludm9rZTx1aW50NjRfdD4oKmNv
ZGUsIHZhbHVlKSA9PSB2YWx1ZSA+PiAodmFsdWUgJiA2MykpOwpAQCAtMTI2NDMsNyArMTI2NDAs
NyBAQCB2b2lkIHRlc3RQYXRjaHBvaW50RG91YmxlUmVncygpCiAKICAgICByb290LT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCk7CiAKLSAg
ICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9j
KHByb2MpOwogICAgIENIRUNLKG51bUNhbGxzID09IDEpOwogICAgIENIRUNLKGludm9rZTxkb3Vi
bGU+KCpjb2RlLCA0Mi41KSA9PSA0Mi41KTsKIH0KQEAgLTEyNjc2LDcgKzEyNjczLDcgQEAgdm9p
ZCB0ZXN0U3BpbGxEZWZTbWFsbGVyVGhhblVzZSgpCiAgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgZm9yY2VTcGlsbCwgYXJnNjQp
OwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCByZXN1bHQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNv
ZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50NjRfdD4oKmNvZGUs
IDB4ZmZmZmZmZmYwMDAwMDAwMCkgPT0gMCk7CiB9CiAKQEAgLTEyNzMwLDcgKzEyNzI3LDcgQEAg
dm9pZCB0ZXN0U3BpbGxVc2VMYXJnZXJUaGFuRGVmKCkKICAgICBlbHNlUmVzdWx0LT5zZXRQaGko
cGhpKTsKICAgICB0YWlsLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgcGhpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBj
b2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52b2tlPHVpbnQ2NF90PigqY29k
ZSwgMSwgMHhmZmZmZmZmZjAwMDAwMDAwKSA9PSAwKTsKICAgICBDSEVDSyhpbnZva2U8dWludDY0
X3Q+KCpjb2RlLCAwLCAweGZmZmZmZmZmMDAwMDAwMDApID09IDB4ZmZmZmZmZmYwMDAwMDAwMCk7
CiAKQEAgLTEyODEyLDcgKzEyODA5LDcgQEAgdm9pZCB0ZXN0TGF0ZVJlZ2lzdGVyKCkKICAgICAg
ICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIHNlY29uZFBhdGNocG9pbnQpOwogICAgIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52
b2tlPHVpbnQ2NF90PigqY29kZSkgPT0gcmVzdWx0KTsKIH0KIApAQCAtMTI5ODYsNyArMTI5ODMs
NyBAQCB2b2lkIHRlc3RJbnRlcnByZXRlcigpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksCiAgICAgICAgIHN0b3AtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBwb2lu
dGVyVHlwZSgpLCAwKSk7CiAgICAgCi0gICAgYXV0byBpbnRlcnByZXRlciA9IGNvbXBpbGUocHJv
Yyk7CisgICAgYXV0byBpbnRlcnByZXRlciA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIAogICAg
IFZlY3RvcjxpbnRwdHJfdD4gZGF0YTsKICAgICBWZWN0b3I8aW50cHRyX3Q+IGNvZGU7CkBAIC0x
MzEzNiw3ICsxMzEzMyw3IEBAIHZvaWQgdGVzdEVudHJ5U3dpdGNoU2ltcGxlKCkKICAgICAKICAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7Ci0gICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIoaml0LCBudWxscHRyKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSk7CiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFiZWxUd28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBv
aW50TGFiZWwoMSkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVGhyZWUgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMikpOwpAQCAtMTMxNjksNyArMTMx
NjYsNyBAQCB2b2lkIHRlc3RFbnRyeVN3aXRjaE5vRW50cnlTd2l0Y2goKQogICAgIAogICAgIEND
YWxsSGVscGVycyBqaXQ7CiAgICAgZ2VuZXJhdGUocHJvYywgaml0KTsKLSAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoKnZtLCBqaXQsIG51bGxwdHIpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cihqaXQsIG51bGxwdHIpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25lID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDApKTsKICAgICBDb2RlTG9jYXRp
b25MYWJlbCBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRM
YWJlbCgxKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxUaHJlZSA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgyKSk7CkBAIC0xMzI1Niw3ICsxMzI1Myw3
IEBAIHZvaWQgdGVzdEVudHJ5U3dpdGNoV2l0aENvbW1vblBhdGhzKCkKICAgICAKICAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7Ci0gICAgTGlua0J1ZmZlciBs
aW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
aml0LCBudWxscHRyKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSk7CiAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgbGFiZWxUd28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFi
ZWwoMSkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVGhyZWUgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMikpOwpAQCAtMTMzNzMsNyArMTMzNzAsNyBA
QCB2b2lkIHRlc3RFbnRyeVN3aXRjaFdpdGhDb21tb25QYXRoc0FuZE5vCiAgICAgCiAgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwotICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KGppdCwgbnVsbHB0cik7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOwogICAgIENvZGVMb2NhdGlv
bkxhYmVsIGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExh
YmVsKDEpKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFRocmVlID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDIpKTsKQEAgLTEzNDUxLDcgKzEzNDQ4LDcg
QEAgdm9pZCB0ZXN0RW50cnlTd2l0Y2hMb29wKCkKICAgICAKICAgICBDQ2FsbEhlbHBlcnMgaml0
OwogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7Ci0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2
bSwgaml0LCBudWxscHRyKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRy
KTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxU
d28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMSkpOwogICAg
IApAQCAtMTM1MDAsNyArMTM0OTcsNyBAQCB2b2lkIHRlc3RTb21lRWFybHlSZWdpc3RlcigpCiAg
ICAgICAgIAogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIHBhdGNocG9pbnQpOwogICAgICAgICAKLSAgICAgICAgY29tcGlsZShwcm9jKTsKKyAg
ICAgICAgY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIENIRUNLKHJhbkZpcnN0UGF0Y2hwb2lu
dCk7CiAgICAgICAgIENIRUNLKHJhblNlY29uZFBhdGNocG9pbnQpOwogICAgIH07CkBAIC0xMzYx
NCw3ICsxMzYxMSw3IEBAIHZvaWQgdGVzdFRlcm1pbmFsUGF0Y2hwb2ludFRoYXROZWVkc1RvQmUK
ICAgICAKICAgICBzbG93UGF0aC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLCBzbG93UGF0aC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDIw
KSk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50PigqY29kZSksIDEw
KTsKIH0KIApAQCAtMTM3MDIsNyArMTM2OTksNyBAQCB2b2lkIHRlc3RUZXJtaW5hbFBhdGNocG9p
bnRUaGF0TmVlZHNUb0JlCiAgICAgT3B0aW9uczo6bWF4QjNUYWlsRHVwQmxvY2tTaXplKCkgPSAw
OwogICAgIE9wdGlvbnM6Om1heEIzVGFpbER1cEJsb2NrU3VjY2Vzc29ycygpID0gMDsKIAotICAg
IGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKmNvZGUsIDEpLCAxKTsKICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqY29kZSwgMCksIDApOwogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpjb2RlLCA0MiksIDY2Nik7CkBAIC0xMzc3Niw3ICsxMzc3Myw3IEBAIHZvaWQgdGVzdFBhdGNo
cG9pbnRUZXJtaW5hbFJldHVyblZhbHVlKGIKICAgICBzbG93UGF0aFVwc2lsb24tPnNldFBoaShw
aGkpOwogICAgIGNvbnRpbnVhdGlvbi0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCBwaGkpOwogICAgIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KmNvZGUsIDApLCAzMSk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKmNvZGUsIDEpLCAzMik7
CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKmNvZGUsIDQxKSwgNzIpOwpAQCAtMTM3OTQsNyAr
MTM3OTEsNyBAQCB2b2lkIHRlc3RNZW1vcnlGZW5jZSgpCiAgICAgcm9vdC0+YXBwZW5kTmV3PEZl
bmNlVmFsdWU+KHByb2MsIE9yaWdpbigpKTsKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdp
bigpLCBJbnQzMiwgNDIpKTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpjb2RlKSwgNDIpOwogICAgIGlmIChpc1g4NigpKQogICAgICAgICBjaGVja1VzZXNJbnN0
cnVjdGlvbigqY29kZSwgImxvY2sgb3IgJDB4MCwgKCVyc3ApIik7CkBAIC0xMzgxMyw3ICsxMzgx
MCw3IEBAIHZvaWQgdGVzdFN0b3JlRmVuY2UoKQogICAgIHJvb3QtPmFwcGVuZE5ldzxGZW5jZVZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgSGVhcFJhbmdlOjp0b3AoKSwgSGVhcFJhbmdlKCkpOwogICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcm9vdC0+YXBw
ZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDMyLCA0MikpOwogICAgIAotICAgIGF1
dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKmNvZGUpLCA0Mik7CiAgICAgY2hlY2tEb2Vz
Tm90VXNlSW5zdHJ1Y3Rpb24oKmNvZGUsICJsb2NrIik7CiAgICAgY2hlY2tEb2VzTm90VXNlSW5z
dHJ1Y3Rpb24oKmNvZGUsICJtZmVuY2UiKTsKQEAgLTEzODMwLDcgKzEzODI3LDcgQEAgdm9pZCB0
ZXN0TG9hZEZlbmNlKCkKICAgICByb290LT5hcHBlbmROZXc8RmVuY2VWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEhlYXBSYW5nZSgpLCBIZWFwUmFuZ2U6OnRvcCgpKTsKICAgICByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZEludENvbnN0YW50
KHByb2MsIE9yaWdpbigpLCBJbnQzMiwgNDIpKTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpjb2RlKSwgNDIpOwogICAgIGNoZWNrRG9lc05vdFVzZUluc3RydWN0
aW9uKCpjb2RlLCAibG9jayIpOwogICAgIGNoZWNrRG9lc05vdFVzZUluc3RydWN0aW9uKCpjb2Rl
LCAibWZlbmNlIik7CkBAIC0xNDA1NSw3ICsxNDA1Miw3IEBAIHZvaWQgdGVzdFBDT3JpZ2luTWFw
RG9lc250SW5zZXJ0Tm9wcygpCiAKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJl
dHVybiwgT3JpZ2luKCkpOwogCi0gICAgY29tcGlsZShwcm9jKTsKKyAgICBjb21waWxlUHJvYyhw
cm9jKTsKIH0KIAogdm9pZCB0ZXN0UGluUmVnaXN0ZXJzKCkKQEAgLTE0MDkwLDcgKzE0MDg3LDcg
QEAgdm9pZCB0ZXN0UGluUmVnaXN0ZXJzKCkKICAgICAgICAgICAgICAgICBDSEVDS19FUShwYXJh
bXNbMF0uZ3ByKCksIEdQUkluZm86OnJlZ0NTMCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKLSAgICAgICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAgICAgICAgIGJvb2wgdXNlc0NTUnMgPSBmYWxzZTsKICAgICAgICAgZm9yIChB
aXI6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYy5jb2RlKCkpIHsKICAgICAgICAgICAgIGZvciAo
QWlyOjpJbnN0JiBpbnN0IDogKmJsb2NrKSB7CkBAIC0xNDEyOSw3ICsxNDEyNiw3IEBAIHZvaWQg
dGVzdFg4NkxlYUFkZEFkZFNobExlZnQoKQogICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQ
dHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwMCkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNvZGUg
PSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAg
IGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGVhIDB4NjQoJXJkaSwlcnNpLDQpLCAlcmF4
Iik7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludHB0cl90PigqY29kZSwgMSwgMiksICgxICsgKDIg
PDwgMikpICsgMTAwKTsKIH0KQEAgLTE0MTUxLDcgKzE0MTQ4LDcgQEAgdm9pZCB0ZXN0WDg2TGVh
QWRkQWRkU2hsUmlnaHQoKQogICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDEwMCkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxl
KHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGNoZWNrVXNl
c0luc3RydWN0aW9uKCpjb2RlLCAibGVhIDB4NjQoJXJkaSwlcnNpLDQpLCAlcmF4Iik7CiAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludHB0cl90PigqY29kZSwgMSwgMiksICgxICsgKDIgPDwgMikpICsg
MTAwKTsKIH0KQEAgLTE0MTcwLDcgKzE0MTY3LDcgQEAgdm9pZCB0ZXN0WDg2TGVhQWRkQWRkKCkK
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAx
MDApKTsKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCks
IHJlc3VsdCk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50cHRyX3Q+
KCpjb2RlLCAxLCAyKSwgKDEgKyAyKSArIDEwMCk7CiAgICAgY2hlY2tEaXNhc3NlbWJseSgKICAg
ICAgICAgKmNvZGUsCkBAIC0xNDE5NSw3ICsxNDE5Miw3IEBAIHZvaWQgdGVzdFg4NkxlYUFkZFNo
bFJpZ2h0KCkKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAyKSkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2Mp
OworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGNoZWNrVXNlc0luc3Ry
dWN0aW9uKCpjb2RlLCAibGVhICglcmRpLCVyc2ksNCksICVyYXgiKTsKICAgICBDSEVDS19FUShp
bnZva2U8aW50cHRyX3Q+KCpjb2RlLCAxLCAyKSwgMSArICgyIDw8IDIpKTsKIH0KQEAgLTE0MjE0
LDcgKzE0MjExLDcgQEAgdm9pZCB0ZXN0WDg2TGVhQWRkU2hsTGVmdFNjYWxlMSgpCiAgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpKTsK
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3Vs
dCk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50cHRyX3Q+KCpjb2Rl
LCAxLCAyKSwgMSArIDIpOwogICAgIGNoZWNrRGlzYXNzZW1ibHkoCiAgICAgICAgICpjb2RlLApA
QCAtMTQyMzksNyArMTQyMzYsNyBAQCB2b2lkIHRlc3RYODZMZWFBZGRTaGxMZWZ0U2NhbGUyKCkK
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCAxKSkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpj
b2RlLCAibGVhICglcmRpLCVyc2ksMiksICVyYXgiKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50
cHRyX3Q+KCpjb2RlLCAxLCAyKSwgMSArICgyIDw8IDEpKTsKIH0KQEAgLTE0MjU4LDcgKzE0MjU1
LDcgQEAgdm9pZCB0ZXN0WDg2TGVhQWRkU2hsTGVmdFNjYWxlNCgpCiAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLCByZXN1bHQpOwogICAgIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24o
KmNvZGUsICJsZWEgKCVyZGksJXJzaSw0KSwgJXJheCIpOwogICAgIENIRUNLX0VRKGludm9rZTxp
bnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAxICsgKDIgPDwgMikpOwogfQpAQCAtMTQyNzcsNyArMTQy
NzQsNyBAQCB2b2lkIHRlc3RYODZMZWFBZGRTaGxMZWZ0U2NhbGU4KCkKICAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAzKSkpOwogICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKICAg
ICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBp
bGVQcm9jKHByb2MpOwogICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGVhICglcmRp
LCVyc2ksOCksICVyYXgiKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCAx
LCAyKSwgMSArICgyIDw8IDMpKTsKIH0KQEAgLTE0Mjk2LDcgKzE0MjkzLDcgQEAgdm9pZCB0ZXN0
QWRkU2hsMzIoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDMyKSkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLX0VRKGlu
dm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAxICsgKHN0YXRpY19jYXN0PGludHB0cl90Pigy
KSA8PCBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMzIpKSk7CiB9CiAKQEAgLTE0MzE0LDcgKzE0MzEx
LDcgQEAgdm9pZCB0ZXN0QWRkU2hsNjQoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDY0KSkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwog
ICAgIENIRUNLX0VRKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAxICsgMik7CiB9CiAK
QEAgLTE0MzMyLDcgKzE0MzI5LDcgQEAgdm9pZCB0ZXN0QWRkU2hsNjUoKQogICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDY1KSkpOwogICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsK
ICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEs
IDIpLCAxICsgKDIgPDwgMSkpOwogfQogCkBAIC0xNDM5Niw3ICsxNDM5Myw3IEBAIHZvaWQgdGVz
dExvYWRCYXNlSW5kZXhTaGlmdDIoKQogICAgICAgICAgICAgICAgICAgICBwcm9jLCBTaGwsIE9y
aWdpbigpLAogICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCiAgICAgICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAy
KSkpKSk7Ci0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICBpZiAoaXNYODYoKSkKICAgICAgICAgY2hlY2tVc2VzSW5z
dHJ1Y3Rpb24oKmNvZGUsICIoJXJkaSwlcnNpLDQpIik7CiAgICAgaW50MzJfdCB2YWx1ZSA9IDEy
MzQxMjM0OwpAQCAtMTQ0MjAsNyArMTQ0MTcsNyBAQCB2b2lkIHRlc3RMb2FkQmFzZUluZGV4U2hp
ZnQzMigpCiAgICAgICAgICAgICAgICAgICAgIHByb2MsIFNobCwgT3JpZ2luKCksCiAgICAgICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKICAgICAgICAgICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDMyKSkpKSk7Ci0gICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKICAgICBpbnQzMl90IHZhbHVlID0gMTIzNDEyMzQ7CiAgICAgY2hhciogcHRyID0gYml0d2lz
ZV9jYXN0PGNoYXIqPigmdmFsdWUpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDsg
KytpKQpAQCAtMTQ0MzcsNyArMTQ0MzQsNyBAQCB2b2lkIHRlc3RPcHRpbWl6ZU1hdGVyaWFsaXph
dGlvbigpCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmln
aW4oKSwgMHgxMjM0MjM0NTM0NTZsbHUgKyAzNSkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGls
ZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBib29sIGZv
dW5kID0gZmFsc2U7CiAgICAgZm9yIChBaXI6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYy5jb2Rl
KCkpIHsKICAgICAgICAgZm9yIChBaXI6Okluc3QmIGluc3QgOiAqYmxvY2spIHsKQEAgLTE0NDkz
LDcgKzE0NDkwLDcgQEAgdm9pZCB0ZXN0QXRvbWljV2Vha0NBUygpCiAgICAgICAgIAogICAgICAg
ICBkb25lLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOwogICAgICAg
ICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVl
WzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDUyNCw3ICsxNDUyMSw3IEBA
IHZvaWQgdGVzdEF0b21pY1dlYWtDQVMoKQogICAgICAgICAKICAgICAgICAgZG9uZS0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKICAgICAgICAgCi0gICAgICAgIGF1
dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9j
KHByb2MpOwogICAgICAgICBUIHZhbHVlWzJdOwogICAgICAgICB2YWx1ZVswXSA9IDQyOwogICAg
ICAgICB2YWx1ZVsxXSA9IDEzOwpAQCAtMTQ1NTgsNyArMTQ1NTUsNyBAQCB2b2lkIHRlc3RBdG9t
aWNXZWFrQ0FTKCkKICAgICAgICAgCiAgICAgICAgIGZhaWwtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgUmV0dXJuLCBPcmlnaW4oKSk7CiAgICAgICAgIAotICAgICAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICAg
ICAgVCB2YWx1ZVsyXTsKICAgICAgICAgdmFsdWVbMF0gPSA0MjsKICAgICAgICAgdmFsdWVbMV0g
PSAxMzsKQEAgLTE0NjAwLDcgKzE0NTk3LDcgQEAgdm9pZCB0ZXN0QXRvbWljV2Vha0NBUygpCiAg
ICAgICAgIAogICAgICAgICBmYWlsLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3Jp
Z2luKCkpOwogICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAg
ICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07
CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDYy
Niw3ICsxNDYyMyw3IEBAIHZvaWQgdGVzdEF0b21pY1dlYWtDQVMoKQogICAgICAgICAgICAgICAg
IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCAweGJlZWYpLAog
ICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOwogICAgICAgICAKLSAgICAgICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAg
ICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDY1NSw3ICsxNDY1Miw3IEBAIHZvaWQgdGVzdEF0b21p
Y1dlYWtDQVMoKQogICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpLAogICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAw
KSkpOwogICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAg
ICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDY4Miw3
ICsxNDY3OSw3IEBAIHZvaWQgdGVzdEF0b21pY1dlYWtDQVMoKQogICAgICAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKSwKICAgICAgICAgICAgICAgICA0MikpOwogICAgICAgICAKLSAgICAgICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAg
ICAgICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDc0Niw3ICsxNDc0Myw3IEBAIHZvaWQgdGVzdEF0
b21pY1N0cm9uZ0NBUygpCiAgICAgICAgIAogICAgICAgICBmYWlsLT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOwogICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0g
Y29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAg
ICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVl
WzFdID0gMTM7CkBAIC0xNDc4Nyw3ICsxNDc4NCw3IEBAIHZvaWQgdGVzdEF0b21pY1N0cm9uZ0NB
UygpCiAgICAgICAgIAogICAgICAgICBmYWlsLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVy
biwgT3JpZ2luKCkpOwogICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFs
dWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBA
IC0xNDgyOCw3ICsxNDgyNSw3IEBAIHZvaWQgdGVzdEF0b21pY1N0cm9uZ0NBUygpCiAgICAgICAg
IAogICAgICAgICBmYWlsLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkp
OwogICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAg
ICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDg1Myw3ICsx
NDg1MCw3IEBAIHZvaWQgdGVzdEF0b21pY1N0cm9uZ0NBUygpCiAgICAgICAgICAgICAgICAgcm9v
dC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDB4YmVlZiksCiAgICAg
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSk7CiAgICAgICAgIAotICAgICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKICAgICAgICAgVCB2YWx1ZVsyXTsKICAgICAgICAgdmFsdWVbMF0gPSA0MjsKICAgICAgICAg
dmFsdWVbMV0gPSAxMzsKQEAgLTE0ODg1LDcgKzE0ODgyLDcgQEAgdm9pZCB0ZXN0QXRvbWljU3Ry
b25nQ0FTKCkKICAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSwKICAgICAgICAg
ICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgNDIp
KSk7CiAgICAgICAgIAotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICAgICAgVCB2YWx1ZVsyXTsKICAg
ICAgICAgdmFsdWVbMF0gPSA0MjsKICAgICAgICAgdmFsdWVbMV0gPSAxMzsKQEAgLTE0OTE2LDcg
KzE0OTEzLDcgQEAgdm9pZCB0ZXN0QXRvbWljU3Ryb25nQ0FTKCkKICAgICAgICAgICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDQyKSksCiAg
ICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIDApKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFs
dWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBA
IC0xNDk5Nyw3ICsxNDk5NCw3IEBAIHZvaWQgdGVzdEF0b21pY1hjaGcoQjM6Ok9wY29kZSBvcGNv
ZGUpCiAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2lu
KCksIHR5cGUsIDEpLAogICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOwogICAgIAot
ICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICAgICAgVCB2YWx1ZVsyXTsKICAgICAgICAgdmFsdWVbMF0g
PSA1OwogICAgICAgICB2YWx1ZVsxXSA9IDEwMDsKQEAgLTE1MDE3LDcgKzE1MDE0LDcgQEAgdm9p
ZCB0ZXN0QXRvbWljWGNoZyhCMzo6T3Bjb2RlIG9wY29kZSkKICAgICAgICAgICAgICAgICByb290
LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwgNDIpLAogICAgICAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOwogICAgIAotICAgICAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICAg
ICAgVCB2YWx1ZVsyXTsKICAgICAgICAgdmFsdWVbMF0gPSA1OwogICAgICAgICB2YWx1ZVsxXSA9
IDEwMDsKQEAgLTE1MDM2LDcgKzE1MDMzLDcgQEAgdm9pZCB0ZXN0QXRvbWljWGNoZyhCMzo6T3Bj
b2RlIG9wY29kZSkKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CiAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSk7CiAgICAgCi0gICAgICAg
IGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOwogICAgICAgICBUIHZhbHVlWzJdOwogICAgICAgICB2YWx1ZVswXSA9IDU7CiAg
ICAgICAgIHZhbHVlWzFdID0gMTAwOwpAQCAtMTUwNTYsNyArMTUwNTMsNyBAQCB2b2lkIHRlc3RB
dG9taWNYY2hnKEIzOjpPcGNvZGUgb3Bjb2RlKQogICAgICAgICAgICAgMCwgSGVhcFJhbmdlKDQy
KSwgSGVhcFJhbmdlKCkpOwogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJl
dHVybiwgT3JpZ2luKCkpOwogICAgIAotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2Mp
OworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICAgICAgVCB2YWx1
ZVsyXTsKICAgICAgICAgdmFsdWVbMF0gPSA1OwogICAgICAgICB2YWx1ZVsxXSA9IDEwMDsKQEAg
LTE1MDg5LDcgKzE1MDg2LDcgQEAgdm9pZCB0ZXN0RGVwZW5kMzIoKQogICAgIHZhbHVlc1swXSA9
IDQyOwogICAgIHZhbHVlc1sxXSA9IDB4YmVlZjsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGlmIChp
c0FSTTY0KCkpCiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiZW9yIik7CiAg
ICAgZWxzZSBpZiAoaXNYODYoKSkgewpAQCAtMTUxMTksNyArMTUxMTYsNyBAQCB2b2lkIHRlc3RE
ZXBlbmQ2NCgpCiAgICAgdmFsdWVzWzBdID0gNDI7CiAgICAgdmFsdWVzWzFdID0gMHhiZWVmOwog
ICAgIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29t
cGlsZVByb2MocHJvYyk7CiAgICAgaWYgKGlzQVJNNjQoKSkKICAgICAgICAgY2hlY2tVc2VzSW5z
dHJ1Y3Rpb24oKmNvZGUsICJlb3IiKTsKICAgICBlbHNlIGlmIChpc1g4NigpKSB7CkBAIC0xNTE1
NCw3ICsxNTE1MSw3IEBAIHZvaWQgdGVzdFdhc21Cb3VuZHNDaGVjayh1bnNpZ25lZCBvZmZzZXQK
ICAgICBWYWx1ZSogcmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIDB4NDIpOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDS19FUShpbnZv
a2U8aW50MzJfdD4oKmNvZGUsIDEsIDIgKyBvZmZzZXQpLCAweDQyKTsKICAgICBDSEVDS19FUShp
bnZva2U8aW50MzJfdD4oKmNvZGUsIDMsIDIgKyBvZmZzZXQpLCA0Mik7CiAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludDMyX3Q+KCpjb2RlLCAyLCAyICsgb2Zmc2V0KSwgNDIpOwpAQCAtMTUyMDUsNyAr
MTUyMDIsNyBAQCB2b2lkIHRlc3RXYXNtQWRkcmVzcygpCiAgICAgaW5jVXBzaWxvbi0+c2V0UGhp
KGluZGV4UGhpKTsKIAogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpbnZva2U8dm9pZD4oKmNvZGUsIGxvb3BD
b3VudCwgbnVtVG9TdG9yZSwgdmFsdWVzLmRhdGEoKSk7CiAgICAgZm9yICh1bnNpZ25lZCB2YWx1
ZSA6IHZhbHVlcykKICAgICAgICAgQ0hFQ0tfRVEobnVtVG9TdG9yZSwgdmFsdWUpOwpAQCAtMTUz
MTgsNyArMTUzMTUsNiBAQCBkb3VibGUgbmVnYXRpdmVaZXJvKCkKIHZvaWQgcnVuKGNvbnN0IGNo
YXIqIGZpbHRlcikKIHsKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLSAgICB2bSA9
ICZWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOwogCiAgICAgRGVxdWU8UmVmUHRyPFNo
YXJlZFRhc2s8dm9pZCgpPj4+IHRhc2tzOwogCkBAIC0xNTk5OSw3ICsxNTk5NSw3IEBAIHZvaWQg
cnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdFRydW5jKChzdGF0aWNfY2FzdDxp
bnQ2NF90PigxKSA8PCA0MCkgKyA0MikpOwogICAgIFJVTih0ZXN0QWRkMSg0NSkpOwogICAgIFJV
Tih0ZXN0QWRkMVB0cig1MSkpOwotICAgIFJVTih0ZXN0QWRkMVB0cihiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KHZtKSkpOworICAgIFJVTih0ZXN0QWRkMVB0cihzdGF0aWNfY2FzdDxpbnRwdHJfdD4o
MHhiYWFkYmVlZikpKTsKICAgICBSVU4odGVzdE5lZzMyKDUyKSk7CiAgICAgUlVOKHRlc3ROZWdQ
dHIoNTMpKTsKICAgICBSVU4odGVzdFN0b3JlQWRkTG9hZDMyKDQ2KSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1
ZmZlci5oIgogI2luY2x1ZGUgIlB1cmVOYU4uaCIKLSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUg
PGNtYXRoPgogI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxzdHJpbmc+CkBAIC04MCwxNCArNzks
MTIgQEAgU3RhdGljTG9jayBjcmFzaExvY2s7CiAgICAgICAgIENSQVNIKCk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGls
ZSAoZmFsc2UpCiAKLVZNKiB2bTsKLQogc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxhdGlvbj4g
Y29tcGlsZShCMzo6UHJvY2VkdXJlJiBwcm9jKQogewogICAgIHByZXBhcmVGb3JHZW5lcmF0aW9u
KHByb2MuY29kZSgpKTsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKHByb2Mu
Y29kZSgpLCBqaXQpOwotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0
cik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0cik7CiAKICAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KAogICAgICAgICBGSU5BTElaRV9D
T0RFKGxpbmtCdWZmZXIsICgidGVzdGFpciBjb21waWxhdGlvbiIpKSwgcHJvYy5yZWxlYXNlQnlw
cm9kdWN0cygpKTsKQEAgLTE4NDksNyArMTg0Niw2IEBAIHZvaWQgdGVzdFg4NlZNVUxTREJhc2VJ
bmRleE5lZWRSZXgoKQogdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogewogICAgIEpTQzo6
aW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAgIHZtID0gJlZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5s
ZWFrUmVmKCk7CiAKICAgICBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4gdGFza3M7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vz
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE0
LDcgKzUxNCw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAg
ICAgICAgY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nID0gc3RhdGUuY2FsbFNpdGVJ
bmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nKCk7CiAgICAgfQogCi0gICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CiAgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkRpZCBmYWlsIHRvIGFsbG9jYXRlLlxu
Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCw3ICszOTQsNyBAQCB2b2lkIEpJVENv
bXBpbGVyOjpjb21waWxlKCkKICAgICBtX3NwZWN1bGF0aXZlLT5jcmVhdGVPU1JFbnRyaWVzKCk7
CiAgICAgc2V0RW5kT2ZDb2RlKCk7CiAKLSAgICBhdXRvIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPExpbmtCdWZmZXI+KCp2bSgpLCAqdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0
aW9uQ2FuRmFpbCk7CisgICAgYXV0byBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5r
QnVmZmVyPigqdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAg
aWYgKGxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgbV9ncmFwaC5t
X3BsYW4uZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+KG1fZ3Jh
cGgubV9wbGFuKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDg4LDcgKzQ4OCw3IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAgICAgc2V0RW5kT2ZDb2RlKCk7CiAKICAgICAv
LyA9PT0gTGluayA9PT0KLSAgICBhdXRvIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExp
bmtCdWZmZXI+KCp2bSgpLCAqdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CisgICAgYXV0byBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPigq
dGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKGxpbmtC
dWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgbV9ncmFwaC5tX3BsYW4uZmlu
YWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+KG1fZ3JhcGgubV9wbGFu
KTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
YXp5SlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdMYXp5SlNWYWx1ZS5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksNyArMjI5
LDcgQEAgdm9pZCBMYXp5SlNWYWx1ZTo6ZW1pdChDQ2FsbEhlbHBlcnMmIGppdAogICAgIAogICAg
IGppdC5hZGRMaW5rVGFzaygKICAgICAgICAgW2NvZGVCbG9jaywgbGFiZWwsIHRoaXNWYWx1ZV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVhbFZhbHVl
ID0gdGhpc1ZhbHVlLmdldFZhbHVlKGxpbmtCdWZmZXIudm0oKSk7CisgICAgICAgICAgICBKU1Zh
bHVlIHJlYWxWYWx1ZSA9IHRoaXNWYWx1ZS5nZXRWYWx1ZSgqY29kZUJsb2NrLT52bSgpKTsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlYWxWYWx1ZS5pc0NlbGwoKSk7CiAKICAgICAgICAg
ICAgIGNvZGVCbG9jay0+YWRkQ29uc3RhbnQocmVhbFZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDIx
NDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgY29tcGlsZU9TUkV4aXQo
RXhlY1N0YXRlKiBleGVjKQogCiAgICAgICAgIGV4aXRDb21waWxlci5jb21waWxlRXhpdCgqdm0s
IGV4aXQsIG9wZXJhbmRzLCByZWNvdmVyeSk7CiAgICAgICAgIAotICAgICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp2bSwgaml0LCBjb2RlQmxvY2spOworICAgICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgY29kZUJsb2NrKTsKICAgICAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTEla
RV9DT0RFX0lGKAogICAgICAgICAgICAgc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9u
czo6dmVyYm9zZU9TUigpLAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTIsNyArMTAxMiw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgbV9qaXQuYWRk
UHRyKFRydXN0ZWRJbW0zMihyZXF1aXJlZEJ5dGVzKSwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpjYWxsZWVGcmFt
ZVNsb3QoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKS53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpLCBH
UFJJbmZvOjpyZWdUMCk7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6Y2FsbGVl
RnJhbWVTbG90KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkud2l0aE9mZnNldChUYWdPZmZzZXQpLCBH
UFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIG1faml0LmVtaXREdW1iVmlydHVhbENhbGwoaW5mbyk7
CisgICAgICAgIG1faml0LmVtaXREdW1iVmlydHVhbENhbGwoKm1faml0LnZtKCksIGluZm8pOwog
ICAgICAgICAKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIHNldFJlc3VsdEFu
ZFJlc2V0U3RhY2soKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTY2LDcgKzk2Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUK
ICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcGFydCB3aGVyZSB3ZSBtZWFudCB0byBtYWtlIGEgbm9y
bWFsIGNhbGwuIE9vcHMuCiAgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIocmVxdWly
ZWRCeXRlcyksIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIG1f
aml0LmxvYWQ2NChKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVTbG90KENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgbV9qaXQuZW1pdER1bWJWaXJ0dWFsQ2Fs
bChjYWxsTGlua0luZm8pOworICAgICAgICBtX2ppdC5lbWl0RHVtYlZpcnR1YWxDYWxsKCptX2pp
dC52bSgpLCBjYWxsTGlua0luZm8pOwogICAgICAgICAKICAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CiAgICAgICAgIHNldFJlc3VsdEFuZFJlc2V0U3RhY2soKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyAr
OTMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAgICAgCiAg
ICAgaml0Lmp1bXAoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmdm0tPm9zckV4aXRK
dW1wRGVzdGluYXRpb24pKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
aml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQpOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxs
LCBjb21waWxlT1NSRXhpdCk7CiAgICAgCkBAIC0xNDAsNyArMTQwLDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG9zckVudHJ5VGh1bmtHZW5lcgogCiAgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVn
VDEpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9U
SFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiREZHIE9TUiBlbnRy
eSB0aHVuayIpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21w
aWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBp
bGUuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsOCArMTQxLDcgQEAgdm9pZCBjb21w
aWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKTsKICAgICAgICAg
fSk7CiAKLSAgICBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPExpbmtCdWZmZXI+KAotICAgICAgICB2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBp
bGF0aW9uQ2FuRmFpbCk7CisgICAgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyID0g
c3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKICAgICBpZiAoc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5k
aWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgIHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0
cnVlOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExhenlTbG93UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMYXp5U2xvd1BhdGguY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDgg
KzU1LDYgQEAgdm9pZCBMYXp5U2xvd1BhdGg6OmdlbmVyYXRlKENvZGVCbG9jayogYwogewogICAg
IFJFTEVBU0VfQVNTRVJUKCFtX3N0dWIpOwogCi0gICAgVk0mIHZtID0gKmNvZGVCbG9jay0+dm0o
KTsKLQogICAgIENDYWxsSGVscGVycyBqaXQoY29kZUJsb2NrKTsKICAgICBHZW5lcmF0aW9uUGFy
YW1zIHBhcmFtczsKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbkp1bXBzOwpA
QCAtNjUsNyArNjMsNyBAQCB2b2lkIExhenlTbG93UGF0aDo6Z2VuZXJhdGUoQ29kZUJsb2NrKiBj
CiAKICAgICBtX2dlbmVyYXRvci0+cnVuKGppdCwgcGFyYW1zKTsKIAotICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQp
OworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25NdXN0U3VjY2VlZCk7CiAgICAgbGlua0J1ZmZlci5saW5rKHBhcmFtcy5kb25lSnVtcHMsIG1f
ZG9uZSk7CiAgICAgaWYgKG1fZXhjZXB0aW9uVGFyZ2V0KQogICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoZXhjZXB0aW9uSnVtcHMsIG1fZXhjZXB0aW9uVGFyZ2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDcgKzE2Miw3
IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoKTsKICAgICAgICAgICAgIG1haW5QYXRoSnVtcHMuYXBwZW5kKGppdC5qdW1wKCkp
OwogCi0gICAgICAgICAgICBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVy
Pih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgICAg
ICBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPihqaXQsIGNvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgICAgIGlmIChsaW5rQnVmZmVyLT5k
aWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZh
aWxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTg2LDcgKzE4Niw3IEBA
IHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1
ZSgpOwogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbWFpblBhdGhKdW1wID0gaml0Lmp1bXAo
KTsKICAgICAgICAgCi0gICAgICAgIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtC
dWZmZXI+KHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAg
ICAgbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4oaml0LCBjb2RlQmxv
Y2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgICAgIGlmIChsaW5rQnVmZmVyLT5kaWRG
YWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgICAgICBzdGF0ZS5hbGxvY2F0aW9uRmFpbGVkID0g
dHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTk4MSw2ICs1OTgxLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSBjb2RlT3JpZ2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCk7CiAgICAgICAgIFN0YXRlKiBz
dGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAgICBWTSogdm0gPSAmdGhpcy0+dm0oKTsKICAgICAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAg
ICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGpp
dCk7CkBAIC02MDE5LDcgKzYwMjAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzaygKICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlu
a0NhbGwgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIudm0oKS5nZXRD
VElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0
aW9uUHRyKGxpbmtDYWxsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKApAQCAtNjI3OCw2ICs2Mjc5
LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBjb2RlT3Jp
Z2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCk7CiAgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0
bFN0YXRlOworICAgICAgICBWTSogdm0gPSAmdGhpcy0+dm0oKTsKICAgICAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKAogICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CkBAIC02MzI5
LDcgKzYzMzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygK
ICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlua0NhbGwgPQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIudm0oKS5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtD
YWxsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKApAQCAtNjQwMyw2ICs2NDA1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgCiAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNvZGVPcmlnaW5E
ZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsKICAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3Rh
dGU7CisgICAgICAgIFZNKiB2bSA9ICZ0aGlzLT52bSgpOwogICAgICAgICBwYXRjaHBvaW50LT5z
ZXRHZW5lcmF0b3IoCiAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKQEAgLTY0NTYsNyAr
NjQ1OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYXV0byBjYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrID0gWyZdICh2b2lkKiBjYWxsZWUpIHsKICAgICAgICAgICAgICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxlZSksIEdQUkluZm86Om5vblByZXNl
cnZlZE5vbkFyZ3VtZW50R1BSKTsKICAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5m
bzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOwotICAgICAgICAgICAgICAgICAgICBleGNl
cHRpb25zLT5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjayhzdGF0ZS0+dm0oKSwgQXNzZW1i
bHlIZWxwZXJzOjpOb3JtYWxFeGNlcHRpb25DaGVjaywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1w
V2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0
RXhjZXB0aW9uQ2hlY2soKnZtLCBBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNr
LCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOwogICAgICAgICAgICAgICAgIH07CiAK
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOwpAQCAtNjU4
Miw3ICs2NTg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2so
CiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAg
ICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1YihsaW5r
Q2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5r
Q2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKQEAg
LTY2NzIsNiArNjY3NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCk7CiAgICAgICAg
IFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAgICBWTSogdm0gPSAmdGhpcy0+dm0o
KTsKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgICAgICAgWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CkBAIC02NzYzLDcgKzY3NjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGF1dG8gY2FsbFdpdGhFeGNlcHRpb25DaGVjayA9IFsmXSAodm9pZCogY2FsbGVlKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihj
YWxsZWUpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CiAgICAgICAgICAg
ICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsK
LSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9u
Q2hlY2soc3RhdGUtPnZtKCksIEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ss
IEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgIGV4
Y2VwdGlvbnMtPmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCp2bSwgQXNzZW1ibHlIZWxw
ZXJzOjpOb3JtYWxFeGNlcHRpb25DaGVjaywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lkdGgp
KTsKICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb3JpZ2lu
YWxTdGFja0hlaWdodCA9IHBhcmFtcy5wcm9jKCkuZnJhbWVTaXplKCk7CkBAIC02Nzc5LDcgKzY3
ODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKIAogICAgICAgICAgICAg
ICAgICAgICAvLyBlbWl0U2V0dXBWYXJhcmdzRnJhbWVGYXN0Q2FzZSBtb2RpZmllcyB0aGUgc3Rh
Y2sgcG9pbnRlciBpZiBpdCBzdWNjZWVkcy4KLSAgICAgICAgICAgICAgICAgICAgZW1pdFNldHVw
VmFyYXJnc0ZyYW1lRmFzdENhc2Uoc3RhdGUtPnZtKCksIGppdCwgc2NyYXRjaEdQUjIsIHNjcmF0
Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIGlubGluZUNhbGxGcmFtZSwgZGF0YS0+
Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdFNl
dHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UoKnZtLCBqaXQsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BS
MSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBpbmxpbmVDYWxsRnJhbWUsIGRhdGEtPmZpcnN0
VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CiAKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOwogICAgICAgICAgICAgICAgICAgICBzbG93Q2Fz
ZS5saW5rKCZqaXQpOwpAQCAtNjg2MSw3ICs2ODY1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRv
cikuY29kZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dD
YWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0Q2FsbExvY2F0aW9ucygKQEAgLTY5MjIsOCArNjkyNiw5IEBAIHByaXZhdGU6CiAgICAgICAg
IAogICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luRGVzY3JpcHRpb25P
ZkNhbGxTaXRlKCk7CiAgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Ci0gICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgWz0sICZ2bV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKICAgICAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBzdGF0ZS0+
aml0Q29kZS0+Y29tbW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoY29kZU9yaWdpbik7CiAgICAg
ICAgICAgICAgICAgCkBAIC02OTU2LDcgKzY5NjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIocmVxdWlyZWRCeXRlcyksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3Qo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAg
IGppdC5lbWl0RHVtYlZpcnR1YWxDYWxsKGNhbGxMaW5rSW5mbyk7CisgICAgICAgICAgICAgICAg
aml0LmVtaXREdW1iVmlydHVhbENhbGwodm0sIGNhbGxMaW5rSW5mbyk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgICAgIGpp
dC5hZGRQdHIoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21w
aWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5MSw3ICs0
OTEsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICByZWlmeUlubGluZWRDYWxsRnJh
bWVzKGppdCwgZXhpdCk7CiAgICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KCp2bSwgaml0LCBleGl0
KTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBjb2RlQmxvY2sp
OworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBjb2RlQmxvY2spOwogICAgIGV4aXQu
bV9jb2RlID0gRklOQUxJWkVfQ09ERV9JRigKICAgICAgICAgc2hvdWxkRHVtcERpc2Fzc2VtYmx5
KCkgfHwgT3B0aW9uczo6dmVyYm9zZU9TUigpIHx8IE9wdGlvbnM6OnZlcmJvc2VGVExPU1JFeGl0
KCksCiAgICAgICAgIHBhdGNoQnVmZmVyLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0SGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXRIYW5kbGUuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NCwxMyArNDQsMTQgQEAgdm9pZCBPU1JFeGl0SGFuZGxlOjplbWl0RXhpdFRodW5rKFN0YXRl
JgogICAgIGppdC5wdXNoVG9TYXZlSW1tZWRpYXRlV2l0aG91dFRvdWNoaW5nUmVnaXN0ZXJzKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGluZGV4KSk7CiAgICAgQ0NhbGxIZWxwZXJzOjpQYXRj
aGFibGVKdW1wIGp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIFJlZlB0cjxPU1JFeGl0
SGFuZGxlPiBzZWxmID0gdGhpczsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwogICAgIGppdC5h
ZGRMaW5rVGFzaygKLSAgICAgICAgW3NlbGYsIGp1bXAsIG15TGFiZWwsIGNvbXBpbGF0aW9uXSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICBbc2VsZiwganVtcCwgbXlMYWJlbCwg
Y29tcGlsYXRpb24sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAg
IHNlbGYtPmV4aXQubV9wYXRjaGFibGVKdW1wID0gQ29kZUxvY2F0aW9uSnVtcChsaW5rQnVmZmVy
LmxvY2F0aW9uT2YoanVtcCkpOwogCiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCiAgICAg
ICAgICAgICAgICAganVtcC5tX2p1bXAsCi0gICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwobGlua0J1ZmZlci52bSgpLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVy
YXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0
Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICAg
ICAgICAgIGlmIChjb21waWxhdGlvbikKICAgICAgICAgICAgICAgICBjb21waWxhdGlvbi0+YWRk
T1NSRXhpdFNpdGUoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobXlMYWJlbCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSB9KTsKICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFNsb3dQYXRoQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
OCwxNiArMTE4LDE0IEBAIFNsb3dQYXRoQ2FsbEtleSBTbG93UGF0aENhbGxDb250ZXh0OjprZXkK
ICAgICByZXR1cm4gU2xvd1BhdGhDYWxsS2V5KG1fdGh1bmtTYXZlU2V0LCBjYWxsVGFyZ2V0LCBt
X2FyZ3VtZW50UmVnaXN0ZXJzLCBtX29mZnNldCk7CiB9CiAKLVNsb3dQYXRoQ2FsbCBTbG93UGF0
aENhbGxDb250ZXh0OjptYWtlQ2FsbCh2b2lkKiBjYWxsVGFyZ2V0KQorU2xvd1BhdGhDYWxsIFNs
b3dQYXRoQ2FsbENvbnRleHQ6Om1ha2VDYWxsKFZNJiB2bSwgdm9pZCogY2FsbFRhcmdldCkKIHsK
ICAgICBTbG93UGF0aENhbGwgcmVzdWx0ID0gU2xvd1BhdGhDYWxsKG1faml0LmNhbGwoKSwga2V5
V2l0aFRhcmdldChjYWxsVGFyZ2V0KSk7CiAKICAgICBtX2ppdC5hZGRMaW5rVGFzaygKLSAgICAg
ICAgW3Jlc3VsdF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIFZNJiB2
bSA9IGxpbmtCdWZmZXIudm0oKTsKLQorICAgICAgICBbcmVzdWx0LCAmdm1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGh1bmsg
PQotICAgICAgICAgICAgICAgIHZtLmZ0bFRodW5rcy0+Z2V0U2xvd1BhdGhDYWxsVGh1bmsodm0s
IHJlc3VsdC5rZXkoKSk7CisgICAgICAgICAgICAgICAgdm0uZnRsVGh1bmtzLT5nZXRTbG93UGF0
aENhbGxUaHVuayhyZXN1bHQua2V5KCkpOwogCiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
cmVzdWx0LmNhbGwoKSwgQ29kZUxvY2F0aW9uTGFiZWwodGh1bmsuY29kZSgpKSk7CiAgICAgICAg
IH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5o
CShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQ
YXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIAogICAg
IC8vIE5PVEU6IFRoZSBjYWxsIHRoYXQgdGhpcyByZXR1cm5zIGlzIGFscmVhZHkgZ29pbmcgdG8g
YmUgbGlua2VkIGJ5IHRoZSBKSVQgdXNpbmcgYWRkTGlua1Rhc2soKSwKICAgICAvLyBzbyB0aGVy
ZSBpcyBubyBuZWVkIGZvciB5b3UgdG8gbGluayBpdCB5b3Vyc2VsZi4KLSAgICBTbG93UGF0aENh
bGwgbWFrZUNhbGwodm9pZCogY2FsbFRhcmdldCk7CisgICAgU2xvd1BhdGhDYWxsIG1ha2VDYWxs
KFZNJiwgdm9pZCogY2FsbFRhcmdldCk7CiAKIHByaXZhdGU6CiAgICAgU2xvd1BhdGhDYWxsS2V5
IGtleVdpdGhUYXJnZXQodm9pZCogY2FsbFRhcmdldCkgY29uc3Q7CkBAIC04NCw3ICs4NCw3IEBA
IFNsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIHsKICAgICAgICAgU2xvd1BhdGhDYWxs
Q29udGV4dCBjb250ZXh0KHVzZWRSZWdpc3RlcnMsIGppdCwgc2l6ZW9mLi4uKEFyZ3VtZW50VHlw
ZXMpICsgMSwgcmVzdWx0R1BSKTsKICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmd1bWVudHMuLi4pOwotICAgICAgICBjYWxsID0gY29udGV4dC5tYWtlQ2FsbChmdW5j
dGlvbi52YWx1ZSgpKTsKKyAgICAgICAgY2FsbCA9IGNvbnRleHQubWFrZUNhbGwodm0sIGZ1bmN0
aW9uLnZhbHVlKCkpOwogICAgIH0KICAgICBpZiAoZXhjZXB0aW9uVGFyZ2V0KQogICAgICAgICBl
eGNlcHRpb25UYXJnZXQtPmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKHZtKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2
LDcgKzY2LDcgQEAgcHVibGljOgogICAgIH5TdGF0ZSgpOwogCiAgICAgVk0mIHZtKCkgeyByZXR1
cm4gZ3JhcGgubV92bTsgfQotICAgIAorCiAgICAgLy8gTm9uZSBvZiB0aGVzZSB0aGluZ3MgaXMg
b3duZWQgYnkgU3RhdGUuIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZgogICAgIC8vIEZUTCBw
aGFzZXMgdG8gcHJvcGVybHkgbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgdGhlIG1vZHVsZSBhbmQg
ZnVuY3Rpb24uCiAgICAgREZHOjpHcmFwaCYgZ3JhcGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExUaHVua3MuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcs
NyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyaWNHZW5lCiAKICAgICBqaXQu
cmV0KCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFM
X1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2FsbCwgZ2VuZXJhdGlvbkZ1bmN0
aW9uKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCIlcyIsIG5hbWUp
KTsKIH0KQEAgLTE2NCw3ICsxNjQsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3RlckNsb2JiZXJDaGVj
ayhBc3NlbWJsCiAgICAgfQogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxs
VGh1bmtHZW5lcmF0b3IoVk0mIHZtLCBjb25zdCBTbG93UGF0aENhbGxLZXkmIGtleSkKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcihjb25zdCBTbG93UGF0
aENhbGxLZXkmIGtleSkKIHsKICAgICBBc3NlbWJseUhlbHBlcnMgaml0KG51bGxwdHIpOwogICAg
IApAQCAtMjIyLDcgKzIyMiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxU
aHVua0cKICAgICAKICAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KHZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlv
blB0cihrZXkuY2FsbFRhcmdldCgpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsICgiRlRMIHNsb3cgcGF0aCBjYWxsIHRodW5rIGZvciAlcyIsIHRvQ1N0cmluZyhrZXkp
LmRhdGEoKSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCShy
ZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBGVEwgewogCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSopOwog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRv
cihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9y
KFZNJiwgY29uc3QgU2xvd1BhdGhDYWxsS2V5Jik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xv
d1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IoY29uc3QgU2xvd1BhdGhDYWxsS2V5Jik7CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEtleVR5cGVBcmd1bWVudD4KIHN0cnVjdCBUaHVua01hcCB7CkBAIC01NCwx
MyArNTQsMTMgQEAgc3RydWN0IFRodW5rTWFwIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlw
ZSwgdHlwZW5hbWUgR2VuZXJhdG9yVHlwZT4KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0
ZUlmTmVjZXNzYXJ5KAotICAgIFZNJiB2bSwgTWFwVHlwZSYgbWFwLCBjb25zdCB0eXBlbmFtZSBN
YXBUeXBlOjpLZXlUeXBlJiBrZXksIEdlbmVyYXRvclR5cGUgZ2VuZXJhdG9yKQorICAgIE1hcFR5
cGUmIG1hcCwgY29uc3QgdHlwZW5hbWUgTWFwVHlwZTo6S2V5VHlwZSYga2V5LCBHZW5lcmF0b3JU
eXBlIGdlbmVyYXRvcikKIHsKICAgICB0eXBlbmFtZSBNYXBUeXBlOjpUb1RodW5rTWFwOjppdGVy
YXRvciBpdGVyID0gbWFwLm1fdG9UaHVuay5maW5kKGtleSk7CiAgICAgaWYgKGl0ZXIgIT0gbWFw
Lm1fdG9UaHVuay5lbmQoKSkKICAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogICAgIAotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiByZXN1bHQgPSBnZW5lcmF0b3Iodm0sIGtleSk7CisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJlc3VsdCA9IGdlbmVyYXRvcihrZXkpOwogICAgIG1hcC5t
X3RvVGh1bmsuYWRkKGtleSwgcmVzdWx0KTsKICAgICBtYXAubV9mcm9tVGh1bmsuYWRkKHJlc3Vs
dC5jb2RlKCksIGtleSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTc2LDEwICs3NiwxMCBAQCB0
eXBlbmFtZSBNYXBUeXBlOjpLZXlUeXBlIGtleUZvclRodW5rKE1hCiAKIGNsYXNzIFRodW5rcyB7
CiBwdWJsaWM6Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdldFNsb3dQYXRoQ2FsbFRodW5r
KFZNJiB2bSwgY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpCisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGdldFNsb3dQYXRoQ2FsbFRodW5rKGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRlSWZOZWNlc3NhcnkoCi0gICAgICAgICAgICB2
bSwgbV9zbG93UGF0aENhbGxUaHVua3MsIGtleSwgc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3Ip
OworICAgICAgICAgICAgbV9zbG93UGF0aENhbGxUaHVua3MsIGtleSwgc2xvd1BhdGhDYWxsVGh1
bmtHZW5lcmF0b3IpOwogICAgIH0KICAgICAKICAgICBTbG93UGF0aENhbGxLZXkga2V5Rm9yU2xv
d1BhdGhDYWxsVGh1bmsoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHB0cikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIxNDU0
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjI3LDE0ICs2MjcsMTQgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJl
c3RvcmVDYWxsZWVTYXZlcwogI2VuZGlmCiB9CiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0
RHVtYlZpcnR1YWxDYWxsKENhbGxMaW5rSW5mbyogaW5mbykKK3ZvaWQgQXNzZW1ibHlIZWxwZXJz
OjplbWl0RHVtYlZpcnR1YWxDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewogICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2Fs
bCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soCi0gICAgICAgIFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1
YWxUaHVuayA9IHZpcnR1YWxUaHVua0ZvcigmbGlua0J1ZmZlci52bSgpLCAqaW5mbyk7Ci0gICAg
ICAgICAgICBpbmZvLT5zZXRTbG93U3R1YihjcmVhdGVKSVRTdHViUm91dGluZSh2aXJ0dWFsVGh1
bmssIGxpbmtCdWZmZXIudm0oKSwgbnVsbHB0ciwgdHJ1ZSkpOworICAgICAgICBbPSwgJnZtXSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHZpcnR1YWxUaHVuayA9IHZpcnR1YWxUaHVua0Zvcigmdm0sICppbmZvKTsKKyAgICAgICAg
ICAgIGluZm8tPnNldFNsb3dTdHViKGNyZWF0ZUpJVFN0dWJSb3V0aW5lKHZpcnR1YWxUaHVuaywg
dm0sIG51bGxwdHIsIHRydWUpKTsKICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBD
b2RlTG9jYXRpb25MYWJlbCh2aXJ0dWFsVGh1bmsuY29kZSgpKSk7CiAgICAgICAgIH0pOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZp
c2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDA5LDcgKzE0MDksNyBAQCBwdWJsaWM6CiAgICAgICAg
IGZ1bmN0b3IoVHlwZW9mVHlwZTo6VW5kZWZpbmVkLCB0cnVlKTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBlbWl0RHVtYlZpcnR1YWxDYWxsKENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1pdER1
bWJWaXJ0dWFsQ2FsbChWTSYsIENhbGxMaW5rSW5mbyopOwogICAgIAogICAgIFZlY3RvcjxCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsMTUgKzMxMSwyNSBA
QCBwcml2YXRlOgogfTsKIAogc3RhdGljIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciog
YWxsb2NhdG9yOworc3RhdGljIEV4ZWN1dGFibGVBbGxvY2F0b3IqIGV4ZWN1dGFibGVBbGxvY2F0
b3I7CiAKIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcigpCiB7
CiAgICAgQVNTRVJUKCFhbGxvY2F0b3IpOwogICAgIGFsbG9jYXRvciA9IG5ldyBGaXhlZFZNUG9v
bEV4ZWN1dGFibGVBbGxvY2F0b3IoKTsKICAgICBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0
b3IoYWxsb2NhdG9yKTsKKworICAgIGV4ZWN1dGFibGVBbGxvY2F0b3IgPSBuZXcgRXhlY3V0YWJs
ZUFsbG9jYXRvcjsKK30KKworRXhlY3V0YWJsZUFsbG9jYXRvciYgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6c2luZ2xldG9uKCkKK3sKKyAgICBBU1NFUlQoYWxsb2NhdG9yKTsKKyAgICBBU1NFUlQoZXhl
Y3V0YWJsZUFsbG9jYXRvcik7CisgICAgcmV0dXJuICpleGVjdXRhYmxlQWxsb2NhdG9yOwogfQog
Ci1FeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKFZNJikKK0V4ZWN1dGFi
bGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IoKQogewogICAgIEFTU0VSVChhbGxvY2F0
b3IpOwogfQpAQCAtMzYyLDcgKzM3Miw3IEBAIGRvdWJsZSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpt
ZW1vcnlQcmVzc3UKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8RXhlY3V0YWJsZU1l
bW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoVk0mLCBzaXplX3Qgc2l6
ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCitS
ZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2Nh
dGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQogewogICAgIGlmIChPcHRpb25zOjpsb2dFeGVjdXRhYmxlQWxsb2NhdGlvbigp
KSB7CiAgICAgICAgIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3Mgc3RhdHMgPSBhbGxvY2F0b3It
PmN1cnJlbnRTdGF0aXN0aWNzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDggKzU1LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFZNOwotCiBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgaml0QWxsb2NhdGlvbkdyYW51bGUgPSAzMjsKIAogdHlwZWRlZiBXVEY6
Ok1ldGFBbGxvY2F0b3JIYW5kbGUgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZTsKQEAgLTExNyw5ICsx
MTUsNyBAQCBjbGFzcyBFeGVjdXRhYmxlQWxsb2NhdG9yIHsKICAgICBlbnVtIFByb3RlY3Rpb25T
ZXR0aW5nIHsgV3JpdGFibGUsIEV4ZWN1dGFibGUgfTsKIAogcHVibGljOgotICAgIEV4ZWN1dGFi
bGVBbGxvY2F0b3IoVk0mKTsKLSAgICB+RXhlY3V0YWJsZUFsbG9jYXRvcigpOwotICAgIAorICAg
IHN0YXRpYyBFeGVjdXRhYmxlQWxsb2NhdG9yJiBzaW5nbGV0b24oKTsKICAgICBzdGF0aWMgdm9p
ZCBpbml0aWFsaXplQWxsb2NhdG9yKCk7CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKQEAg
LTEzNCwxMyArMTMwLDE3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkdW1wUHJvZmlsZSgp
IHsgfQogI2VuZGlmCiAKLSAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2Nh
dGUoVk0mLCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlv
bkVmZm9ydCk7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNp
emVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsK
IAogICAgIGJvb2wgaXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoY29uc3QgQWJzdHJhY3RMb2NrZXIm
LCB2b2lkKiBhZGRyZXNzKTsKIAogICAgIHN0YXRpYyBzaXplX3QgY29tbWl0dGVkQnl0ZUNvdW50
KCk7CiAKICAgICBMb2NrJiBnZXRMb2NrKCkgY29uc3Q7Citwcml2YXRlOgorCisgICAgRXhlY3V0
YWJsZUFsbG9jYXRvcigpOworICAgIH5FeGVjdXRhYmxlQWxsb2NhdG9yKCk7CiB9OwogCiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkgJiYgRU5BQkxFKEFTU0VNQkxFUikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzE2LDcgKzcxNiw3IEBAIHZvaWQgSklU
Ojpjb21waWxlV2l0aG91dExpbmtpbmcoSklUQ29tcGkKICAgICAgICAgbV9kaXNhc3NlbWJsZXIt
PnNldEVuZE9mQ29kZShsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5h
cHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVP
cmlnaW4oKSk7CiAKLSAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZl
cj4obmV3IExpbmtCdWZmZXIoKm1fdm0sICp0aGlzLCBtX2NvZGVCbG9jaywgZWZmb3J0KSk7Cisg
ICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVm
ZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgZWZmb3J0KSk7CiAKICAgICBkb3VibGUgYWZ0ZXIgPSAw
OwogICAgIGlmIChVTkxJS0VMWShjb21wdXRlQ29tcGlsZVRpbWVzKCkpKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw3
ICsxMjEsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoSW5zdHJ1CiAgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNp
emVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdER1bWJWaXJ0dWFsQ2FsbChpbmZvKTsKKyAgICBl
bWl0RHVtYlZpcnR1YWxDYWxsKCp2bSgpLCBpbmZvKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE1hdGhJQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0
aElDLmgJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
TWF0aElDLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICB2b2lkIGdlbmVyYXRlT3V0T2ZMaW5lKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1bmN0aW9uUHRyIGNhbGxSZXBsYWNlbWVudCkK
KyAgICB2b2lkIGdlbmVyYXRlT3V0T2ZMaW5lKENvZGVCbG9jayogY29kZUJsb2NrLCBGdW5jdGlv
blB0ciBjYWxsUmVwbGFjZW1lbnQpCiAgICAgewogICAgICAgICBhdXRvIGxpbmtKdW1wVG9PdXRP
ZkxpbmVTbmlwcGV0ID0gWyZdICgpIHsKICAgICAgICAgICAgIENDYWxsSGVscGVycyBqaXQoY29k
ZUJsb2NrKTsKQEAgLTE2MCw3ICsxNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoZ2Vu
ZXJhdGVkSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgYXV0byBqdW1wVG9Eb25lID0gaml0Lmp1
bXAoKTsKIAotICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgaml0LCBj
b2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgICAgICAgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwog
ICAgICAgICAgICAgICAgIGlmICghbGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhnZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhKdW1wcywgc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoanVtcFRvRG9uZSwgZG9uZUxvY2F0aW9uKCkpOwpAQCAtMjAwLDcgKzIw
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBlbmRK
dW1wTGlzdC5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICAgICAgICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAg
ICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0
aW9uQ2FuRmFpbCk7CiAgICAgICAgICAgICBpZiAobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0
ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDYxLDcgKzEwNjEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVk
UHJvcGVyCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywgbV9j
b2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2Nr
KTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVs
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVy
bkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNz
VG9TbG93UGF0aCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRp
b25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVz
cyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJu
QWRkcmVzc1RvU2xvd1BhdGgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExOSw3ICsxMTE5LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwogICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlz
LCBtX2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2Rl
QmxvY2spOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9u
TGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3Mo
cmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFk
ZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVM
b2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5y
ZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzc1LDcg
KzIzNzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAgICAg
QVNTRVJUKGFyaXRoUHJvZmlsZSk7CiAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTQW5kUkhT
KG9wMSwgb3AyKTsKICAgICBhdXRvIG5vbk9wdGltaXplVmFyaWFudCA9IG9wZXJhdGlvblZhbHVl
QWRkUHJvZmlsZWROb09wdGltaXplOwotICAgIGFkZElDLT5nZW5lcmF0ZU91dE9mTGluZSgqdm0s
IGV4ZWMtPmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOworICAgIGFkZElDLT5nZW5l
cmF0ZU91dE9mTGluZShleGVjLT5jb2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsKIAog
I2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5kdW1wTWF0
aElDU3RhdHMoKTsKQEAgLTI0MDgsNyArMjQwOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVmEKICAgICBhdXRvIG5vbk9wdGltaXplVmFyaWFudCA9IG9wZXJhdGlv
blZhbHVlQWRkTm9PcHRpbWl6ZTsKICAgICBpZiAoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBhZGRJQy0+YXJpdGhQcm9maWxlKCkpCiAgICAgICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZUxI
U0FuZFJIUyhvcDEsIG9wMik7Ci0gICAgYWRkSUMtPmdlbmVyYXRlT3V0T2ZMaW5lKCp2bSwgZXhl
Yy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CisgICAgYWRkSUMtPmdlbmVyYXRl
T3V0T2ZMaW5lKGV4ZWMtPmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOwogCiAjaWYg
RU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgZXhlYy0+Y29kZUJsb2NrKCktPmR1bXBNYXRoSUNT
dGF0cygpOwpAQCAtMjQ4NSw3ICsyNDg1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25WYQogICAgIGF1dG8gbm9uT3B0aW1pemVWYXJpYW50ID0gb3BlcmF0aW9uVmFs
dWVNdWxOb09wdGltaXplOwogICAgIGlmIChBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG11
bElDLT5hcml0aFByb2ZpbGUoKSkKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTQW5k
UkhTKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDIpKTsKLSAgICBtdWxJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoKnZtLCBleGVjLT5jb2RlQmxvY2so
KSwgbm9uT3B0aW1pemVWYXJpYW50KTsKKyAgICBtdWxJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoZXhl
Yy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CiAKICNpZiBFTkFCTEUoTUFUSF9J
Q19TVEFUUykKICAgICBleGVjLT5jb2RlQmxvY2soKS0+ZHVtcE1hdGhJQ1N0YXRzKCk7CkBAIC0y
NTEyLDcgKzI1MTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZh
CiAgICAgQVNTRVJUKGFyaXRoUHJvZmlsZSk7CiAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhT
QW5kUkhTKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcDIpKTsKICAgICBhdXRvIG5vbk9wdGltaXplVmFyaWFudCA9IG9wZXJhdGlvblZhbHVlTXVs
UHJvZmlsZWROb09wdGltaXplOwotICAgIG11bElDLT5nZW5lcmF0ZU91dE9mTGluZSgqdm0sIGV4
ZWMtPmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOworICAgIG11bElDLT5nZW5lcmF0
ZU91dE9mTGluZShleGVjLT5jb2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsKIAogI2lm
IEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5kdW1wTWF0aElD
U3RhdHMoKTsKQEAgLTI1ODMsNyArMjU4Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQXIKICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG5lZ0lDLT5h
cml0aFByb2ZpbGUoKTsKICAgICBBU1NFUlQoYXJpdGhQcm9maWxlKTsKICAgICBhcml0aFByb2Zp
bGUtPm9ic2VydmVMSFMob3BlcmFuZCk7Ci0gICAgbmVnSUMtPmdlbmVyYXRlT3V0T2ZMaW5lKHZt
LCBleGVjLT5jb2RlQmxvY2soKSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCk7CisgICAg
bmVnSUMtPmdlbmVyYXRlT3V0T2ZMaW5lKGV4ZWMtPmNvZGVCbG9jaygpLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZVByb2ZpbGVkKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGV4ZWMt
PmNvZGVCbG9jaygpLT5kdW1wTWF0aElDU3RhdHMoKTsKQEAgLTI2MDcsNyArMjYwNyw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKIAogICAgIGlmIChBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG5lZ0lDLT5hcml0aFByb2ZpbGUoKSkKICAgICAgICAgYXJp
dGhQcm9maWxlLT5vYnNlcnZlTEhTKG9wZXJhbmQpOwotICAgIG5lZ0lDLT5nZW5lcmF0ZU91dE9m
TGluZSh2bSwgZXhlYy0+Y29kZUJsb2NrKCksIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKKyAgICBu
ZWdJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoZXhlYy0+Y29kZUJsb2NrKCksIG9wZXJhdGlvbkFyaXRo
TmVnYXRlKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGV4ZWMtPmNvZGVCbG9j
aygpLT5kdW1wTWF0aElDU3RhdHMoKTsKQEAgLTI2NzUsNyArMjY3NSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKICAgICBhdXRvIG5vbk9wdGltaXplVmFyaWFu
dCA9IG9wZXJhdGlvblZhbHVlU3ViTm9PcHRpbWl6ZTsKICAgICBpZiAoQXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSBzdWJJQy0+YXJpdGhQcm9maWxlKCkpCiAgICAgICAgIGFyaXRoUHJvZmls
ZS0+b2JzZXJ2ZUxIU0FuZFJIUyhKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkT3AyKSk7Ci0gICAgc3ViSUMtPmdlbmVyYXRlT3V0T2ZMaW5lKCp2bSwg
ZXhlYy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CisgICAgc3ViSUMtPmdlbmVy
YXRlT3V0T2ZMaW5lKGV4ZWMtPmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOwogCiAj
aWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgZXhlYy0+Y29kZUJsb2NrKCktPmR1bXBNYXRo
SUNTdGF0cygpOwpAQCAtMjcwMSw3ICsyNzAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25WYQogICAgIEFTU0VSVChhcml0aFByb2ZpbGUpOwogICAgIGFyaXRoUHJv
ZmlsZS0+b2JzZXJ2ZUxIU0FuZFJIUyhKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CiAgICAgYXV0byBub25PcHRpbWl6ZVZhcmlhbnQgPSBv
cGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkTm9PcHRpbWl6ZTsKLSAgICBzdWJJQy0+Z2VuZXJhdGVP
dXRPZkxpbmUoKnZtLCBleGVjLT5jb2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsKKyAg
ICBzdWJJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoZXhlYy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXpl
VmFyaWFudCk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBleGVjLT5jb2RlQmxv
Y2soKS0+ZHVtcE1hdGhJQ1N0YXRzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDcgQEAg
Y2xhc3MgU3RydWN0dXJlOwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CiBjbGFzcyBTeW1ib2w7
CiBjbGFzcyBTeW1ib2xUYWJsZTsKK2NsYXNzIFZNOwogY2xhc3MgV2F0Y2hwb2ludFNldDsKIAog
c3RydWN0IEJ5VmFsSW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc3LDcgKzE3Nyw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5
VmFsU3R1YkdlbmUKICAgICBqaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICAgICBq
aXQucmV0KCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xP
QkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJTdHJpbmcg
Z2V0X2J5X3ZhbCBzdHViIikpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg4LDcgKzg4LDcgQEAgSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2Vu
ZQogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogICAgIGppdC5yZXQoKTsK
ICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktf
SUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwog
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIlN0cmluZyBnZXRfYnlfdmFs
IHN0dWIiKSk7CiB9CiAKQEAgLTEzMzYsNyArMTMzNiw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5VmFsKEJ5VmFsSW4KICAgICAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywgbV9jb2RlQmxvY2spOworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKICAgICAKICAgICBw
YXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUo
KSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwog
ICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fz
c2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNz
LnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1Bh
dGgpKTsKQEAgLTEzNjIsNyArMTM2Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
VmFsV2l0aENhY2gKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbiA9IGVtaXRHZXRCeVZhbFdp
dGhDYWNoZWRJZChieVZhbEluZm8sIGN1cnJlbnRJbnN0cnVjdGlvbiwgcHJvcGVydHlOYW1lLCBm
YXN0RG9uZUNhc2UsIHNsb3dEb25lQ2FzZSwgc2xvd0Nhc2VzKTsKIAogICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqbV92bSwgKnRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2Fz
ZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4
ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlW
YWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmso
ZmFzdERvbmVDYXNlLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJ
bmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0RvbmVD
YXNlLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRU
eXBlSnVtcFRvTmV4dEhvdFBhdGgpKTsKQEAgLTE0MTksNyArMTQxOSw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICAKICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywgbV9jb2RlQmxv
Y2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFs
dWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkp
OwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNy
b0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRy
ZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xv
d1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1
bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CkBAIC0xNDUz
LDcgKzE0NTMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoCiAg
ICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4gPSBlbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoYnlW
YWxJbmZvLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHB1dEtpbmQsIHByb3BlcnR5TmFtZSwgZG9uZUNh
c2VzLCBzbG93Q2FzZXMpOwogCiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVC
bG9jay0+bV9sb2NrKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywg
bV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJs
b2NrKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwo
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJu
QWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NU
b1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lQ2FzZXMsIGJ5VmFsSW5mby0+
YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7
CiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSklUU3R1YlJvdXRpbmVT
ZXQ7CitjbGFzcyBWTTsKIAogLy8gVGhpcyBpcyBhIGJhc2UtY2xhc3MgZm9yIEpJVCBzdHViIHJv
dXRpbmVzLCBhbmQgYWxzbyB0aGUgY2xhc3MgeW91IHdhbnQKIC8vIHRvIGluc3RhbnRpYXRlIGRp
cmVjdGx5IGlmIHlvdSBoYXZlIGEgcm91dGluZSB0aGF0IGRvZXMgbm90IG5lZWQgYW55CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkxLDcgKzkxLDcgQEAgdm9pZCBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKgog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsKS5leGVj
dXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIGtleSA9IGtleS53aXRoQ2FsbFRhcmdldChuZXdD
YWxsZWVGdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgbmV3Q2FsbGVlRnVu
Y3Rpb24gPSBGdW5jdGlvblB0cigKLSAgICAgICAgICAgIHRodW5rcy5nZXRTbG93UGF0aENhbGxU
aHVuayh2bSwga2V5KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICB0
aHVua3MuZ2V0U2xvd1BhdGhDYWxsVGh1bmsoa2V5KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CiAgICAgfQogI2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQpCiAgICAgVU5VU0VEX1BBUkFNKGNv
ZGVCbG9jayk7CkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAog
ICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVn
VDQpOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBzbG93ID0gc3R1YkppdC5qdW1wKCk7CiAg
ICAgICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIodm0sIHN0dWJKaXQsIG93bmVyLCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoc3R1Ykpp
dCwgb3duZXIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKHBhdGNoQnVmZmVyLmRp
ZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgbGlua1ZpcnR1YWxGb3IoZXhlYywgY2FsbExp
bmtJbmZvKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TcGVjaWFsaXplZFRodW5rSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjYsNyArMTY2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgZmluYWxpemUoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxi
YWNrLCBjb25zdCBjaGFyKiB0aHVua0tpbmQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlzLCBHTE9CQUxfVEhVTktfSUQpOworICAgICAg
ICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lEKTsKICAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFiZWwo
ZmFsbGJhY2spKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxz
LnNpemUoKTsgaSsrKQogICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1tp
XS5maXJzdCwgbV9jYWxsc1tpXS5zZWNvbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Nyw3ICs3Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb20K
ICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICBqaXQuanVtcFRvRXhjZXB0
aW9uSGFuZGxlcigqdm0pOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJUaHJv
dyBleGNlcHRpb24gZnJvbSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsKIH0KIApAQCAtMTQyLDcg
KzE0Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXIKICAgICAK
ICAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2FsbCk7CiAgICAgCi0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMaW5rIGNhbGwgc2xvdyBwYXRoIHRodW5rIikp
OwogfQogCkBAIC0xNTQsNyArMTU0LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5
bW9ycGhpY0NhbAogICAgIAogICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtQ
b2x5bW9ycGhpY0NhbGwpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBq
aXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgi
TGluayBwb2x5bW9ycGhpYyBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsKIH0KIApAQCAtMjIzLDcg
KzIyMyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0KICAgICAK
ICAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25WaXJ0dWFsQ2FsbCk7CiAgICAgCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsCiAgICAgICAgICgiVmlydHVh
bCAlcyBzbG93IHBhdGggdGh1bmsiLApAQCAtMzgyLDcgKzM4Miw3IEBAIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKIAogICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5k
bGVyKCp2bSk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxf
VEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIm5hdGl2ZSAlcyVz
IHRyYW1wb2xpbmUiLCBlbnRyeVR5cGUgPT0gRW50ZXJWaWFKdW1wV2l0aFNhdmVkVGFncyA/ICJU
YWlsIFdpdGggU2F2ZWQgVGFncyAiIDogZW50cnlUeXBlID09IEVudGVyVmlhSnVtcFdpdGhvdXRT
YXZlZFRhZ3MgPyAiVGFpbCBXaXRob3V0IFNhdmVkIFRhZ3MgIiA6ICIiLCB0b0NTdHJpbmcoa2lu
ZCkuZGF0YSgpKSk7CiB9CiAKQEAgLTUyOSw3ICs1MjksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgYXJpdHlGaXh1cEdlbmVyYXRvCiAgICAgaml0LnJldCgpOwogI2VuZGlmCiAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoImZpeHVwIGFyaXR5IikpOwogfQogCkBAIC01MzksNyAr
NTM5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHVucmVhY2hhYmxlR2VuZXJhdAogCiAgICAg
aml0LmJyZWFrcG9pbnQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQs
IEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgidW5y
ZWFjaGFibGUgdGh1bmsiKSk7CiB9CiAKQEAgLTExMjcsNyArMTEyNyw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBib3VuZFRoaXNOb0FyZ3NGdW4KICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoKTsKICAgICBqaXQucmV0KCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2
bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCk7CiAgICAgbGlua0J1ZmZlci5saW5rKG5vQ29kZSwgQ29kZUxvY2F0
aW9uTGFiZWwodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3Mo
dm0pKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCiAgICAgICAgIGxpbmtCdWZmZXIsICgi
U3BlY2lhbGl6ZWQgdGh1bmsgZm9yIGJvdW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1l
bnRzIikpOwpAQCAtMTE2Nyw3ICsxMTY3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93
RXhjZXB0aW9uRnJvbQogICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOwog
ICAgIH07CiAKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVO
S19JRCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsK
ICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERSgKICAgICAgICAgbGlua0J1ZmZlciwgKCJUaHJvdyBleGNlcHRpb24g
ZnJvbSBXYXNtIikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1
bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRU
aHVua3MuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJhdGVUaHUKICAgICBqaXQubW92ZShKU0ludGVy
ZmFjZUpJVDo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHRhcmdldCkpLCBKU0lu
dGVyZmFjZUpJVDo6cmVnVDApOwogICAgIGppdC5qdW1wKEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7
CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsK
ICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMTEludCAlcyBwcm9sb2d1
ZSB0aHVuayIsIHRodW5rS2luZCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjE0NTQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0Miw3ICszNDIsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRh
a2VTYW1wbGUoY29uc3QgCiAKICAgICAgICAgTG9ja0hvbGRlciBtYWNoaW5lVGhyZWFkc0xvY2tl
cihtX3ZtLmhlYXAubWFjaGluZVRocmVhZHMoKS5nZXRMb2NrKCkpOwogICAgICAgICBMb2NrSG9s
ZGVyIGNvZGVCbG9ja1NldExvY2tlcihtX3ZtLmhlYXAuY29kZUJsb2NrU2V0KCkuZ2V0TG9jaygp
KTsKLSAgICAgICAgTG9ja0hvbGRlciBleGVjdXRhYmxlQWxsb2NhdG9yTG9ja2VyKG1fdm0uZXhl
Y3V0YWJsZUFsbG9jYXRvci5nZXRMb2NrKCkpOworICAgICAgICBMb2NrSG9sZGVyIGV4ZWN1dGFi
bGVBbGxvY2F0b3JMb2NrZXIoRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0TG9j
aygpKTsKIAogICAgICAgICBib29sIGRpZFN1c3BlbmQgPSBtX2pzY0V4ZWN1dGlvblRocmVhZC0+
c3VzcGVuZCgpOwogICAgICAgICBpZiAoZGlkU3VzcGVuZCkgewpAQCAtMzY0LDcgKzM2NCw3IEBA
IHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBsZShjb25zdCAKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIC8vIEZJWE1FOiBMZXRzIGhhdmUgYSB3YXkgb2YgZGV0ZWN0aW5nIHdoZW4g
d2UncmUgcGFyc2luZyBjb2RlLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1Mjc2MQotICAgICAgICAgICAgaWYgKG1fdm0uZXhlY3V0YWJs
ZUFsbG9jYXRvci5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShleGVjdXRhYmxlQWxsb2NhdG9yTG9j
a2VyLCBtYWNoaW5lUEMpKSB7CisgICAgICAgICAgICBpZiAoRXhlY3V0YWJsZUFsbG9jYXRvcjo6
c2luZ2xldG9uKCkuaXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoZXhlY3V0YWJsZUFsbG9jYXRvckxv
Y2tlciwgbWFjaGluZVBDKSkgewogICAgICAgICAgICAgICAgIGlmIChtX3ZtLmlzRXhlY3V0aW5n
SW5SZWdFeHBKSVQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlJ3JlIGV4ZWN1
dGluZyBhIHJlZ2V4cC4gTGV0cyBnYXRoZXIgbW9yZSBpbnRlcnN0aW5nIGRhdGEuCiAgICAgICAg
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTI3MjkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIx
NDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTY2LDcgKzE2Niw2IEBAIHN0YXRpYyBib29sIGVuYWJsZUFzc2VtYmxlcihFeGVj
dXRhYmxlQWwKIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICA6
IG1fYXBpTG9jayhhZG9wdFJlZihuZXcgSlNMb2NrKHRoaXMpKSkKICNpZiBFTkFCTEUoQVNTRU1C
TEVSKQotICAgICwgZXhlY3V0YWJsZUFsbG9jYXRvcigqdGhpcykKICNlbmRpZgogICAgICwgaGVh
cCh0aGlzLCBoZWFwVHlwZSkKICAgICAsIGF1eGlsaWFyeVNwYWNlKCJBdXhpbGlhcnkiLCBoZWFw
LCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpB
dXhpbGlhcnkpKQpAQCAtMTk4LDcgKzE5Nyw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFw
VHlwZSBoZWFwVHlwZSkKICAgICAsIG1fcnRUcmFjZUxpc3QobmV3IFJUVHJhY2VMaXN0KCkpCiAj
ZW5kaWYKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQotICAgICwgbV9jYW5Vc2VBc3NlbWJsZXIoZW5h
YmxlQXNzZW1ibGVyKGV4ZWN1dGFibGVBbGxvY2F0b3IpKQorICAgICwgbV9jYW5Vc2VBc3NlbWJs
ZXIoZW5hYmxlQXNzZW1ibGVyKEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpKSkKICNl
bmRpZgogI2lmIEVOQUJMRShKSVQpCiAgICAgLCBtX2NhblVzZUpJVChtX2NhblVzZUFzc2VtYmxl
ciAmJiBPcHRpb25zOjp1c2VKSVQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkod29ya2luZyBjb3B5KQpAQCAtMjg1LDE0ICsyODUsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxKU0xvY2s+IG1fYXBpTG9jazsKIAogcHVibGljOgotI2lmIEVOQUJMRShBU1NFTUJMRVIpCi0g
ICAgLy8gZXhlY3V0YWJsZUFsbG9jYXRvciBzaG91bGQgYmUgZGVzdHJ1Y3RlZCBhZnRlciB0aGUg
aGVhcCwgYXMgdGhlIGhlYXAgY2FuIGNhbGwgZXhlY3V0YWJsZUFsbG9jYXRvcgotICAgIC8vIGlu
IGl0cyBkZXN0cnVjdG9yLgotICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IgZXhlY3V0YWJsZUFsbG9j
YXRvcjsKLSNlbmRpZgotCi0gICAgLy8gVGhlIGhlYXAgc2hvdWxkIGJlIGp1c3QgYWZ0ZXIgZXhl
Y3V0YWJsZUFsbG9jYXRvciBhbmQgYmVmb3JlIG90aGVyIG1lbWJlcnMgdG8gZW5zdXJlIHRoYXQg
aXQncwotICAgIC8vIGRlc3RydWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJl
bmNlIGl0LgogICAgIEhlYXAgaGVhcDsKICAgICAKICAgICBTdWJzcGFjZSBhdXhpbGlhcnlTcGFj
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCShyZXZp
c2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDcgKzI1MCw3IEBAIHZvaWQgVk1UcmFwczo6dHJ5SW5z
dGFsbFRyYXBCcmVha3BvaW50cygKICAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNl
bmRlciB0cnkgYWdhaW4gbGF0ZXIuCiAKICAgICB7Ci0gICAgICAgIGF1dG8gYWxsb2NhdG9yID0g
dm0uZXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICAgICAgYXV0byYgYWxsb2NhdG9yID0gRXhlY3V0
YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCk7CiAgICAgICAgIGF1dG8gYWxsb2NhdG9yTG9ja2Vy
ID0gdHJ5SG9sZExvY2soYWxsb2NhdG9yLmdldExvY2soKSk7CiAgICAgICAgIGlmICghYWxsb2Nh
dG9yTG9ja2VyKQogICAgICAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0
cnkgYWdhaW4gbGF0ZXIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNw
ZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUlu
c3BlY3Rvci5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9WTUluc3BlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsOCBAQCBh
dXRvIFZNSW5zcGVjdG9yOjppc1ZhbGlkRXhlY3V0YWJsZU1lbW9yCiAjaWYgRU5BQkxFKEpJVCkK
ICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgYm9vbCBoYXNUaW1lb3V0ID0gZmFsc2U7Ci0g
ICAgaXRlcmF0ZShbJl0gKFZNJiB2bSkgLT4gRnVuY3RvclN0YXR1cyB7Ci0gICAgICAgIGF1dG8g
YWxsb2NhdG9yID0gdm0uZXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBpdGVyYXRlKFsmXSAoVk0m
KSAtPiBGdW5jdG9yU3RhdHVzIHsKKyAgICAgICAgYXV0byYgYWxsb2NhdG9yID0gRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6c2luZ2xldG9uKCk7CiAgICAgICAgIGF1dG8mIGxvY2sgPSBhbGxvY2F0b3Iu
Z2V0TG9jaygpOwogCiAgICAgICAgIGJvb2wgaXNTYWZlVG9Mb2NrID0gZW5zdXJlSXNTYWZlVG9M
b2NrKGxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5n
LmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgICAgICAgICAgICAgIEFTU0VSVCgh
IXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CiAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgICAg
ICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRocm93QmFkSTY0KTsKICAgICAgICAgICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQg
aW52YWxpZCBpNjQgdXNlIGluIGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCkpOwogICAgICAgICB9
CkBAIC00MTIsNyArNDEyLDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9K
cyhWTQogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0
aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0
aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpOwogICAgIENvZGVM
b2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRv
Q2hlY2spKTsKQEAgLTQyNiw3ICs0MjYsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHdhc21Ub0pzKFZNCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiV2Vi
QXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1
cmVEZXNjcmlwdGlvbi5hc2NpaSgpLmRhdGEoKSkpOwogfQogCi1zdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHdhc21Ub1dhc20oVk0qIHZtLCB1bnNpZ25lZCBpbXBvcnRJbmRleCkKK3N0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCkK
IHsKICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdp
c3RlckluZm86OmdldCgpOwogICAgIEpJVCBqaXQ7CkBAIC00NjIsNyArNDYyLDcgQEAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9XYXNtKAogICAgIGppdC5sb2FkUHRyKEpJVDo6
QWRkcmVzcyhzY3JhdGNoLCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpvZmZzZXRPZldhc21FbnRyeVBv
aW50Q29kZSgpKSwgc2NyYXRjaCk7CiAgICAgaml0Lmp1bXAoc2NyYXRjaCk7CiAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5XZWJBc3NlbWJseSBpbXBvcnRb
JWldIiwgaW1wb3J0SW5kZXgpKTsKIH0KIApAQCAtNDcwLDcgKzQ3MCw3IEBAIFdhc21FeGl0U3R1
YnMgZXhpdFN0dWJHZW5lcmF0b3IoVk0qIHZtLCAKIHsKICAgICBXYXNtRXhpdFN0dWJzIHN0dWJz
OwogICAgIHN0dWJzLndhc21Ub0pzID0gd2FzbVRvSnModm0sIGNhbGxMaW5rSW5mb3MsIHNpZ25h
dHVyZUluZGV4LCBpbXBvcnRJbmRleCk7Ci0gICAgc3R1YnMud2FzbVRvV2FzbSA9IHdhc21Ub1dh
c20odm0sIGltcG9ydEluZGV4KTsKKyAgICBzdHVicy53YXNtVG9XYXNtID0gd2FzbVRvV2FzbShp
bXBvcnRJbmRleCk7CiAgICAgcmV0dXJuIHN0dWJzOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NywxMyAr
MjY3LDEzIEBAIHZvaWQgUGxhbjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXIKICAgICAg
ICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3Jt
YXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwog
ICAgICAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmVEZXNjcmlwdGlvbiA9IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KS0+dG9TdHJpbmcoKTsKICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlciht
X3ZtLCAqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CisgICAgICAgICAgICAg
ICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwg
bnVsbHB0cik7CiAgICAgICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1
bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbiA9CiAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPihGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsICgiV2ViQXNzZW1ibHkgZnVuY3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRleCwg
c2lnbmF0dXJlRGVzY3JpcHRpb24uYXNjaWkoKS5kYXRhKCkpKSwgV1RGTW92ZShjb250ZXh0Lndh
c21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKG1fdm0s
ICpjb250ZXh0LmpzRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAg
IExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC5qc0VudHJ5cG9pbnRKSVQsIG51bGxwdHIp
OwogICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY29udGV4dC5qc0VudHJ5cG9p
bnRUb1dhc21FbnRyeXBvaW50Q2FsbCwgRnVuY3Rpb25QdHIobV93YXNtSW50ZXJuYWxGdW5jdGlv
bnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpOwogCiAgICAgICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFs
RnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5qc1RvV2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24g
PQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHJldmlzaW9uIDIx
NDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjQ2LDcgKzI2NDYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAg
IHZvaWQgY29tcGlsZShWTSogdm0sIFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCkKKyAgICB2b2lk
IGNvbXBpbGUoWWFyckNvZGVCbG9jayYgaml0T2JqZWN0KQogICAgIHsKICAgICAgICAgZ2VuZXJh
dGVFbnRlcigpOwogCkBAIC0yNjc0LDcgKzI2NzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGdlbmVy
YXRlKCk7CiAgICAgICAgIGJhY2t0cmFjaygpOwogCi0gICAgICAgIExpbmtCdWZmZXIgbGlua0J1
ZmZlcigqdm0sICp0aGlzLCBSRUdFWFBfQ09ERV9JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsK
KyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp0aGlzLCBSRUdFWFBfQ09ERV9JRCwgSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxs
b2NhdGUoKSkgewogICAgICAgICAgICAgaml0T2JqZWN0LnNldEZhbGxCYWNrKHRydWUpOwogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMjcyOSw5ICsyNzI5LDkgQEAgcHJpdmF0ZToKIHZvaWQgaml0
Q29tcGlsZShZYXJyUGF0dGVybiYgcGF0dGVybiwgWWFyckNoYXJTaXplIGNoYXJTaXplLCBWTSog
dm0sIFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCwgWWFyckpJVENvbXBpbGVNb2RlIG1vZGUpCiB7
CiAgICAgaWYgKG1vZGUgPT0gTWF0Y2hPbmx5KQotICAgICAgICBZYXJyR2VuZXJhdG9yPE1hdGNo
T25seT4odm0sIHBhdHRlcm4sIGNoYXJTaXplKS5jb21waWxlKHZtLCBqaXRPYmplY3QpOworICAg
ICAgICBZYXJyR2VuZXJhdG9yPE1hdGNoT25seT4odm0sIHBhdHRlcm4sIGNoYXJTaXplKS5jb21w
aWxlKGppdE9iamVjdCk7CiAgICAgZWxzZQotICAgICAgICBZYXJyR2VuZXJhdG9yPEluY2x1ZGVT
dWJwYXR0ZXJucz4odm0sIHBhdHRlcm4sIGNoYXJTaXplKS5jb21waWxlKHZtLCBqaXRPYmplY3Qp
OworICAgICAgICBZYXJyR2VuZXJhdG9yPEluY2x1ZGVTdWJwYXR0ZXJucz4odm0sIHBhdHRlcm4s
IGNoYXJTaXplKS5jb21waWxlKGppdE9iamVjdCk7CiB9CiAKIH19CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1Niw3ICsyNTYsNyBAQCBzdHJ1Y3QgQmFja3RyYWNraW5nTGV2ZWwgewogY2xhc3MgU2Vs
ZWN0b3JDb2RlR2VuZXJhdG9yIHsKIHB1YmxpYzoKICAgICBTZWxlY3RvckNvZGVHZW5lcmF0b3Io
Y29uc3QgQ1NTU2VsZWN0b3IqLCBTZWxlY3RvckNvbnRleHQpOwotICAgIFNlbGVjdG9yQ29tcGls
YXRpb25TdGF0dXMgY29tcGlsZShKU0M6OlZNKiwgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYm
KTsKKyAgICBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIGNvbXBpbGUoSlNDOjpNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYmKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyOwpAQCAtMzk1LDcgKzM5NSw3IEBAIFNlbGVjdG9yQ29t
cGlsYXRpb25TdGF0dXMgY29tcGlsZVNlbGVjdG8KICAgICBpZiAoIXZtLT5jYW5Vc2VKSVQoKSkK
ICAgICAgICAgcmV0dXJuIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OkNhbm5vdENvbXBpbGU7
CiAgICAgU2VsZWN0b3JDb2RlR2VuZXJhdG9yIGNvZGVHZW5lcmF0b3IobGFzdFNlbGVjdG9yLCBz
ZWxlY3RvckNvbnRleHQpOwotICAgIHJldHVybiBjb2RlR2VuZXJhdG9yLmNvbXBpbGUodm0sIGNv
ZGVSZWYpOworICAgIHJldHVybiBjb2RlR2VuZXJhdG9yLmNvbXBpbGUoY29kZVJlZik7CiB9CiAK
IHN0YXRpYyBpbmxpbmUgRnJhZ21lbnRSZWxhdGlvbiBmcmFnbWVudFJlbGF0aW9uRm9yU2VsZWN0
b3JSZWxhdGlvbihDU1NTZWxlY3Rvcjo6UmVsYXRpb25UeXBlIHJlbGF0aW9uKQpAQCAtMTIwOCw3
ICsxMjA4LDcgQEAgdm9pZCBjb21wdXRlQmFja3RyYWNraW5nTWVtb3J5UmVxdWlyZW1lbgogICAg
IH0KIH0KIAotaW5saW5lIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgU2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpjb21waWxlKEpTQzo6Vk0qIHZtLCBKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZiYg
Y29kZVJlZikKK2lubGluZSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIFNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Y29tcGlsZShKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZVJlZikKIHsK
ICAgICBzd2l0Y2ggKG1fZnVuY3Rpb25UeXBlKSB7CiAgICAgY2FzZSBGdW5jdGlvblR5cGU6OlNp
bXBsZVNlbGVjdG9yQ2hlY2tlcjoKQEAgLTEyMjMsNyArMTIyMyw3IEBAIGlubGluZSBTZWxlY3Rv
ckNvbXBpbGF0aW9uU3RhdHVzIFNlbGVjdG8KICAgICAgICAgcmV0dXJuIFNlbGVjdG9yQ29tcGls
YXRpb25TdGF0dXM6OkNhbm5vdENvbXBpbGU7CiAgICAgfQogCi0gICAgSlNDOjpMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoKnZtLCBtX2Fzc2VtYmxlciwgQ1NTX0NPREVfSUQsIEpTQzo6SklUQ29tcGls
YXRpb25DYW5GYWlsKTsKKyAgICBKU0M6OkxpbmtCdWZmZXIgbGlua0J1ZmZlcihtX2Fzc2VtYmxl
ciwgQ1NTX0NPREVfSUQsIEpTQzo6SklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAoIWxp
bmtCdWZmZXIuaXNWYWxpZCgpKSB7CiAgICAgICAgIC8vIFRoaXMgY291bGQgYmUgU2VsZWN0b3JD
b21waWxhdGlvblN0YXR1czo6Tm90Q29tcGlsZWQgYnV0IHRoYXQgd291bGQgY2F1c2UgdXMgdG8g
cmUtZW50ZXIKICAgICAgICAgLy8gdGhlIENTUyBKSVQgZXZlcnkgdGltZSB3ZSBldmFsdWF0ZSB0
aGF0IHNlbGVjdG9yLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305788</attachid>
            <date>2017-03-29 14:17:14 -0700</date>
            <delta_ts>2017-03-29 14:33:10 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>137484</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0NTYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4MyBA
QAorMjAxNy0wMy0yOSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBMaW5rQnVmZmVyIGFuZCBFeGVjdXRhYmxlQWxsb2NhdG9yIHNob3VsZG4ndCBoYXZlIGFueXRo
aW5nIHRvIGRvIHdpdGggVk0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MDIxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgaXMgb25lIG1vcmUgc3RlcCBpbiB0aGUgZGlyZWN0aW9uIG9mIFBJQy1p
ZmllZCBXYXNtLgorICAgICAgICBMaW5rQnVmZmVyIGFuZCBFeGVjdXRhYmxlQWxsb2NhdG9yIGhh
dmUgbm8gYnVzaW5lc3Mga25vd2luZyBhYm91dCBWTS4KKworICAgICAgICAqIGFzc2VtYmxlci9M
aW5rQnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6YWxsb2NhdGUpOgorICAg
ICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6
OkxpbmtCdWZmZXIpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjp2bSk6IERlbGV0ZWQuCisg
ICAgICAgICogYjMvQjNDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmNvbXBpbGUpOgor
ICAgICAgICAqIGIzL0IzQ29tcGlsZS5oOgorICAgICAgICAqIGIzL2Fpci90ZXN0YWlyLmNwcDoK
KyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Y29tcGlsZVByb2Mp
OgorICAgICAgICAoSlNDOjpCMzo6Y29tcGlsZUFuZFJ1bik6CisgICAgICAgIChKU0M6OkIzOjp0
ZXN0TG9hZEFjcTQyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RBZGRBcmdaZXJvSW1tWkRlZik6
CisgICAgICAgIChKU0M6OkIzOjp0ZXN0QWRkTG9hZFR3aWNlKToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RNdWxMb2FkVHdpY2UpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE11bEFkZEFyZ3NMZWZ0
KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RNdWxBZGRBcmdzUmlnaHQpOgorICAgICAgICAoSlND
OjpCMzo6dGVzdE11bEFkZEFyZ3NMZWZ0MzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE11bEFk
ZEFyZ3NSaWdodDMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RNdWxTdWJBcmdzTGVmdCk6Cisg
ICAgICAgIChKU0M6OkIzOjp0ZXN0TXVsU3ViQXJnc1JpZ2h0KToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RNdWxTdWJBcmdzTGVmdDMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RNdWxTdWJBcmdz
UmlnaHQzMik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TXVsTmVnQXJncyk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0TXVsTmVnQXJnczMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDb21wYXJl
RmxvYXRUb0RvdWJsZVRocm91Z2hQaGkpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdERvdWJsZVRv
RmxvYXRUaHJvdWdoUGhpKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RSZWR1Y2VGbG9hdFRvRG91
YmxlVmFsaWRhdGVzKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3REb3VibGVQcm9kdWNlclBoaVRv
RmxvYXRDb252ZXJzaW9uKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3REb3VibGVQcm9kdWNlclBo
aVRvRmxvYXRDb252ZXJzaW9uV2l0aERvdWJsZUNvbnN1bWVyKToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3REb3VibGVQcm9kdWNlclBoaVdpdGhOb25GbG9hdENvbnN0KToKKyAgICAgICAgKEpTQzo6
QjM6OnRlc3RJVG9ENjRBcmcpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdElUb0Y2NEFyZyk6Cisg
ICAgICAgIChKU0M6OkIzOjp0ZXN0SVRvRDMyQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RJ
VG9GMzJBcmcpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdElUb0Q2NE1lbSk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0SVRvRjY0TWVtKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RJVG9EMzJNZW0p
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdElUb0YzMk1lbSk6CisgICAgICAgIChKU0M6OkIzOjp0
ZXN0SVRvRFJlZHVjZWRUb0lUb0Y2NEFyZyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0SVRvRFJl
ZHVjZWRUb0lUb0YzMkFyZyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3RvcmVSZWxBZGRMb2Fk
QWNxMzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFN0b3JlUmVsQWRkTG9hZEFjcTgpOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdFN0b3JlUmVsQWRkRmVuY2VMb2FkQWNxOCk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0U3RvcmVSZWxBZGRMb2FkQWNxMTYpOgorICAgICAgICAoSlNDOjpCMzo6dGVz
dFN0b3JlUmVsQWRkTG9hZEFjcTY0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCcmFuY2gpOgor
ICAgICAgICAoSlNDOjpCMzo6dGVzdEJyYW5jaFB0cik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
RGlhbW9uZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0QnJhbmNoTm90RXF1YWwpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdEJyYW5jaE5vdEVxdWFsQ29tbXV0ZSk6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0QnJhbmNoTm90RXF1YWxOb3RFcXVhbCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0QnJh
bmNoRXF1YWwpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJyYW5jaEVxdWFsRXF1YWwpOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdEJyYW5jaEVxdWFsQ29tbXV0ZSk6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0QnJhbmNoRXF1YWxFcXVhbDEpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJyYW5jaExv
YWRQdHIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJyYW5jaExvYWQzMik6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0QnJhbmNoTG9hZDhTKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCcmFuY2hM
b2FkOFopOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJyYW5jaExvYWQxNlMpOgorICAgICAgICAo
SlNDOjpCMzo6dGVzdEJyYW5jaExvYWQxNlopOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJyYW5j
aDhXaXRoTG9hZDhaSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENvbXBsZXgpOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdFNpbXBsZUNoZWNrKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RD
aGVja0ZhbHNlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja1RydWUpOgorICAgICAgICAo
SlNDOjpCMzo6dGVzdENoZWNrTGVzc1RoYW4pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNr
TWVnYUNvbWJvKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja1RyaWNreU1lZ2FDb21ibyk6
CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tUd29NZWdhQ29tYm9zKToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RDaGVja1R3b05vblJlZHVuZGFudE1lZ2FDb21ib3MpOgorICAgICAgICAoSlND
OjpCMzo6dGVzdENoZWNrQWRkSW1tKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja0FkZElt
bUNvbW11dGUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrQWRkSW1tU29tZVJlZ2lzdGVy
KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja0FkZCk6CisgICAgICAgIChKU0M6OkIzOjp0
ZXN0Q2hlY2tBZGQ2NCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tBZGRGb2xkKToKKyAg
ICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja0FkZEZvbGRGYWlsKToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RDaGVja0FkZFNlbGZPdmVyZmxvdzY0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVj
a0FkZFNlbGZPdmVyZmxvdzMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja1N1YkltbSk6
CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tTdWJCYWRJbW0pOgorICAgICAgICAoSlNDOjpC
Mzo6dGVzdENoZWNrU3ViKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja1N1YjY0KToKKyAg
ICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja1N1YkZvbGQpOgorICAgICAgICAoSlNDOjpCMzo6dGVz
dENoZWNrU3ViRm9sZEZhaWwpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrTmVnKToKKyAg
ICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja05lZzY0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RD
aGVja011bCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tNdWxNZW1vcnkpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdENoZWNrTXVsMik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tN
dWw2NCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tNdWxGb2xkKToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RDaGVja011bEZvbGRGYWlsKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVj
a011bDY0U1Nocik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3dpdGNoKToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RTd2l0Y2hDaGlsbERpdik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3dpdGNo
VGFyZ2V0dGluZ1NhbWVCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3dpdGNoVGFyZ2V0
dGluZ1NhbWVCbG9ja0ZvbGRQYXRoQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJh
c2ljU2VsZWN0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTZWxlY3RUZXN0KToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RTZWxlY3RDb21wYXJlRG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6OnRl
c3RTZWxlY3REb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNlbGVjdERvdWJsZVRlc3Qp
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNlbGVjdERvdWJsZUNvbXBhcmVEb3VibGUpOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdFNlbGVjdEZsb2F0Q29tcGFyZUZsb2F0KToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RTZWxlY3RGb2xkKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTZWxlY3RJbnZl
cnQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrU2VsZWN0KToKKyAgICAgICAgKEpTQzo6
QjM6OnRlc3RDaGVja1NlbGVjdENoZWNrU2VsZWN0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RD
aGVja1NlbGVjdEFuZENTRSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0VHJpdmlhbEluZmluaXRl
TG9vcCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Rm9sZFBhdGhFcXVhbCk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0TFNoaWZ0U2VsZjMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RSU2hpZnRT
ZWxmMzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFVSU2hpZnRTZWxmMzIpOgorICAgICAgICAo
SlNDOjpCMzo6dGVzdExTaGlmdFNlbGY2NCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0UlNoaWZ0
U2VsZjY0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RVUlNoaWZ0U2VsZjY0KToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RQYXRjaHBvaW50RG91YmxlUmVncyk6CisgICAgICAgIChKU0M6OkIzOjp0
ZXN0U3BpbGxEZWZTbWFsbGVyVGhhblVzZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3BpbGxV
c2VMYXJnZXJUaGFuRGVmKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMYXRlUmVnaXN0ZXIpOgor
ICAgICAgICAoSlNDOjpCMzo6dGVzdEludGVycHJldGVyKToKKyAgICAgICAgKEpTQzo6QjM6OnRl
c3RFbnRyeVN3aXRjaFNpbXBsZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0RW50cnlTd2l0Y2hO
b0VudHJ5U3dpdGNoKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RFbnRyeVN3aXRjaFdpdGhDb21t
b25QYXRocyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0RW50cnlTd2l0Y2hXaXRoQ29tbW9uUGF0
aHNBbmROb25Ucml2aWFsRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0RW50cnlT
d2l0Y2hMb29wKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTb21lRWFybHlSZWdpc3Rlcik6Cisg
ICAgICAgIChKU0M6OkIzOjp0ZXN0VGVybWluYWxQYXRjaHBvaW50VGhhdE5lZWRzVG9CZVNwaWxs
ZWQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFRlcm1pbmFsUGF0Y2hwb2ludFRoYXROZWVkc1Rv
QmVTcGlsbGVkMik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0UGF0Y2hwb2ludFRlcm1pbmFsUmV0
dXJuVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE1lbW9yeUZlbmNlKToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RTdG9yZUZlbmNlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMb2FkRmVu
Y2UpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFBDT3JpZ2luTWFwRG9lc250SW5zZXJ0Tm9wcyk6
CisgICAgICAgIChKU0M6OkIzOjp0ZXN0UGluUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RYODZMZWFBZGRBZGRTaGxMZWZ0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RYODZMZWFB
ZGRBZGRTaGxSaWdodCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0WDg2TGVhQWRkQWRkKToKKyAg
ICAgICAgKEpTQzo6QjM6OnRlc3RYODZMZWFBZGRTaGxSaWdodCk6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0WDg2TGVhQWRkU2hsTGVmdFNjYWxlMSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0WDg2
TGVhQWRkU2hsTGVmdFNjYWxlMik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0WDg2TGVhQWRkU2hs
TGVmdFNjYWxlNCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0WDg2TGVhQWRkU2hsTGVmdFNjYWxl
OCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0QWRkU2hsMzIpOgorICAgICAgICAoSlNDOjpCMzo6
dGVzdEFkZFNobDY0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RBZGRTaGw2NSk6CisgICAgICAg
IChKU0M6OkIzOjp0ZXN0TG9hZEJhc2VJbmRleFNoaWZ0Mik6CisgICAgICAgIChKU0M6OkIzOjp0
ZXN0TG9hZEJhc2VJbmRleFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE9wdGltaXpl
TWF0ZXJpYWxpemF0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RBdG9taWNXZWFrQ0FTKToK
KyAgICAgICAgKEpTQzo6QjM6OnRlc3RBdG9taWNTdHJvbmdDQVMpOgorICAgICAgICAoSlNDOjpC
Mzo6dGVzdEF0b21pY1hjaGcpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdERlcGVuZDMyKToKKyAg
ICAgICAgKEpTQzo6QjM6OnRlc3REZXBlbmQ2NCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0V2Fz
bUJvdW5kc0NoZWNrKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RXYXNtQWRkcmVzcyk6CisgICAg
ICAgIChKU0M6OkIzOjpydW4pOgorICAgICAgICAoSlNDOjpCMzo6Y29tcGlsZSk6IERlbGV0ZWQu
CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlND
OjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAgICAgICogZGZnL0RGR0pJVENv
bXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAg
ICogZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1
ZTo6ZW1pdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6Cisg
ICAgICAgICogZGZnL0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3NyRXhpdEdl
bmVyYXRpb25UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6b3NyRW50cnlUaHVu
a0dlbmVyYXRvcik6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlND
OjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMYXp5U2xvd1BhdGguY3BwOgorICAg
ICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6Z2VuZXJhdGUpOgorICAgICAgICAqIGZ0bC9G
VExMaW5rLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpsaW5rKToKKyAgICAgICAgKiBmdGwvRlRM
TG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUNhbGxPckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzU3ByZWFkKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3Mp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ2FsbEV2YWwp
OgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OmNvbXBpbGVTdHViKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdEhhbmRsZS5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdEhhbmRsZTo6ZW1pdEV4aXRUaHVuayk6CisgICAgICAg
ICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhD
YWxsQ29udGV4dDo6bWFrZUNhbGwpOgorICAgICAgICAqIGZ0bC9GVExTbG93UGF0aENhbGwuaDoK
KyAgICAgICAgKEpTQzo6RlRMOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMU3Rh
dGUuaDoKKyAgICAgICAgKiBmdGwvRlRMVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpn
ZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpzbG93
UGF0aENhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgICogZnRsL0ZUTFRodW5rcy5oOgorICAg
ICAgICAoSlNDOjpGVEw6OmdlbmVyYXRlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpGVEw6
OlRodW5rczo6Z2V0U2xvd1BhdGhDYWxsVGh1bmspOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhl
bHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXREdW1iVmlydHVh
bENhbGwpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0
b3I6OmluaXRpYWxpemVBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2Nh
dG9yOjpzaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVj
dXRhYmxlQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxs
b2NhdGUpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmg6CisgICAgICAgICog
aml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKToK
KyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UpOgorICAgICAgICAqIGppdC9KSVRNYXRoSUMuaDoKKyAgICAgICAgKEpT
Qzo6SklUTWF0aElDOjpnZW5lcmF0ZU91dE9mTGluZSk6CisgICAgICAgICogaml0L0pJVE9wY29k
ZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3Bl
cnR5KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgICogaml0L0pJ
VE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAg
ICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpzdHJpbmdH
ZXRCeVZhbFN0dWJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWxXaXRo
Q2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQpOgor
ICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9KSVRTdHVi
Um91dGluZS5oOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6ZnRs
VGh1bmtBd2FyZVJlcGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2Fs
bCk6CisgICAgICAgICogaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaDoKKyAgICAgICAgKEpTQzo6
U3BlY2lhbGl6ZWRUaHVua0pJVDo6ZmluYWxpemUpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVy
YXRvcnMuY3BwOgorICAgICAgICAoSlNDOjp0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6dmlydHVhbFRodW5rRm9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6YXJpdHlGaXh1cEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnVucmVh
Y2hhYmxlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25D
YWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKiBsbGludC9MTEludFRodW5rcy5jcHA6CisgICAgICAgIChK
U0M6OkxMSW50OjpnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyk6CisgICAgICAgICogcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6dGFr
ZVNhbXBsZSk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpW
TSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk1UcmFwcy5j
cHA6CisgICAgICAgIChKU0M6OlZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMpOgor
ICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21CaW5k
aW5nLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSnMpOgorICAgICAgICAoSlNDOjpX
YXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZXhpdFN0dWJHZW5lcmF0b3Ip
OgorICAgICAgICAqIHdhc20vV2FzbVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFu
Ojpjb21wbGV0ZSk6CisgICAgICAgICogeWFyci9ZYXJySklULmNwcDoKKyAgICAgICAgKEpTQzo6
WWFycjo6WWFyckdlbmVyYXRvcjo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OllhcnI6OmppdENv
bXBpbGUpOgorCiAyMDE3LTAzLTI5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZW1vdmUgb2Jzb2xldGUgcmVmZXJlbmNlcyB0byBIZWFwVGltZXIgaW4gSmF2YVNj
cmlwdENvcmUub3JkZXIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xp
bmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMy
LDYgQEAKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9Db21waWxh
dGlvblRocmVhZC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTI0Miw4ICsyNDEsNyBAQCB2b2lk
IExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3JvQXNzZW1ibGVyCiAgICAgICAgIGluaXRpYWxTaXpl
ID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKICAgICB9CiAgICAgCi0g
ICAgQVNTRVJUKG1fdm0gIT0gbnVsbHB0cik7Ci0gICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gbV92
bS0+ZXhlY3V0YWJsZUFsbG9jYXRvci5hbGxvY2F0ZSgqbV92bSwgaW5pdGlhbFNpemUsIG93bmVy
VUlELCBlZmZvcnQpOworICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxvY2F0
b3I6OnNpbmdsZXRvbigpLmFsbG9jYXRlKGluaXRpYWxTaXplLCBvd25lclVJRCwgZWZmb3J0KTsK
ICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29k
ZSA9IG1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNyArNDMsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKLWNs
YXNzIFZNOwogCiAvLyBMaW5rQnVmZmVyOgogLy8KQEAgLTc5LDExICs3OCwxMCBAQCBjbGFzcyBM
aW5rQnVmZmVyIHsKICNlbmRpZgogCiBwdWJsaWM6Ci0gICAgTGlua0J1ZmZlcihWTSYgdm0sIE1h
Y3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCA9IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpCisgICAgTGlua0J1
ZmZlcihNYWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIsIHZvaWQqIG93bmVyVUlELCBKSVRD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQgPSBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKQogICAg
ICAgICA6IG1fc2l6ZSgwKQogICAgICAgICAsIG1fZGlkQWxsb2NhdGUoZmFsc2UpCiAgICAgICAg
ICwgbV9jb2RlKDApCi0gICAgICAgICwgbV92bSgmdm0pCiAjaWZuZGVmIE5ERUJVRwogICAgICAg
ICAsIG1fY29tcGxldGVkKGZhbHNlKQogI2VuZGlmCkBAIC05NSw3ICs5Myw2IEBAIHB1YmxpYzoK
ICAgICAgICAgOiBtX3NpemUoc2l6ZSkKICAgICAgICAgLCBtX2RpZEFsbG9jYXRlKGZhbHNlKQog
ICAgICAgICAsIG1fY29kZShjb2RlKQotICAgICAgICAsIG1fdm0oMCkKICNpZm5kZWYgTkRFQlVH
CiAgICAgICAgICwgbV9jb21wbGV0ZWQoZmFsc2UpCiAjZW5kaWYKQEAgLTI1Myw4ICsyNTAsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCB3YXNBbHJlYWR5RGlzYXNzZW1ibGVkKCkgY29uc3QgeyByZXR1
cm4gbV9hbHJlYWR5RGlzYXNzZW1ibGVkOyB9CiAgICAgdm9pZCBkaWRBbHJlYWR5RGlzYXNzZW1i
bGUoKSB7IG1fYWxyZWFkeURpc2Fzc2VtYmxlZCA9IHRydWU7IH0KIAotICAgIFZNJiB2bSgpIHsg
cmV0dXJuICptX3ZtOyB9Ci0KIHByaXZhdGU6CiAjaWYgRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9O
KQogICAgIGludCBleGVjdXRhYmxlT2Zmc2V0Rm9yKGludCBsb2NhdGlvbikKQEAgLTMwNSw3ICsz
MDAsNiBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgYm9vbCBtX2RpZEFsbG9jYXRlOwogICAgIHZv
aWQqIG1fY29kZTsKLSAgICBWTSogbV92bTsKICNpZm5kZWYgTkRFQlVHCiAgICAgYm9vbCBtX2Nv
bXBsZXRlZDsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGls
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5j
cHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBp
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgewogCi1Db21waWxhdGlvbiBjb21waWxlKFZNJiB2bSwgUHJvY2VkdXJl
JiBwcm9jLCB1bnNpZ25lZCBvcHRMZXZlbCkKK0NvbXBpbGF0aW9uIGNvbXBpbGUoUHJvY2VkdXJl
JiBwcm9jLCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29w
ZSgiQ29tcGlsYXRpb24iKTsKICAgICAKQEAgLTQ2LDcgKzQ2LDcgQEAgQ29tcGlsYXRpb24gY29t
cGlsZShWTSYgdm0sIFByb2NlZHVyZSYgcAogICAgIAogICAgIENDYWxsSGVscGVycyBqaXQ7CiAg
ICAgZ2VuZXJhdGUocHJvYywgaml0KTsKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGpp
dCwgbnVsbHB0cik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0cik7CiAK
ICAgICByZXR1cm4gQ29tcGlsYXRpb24oRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkIzOjpD
b21waWxhdGlvbiIpKSwgcHJvYy5yZWxlYXNlQnlwcm9kdWN0cygpKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUs
NyBAQCBjbGFzcyBQcm9jZWR1cmU7CiAvLyBUaGVuIHlvdSBrZWVwIHRoZSBDb21waWxhdGlvbiBv
YmplY3QgYWxpdmUgZm9yIGFzIGxvbmcgYXMgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBydW4gdGhl
IGNvZGUuCiAvLyBJZiB0aGlzIEFQSSBmZWVscyB0b28gaGlnaC1sZXZlbCwgeW91IGNhbiB1c2Ug
QjM6OmdlbmVyYXRlKCkgZGlyZWN0bHkuCiAKLUpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9u
IGNvbXBpbGUoVk0mLCBQcm9jZWR1cmUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworSlNfRVhQ
T1JUX1BSSVZBVEUgQ29tcGlsYXRpb24gY29tcGlsZShQcm9jZWR1cmUmLCB1bnNpZ25lZCBvcHRM
ZXZlbCA9IDEpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw2IEBACiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRl
ICJQdXJlTmFOLmgiCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlIDxjbWF0aD4KICNpbmNsdWRl
IDxzdHJpbmc+CiAjaW5jbHVkZSA8d3RmL0Zhc3RUTFMuaD4KQEAgLTExOCwxMSArMTE3LDkgQEAg
U3RhdGljTG9jayBjcmFzaExvY2s7CiAgICAgICAgIENSQVNIKCk7IFwKICAgICB9IHdoaWxlIChm
YWxzZSkKIAotVk0qIHZtOwotCi1zdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNvbXBpbGUo
UHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIG9wdExldmVsID0gMSkKK3N0ZDo6dW5pcXVl
X3B0cjxDb21waWxhdGlvbj4gY29tcGlsZVByb2MoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2ln
bmVkIG9wdExldmVsID0gMSkKIHsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxh
dGlvbj4oQjM6OmNvbXBpbGUoKnZtLCBwcm9jZWR1cmUsIG9wdExldmVsKSk7CisgICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KEIzOjpjb21waWxlKHByb2NlZHVyZSwgb3B0
TGV2ZWwpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRz
PgpAQCAtMTQxLDcgKzEzOCw3IEBAIFQgaW52b2tlKGNvbnN0IENvbXBpbGF0aW9uJiBjb2RlLCBB
cmd1bWUKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KIFQgY29t
cGlsZUFuZFJ1bihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykK
IHsKLSAgICByZXR1cm4gaW52b2tlPFQ+KCpjb21waWxlKHByb2NlZHVyZSksIGFyZ3VtZW50cy4u
Lik7CisgICAgcmV0dXJuIGludm9rZTxUPigqY29tcGlsZVByb2MocHJvY2VkdXJlKSwgYXJndW1l
bnRzLi4uKTsKIH0KIAogdm9pZCBsb3dlclRvQWlyRm9yVGVzdGluZyhQcm9jZWR1cmUmIHByb2Mp
CkBAIC0zMTIsNyArMzA5LDcgQEAgdm9pZCB0ZXN0TG9hZEFjcTQyKCkKICAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJngpLAogICAgICAg
ICAgICAgMCwgSGVhcFJhbmdlKDQyKSwgSGVhcFJhbmdlKDQyKSkpOwogCi0gICAgYXV0byBjb2Rl
ID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAg
ICBpZiAoaXNBUk02NCgpKQogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxk
YSIpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlKSA9PSA0Mik7CkBAIC02MTUsNyArNjEy
LDcgQEAgdm9pZCB0ZXN0QWRkQXJnWmVyb0ltbVpEZWYoKQogICAgICAgICAgICAgYXJnLAogICAg
ICAgICAgICAgY29uc3RaZXJvKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MsIDAp
OworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MsIDApOwogICAgIENIRUNLKGludm9r
ZTxpbnQ2NF90PigqY29kZSwgMHgwMTIzNDU2Nzg5YWJjZGVmKSA9PSAweDg5YWJjZGVmKTsKIH0K
IApAQCAtNjMyLDcgKzYyOSw3IEBAIHZvaWQgdGVzdEFkZExvYWRUd2ljZSgpCiAgICAgICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBsb2FkLCBsb2FkKSk7CiAKLSAgICAgICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jLCBvcHRMZXZlbCk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBp
bGVQcm9jKHByb2MsIG9wdExldmVsKTsKICAgICAgICAgQ0hFQ0soaW52b2tlPGludDMyX3Q+KCpj
b2RlKSA9PSA0MiAqIDIpOwogICAgIH07CiAKQEAgLTk4NCw3ICs5ODEsNyBAQCB2b2lkIHRlc3RN
dWxMb2FkVHdpY2UoKQogICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgTXVsLCBPcmlnaW4oKSwgbG9hZCwg
bG9hZCkpOwogCi0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYywgb3B0TGV2ZWwpOwor
ICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jLCBvcHRMZXZlbCk7CiAgICAgICAg
IENIRUNLKGludm9rZTxpbnQzMl90PigqY29kZSkgPT0gNDIgKiA0Mik7CiAgICAgfTsKIApAQCAt
MTAwNCw3ICsxMDAxLDcgQEAgdm9pZCB0ZXN0TXVsQWRkQXJnc0xlZnQoKQogICAgIFZhbHVlKiBh
ZGRlZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgbXVsdGlw
bGllZCwgYXJnMik7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVy
biwgT3JpZ2luKCksIGFkZGVkKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Cisg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIHRlc3RWYWx1ZXMg
PSBpbnQ2NE9wZXJhbmRzKCk7CiAgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CkBAIC0x
MDI4LDcgKzEwMjUsNyBAQCB2b2lkIHRlc3RNdWxBZGRBcmdzUmlnaHQoKQogICAgIFZhbHVlKiBh
ZGRlZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYXJnMCwg
bXVsdGlwbGllZCk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVy
biwgT3JpZ2luKCksIGFkZGVkKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Cisg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIHRlc3RWYWx1ZXMg
PSBpbnQ2NE9wZXJhbmRzKCk7CiAgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CkBAIC0x
MDU1LDcgKzEwNTIsNyBAQCB2b2lkIHRlc3RNdWxBZGRBcmdzTGVmdDMyKCkKICAgICBWYWx1ZSog
YWRkZWQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIG11bHRp
cGxpZWQsIGFyZzIpOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLCBhZGRlZCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgYXV0byB0ZXN0VmFsdWVz
ID0gaW50MzJPcGVyYW5kcygpOwogICAgIGZvciAoYXV0byBhIDogdGVzdFZhbHVlcykgewpAQCAt
MTA4Miw3ICsxMDc5LDcgQEAgdm9pZCB0ZXN0TXVsQWRkQXJnc1JpZ2h0MzIoKQogICAgIFZhbHVl
KiBhZGRlZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYXJn
MCwgbXVsdGlwbGllZCk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIGFkZGVkKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIHRlc3RWYWx1
ZXMgPSBpbnQzMk9wZXJhbmRzKCk7CiAgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CkBA
IC0xMTA2LDcgKzExMDMsNyBAQCB2b2lkIHRlc3RNdWxTdWJBcmdzTGVmdCgpCiAgICAgVmFsdWUq
IGFkZGVkID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCBtdWx0
aXBsaWVkLCBhcmcyKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgYWRkZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVl
cyA9IGludDY0T3BlcmFuZHMoKTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAg
LTExMzAsNyArMTEyNyw3IEBAIHZvaWQgdGVzdE11bFN1YkFyZ3NSaWdodCgpCiAgICAgVmFsdWUq
IGFkZGVkID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCBhcmcw
LCBtdWx0aXBsaWVkKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgYWRkZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVl
cyA9IGludDY0T3BlcmFuZHMoKTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAg
LTExNTcsNyArMTE1NCw3IEBAIHZvaWQgdGVzdE11bFN1YkFyZ3NMZWZ0MzIoKQogICAgIFZhbHVl
KiBhZGRlZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgbXVs
dGlwbGllZCwgYXJnMik7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIGFkZGVkKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIHRlc3RWYWx1
ZXMgPSBpbnQzMk9wZXJhbmRzKCk7CiAgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CkBA
IC0xMTg0LDcgKzExODEsNyBAQCB2b2lkIHRlc3RNdWxTdWJBcmdzUmlnaHQzMigpCiAgICAgVmFs
dWUqIGFkZGVkID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCBh
cmcwLCBtdWx0aXBsaWVkKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwgYWRkZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZh
bHVlcyA9IGludDMyT3BlcmFuZHMoKTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsK
QEAgLTEyMDgsNyArMTIwNSw3IEBAIHZvaWQgdGVzdE11bE5lZ0FyZ3MoKQogICAgIFZhbHVlKiBh
ZGRlZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgemVybywg
bXVsdGlwbGllZCk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVy
biwgT3JpZ2luKCksIGFkZGVkKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Cisg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIHRlc3RWYWx1ZXMg
PSBpbnQ2NE9wZXJhbmRzKCk7CiAgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CkBAIC0x
MjMyLDcgKzEyMjksNyBAQCB2b2lkIHRlc3RNdWxOZWdBcmdzMzIoKQogICAgIFZhbHVlKiBhZGRl
ZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgemVybywgbXVs
dGlwbGllZCk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwg
T3JpZ2luKCksIGFkZGVkKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIHRlc3RWYWx1ZXMgPSBp
bnQzMk9wZXJhbmRzKCk7CiAgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CkBAIC00NjM2
LDcgKzQ2MzMsNyBAQCB2b2lkIHRlc3RDb21wYXJlRmxvYXRUb0RvdWJsZVRocm91Z2hQaGkoCiAg
ICAgVmFsdWUqIGVxdWFsID0gdGFpbC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBFcXVhbCwgT3Jp
Z2luKCksIGRvdWJsZUlucHV0LCBhcmcyQXNGUm91bmRlZERvdWJsZSk7CiAgICAgdGFpbC0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIGVxdWFsKTsKIAotICAg
IGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CiAgICAgaW50MzJfdCBpbnRlZ2VyQSA9IGJpdHdpc2VfY2FzdDxpbnQzMl90PihhKTsK
ICAgICBkb3VibGUgZG91YmxlQiA9IGI7CiAgICAgQ0hFQ0soaW52b2tlPGludDY0X3Q+KCpjb2Rl
LCAxLCBpbnRlZ2VyQSwgZG91YmxlQikgPT0gKGEgPT0gYikpOwpAQCAtNDY4NSw3ICs0NjgyLDcg
QEAgdm9pZCB0ZXN0RG91YmxlVG9GbG9hdFRocm91Z2hQaGkoZmxvYXQgdgogICAgIFZhbHVlKiBm
bG9hdFJlc3VsdCA9IHRhaWwtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgRG91YmxlVG9GbG9hdCwg
T3JpZ2luKCksIGRvdWJsZUlucHV0KTsKICAgICB0YWlsLT5hcHBlbmROZXdDb250cm9sVmFsdWUo
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgZmxvYXRSZXN1bHQpOwogCi0gICAgYXV0byBjb2RlID0g
Y29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBD
SEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpjb2RlLCAxLCBiaXR3aXNlX2Nhc3Q8aW50
MzJfdD4odmFsdWUpKSwgdmFsdWUgKyA0Mi41ZikpOwogICAgIENIRUNLKGlzSWRlbnRpY2FsKGlu
dm9rZTxmbG9hdD4oKmNvZGUsIDAsIGJpdHdpc2VfY2FzdDxpbnQzMl90Pih2YWx1ZSkpLCBzdGF0
aWNfY2FzdDxmbG9hdD4oTV9QSSkpKTsKIH0KQEAgLTQ3NDAsNyArNDczNyw3IEBAIHZvaWQgdGVz
dFJlZHVjZUZsb2F0VG9Eb3VibGVWYWxpZGF0ZXMoKQogICAgICAgICAgICAgcmVzdWx0KTsKICAg
ICB0YWlsLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVz
dWx0KTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0Pigq
Y29kZSwgMSksIDExLjVmICogMTEuNWYgKyBzdGF0aWNfY2FzdDxmbG9hdD4oYml0d2lzZV9jYXN0
PGRvdWJsZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEpKSkgKyAxMS41ZikpOwogICAgIENIRUNL
KGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKmNvZGUsIDApLCAxMC41ZiAqIDEwLjVmICsgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGJpdHdpc2VfY2FzdDxkb3VibGU+KHN0YXRpY19jYXN0PHVpbnQ2NF90
PigwKSkpICsgMTAuNWYpKTsKIH0KQEAgLTQ3ODAsNyArNDc3Nyw3IEBAIHZvaWQgdGVzdERvdWJs
ZVByb2R1Y2VyUGhpVG9GbG9hdENvbnZlcnMKICAgICBWYWx1ZSogZmxvYXRSZXN1bHQgPSB0YWls
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIERvdWJsZVRvRmxvYXQsIE9yaWdpbigpLCBmaW5hbEFk
ZCk7CiAgICAgdGFpbC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2lu
KCksIGZsb2F0UmVzdWx0KTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52
b2tlPGZsb2F0PigqY29kZSwgMSwgYml0d2lzZV9jYXN0PGludDMyX3Q+KHZhbHVlKSksIHZhbHVl
ICsgdmFsdWUpKTsKICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpjb2RlLCAw
LCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSwgNDIuNWYgKyB2YWx1ZSkpOwogfQpAQCAt
NDgyOSw3ICs0ODI2LDcgQEAgdm9pZCB0ZXN0RG91YmxlUHJvZHVjZXJQaGlUb0Zsb2F0Q29udmVy
cwogCiAgICAgdGFpbC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2lu
KCksIGRvdWJsZUFkZCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9r
ZTxkb3VibGU+KCpjb2RlLCAxLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSwgKHZhbHVl
ICsgdmFsdWUpICsgc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpKTsKICAgICBDSEVDSyhpc0lk
ZW50aWNhbChpbnZva2U8ZG91YmxlPigqY29kZSwgMCwgYml0d2lzZV9jYXN0PGludDMyX3Q+KHZh
bHVlKSksIHN0YXRpY19jYXN0PGRvdWJsZT4oKDQyLjVmICsgdmFsdWUpICsgNDIuNWYpKSk7CiB9
CkBAIC00ODY5LDcgKzQ4NjYsNyBAQCB2b2lkIHRlc3REb3VibGVQcm9kdWNlclBoaVdpdGhOb25G
bG9hdENvCiAgICAgVmFsdWUqIGZsb2F0UmVzdWx0ID0gdGFpbC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBEb3VibGVUb0Zsb2F0LCBPcmlnaW4oKSwgZmluYWxBZGQpOwogICAgIHRhaWwtPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBmbG9hdFJlc3VsdCk7CiAK
LSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOwogICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKmNvZGUsIDEs
IGJpdHdpc2VfY2FzdDxpbnQzMl90Pih2YWx1ZSkpLCB2YWx1ZSArIHZhbHVlKSk7CiAgICAgQ0hF
Q0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqY29kZSwgMCwgYml0d2lzZV9jYXN0PGludDMy
X3Q+KHZhbHVlKSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb25zdFZhbHVlICsgdmFsdWUpKSk7CiB9
CkBAIC01MjI1LDcgKzUyMjIsNyBAQCB2b2lkIHRlc3RJVG9ENjRBcmcoKQogICAgIFZhbHVlKiBz
cmNBc0RvdWJsZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCks
IHNyYyk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIHNyY0FzRG91YmxlKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Cisg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgZm9yIChhdXRvIHRlc3RWYWx1
ZSA6IGludDY0T3BlcmFuZHMoKSkKICAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGRv
dWJsZT4oKmNvZGUsIHRlc3RWYWx1ZS52YWx1ZSksIHN0YXRpY19jYXN0PGRvdWJsZT4odGVzdFZh
bHVlLnZhbHVlKSkpOwogfQpAQCAtNTIzOCw3ICs1MjM1LDcgQEAgdm9pZCB0ZXN0SVRvRjY0QXJn
KCkKICAgICBWYWx1ZSogc3JjQXNGbG9hdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
SVRvRiwgT3JpZ2luKCksIHNyYyk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIHNyY0FzRmxvYXQpOwogCi0gICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBmb3Ig
KGF1dG8gdGVzdFZhbHVlIDogaW50NjRPcGVyYW5kcygpKQogICAgICAgICBDSEVDSyhpc0lkZW50
aWNhbChpbnZva2U8ZmxvYXQ+KCpjb2RlLCB0ZXN0VmFsdWUudmFsdWUpLCBzdGF0aWNfY2FzdDxm
bG9hdD4odGVzdFZhbHVlLnZhbHVlKSkpOwogfQpAQCAtNTI1Miw3ICs1MjQ5LDcgQEAgdm9pZCB0
ZXN0SVRvRDMyQXJnKCkKICAgICBWYWx1ZSogc3JjQXNEb3VibGUgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIElUb0QsIE9yaWdpbigpLCBzcmMpOwogICAgIHJvb3QtPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBzcmNBc0RvdWJsZSk7CiAKLSAgICBh
dXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHBy
b2MpOwogICAgIGZvciAoYXV0byB0ZXN0VmFsdWUgOiBpbnQzMk9wZXJhbmRzKCkpCiAgICAgICAg
IENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxkb3VibGU+KCpjb2RlLCB0ZXN0VmFsdWUudmFsdWUp
LCBzdGF0aWNfY2FzdDxkb3VibGU+KHRlc3RWYWx1ZS52YWx1ZSkpKTsKIH0KQEAgLTUyNjYsNyAr
NTI2Myw3IEBAIHZvaWQgdGVzdElUb0YzMkFyZygpCiAgICAgVmFsdWUqIHNyY0FzRmxvYXQgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0YsIE9yaWdpbigpLCBzcmMpOwogICAgIHJv
b3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBzcmNBc0Zs
b2F0KTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CiAgICAgZm9yIChhdXRvIHRlc3RWYWx1ZSA6IGludDMyT3BlcmFu
ZHMoKSkKICAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqY29kZSwgdGVz
dFZhbHVlLnZhbHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRlc3RWYWx1ZS52YWx1ZSkpKTsKIH0K
QEAgLTUyODAsNyArNTI3Nyw3IEBAIHZvaWQgdGVzdElUb0Q2NE1lbSgpCiAgICAgVmFsdWUqIHNy
Y0FzRG91YmxlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwg
bG9hZGVkU3JjKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgc3JjQXNEb3VibGUpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpbnQ2NF90IGluTWVt
b3J5VmFsdWU7CiAgICAgZm9yIChhdXRvIHRlc3RWYWx1ZSA6IGludDY0T3BlcmFuZHMoKSkgewog
ICAgICAgICBpbk1lbW9yeVZhbHVlID0gdGVzdFZhbHVlLnZhbHVlOwpAQCAtNTI5OCw3ICs1Mjk1
LDcgQEAgdm9pZCB0ZXN0SVRvRjY0TWVtKCkKICAgICBWYWx1ZSogc3JjQXNGbG9hdCA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRiwgT3JpZ2luKCksIGxvYWRlZFNyYyk7CiAgICAg
cm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHNyY0Fz
RmxvYXQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpbnQ2NF90IGluTWVtb3J5VmFsdWU7CiAgICAgZm9y
IChhdXRvIHRlc3RWYWx1ZSA6IGludDY0T3BlcmFuZHMoKSkgewogICAgICAgICBpbk1lbW9yeVZh
bHVlID0gdGVzdFZhbHVlLnZhbHVlOwpAQCAtNTMxNiw3ICs1MzEzLDcgQEAgdm9pZCB0ZXN0SVRv
RDMyTWVtKCkKICAgICBWYWx1ZSogc3JjQXNEb3VibGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIElUb0QsIE9yaWdpbigpLCBsb2FkZWRTcmMpOwogICAgIHJvb3QtPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBzcmNBc0RvdWJsZSk7CiAKLSAgICBh
dXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHBy
b2MpOwogICAgIGludDMyX3QgaW5NZW1vcnlWYWx1ZTsKICAgICBmb3IgKGF1dG8gdGVzdFZhbHVl
IDogaW50MzJPcGVyYW5kcygpKSB7CiAgICAgICAgIGluTWVtb3J5VmFsdWUgPSB0ZXN0VmFsdWUu
dmFsdWU7CkBAIC01MzM0LDcgKzUzMzEsNyBAQCB2b2lkIHRlc3RJVG9GMzJNZW0oKQogICAgIFZh
bHVlKiBzcmNBc0Zsb2F0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9GLCBPcmln
aW4oKSwgbG9hZGVkU3JjKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwgc3JjQXNGbG9hdCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxl
KHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGludDMyX3Qg
aW5NZW1vcnlWYWx1ZTsKICAgICBmb3IgKGF1dG8gdGVzdFZhbHVlIDogaW50MzJPcGVyYW5kcygp
KSB7CiAgICAgICAgIGluTWVtb3J5VmFsdWUgPSB0ZXN0VmFsdWUudmFsdWU7CkBAIC01MzkyLDcg
KzUzODksNyBAQCB2b2lkIHRlc3RJVG9EUmVkdWNlZFRvSVRvRjY0QXJnKCkKICAgICBWYWx1ZSog
ZmxvYXRSZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIERvdWJsZVRvRmxvYXQs
IE9yaWdpbigpLCBzcmNBc0RvdWJsZSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KHByb2MsIFJldHVybiwgT3JpZ2luKCksIGZsb2F0UmVzdWx0KTsKIAotICAgIGF1dG8gY29kZSA9
IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAg
Zm9yIChhdXRvIHRlc3RWYWx1ZSA6IGludDY0T3BlcmFuZHMoKSkKICAgICAgICAgQ0hFQ0soaXNJ
ZGVudGljYWwoaW52b2tlPGZsb2F0PigqY29kZSwgdGVzdFZhbHVlLnZhbHVlKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHRlc3RWYWx1ZS52YWx1ZSkpKTsKIH0KQEAgLTU0MDcsNyArNTQwNCw3IEBAIHZv
aWQgdGVzdElUb0RSZWR1Y2VkVG9JVG9GMzJBcmcoKQogICAgIFZhbHVlKiBmbG9hdFJlc3VsdCA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgRG91YmxlVG9GbG9hdCwgT3JpZ2luKCksIHNy
Y0FzRG91YmxlKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgZmxvYXRSZXN1bHQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBmb3IgKGF1dG8gdGVz
dFZhbHVlIDogaW50MzJPcGVyYW5kcygpKQogICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZv
a2U8ZmxvYXQ+KCpjb2RlLCB0ZXN0VmFsdWUudmFsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4odGVz
dFZhbHVlLnZhbHVlKSkpOwogfQpAQCAtNTc4OSw3ICs1Nzg2LDcgQEAgdm9pZCB0ZXN0U3RvcmVS
ZWxBZGRMb2FkQWNxMzIoaW50IGFtb3VudAogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LAogICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
MCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICBpZiAoaXNBUk02NCgpKSB7CiAgICAgICAgIGNoZWNrVXNl
c0luc3RydWN0aW9uKCpjb2RlLCAibGRhIik7CiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9u
KCpjb2RlLCAic3RsIik7CkBAIC01ODYyLDcgKzU4NTksNyBAQCB2b2lkIHRlc3RTdG9yZVJlbEFk
ZExvYWRBY3E4KGludCBhbW91bnQsCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7
CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBp
bGVQcm9jKHByb2MpOwogICAgIGlmIChpc0FSTTY0KCkpIHsKICAgICAgICAgY2hlY2tVc2VzSW5z
dHJ1Y3Rpb24oKmNvZGUsICJsZGEiKTsKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNv
ZGUsICJzdGwiKTsKQEAgLTU5MDEsNyArNTg5OCw3IEBAIHZvaWQgdGVzdFN0b3JlUmVsQWRkRmVu
Y2VMb2FkQWNxOChpbnQgYW0KICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAot
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAgICAgaWYgKGlzQVJNNjQoKSkgewogICAgICAgICBjaGVja1VzZXNJbnN0cnVj
dGlvbigqY29kZSwgImxkYSIpOwogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwg
InN0bCIpOwpAQCAtNTk3NCw3ICs1OTcxLDcgQEAgdm9pZCB0ZXN0U3RvcmVSZWxBZGRMb2FkQWNx
MTYoaW50IGFtb3VudAogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICBy
b290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhw
cm9jKTsKICAgICBpZiAoaXNBUk02NCgpKSB7CiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9u
KCpjb2RlLCAibGRhIik7CiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAic3Rs
Iik7CkBAIC02MDQzLDcgKzYwNDAsNyBAQCB2b2lkIHRlc3RTdG9yZVJlbEFkZExvYWRBY3E2NChp
bnQgYW1vdW50CiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRv
IGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OwogICAgIGlmIChpc0FSTTY0KCkpIHsKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNv
ZGUsICJsZGEiKTsKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJzdGwiKTsK
QEAgLTcwNDksNyArNzA0Niw3IEBAIHZvaWQgdGVzdEJyYW5jaCgpCiAgICAgICAgIHByb2MsIFJl
dHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50
PigqY29kZSwgNDIpID09IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAw
KTsKIH0KQEAgLTcwNzQsNyArNzA3MSw3IEBAIHZvaWQgdGVzdEJyYW5jaFB0cigpCiAgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGls
ZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhp
bnZva2U8aW50PigqY29kZSwgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDQyKSkgPT0gMSk7CiAgICAg
Q0hFQ0soaW52b2tlPGludD4oKmNvZGUsIHN0YXRpY19jYXN0PGludHB0cl90PigwKSkgPT0gMCk7
CiB9CkBAIC03MTA3LDcgKzcxMDQsNyBAQCB2b2lkIHRlc3REaWFtb25kKCkKICAgICBlbHNlUmVz
dWx0LT5zZXRQaGkocGhpKTsKICAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwgcGhpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52b2tlPGlu
dD4oKmNvZGUsIDQyKSA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMCkgPT0g
MCk7CiB9CkBAIC03MTM3LDcgKzcxMzQsNyBAQCB2b2lkIHRlc3RCcmFuY2hOb3RFcXVhbCgpCiAg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0g
Y29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBD
SEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+
KCpjb2RlLCAwKSA9PSAwKTsKIH0KQEAgLTcxNjcsNyArNzE2NCw3IEBAIHZvaWQgdGVzdEJyYW5j
aE5vdEVxdWFsQ29tbXV0ZSgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAg
ICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkp
OwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21w
aWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09IDEpOwog
ICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KQEAgLTcyMDAsNyArNzE5
Nyw3IEBAIHZvaWQgdGVzdEJyYW5jaE5vdEVxdWFsTm90RXF1YWwoKQogICAgICAgICBwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpLAogICAgICAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52b2tlPGlu
dD4oKmNvZGUsIDQyKSA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMCkgPT0g
MCk7CiB9CkBAIC03MjMwLDcgKzcyMjcsNyBAQCB2b2lkIHRlc3RCcmFuY2hFcXVhbCgpCiAgICAg
ICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSkpOwogCi0gICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVD
SyhpbnZva2U8aW50PigqY29kZSwgNDIpID09IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpj
b2RlLCAwKSA9PSAwKTsKIH0KQEAgLTcyNjMsNyArNzI2MCw3IEBAIHZvaWQgdGVzdEJyYW5jaEVx
dWFsRXF1YWwoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICBlbHNl
Q2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAg
IGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDQyKSA9PSAxKTsKICAgICBDSEVD
SyhpbnZva2U8aW50PigqY29kZSwgMCkgPT0gMCk7CiB9CkBAIC03MjkzLDcgKzcyOTAsNyBAQCB2
b2lkIHRlc3RCcmFuY2hFcXVhbENvbW11dGUoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLAogICAgICAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIDEpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBj
b2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDQy
KSA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMCkgPT0gMCk7CiB9CkBAIC03
MzI2LDcgKzczMjMsNyBAQCB2b2lkIHRlc3RCcmFuY2hFcXVhbEVxdWFsMSgpCiAgICAgICAgIHBy
b2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShw
cm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZv
a2U8aW50PigqY29kZSwgNDIpID09IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAw
KSA9PSAwKTsKIH0KQEAgLTc3NDEsNyArNzczOCw3IEBAIHZvaWQgdGVzdEJyYW5jaExvYWRQdHIo
KQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICBlbHNlQ2FzZS0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAg
ICAgaW50cHRyX3QgY29uZDsKICAgICBjb25kID0gNDI7CiAgICAgQ0hFQ0soaW52b2tlPGludD4o
KmNvZGUsICZjb25kKSA9PSAxKTsKQEAgLTc3NzEsNyArNzc2OCw3IEBAIHZvaWQgdGVzdEJyYW5j
aExvYWQzMigpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VD
YXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhw
cm9jKTsKICAgICBpbnQzMl90IGNvbmQ7CiAgICAgY29uZCA9IDQyOwogICAgIENIRUNLKGludm9r
ZTxpbnQ+KCpjb2RlLCAmY29uZCkgPT0gMSk7CkBAIC03ODAxLDcgKzc3OTgsNyBAQCB2b2lkIHRl
c3RCcmFuY2hMb2FkOFMoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAg
ICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsK
IAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGls
ZVByb2MocHJvYyk7CiAgICAgaW50OF90IGNvbmQ7CiAgICAgY29uZCA9IC0xOwogICAgIENIRUNL
KGludm9rZTxpbnQ+KCpjb2RlLCAmY29uZCkgPT0gMSk7CkBAIC03ODMxLDcgKzc4MjgsNyBAQCB2
b2lkIHRlc3RCcmFuY2hMb2FkOFooKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAog
ICAgICAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IDApKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CiAgICAgdWludDhfdCBjb25kOwogICAgIGNvbmQgPSAxOwogICAg
IENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmY29uZCkgPT0gMSk7CkBAIC03ODYxLDcgKzc4NTgs
NyBAQCB2b2lkIHRlc3RCcmFuY2hMb2FkMTZTKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmln
aW4oKSwKICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGludDE2X3QgY29uZDsKICAgICBjb25kID0g
LTE7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZjb25kKSA9PSAxKTsKQEAgLTc4OTEs
NyArNzg4OCw3IEBAIHZvaWQgdGVzdEJyYW5jaExvYWQxNlooKQogICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLAogICAgICAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Cisg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgdWludDE2X3QgY29uZDsKICAg
ICBjb25kID0gMTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJmNvbmQpID09IDEpOwpA
QCAtNzkzMSw3ICs3OTI4LDcgQEAgdm9pZCB0ZXN0QnJhbmNoOFdpdGhMb2FkOFpJbmRleCgpCiAg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0g
Y29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICB1
aW50MzJfdCBjb25kOwogICAgIGNvbmQgPSAweGZmZmZmZmZmVTsgLy8gQWxsIGJ5dGVzIGFyZSAw
eGZmLgogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmY29uZCAtIDIsIChzaXplb2YodWlu
dDMyX3QpICogMikgPj4gbG9nU2NhbGUpID09IDEpOwpAQCAtODA2OCw3ICs4MDY1LDcgQEAgdm9p
ZCB0ZXN0Q29tcGxleCh1bnNpZ25lZCBudW1WYXJzLCB1bnNpZwogCiAgICAgY3VycmVudC0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHZhcnNbMF0pOwogCi0g
ICAgY29tcGlsZShwcm9jKTsKKyAgICBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGRvdWJsZSBh
ZnRlciA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7CiAgICAgZGF0YUxvZyh0b0NT
dHJpbmcoIiAgICBUaGF0IHRvb2sgIiwgYWZ0ZXIgLSBiZWZvcmUsICIgbXMuXG4iKSk7CkBAIC04
NjE3LDcgKzg2MTQsNyBAQCB2b2lkIHRlc3RTaW1wbGVDaGVjaygpCiAgICAgcm9vdC0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKAogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290LT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
ICAgICAKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMCkgPT0gMCk7CiAgICAgQ0hFQ0so
aW52b2tlPGludD4oKmNvZGUsIDEpID09IDQyKTsKQEAgLTg2MzYsNyArODYzMyw3IEBAIHZvaWQg
dGVzdENoZWNrRmFsc2UoKQogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Cisg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgCiAgICAgQ0hFQ0soaW52b2tl
PGludD4oKmNvZGUpID09IDApOwogfQpAQCAtODY2Miw3ICs4NjU5LDcgQEAgdm9pZCB0ZXN0Q2hl
Y2tUcnVlKCkKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCiAgICAgICAgIHByb2Ms
IFJldHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIAogICAgIENIRUNLKGludm9rZTxpbnQ+KCpj
b2RlKSA9PSA0Mik7CiB9CkBAIC04NjkzLDcgKzg2OTAsNyBAQCB2b2lkIHRlc3RDaGVja0xlc3NU
aGFuKCkKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCiAgICAgICAgIHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIAogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2Rl
LCA0MikgPT0gMCk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDEwMDApID09IDApOwpA
QCAtODczOSw3ICs4NzM2LDcgQEAgdm9pZCB0ZXN0Q2hlY2tNZWdhQ29tYm8oKQogICAgIHJvb3Qt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
cm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAg
IGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CiAKICAgICBpbnQ4X3QgdmFsdWU7CiAgICAgdmFsdWUgPSA0MjsKQEAgLTg3OTQsNyAr
ODc5MSw3IEBAIHZvaWQgdGVzdENoZWNrVHJpY2t5TWVnYUNvbWJvKCkKICAgICByb290LT5hcHBl
bmROZXdDb250cm9sVmFsdWUoCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJvb3Qt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRv
IGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OwogCiAgICAgaW50OF90IHZhbHVlOwogICAgIHZhbHVlID0gNDI7CkBAIC04ODU4LDcgKzg4NTUs
NyBAQCB2b2lkIHRlc3RDaGVja1R3b01lZ2FDb21ib3MoKQogICAgIHJvb3QtPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZSgKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29kZSA9
IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAg
ICBpbnQ4X3QgdmFsdWU7CiAgICAgdmFsdWUgPSA0MjsKQEAgLTg5MzksNyArODkzNiw3IEBAIHZv
aWQgdGVzdENoZWNrVHdvTm9uUmVkdW5kYW50TWVnYUNvbWJvcygKICAgICBlbHNlQ2FzZS0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKAogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBlbHNl
Q2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQ1KSk7CiAKLSAg
ICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9j
KHByb2MpOwogCiAgICAgaW50OF90IHZhbHVlOwogCkBAIC04OTk0LDcgKzg5OTEsNyBAQCB2b2lk
IHRlc3RDaGVja0FkZEltbSgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrQWRk
KSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDApID09
IDQyLjApOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAxKSA9PSA0My4wKTsKQEAg
LTkwMzAsNyArOTAyNyw3IEBAIHZvaWQgdGVzdENoZWNrQWRkSW1tQ29tbXV0ZSgpCiAgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrQWRkKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hF
Q0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDApID09IDQyLjApOwogICAgIENIRUNLKGludm9rZTxk
b3VibGU+KCpjb2RlLCAxKSA9PSA0My4wKTsKQEAgLTkwNjUsNyArOTA2Miw3IEBAIHZvaWQgdGVz
dENoZWNrQWRkSW1tU29tZVJlZ2lzdGVyKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwg
Y2hlY2tBZGQpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBj
b2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29k
ZSwgMCkgPT0gNDIuMCk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDEpID09IDQz
LjApOwpAQCAtOTEwMiw3ICs5MDk5LDcgQEAgdm9pZCB0ZXN0Q2hlY2tBZGQoKQogICAgICAgICBw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIElUb0QsIE9yaWdpbigpLCBjaGVja0FkZCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGls
ZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNL
KGludm9rZTxkb3VibGU+KCpjb2RlLCAwLCA0MikgPT0gNDIuMCk7CiAgICAgQ0hFQ0soaW52b2tl
PGRvdWJsZT4oKmNvZGUsIDEsIDQyKSA9PSA0My4wKTsKQEAgLTkxMzUsNyArOTEzMiw3IEBAIHZv
aWQgdGVzdENoZWNrQWRkNjQoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9yaWdpbigpLCBjaGVja0Fk
ZCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwbGws
IDQybGwpID09IDQyLjApOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAxbGwsIDQy
bGwpID09IDQzLjApOwpAQCAtOTE1Niw3ICs5MTUzLDcgQEAgdm9pZCB0ZXN0Q2hlY2tBZGRGb2xk
KGludCBhLCBpbnQgYikKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIGNoZWNrQWRkKTsKIAotICAgIGF1dG8gY29kZSA9
IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAg
ICBDSEVDSyhpbnZva2U8aW50PigqY29kZSkgPT0gYSArIGIpOwogfQpAQCAtOTE3Nyw3ICs5MTc0
LDcgQEAgdm9pZCB0ZXN0Q2hlY2tBZGRGb2xkRmFpbChpbnQgYSwgaW50IGIpCiAgICAgICAgIH0p
OwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBjaGVja0FkZCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUp
ID09IDQyKTsKIH0KQEAgLTkyODQsNyArOTI4MSw3IEBAIHZvaWQgdGVzdENoZWNrQWRkU2VsZk92
ZXJmbG93NjQoKQogCiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVy
biwgT3JpZ2luKCksIGNoZWNrQWRkKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8
aW50NjRfdD4oKmNvZGUsIDBsbCkgPT0gMCk7CiAgICAgQ0hFQ0soaW52b2tlPGludDY0X3Q+KCpj
b2RlLCAxbGwpID09IDIpOwpAQCAtOTMxNSw3ICs5MzEyLDcgQEAgdm9pZCB0ZXN0Q2hlY2tBZGRT
ZWxmT3ZlcmZsb3czMigpCiAKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwgY2hlY2tBZGQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShw
cm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGlu
dm9rZTxpbnQzMl90PigqY29kZSwgMGxsKSA9PSAwKTsKICAgICBDSEVDSyhpbnZva2U8aW50MzJf
dD4oKmNvZGUsIDFsbCkgPT0gMik7CkBAIC05MzUwLDcgKzkzNDcsNyBAQCB2b2lkIHRlc3RDaGVj
a1N1YkltbSgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrU3ViKSk7CiAKLSAg
ICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9j
KHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDApID09IC00Mi4wKTsK
ICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMSkgPT0gLTQxLjApOwpAQCAtOTM5Miw3
ICs5Mzg5LDcgQEAgdm9pZCB0ZXN0Q2hlY2tTdWJCYWRJbW0oKQogICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLAogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0Qs
IE9yaWdpbigpLCBjaGVja1N1YikpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxk
b3VibGU+KCpjb2RlLCAwKSA9PSAtc3RhdGljX2Nhc3Q8ZG91YmxlPihiYWRJbW0pKTsKICAgICBD
SEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgLTEpID09IC1zdGF0aWNfY2FzdDxkb3VibGU+KGJh
ZEltbSkgLSAxKTsKQEAgLTk0MjksNyArOTQyNiw3IEBAIHZvaWQgdGVzdENoZWNrU3ViKCkKICAg
ICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tTdWIpKTsKIAotICAgIGF1dG8gY29kZSA9
IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAg
ICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMCwgNDIpID09IC00Mi4wKTsKICAgICBDSEVD
SyhpbnZva2U8ZG91YmxlPigqY29kZSwgMSwgNDIpID09IC00MS4wKTsKQEAgLTk0NjcsNyArOTQ2
NCw3IEBAIHZvaWQgdGVzdENoZWNrU3ViNjQoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLAogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9yaWdpbigp
LCBjaGVja1N1YikpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpj
b2RlLCAwbGwsIDQybGwpID09IC00Mi4wKTsKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29k
ZSwgMWxsLCA0MmxsKSA9PSAtNDEuMCk7CkBAIC05NDg4LDcgKzk0ODUsNyBAQCB2b2lkIHRlc3RD
aGVja1N1YkZvbGQoaW50IGEsIGludCBiKQogICAgICAgICB9KTsKICAgICByb290LT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2hlY2tTdWIpOwogCi0gICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhw
cm9jKTsKIAogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlKSA9PSBhIC0gYik7CiB9CkBAIC05
NTA5LDcgKzk1MDYsNyBAQCB2b2lkIHRlc3RDaGVja1N1YkZvbGRGYWlsKGludCBhLCBpbnQgYikK
ICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVy
biwgT3JpZ2luKCksIGNoZWNrU3ViKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8
aW50PigqY29kZSkgPT0gNDIpOwogfQpAQCAtOTUzOCw3ICs5NTM1LDcgQEAgdm9pZCB0ZXN0Q2hl
Y2tOZWcoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9yaWdpbigpLCBjaGVja05lZykpOwogCi0gICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhw
cm9jKTsKIAogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwKSA9PSAwLjApOwogICAg
IENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAxKSA9PSAtMS4wKTsKQEAgLTk1NjgsNyArOTU2
NSw3IEBAIHZvaWQgdGVzdENoZWNrTmVnNjQoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLAogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9yaWdpbigp
LCBjaGVja05lZykpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpj
b2RlLCAwbGwpID09IDAuMCk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDFsbCkg
PT0gLTEuMCk7CkBAIC05NjA1LDcgKzk2MDIsNyBAQCB2b2lkIHRlc3RDaGVja011bCgpCiAgICAg
ICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrTXVsKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBj
b21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAg
Q0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDAsIDQyKSA9PSAwLjApOwogICAgIENIRUNLKGlu
dm9rZTxkb3VibGU+KCpjb2RlLCAxLCA0MikgPT0gNDIuMCk7CkBAIC05NjQ2LDcgKzk2NDMsNyBA
QCB2b2lkIHRlc3RDaGVja011bE1lbW9yeSgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCks
IGNoZWNrTXVsKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgbGVmdCA9IDA7CiAgICAgcmlnaHQgPSA0
MjsKQEAgLTk2OTMsNyArOTY5MCw3IEBAIHZvaWQgdGVzdENoZWNrTXVsMigpCiAgICAgICAgIHBy
b2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgSVRvRCwgT3JpZ2luKCksIGNoZWNrTXVsKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxl
KHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0so
aW52b2tlPGRvdWJsZT4oKmNvZGUsIDApID09IDAuMCk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJs
ZT4oKmNvZGUsIDEpID09IDIuMCk7CkBAIC05NzI2LDcgKzk3MjMsNyBAQCB2b2lkIHRlc3RDaGVj
a011bDY0KCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tNdWwpKTsKIAotICAg
IGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMCwgNDIpID09IDAuMCk7
CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDEsIDQyKSA9PSA0Mi4wKTsKQEAgLTk3
NDcsNyArOTc0NCw3IEBAIHZvaWQgdGVzdENoZWNrTXVsRm9sZChpbnQgYSwgaW50IGIpCiAgICAg
ICAgIH0pOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCBjaGVja011bCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGludD4o
KmNvZGUpID09IGEgKiBiKTsKIH0KQEAgLTk3NjgsNyArOTc2NSw3IEBAIHZvaWQgdGVzdENoZWNr
TXVsRm9sZEZhaWwoaW50IGEsIGludCBiKQogICAgICAgICB9KTsKICAgICByb290LT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2hlY2tNdWwpOwogCi0gICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhw
cm9jKTsKIAogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlKSA9PSA0Mik7CiB9CkBAIC05ODg0
LDcgKzk4ODEsNyBAQCB2b2lkIHRlc3RDaGVja011bDY0U1NocigpCiAgICAgICAgIHByb2MsIFJl
dHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRv
RCwgT3JpZ2luKCksIGNoZWNrTXVsKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2Mp
OworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tl
PGRvdWJsZT4oKmNvZGUsIDBsbCwgNDJsbCkgPT0gMC4wKTsKICAgICBDSEVDSyhpbnZva2U8ZG91
YmxlPigqY29kZSwgMWxsLCA0MmxsKSA9PSAwLjApOwpAQCAtMTA3MzQsNyArMTA3MzEsNyBAQCB2
b2lkIHRlc3RTd2l0Y2godW5zaWduZWQgZGVncmVlLCB1bnNpZ25lCiAgICAgICAgIHN3aXRjaFZh
bHVlLT5hcHBlbmRDYXNlKFN3aXRjaENhc2UoZ2FwICogaSwgRnJlcXVlbnRlZEJsb2NrKG5ld0Js
b2NrKSkpOwogICAgIH0KIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGVncmVlOyArK2kpIHsKICAgICAgICAgQ0hFQ0soaW52b2tlPGludDMyX3Q+KCpjb2RlLCBp
ICogZ2FwLCA0MiwgMTEpID09ICgoaSAmIDEpID8gMTEgOiA0MikpOwpAQCAtMTA3NzcsNyArMTA3
NzQsNyBAQCB2b2lkIHRlc3RTd2l0Y2hDaGlsbERpdih1bnNpZ25lZCBkZWdyZWUsCiAgICAgICAg
IHN3aXRjaFZhbHVlLT5hcHBlbmRDYXNlKFN3aXRjaENhc2UoZ2FwICogaSwgRnJlcXVlbnRlZEJs
b2NrKG5ld0Jsb2NrKSkpOwogICAgIH0KIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGVncmVlOyArK2kpIHsKICAgICAgICAgZGF0YUxvZygiaSA9ICIsIGksICJc
biIpOwpAQCAtMTA4MTYsNyArMTA4MTMsNyBAQCB2b2lkIHRlc3RTd2l0Y2hUYXJnZXR0aW5nU2Ft
ZUJsb2NrKCkKICAgICBzd2l0Y2hWYWx1ZS0+YXBwZW5kQ2FzZShTd2l0Y2hDYXNlKDMsIEZyZXF1
ZW50ZWRCbG9jayhvdGhlclRhcmdldCkpKTsKICAgICBzd2l0Y2hWYWx1ZS0+YXBwZW5kQ2FzZShT
d2l0Y2hDYXNlKDEzLCBGcmVxdWVudGVkQmxvY2sob3RoZXJUYXJnZXQpKSk7CiAKLSAgICBhdXRv
IGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDIwOyArK2kpIHsKICAgICAgICAgaW50
MzJfdCBleHBlY3RlZCA9IChpID09IDMgfHwgaSA9PSAxMykgPyA0MiA6IDU7CkBAIC0xMDg0NCw3
ICsxMDg0MSw3IEBAIHZvaWQgdGVzdFN3aXRjaFRhcmdldHRpbmdTYW1lQmxvY2tGb2xkUGEKICAg
ICBzd2l0Y2hWYWx1ZS0+YXBwZW5kQ2FzZShTd2l0Y2hDYXNlKDMsIEZyZXF1ZW50ZWRCbG9jayhv
dGhlclRhcmdldCkpKTsKICAgICBzd2l0Y2hWYWx1ZS0+YXBwZW5kQ2FzZShTd2l0Y2hDYXNlKDEz
LCBGcmVxdWVudGVkQmxvY2sob3RoZXJUYXJnZXQpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDIwOyArK2kpIHsKICAgICAgICAgaW50MzJfdCBleHBlY3Rl
ZCA9IChpID09IDMgfHwgaSA9PSAxMykgPyBpIDogNDI7CkBAIC0xMTIwMiw3ICsxMTE5OSw3IEBA
IHZvaWQgdGVzdEJhc2ljU2VsZWN0KCkKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShw
cm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZv
a2U8aW50cHRyX3Q+KCpjb2RlLCA0MiwgMSwgMikgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGlu
dHB0cl90PigqY29kZSwgNDIsIDY0MjQ2MiwgMzI1MzMpID09IDY0MjQ2Mik7CiAgICAgQ0hFQ0so
aW52b2tlPGludHB0cl90PigqY29kZSwgNDMsIDEsIDIpID09IDIpOwpAQCAtMTEyMjEsNyArMTEy
MTgsNyBAQCB2b2lkIHRlc3RTZWxlY3RUZXN0KCkKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KSwKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKSkpOwogCi0gICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVD
SyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCA0MiwgMSwgMikgPT0gMSk7CiAgICAgQ0hFQ0soaW52
b2tlPGludHB0cl90PigqY29kZSwgNDIsIDY0MjQ2MiwgMzI1MzMpID09IDY0MjQ2Mik7CiAgICAg
Q0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwgMCwgMSwgMikgPT0gMik7CkBAIC0xMTI0Myw3
ICsxMTI0MCw3IEBAIHZvaWQgdGVzdFNlbGVjdENvbXBhcmVEb3VibGUoKQogICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApLAogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSk7CiAKLSAgICBh
dXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHBy
b2MpOwogICAgIENIRUNLKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIC0xLjAsIDEuMCwgMSwgMikg
PT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwgNDIuNSwgNDIuNTEsIDY0
MjQ2MiwgMzI1MzMpID09IDY0MjQ2Mik7CiAgICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29k
ZSwgUE5hTiwgMC4wLCAxLCAyKSA9PSAyKTsKQEAgLTExMzQwLDcgKzExMzM3LDcgQEAgdm9pZCB0
ZXN0U2VsZWN0RG91YmxlKCkKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6YXJndW1lbnRGUFIwKSwKICAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgRlBS
SW5mbzo6YXJndW1lbnRGUFIxKSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8ZG91
YmxlPigqY29kZSwgNDIsIDEuNSwgMi42KSA9PSAxLjUpOwogICAgIENIRUNLKGludm9rZTxkb3Vi
bGU+KCpjb2RlLCA0MiwgNjQyNDYyLjcsIDMyNTMzLjgpID09IDY0MjQ2Mi43KTsKICAgICBDSEVD
SyhpbnZva2U8ZG91YmxlPigqY29kZSwgNDMsIDEuOSwgMi4wKSA9PSAyLjApOwpAQCAtMTEzNTks
NyArMTEzNTYsNyBAQCB2b2lkIHRlc3RTZWxlY3REb3VibGVUZXN0KCkKICAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6
YXJndW1lbnRGUFIwKSwKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6YXJndW1lbnRGUFIxKSkpOwogCi0gICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgNDIsIDEuNSwgMi42KSA9PSAxLjUp
OwogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCA0MiwgNjQyNDYyLjcsIDMyNTMzLjgp
ID09IDY0MjQ2Mi43KTsKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMCwgMS45LCAy
LjApID09IDIuMCk7CkBAIC0xMTM4MSw3ICsxMTM3OCw3IEBAIHZvaWQgdGVzdFNlbGVjdERvdWJs
ZUNvbXBhcmVEb3VibGUoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjIpLAogICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBGUFJJ
bmZvOjphcmd1bWVudEZQUjMpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxkb3Vi
bGU+KCpjb2RlLCAtMS4wLCAxLjAsIDEuMSwgMi4yKSA9PSAxLjEpOwogICAgIENIRUNLKGludm9r
ZTxkb3VibGU+KCpjb2RlLCA0Mi41LCA0Mi41MSwgNjQyNDYyLjMsIDMyNTMzLjQpID09IDY0MjQ2
Mi4zKTsKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgUE5hTiwgMC4wLCAxLjUsIDIu
NikgPT0gMi42KTsKQEAgLTExNDY3LDcgKzExNDY0LDcgQEAgdm9pZCB0ZXN0U2VsZWN0RG91Ymxl
Q29tcGFyZURvdWJsZShib29sIAogICAgICAgICAgICAgICAgICAgICBhcmcxKSwKICAgICAgICAg
ICAgICAgICBhcmcyLAogICAgICAgICAgICAgICAgIGFyZzMpKTsKLSAgICAgICAgYXV0byBjb2Rl
ID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CiAKICAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRvdWJs
ZT4oKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZsb2F0aW5nUG9pbnRPcGVy
YW5kczxkb3VibGU+KCkpIHsKQEAgLTExNDk0LDcgKzExNDkxLDcgQEAgdm9pZCB0ZXN0U2VsZWN0
RG91YmxlQ29tcGFyZURvdWJsZShib29sIAogICAgICAgICBrZWVwVmFsdWVzTGl2ZS0+c2V0R2Vu
ZXJhdG9yKFsmXSAoQ0NhbGxIZWxwZXJzJiwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JikgeyB9KTsKIAogICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICAgICAgZm9y
IChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRvdWJsZT4oKSkgewogICAgICAg
ICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxkb3VibGU+KCkp
IHsKQEAgLTExNTIxLDcgKzExNTE4LDcgQEAgdm9pZCB0ZXN0U2VsZWN0RG91YmxlQ29tcGFyZURv
dWJsZShib29sIAogICAgICAgICBrZWVwVmFsdWVzTGl2ZS0+c2V0R2VuZXJhdG9yKFsmXSAoQ0Nh
bGxIZWxwZXJzJiwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeyB9KTsKIAogICAg
ICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
cmVzdWx0KTsKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDog
ZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRvdWJsZT4oKSkgewogICAgICAgICAgICAgZm9yIChhdXRv
JiByaWdodCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxkb3VibGU+KCkpIHsKQEAgLTExNTQ5LDcg
KzExNTQ2LDcgQEAgdm9pZCB0ZXN0U2VsZWN0RG91YmxlQ29tcGFyZURvdWJsZShib29sIAogICAg
ICAgICBrZWVwVmFsdWVzTGl2ZS0+c2V0R2VuZXJhdG9yKFsmXSAoQ0NhbGxIZWxwZXJzJiwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeyB9KTsKIAogICAgICAgICByb290LT5hcHBl
bmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKLSAgICAg
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGls
ZVByb2MocHJvYyk7CiAKICAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2ludE9w
ZXJhbmRzPGRvdWJsZT4oKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZsb2F0
aW5nUG9pbnRPcGVyYW5kczxkb3VibGU+KCkpIHsKQEAgLTExNTc1LDcgKzExNTcyLDcgQEAgdm9p
ZCB0ZXN0U2VsZWN0RG91YmxlQ29tcGFyZURvdWJsZShib29sIAogICAgICAgICAgICAgICAgICAg
ICBhcmcxKSwKICAgICAgICAgICAgICAgICBhcmcyLAogICAgICAgICAgICAgICAgIGFyZzApKTsK
LSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CiAKICAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQ
b2ludE9wZXJhbmRzPGRvdWJsZT4oKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiByaWdodCA6
IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxkb3VibGU+KCkpIHsKQEAgLTExNjAxLDcgKzExNTk4LDcg
QEAgdm9pZCB0ZXN0U2VsZWN0RG91YmxlQ29tcGFyZURvdWJsZShib29sIAogICAgICAgICBrZWVw
VmFsdWVzTGl2ZS0+c2V0R2VuZXJhdG9yKFsmXSAoQ0NhbGxIZWxwZXJzJiwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgeyB9KTsKIAogICAgICAgICByb290LT5hcHBlbmROZXdDb250
cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKLSAgICAgICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CiAKICAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRv
dWJsZT4oKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZsb2F0aW5nUG9pbnRP
cGVyYW5kczxkb3VibGU+KCkpIHsKQEAgLTExNjUzLDcgKzExNjUwLDcgQEAgdm9pZCB0ZXN0U2Vs
ZWN0RmxvYXRDb21wYXJlRmxvYXQoYm9vbCAoKgogICAgICAgICAgICAgICAgICAgICBhcmcxKSwK
ICAgICAgICAgICAgICAgICBhcmcyLAogICAgICAgICAgICAgICAgIGFyZzMpKTsKLSAgICAgICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAKICAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJh
bmRzPGZsb2F0PigpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQ
b2ludE9wZXJhbmRzPGZsb2F0PigpKSB7CkBAIC0xMTY4OCw3ICsxMTY4NSw3IEBAIHZvaWQgdGVz
dFNlbGVjdEZsb2F0Q29tcGFyZUZsb2F0KGJvb2wgKCoKICAgICAgICAga2VlcFZhbHVlc0xpdmUt
PnNldEdlbmVyYXRvcihbJl0gKENDYWxsSGVscGVycyYsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYpIHsgfSk7CiAKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7Ci0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBp
bGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAg
ICAgIGZvciAoYXV0byYgbGVmdCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSkgewog
ICAgICAgICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9h
dD4oKSkgewpAQCAtMTE3MjMsNyArMTE3MjAsNyBAQCB2b2lkIHRlc3RTZWxlY3RGbG9hdENvbXBh
cmVGbG9hdChib29sICgqCiAgICAgICAgIGtlZXBWYWx1ZXNMaXZlLT5zZXRHZW5lcmF0b3IoWyZd
IChDQ2FsbEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7IH0pOwog
CiAgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLCByZXN1bHQpOwotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgICAgICBmb3IgKGF1dG8mIGxl
ZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpIHsKICAgICAgICAgICAgIGZvciAo
YXV0byYgcmlnaHQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpIHsKQEAgLTExNzU5
LDcgKzExNzU2LDcgQEAgdm9pZCB0ZXN0U2VsZWN0RmxvYXRDb21wYXJlRmxvYXQoYm9vbCAoKgog
ICAgICAgICBrZWVwVmFsdWVzTGl2ZS0+c2V0R2VuZXJhdG9yKFsmXSAoQ0NhbGxIZWxwZXJzJiwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeyB9KTsKIAogICAgICAgICByb290LT5h
cHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKLSAg
ICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29t
cGlsZVByb2MocHJvYyk7CiAKICAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2lu
dE9wZXJhbmRzPGZsb2F0PigpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxv
YXRpbmdQb2ludE9wZXJhbmRzPGZsb2F0PigpKSB7CkBAIC0xMTc5MSw3ICsxMTc4OCw3IEBAIHZv
aWQgdGVzdFNlbGVjdEZsb2F0Q29tcGFyZUZsb2F0KGJvb2wgKCoKICAgICAgICAgICAgICAgICAg
ICAgYXJnMSksCiAgICAgICAgICAgICAgICAgYXJnMiwKICAgICAgICAgICAgICAgICBhcmcwKSk7
Ci0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgICAgIGZvciAoYXV0byYgbGVmdCA6IGZsb2F0aW5n
UG9pbnRPcGVyYW5kczxmbG9hdD4oKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiByaWdodCA6
IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSkgewpAQCAtMTE4MjMsNyArMTE4MjAsNyBA
QCB2b2lkIHRlc3RTZWxlY3RGbG9hdENvbXBhcmVGbG9hdChib29sICgqCiAgICAgICAgIGtlZXBW
YWx1ZXNMaXZlLT5zZXRHZW5lcmF0b3IoWyZdIChDQ2FsbEhlbHBlcnMmLCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7IH0pOwogCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwotICAgICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKIAogICAgICAgICBmb3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8Zmxv
YXQ+KCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgcmlnaHQgOiBmbG9hdGluZ1BvaW50T3Bl
cmFuZHM8ZmxvYXQ+KCkpIHsKQEAgLTExODYwLDcgKzExODU3LDcgQEAgdm9pZCB0ZXN0U2VsZWN0
Rm9sZChpbnRwdHJfdCB2YWx1ZSkKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSwKICAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8
aW50cHRyX3Q+KCpjb2RlLCAxLCAyKSA9PSAodmFsdWUgPT0gNDIgPyAxIDogMikpOwogICAgIENI
RUNLKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDY0MjQ2MiwgMzI1MzMpID09ICh2YWx1ZSA9PSA0
MiA/IDY0MjQ2MiA6IDMyNTMzKSk7CiB9CkBAIC0xMTg4Myw3ICsxMTg4MCw3IEBAIHZvaWQgdGVz
dFNlbGVjdEludmVydCgpCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCiAgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMikpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Cisg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52b2tlPGludHB0
cl90PigqY29kZSwgNDIsIDEsIDIpID09IDEpOwogICAgIENIRUNLKGludm9rZTxpbnRwdHJfdD4o
KmNvZGUsIDQyLCA2NDI0NjIsIDMyNTMzKSA9PSA2NDI0NjIpOwogICAgIENIRUNLKGludm9rZTxp
bnRwdHJfdD4oKmNvZGUsIDQzLCAxLCAyKSA9PSAyKTsKQEAgLTExOTI2LDcgKzExOTIzLDcgQEAg
dm9pZCB0ZXN0Q2hlY2tTZWxlY3QoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAog
ICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkp
OwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21w
aWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhnZW5lcmF0aW9uQ291bnQgPT0gMSk7CiAgICAgQ0hF
Q0soaW52b2tlPGludD4oKmNvZGUsIHRydWUpID09IDApOwogICAgIENIRUNLKGludm9rZTxpbnQ+
KCpjb2RlLCBmYWxzZSkgPT0gNjY2KTsKQEAgLTExOTk3LDcgKzExOTk0LDcgQEAgdm9pZCB0ZXN0
Q2hlY2tTZWxlY3RDaGVja1NlbGVjdCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
CiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAw
KSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGdlbmVyYXRpb25Db3VudCA9PSAxKTsKICAgICBD
SEVDSyhnZW5lcmF0aW9uQ291bnQyID09IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2Rl
LCB0cnVlLCB0cnVlKSA9PSAwKTsKQEAgLTEyMDQzLDcgKzEyMDQwLDcgQEAgdm9pZCB0ZXN0Q2hl
Y2tTZWxlY3RBbmRDU0UoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGFkZFZhbHVlLCBh
ZGRWYWx1ZTIpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBj
b2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soZ2VuZXJhdGlvbkNvdW50ID09IDEp
OwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCB0cnVlKSA9PSAwKTsKICAgICBDSEVDSyhp
bnZva2U8aW50PigqY29kZSwgZmFsc2UpID09IDY2Nik7CkBAIC0xMjQ1Miw3ICsxMjQ0OSw3IEBA
IHZvaWQgdGVzdFRyaXZpYWxJbmZpbml0ZUxvb3AoKQogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3ApKTsKICAg
ICBsb29wLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1
ZW50ZWRCbG9jayhsb29wKSk7CiAKLSAgICBjb21waWxlKHByb2MpOworICAgIGNvbXBpbGVQcm9j
KHByb2MpOwogfQogCiB2b2lkIHRlc3RGb2xkUGF0aEVxdWFsKCkKQEAgLTEyNDc3LDcgKzEyNDc0
LDcgQEAgdm9pZCB0ZXN0Rm9sZFBhdGhFcXVhbCgpCiAgICAgICAgIGVsc2VCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPigKICAgICAgICAgICAgIHByb2MsIEVxdWFsLCBPcmlnaW4oKSwgYXJnLCBlbHNl
QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpKTsKIAot
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAgICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwgMCkgPT0gMSk7CiAg
ICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwgMSkgPT0gMCk7CiAgICAgQ0hFQ0soaW52
b2tlPGludHB0cl90PigqY29kZSwgNDIpID09IDApOwpAQCAtMTI0OTQsNyArMTI0OTEsNyBAQCB2
b2lkIHRlc3RMU2hpZnRTZWxmMzIoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAog
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCksIGFyZywg
YXJnKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgYXV0byBjaGVjayA9IFsmXSAoaW50MzJfdCB2YWx1
ZSkgewogICAgICAgICBDSEVDSyhpbnZva2U8aW50MzJfdD4oKmNvZGUsIHZhbHVlKSA9PSB2YWx1
ZSA8PCAodmFsdWUgJiAzMSkpOwpAQCAtMTI1MTcsNyArMTI1MTQsNyBAQCB2b2lkIHRlc3RSU2hp
ZnRTZWxmMzIoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9yaWdpbigpLCBhcmcsIGFyZykpOwogCi0g
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKIAogICAgIGF1dG8gY2hlY2sgPSBbJl0gKGludDMyX3QgdmFsdWUpIHsKICAgICAg
ICAgQ0hFQ0soaW52b2tlPGludDMyX3Q+KCpjb2RlLCB2YWx1ZSkgPT0gdmFsdWUgPj4gKHZhbHVl
ICYgMzEpKTsKQEAgLTEyNTQwLDcgKzEyNTM3LDcgQEAgdm9pZCB0ZXN0VVJTaGlmdFNlbGYzMigp
CiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIGFyZywgYXJnKSk7CiAKLSAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwog
CiAgICAgYXV0byBjaGVjayA9IFsmXSAodWludDMyX3QgdmFsdWUpIHsKICAgICAgICAgQ0hFQ0so
aW52b2tlPHVpbnQzMl90PigqY29kZSwgdmFsdWUpID09IHZhbHVlID4+ICh2YWx1ZSAmIDMxKSk7
CkBAIC0xMjU2Miw3ICsxMjU1OSw3IEBAIHZvaWQgdGVzdExTaGlmdFNlbGY2NCgpCiAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCiAgICAgICAgICAgICBwcm9jLCBTaGwsIE9yaWdpbigp
LCBhcmcsIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLCBhcmcp
KSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOwogCiAgICAgYXV0byBjaGVjayA9IFsmXSAoaW50NjRfdCB2YWx1ZSkg
ewogICAgICAgICBDSEVDSyhpbnZva2U8aW50NjRfdD4oKmNvZGUsIHZhbHVlKSA9PSB2YWx1ZSA8
PCAodmFsdWUgJiA2MykpOwpAQCAtMTI1ODYsNyArMTI1ODMsNyBAQCB2b2lkIHRlc3RSU2hpZnRT
ZWxmNjQoKQogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAogICAgICAgICAgICAgcHJv
YywgU1NociwgT3JpZ2luKCksIGFyZywgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVu
YywgT3JpZ2luKCksIGFyZykpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Cisg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIGNoZWNrID0gWyZd
IChpbnQ2NF90IHZhbHVlKSB7CiAgICAgICAgIENIRUNLKGludm9rZTxpbnQ2NF90PigqY29kZSwg
dmFsdWUpID09IHZhbHVlID4+ICh2YWx1ZSAmIDYzKSk7CkBAIC0xMjYxMCw3ICsxMjYwNyw3IEBA
IHZvaWQgdGVzdFVSU2hpZnRTZWxmNjQoKQogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KAogICAgICAgICAgICAgcHJvYywgWlNociwgT3JpZ2luKCksIGFyZywgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksIGFyZykpKTsKIAotICAgIGF1dG8gY29kZSA9
IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAg
ICBhdXRvIGNoZWNrID0gWyZdICh1aW50NjRfdCB2YWx1ZSkgewogICAgICAgICBDSEVDSyhpbnZv
a2U8dWludDY0X3Q+KCpjb2RlLCB2YWx1ZSkgPT0gdmFsdWUgPj4gKHZhbHVlICYgNjMpKTsKQEAg
LTEyNjQzLDcgKzEyNjQwLDcgQEAgdm9pZCB0ZXN0UGF0Y2hwb2ludERvdWJsZVJlZ3MoKQogCiAg
ICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHBh
dGNocG9pbnQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNv
ZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhudW1DYWxscyA9PSAxKTsKICAgICBD
SEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgNDIuNSkgPT0gNDIuNSk7CiB9CkBAIC0xMjY3Niw3
ICsxMjY3Myw3IEBAIHZvaWQgdGVzdFNwaWxsRGVmU21hbGxlclRoYW5Vc2UoKQogICAgIFZhbHVl
KiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIGZv
cmNlU3BpbGwsIGFyZzY0KTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJv
Yyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52b2tl
PGludDY0X3Q+KCpjb2RlLCAweGZmZmZmZmZmMDAwMDAwMDApID09IDApOwogfQogCkBAIC0xMjcz
MCw3ICsxMjcyNyw3IEBAIHZvaWQgdGVzdFNwaWxsVXNlTGFyZ2VyVGhhbkRlZigpCiAgICAgZWxz
ZVJlc3VsdC0+c2V0UGhpKHBoaSk7CiAgICAgdGFpbC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIHBoaSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9r
ZTx1aW50NjRfdD4oKmNvZGUsIDEsIDB4ZmZmZmZmZmYwMDAwMDAwMCkgPT0gMCk7CiAgICAgQ0hF
Q0soaW52b2tlPHVpbnQ2NF90PigqY29kZSwgMCwgMHhmZmZmZmZmZjAwMDAwMDAwKSA9PSAweGZm
ZmZmZmZmMDAwMDAwMDApOwogCkBAIC0xMjgxMiw3ICsxMjgwOSw3IEBAIHZvaWQgdGVzdExhdGVS
ZWdpc3RlcigpCiAgICAgICAgIH0pOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLCBzZWNvbmRQYXRjaHBvaW50KTsKICAgICAKLSAgICBhdXRv
IGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OwogICAgIENIRUNLKGludm9rZTx1aW50NjRfdD4oKmNvZGUpID09IHJlc3VsdCk7CiB9CiAKQEAg
LTEyOTg2LDcgKzEyOTgzLDcgQEAgdm9pZCB0ZXN0SW50ZXJwcmV0ZXIoKQogICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICBzdG9wLT5hcHBlbmRJbnRDb25zdGFudChwcm9j
LCBPcmlnaW4oKSwgcG9pbnRlclR5cGUoKSwgMCkpOwogICAgIAotICAgIGF1dG8gaW50ZXJwcmV0
ZXIgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gaW50ZXJwcmV0ZXIgPSBjb21waWxlUHJvYyhw
cm9jKTsKICAgICAKICAgICBWZWN0b3I8aW50cHRyX3Q+IGRhdGE7CiAgICAgVmVjdG9yPGludHB0
cl90PiBjb2RlOwpAQCAtMTMxMzYsNyArMTMxMzMsNyBAQCB2b2lkIHRlc3RFbnRyeVN3aXRjaFNp
bXBsZSgpCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBq
aXQpOwotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7CisgICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0cik7CiAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgbGFiZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwo
MCkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mKHByb2MuZW50cnlwb2ludExhYmVsKDEpKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJl
bFRocmVlID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDIpKTsK
QEAgLTEzMTY5LDcgKzEzMTY2LDcgQEAgdm9pZCB0ZXN0RW50cnlTd2l0Y2hOb0VudHJ5U3dpdGNo
KCkKICAgICAKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7
Ci0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKKyAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoaml0LCBudWxscHRyKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBs
YWJlbE9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxUd28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
cHJvYy5lbnRyeXBvaW50TGFiZWwoMSkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVGhy
ZWUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMikpOwpAQCAt
MTMyNTYsNyArMTMyNTMsNyBAQCB2b2lkIHRlc3RFbnRyeVN3aXRjaFdpdGhDb21tb25QYXRocygp
CiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwot
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7CisgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0cik7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFi
ZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOwog
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHBy
b2MuZW50cnlwb2ludExhYmVsKDEpKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFRocmVl
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDIpKTsKQEAgLTEz
MzczLDcgKzEzMzcwLDcgQEAgdm9pZCB0ZXN0RW50cnlTd2l0Y2hXaXRoQ29tbW9uUGF0aHNBbmRO
bwogICAgIAogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgZ2VuZXJhdGUocHJvYywgaml0KTsK
LSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIG51bGxwdHIpOworICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcihqaXQsIG51bGxwdHIpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxh
YmVsT25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDApKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihw
cm9jLmVudHJ5cG9pbnRMYWJlbCgxKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxUaHJl
ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgyKSk7CkBAIC0x
MzQ1MSw3ICsxMzQ0OCw3IEBAIHZvaWQgdGVzdEVudHJ5U3dpdGNoTG9vcCgpCiAgICAgCiAgICAg
Q0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwotICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKGppdCwgbnVsbHB0cik7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUgPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOwogICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2lu
dExhYmVsKDEpKTsKICAgICAKQEAgLTEzNTAwLDcgKzEzNDk3LDcgQEAgdm9pZCB0ZXN0U29tZUVh
cmx5UmVnaXN0ZXIoKQogICAgICAgICAKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKICAgICAgICAgCi0gICAgICAgIGNv
bXBpbGUocHJvYyk7CisgICAgICAgIGNvbXBpbGVQcm9jKHByb2MpOwogICAgICAgICBDSEVDSyhy
YW5GaXJzdFBhdGNocG9pbnQpOwogICAgICAgICBDSEVDSyhyYW5TZWNvbmRQYXRjaHBvaW50KTsK
ICAgICB9OwpAQCAtMTM2MTQsNyArMTM2MTEsNyBAQCB2b2lkIHRlc3RUZXJtaW5hbFBhdGNocG9p
bnRUaGF0TmVlZHNUb0JlCiAgICAgCiAgICAgc2xvd1BhdGgtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwgc2xvd1BhdGgtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCAyMCkpOwogICAgIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludD4oKmNvZGUpLCAxMCk7CiB9CiAKQEAgLTEzNzAyLDcgKzEzNjk5LDcgQEAgdm9pZCB0ZXN0
VGVybWluYWxQYXRjaHBvaW50VGhhdE5lZWRzVG9CZQogICAgIE9wdGlvbnM6Om1heEIzVGFpbER1
cEJsb2NrU2l6ZSgpID0gMDsKICAgICBPcHRpb25zOjptYXhCM1RhaWxEdXBCbG9ja1N1Y2Nlc3Nv
cnMoKSA9IDA7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpjb2RlLCAx
KSwgMSk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKmNvZGUsIDApLCAwKTsKICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqY29kZSwgNDIpLCA2NjYpOwpAQCAtMTM3NzYsNyArMTM3NzMsNyBA
QCB2b2lkIHRlc3RQYXRjaHBvaW50VGVybWluYWxSZXR1cm5WYWx1ZShiCiAgICAgc2xvd1BhdGhV
cHNpbG9uLT5zZXRQaGkocGhpKTsKICAgICBjb250aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGhpKTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNL
X0VRKGludm9rZTxpbnQ+KCpjb2RlLCAwKSwgMzEpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+
KCpjb2RlLCAxKSwgMzIpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpjb2RlLCA0MSksIDcy
KTsKQEAgLTEzNzk0LDcgKzEzNzkxLDcgQEAgdm9pZCB0ZXN0TWVtb3J5RmVuY2UoKQogICAgIHJv
b3QtPmFwcGVuZE5ldzxGZW5jZVZhbHVlPihwcm9jLCBPcmlnaW4oKSk7CiAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290LT5hcHBlbmRJbnRDb25z
dGFudChwcm9jLCBPcmlnaW4oKSwgSW50MzIsIDQyKSk7CiAgICAgCi0gICAgYXV0byBjb2RlID0g
Y29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqY29kZSksIDQyKTsKICAgICBpZiAoaXNYODYoKSkKICAgICAg
ICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJsb2NrIG9yICQweDAsICglcnNwKSIpOwpA
QCAtMTM4MTMsNyArMTM4MTAsNyBAQCB2b2lkIHRlc3RTdG9yZUZlbmNlKCkKICAgICByb290LT5h
cHBlbmROZXc8RmVuY2VWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEhlYXBSYW5nZTo6dG9wKCksIEhl
YXBSYW5nZSgpKTsKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQzMiwgNDIp
KTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpjb2RlKSwgNDIp
OwogICAgIGNoZWNrRG9lc05vdFVzZUluc3RydWN0aW9uKCpjb2RlLCAibG9jayIpOwogICAgIGNo
ZWNrRG9lc05vdFVzZUluc3RydWN0aW9uKCpjb2RlLCAibWZlbmNlIik7CkBAIC0xMzgzMCw3ICsx
MzgyNyw3IEBAIHZvaWQgdGVzdExvYWRGZW5jZSgpCiAgICAgcm9vdC0+YXBwZW5kTmV3PEZlbmNl
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBIZWFwUmFuZ2UoKSwgSGVhcFJhbmdlOjp0b3AoKSk7CiAg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290LT5h
cHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50MzIsIDQyKSk7CiAgICAgCi0gICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhw
cm9jKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50PigqY29kZSksIDQyKTsKICAgICBjaGVja0Rv
ZXNOb3RVc2VJbnN0cnVjdGlvbigqY29kZSwgImxvY2siKTsKICAgICBjaGVja0RvZXNOb3RVc2VJ
bnN0cnVjdGlvbigqY29kZSwgIm1mZW5jZSIpOwpAQCAtMTQwNTUsNyArMTQwNTIsNyBAQCB2b2lk
IHRlc3RQQ09yaWdpbk1hcERvZXNudEluc2VydE5vcHMoKQogCiAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKIAotICAgIGNvbXBpbGUocHJvYyk7Cisg
ICAgY29tcGlsZVByb2MocHJvYyk7CiB9CiAKIHZvaWQgdGVzdFBpblJlZ2lzdGVycygpCkBAIC0x
NDA5MCw3ICsxNDA4Nyw3IEBAIHZvaWQgdGVzdFBpblJlZ2lzdGVycygpCiAgICAgICAgICAgICAg
ICAgQ0hFQ0tfRVEocGFyYW1zWzBdLmdwcigpLCBHUFJJbmZvOjpyZWdDUzApOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmln
aW4oKSk7Ci0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgICAgICBib29sIHVzZXNDU1JzID0gZmFsc2U7
CiAgICAgICAgIGZvciAoQWlyOjpCYXNpY0Jsb2NrKiBibG9jayA6IHByb2MuY29kZSgpKSB7CiAg
ICAgICAgICAgICBmb3IgKEFpcjo6SW5zdCYgaW5zdCA6ICpibG9jaykgewpAQCAtMTQxMjksNyAr
MTQxMjYsNyBAQCB2b2lkIHRlc3RYODZMZWFBZGRBZGRTaGxMZWZ0KCkKICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMDApKTsKICAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CiAgICAg
Ci0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxl
UHJvYyhwcm9jKTsKICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxlYSAweDY0KCVy
ZGksJXJzaSw0KSwgJXJheCIpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnRwdHJfdD4oKmNvZGUs
IDEsIDIpLCAoMSArICgyIDw8IDIpKSArIDEwMCk7CiB9CkBAIC0xNDE1MSw3ICsxNDE0OCw3IEBA
IHZvaWQgdGVzdFg4NkxlYUFkZEFkZFNobFJpZ2h0KCkKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMDApKTsKICAgICByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CiAgICAgCi0gICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxlYSAweDY0KCVyZGksJXJzaSw0
KSwgJXJheCIpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAo
MSArICgyIDw8IDIpKSArIDEwMCk7CiB9CkBAIC0xNDE3MCw3ICsxNDE2Nyw3IEBAIHZvaWQgdGVz
dFg4NkxlYUFkZEFkZCgpCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgMTAwKSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwogICAgIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludHB0cl90PigqY29kZSwgMSwgMiksICgxICsgMikgKyAxMDApOwogICAgIGNoZWNr
RGlzYXNzZW1ibHkoCiAgICAgICAgICpjb2RlLApAQCAtMTQxOTUsNyArMTQxOTIsNyBAQCB2b2lk
IHRlc3RYODZMZWFBZGRTaGxSaWdodCgpCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMikpKTsKICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CiAgICAgCi0gICAgYXV0byBjb2Rl
ID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAg
ICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxlYSAoJXJkaSwlcnNpLDQpLCAlcmF4Iik7
CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludHB0cl90PigqY29kZSwgMSwgMiksIDEgKyAoMiA8PCAy
KSk7CiB9CkBAIC0xNDIxNCw3ICsxNDIxMSw3IEBAIHZvaWQgdGVzdFg4NkxlYUFkZFNobExlZnRT
Y2FsZTEoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIDApKSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLCByZXN1bHQpOwogICAgIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludHB0cl90PigqY29kZSwgMSwgMiksIDEgKyAyKTsKICAgICBjaGVja0Rpc2Fzc2VtYmx5KAog
ICAgICAgICAqY29kZSwKQEAgLTE0MjM5LDcgKzE0MjM2LDcgQEAgdm9pZCB0ZXN0WDg2TGVhQWRk
U2hsTGVmdFNjYWxlMigpCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgMSkpKTsKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGls
ZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBjaGVja1Vz
ZXNJbnN0cnVjdGlvbigqY29kZSwgImxlYSAoJXJkaSwlcnNpLDIpLCAlcmF4Iik7CiAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludHB0cl90PigqY29kZSwgMSwgMiksIDEgKyAoMiA8PCAxKSk7CiB9CkBA
IC0xNDI1OCw3ICsxNDI1NSw3IEBAIHZvaWQgdGVzdFg4NkxlYUFkZFNobExlZnRTY2FsZTQoKQog
ICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21w
aWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGNoZWNr
VXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGVhICglcmRpLCVyc2ksNCksICVyYXgiKTsKICAgICBD
SEVDS19FUShpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCAxLCAyKSwgMSArICgyIDw8IDIpKTsKIH0K
QEAgLTE0Mjc3LDcgKzE0Mjc0LDcgQEAgdm9pZCB0ZXN0WDg2TGVhQWRkU2hsTGVmdFNjYWxlOCgp
CiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgMykpKTsKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2lu
KCksIHJlc3VsdCk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigq
Y29kZSwgImxlYSAoJXJkaSwlcnNpLDgpLCAlcmF4Iik7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dHB0cl90PigqY29kZSwgMSwgMiksIDEgKyAoMiA8PCAzKSk7CiB9CkBAIC0xNDI5Niw3ICsxNDI5
Myw3IEBAIHZvaWQgdGVzdEFkZFNobDMyKCkKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAzMikpKTsKICAgICByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CiAgICAgCi0gICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
ICAgICBDSEVDS19FUShpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCAxLCAyKSwgMSArIChzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4oMikgPDwgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDMyKSkpOwogfQogCkBA
IC0xNDMxNCw3ICsxNDMxMSw3IEBAIHZvaWQgdGVzdEFkZFNobDY0KCkKICAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA2NCkpKTsKICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CiAg
ICAgCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21w
aWxlUHJvYyhwcm9jKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCAxLCAy
KSwgMSArIDIpOwogfQogCkBAIC0xNDMzMiw3ICsxNDMyOSw3IEBAIHZvaWQgdGVzdEFkZFNobDY1
KCkKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCA2NSkpKTsKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIHJlc3VsdCk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50
cHRyX3Q+KCpjb2RlLCAxLCAyKSwgMSArICgyIDw8IDEpKTsKIH0KIApAQCAtMTQzOTYsNyArMTQz
OTMsNyBAQCB2b2lkIHRlc3RMb2FkQmFzZUluZGV4U2hpZnQyKCkKICAgICAgICAgICAgICAgICAg
ICAgcHJvYywgU2hsLCBPcmlnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpLAogICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgMikpKSkpOwotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Cisg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaWYgKGlzWDg2KCkpCiAgICAg
ICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiKCVyZGksJXJzaSw0KSIpOwogICAgIGlu
dDMyX3QgdmFsdWUgPSAxMjM0MTIzNDsKQEAgLTE0NDIwLDcgKzE0NDE3LDcgQEAgdm9pZCB0ZXN0
TG9hZEJhc2VJbmRleFNoaWZ0MzIoKQogICAgICAgICAgICAgICAgICAgICBwcm9jLCBTaGwsIE9y
aWdpbigpLAogICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCiAgICAgICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAz
MikpKSkpOwotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CiAgICAgaW50MzJfdCB2YWx1ZSA9IDEyMzQxMjM0OwogICAgIGNo
YXIqIHB0ciA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oJnZhbHVlKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgMTA7ICsraSkKQEAgLTE0NDM3LDcgKzE0NDM0LDcgQEAgdm9pZCB0ZXN0T3B0
aW1pemVNYXRlcmlhbGl6YXRpb24oKQogICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIDB4MTIzNDIzNDUzNDU2bGx1ICsgMzUpKTsKICAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOwogICAgIAotICAgIGF1
dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CiAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgIGZvciAoQWlyOjpCYXNpY0Jsb2NrKiBi
bG9jayA6IHByb2MuY29kZSgpKSB7CiAgICAgICAgIGZvciAoQWlyOjpJbnN0JiBpbnN0IDogKmJs
b2NrKSB7CkBAIC0xNDQ5Myw3ICsxNDQ5MCw3IEBAIHZvaWQgdGVzdEF0b21pY1dlYWtDQVMoKQog
ICAgICAgICAKICAgICAgICAgZG9uZS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9y
aWdpbigpKTsKICAgICAgICAgCi0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Cisg
ICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgICAgICBUIHZhbHVlWzJd
OwogICAgICAgICB2YWx1ZVswXSA9IDQyOwogICAgICAgICB2YWx1ZVsxXSA9IDEzOwpAQCAtMTQ1
MjQsNyArMTQ1MjEsNyBAQCB2b2lkIHRlc3RBdG9taWNXZWFrQ0FTKCkKICAgICAgICAgCiAgICAg
ICAgIGRvbmUtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSk7CiAgICAg
ICAgIAotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICAgICAgVCB2YWx1ZVsyXTsKICAgICAgICAgdmFs
dWVbMF0gPSA0MjsKICAgICAgICAgdmFsdWVbMV0gPSAxMzsKQEAgLTE0NTU4LDcgKzE0NTU1LDcg
QEAgdm9pZCB0ZXN0QXRvbWljV2Vha0NBUygpCiAgICAgICAgIAogICAgICAgICBmYWlsLT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOwogICAgICAgICAKLSAgICAgICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAg
ICAgICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDYwMCw3ICsxNDU5Nyw3IEBAIHZvaWQgdGVzdEF0
b21pY1dlYWtDQVMoKQogICAgICAgICAKICAgICAgICAgZmFpbC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKICAgICAgICAgCi0gICAgICAgIGF1dG8gY29kZSA9IGNv
bXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAg
ICAgICBUIHZhbHVlWzJdOwogICAgICAgICB2YWx1ZVswXSA9IDQyOwogICAgICAgICB2YWx1ZVsx
XSA9IDEzOwpAQCAtMTQ2MjYsNyArMTQ2MjMsNyBAQCB2b2lkIHRlc3RBdG9taWNXZWFrQ0FTKCkK
ICAgICAgICAgICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwg
dHlwZSwgMHhiZWVmKSwKICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKTsKICAgICAg
ICAgCi0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgICAgICBUIHZhbHVlWzJdOwogICAgICAgICB2YWx1
ZVswXSA9IDQyOwogICAgICAgICB2YWx1ZVsxXSA9IDEzOwpAQCAtMTQ2NTUsNyArMTQ2NTIsNyBA
QCB2b2lkIHRlc3RBdG9taWNXZWFrQ0FTKCkKICAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApKSwKICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgMCkpKTsKICAgICAgICAgCi0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBp
bGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgICAg
ICBUIHZhbHVlWzJdOwogICAgICAgICB2YWx1ZVswXSA9IDQyOwogICAgICAgICB2YWx1ZVsxXSA9
IDEzOwpAQCAtMTQ2ODIsNyArMTQ2NzksNyBAQCB2b2lkIHRlc3RBdG9taWNXZWFrQ0FTKCkKICAg
ICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCiAgICAgICAgICAgICAgICAgNDIpKTsKICAg
ICAgICAgCi0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgICAgICBUIHZhbHVlWzJdOwogICAgICAgICB2
YWx1ZVswXSA9IDQyOwogICAgICAgICB2YWx1ZVsxXSA9IDEzOwpAQCAtMTQ3NDYsNyArMTQ3NDMs
NyBAQCB2b2lkIHRlc3RBdG9taWNTdHJvbmdDQVMoKQogICAgICAgICAKICAgICAgICAgZmFpbC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKICAgICAgICAgCi0gICAg
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBp
bGVQcm9jKHByb2MpOwogICAgICAgICBUIHZhbHVlWzJdOwogICAgICAgICB2YWx1ZVswXSA9IDQy
OwogICAgICAgICB2YWx1ZVsxXSA9IDEzOwpAQCAtMTQ3ODcsNyArMTQ3ODQsNyBAQCB2b2lkIHRl
c3RBdG9taWNTdHJvbmdDQVMoKQogICAgICAgICAKICAgICAgICAgZmFpbC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKICAgICAgICAgCi0gICAgICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OwogICAgICAgICBUIHZhbHVlWzJdOwogICAgICAgICB2YWx1ZVswXSA9IDQyOwogICAgICAgICB2
YWx1ZVsxXSA9IDEzOwpAQCAtMTQ4MjgsNyArMTQ4MjUsNyBAQCB2b2lkIHRlc3RBdG9taWNTdHJv
bmdDQVMoKQogICAgICAgICAKICAgICAgICAgZmFpbC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpKTsKICAgICAgICAgCi0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgICAgICBU
IHZhbHVlWzJdOwogICAgICAgICB2YWx1ZVswXSA9IDQyOwogICAgICAgICB2YWx1ZVsxXSA9IDEz
OwpAQCAtMTQ4NTMsNyArMTQ4NTAsNyBAQCB2b2lkIHRlc3RBdG9taWNTdHJvbmdDQVMoKQogICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBl
LCAweGJlZWYpLAogICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOwogICAgICAgICAK
LSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVlWzBd
ID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDg4NSw3ICsxNDg4Miw3IEBAIHZv
aWQgdGVzdEF0b21pY1N0cm9uZ0NBUygpCiAgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSksCiAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3Jp
Z2luKCksIHR5cGUsIDQyKSkpOwogICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGls
ZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAg
IFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0g
MTM7CkBAIC0xNDkxNiw3ICsxNDkxMyw3IEBAIHZvaWQgdGVzdEF0b21pY1N0cm9uZ0NBUygpCiAg
ICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigp
LCB0eXBlLCA0MikpLAogICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCAwKSkpOwogICAgICAgICAgICAgCi0gICAgICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OwogICAgICAgICBUIHZhbHVlWzJdOwogICAgICAgICB2YWx1ZVswXSA9IDQyOwogICAgICAgICB2
YWx1ZVsxXSA9IDEzOwpAQCAtMTQ5OTcsNyArMTQ5OTQsNyBAQCB2b2lkIHRlc3RBdG9taWNYY2hn
KEIzOjpPcGNvZGUgb3Bjb2RlKQogICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0
YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCAxKSwKICAgICAgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCkpKTsKICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAg
ICAgICAgIHZhbHVlWzBdID0gNTsKICAgICAgICAgdmFsdWVbMV0gPSAxMDA7CkBAIC0xNTAxNyw3
ICsxNTAxNCw3IEBAIHZvaWQgdGVzdEF0b21pY1hjaGcoQjM6Ok9wY29kZSBvcGNvZGUpCiAgICAg
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUs
IDQyKSwKICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKTsKICAgICAKLSAgICAgICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNTsKICAg
ICAgICAgdmFsdWVbMV0gPSAxMDA7CkBAIC0xNTAzNiw3ICsxNTAzMyw3IEBAIHZvaWQgdGVzdEF0
b21pY1hjaGcoQjM6Ok9wY29kZSBvcGNvZGUpCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
OwogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkp
OwogICAgIAotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICAgICAgVCB2YWx1ZVsyXTsKICAgICAgICAg
dmFsdWVbMF0gPSA1OwogICAgICAgICB2YWx1ZVsxXSA9IDEwMDsKQEAgLTE1MDU2LDcgKzE1MDUz
LDcgQEAgdm9pZCB0ZXN0QXRvbWljWGNoZyhCMzo6T3Bjb2RlIG9wY29kZSkKICAgICAgICAgICAg
IDAsIEhlYXBSYW5nZSg0MiksIEhlYXBSYW5nZSgpKTsKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKICAgICAKLSAgICAgICAgYXV0byBjb2Rl
ID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNTsKICAgICAgICAgdmFs
dWVbMV0gPSAxMDA7CkBAIC0xNTA4OSw3ICsxNTA4Niw3IEBAIHZvaWQgdGVzdERlcGVuZDMyKCkK
ICAgICB2YWx1ZXNbMF0gPSA0MjsKICAgICB2YWx1ZXNbMV0gPSAweGJlZWY7CiAgICAgCi0gICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhw
cm9jKTsKICAgICBpZiAoaXNBUk02NCgpKQogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigq
Y29kZSwgImVvciIpOwogICAgIGVsc2UgaWYgKGlzWDg2KCkpIHsKQEAgLTE1MTE5LDcgKzE1MTE2
LDcgQEAgdm9pZCB0ZXN0RGVwZW5kNjQoKQogICAgIHZhbHVlc1swXSA9IDQyOwogICAgIHZhbHVl
c1sxXSA9IDB4YmVlZjsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGlmIChpc0FSTTY0KCkpCiAgICAg
ICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiZW9yIik7CiAgICAgZWxzZSBpZiAoaXNY
ODYoKSkgewpAQCAtMTUxNTQsNyArMTUxNTEsNyBAQCB2b2lkIHRlc3RXYXNtQm91bmRzQ2hlY2so
dW5zaWduZWQgb2Zmc2V0CiAgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3QtPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAweDQyKTsKICAgICByb290LT5hcHBlbmROZXdDb250
cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKIAotICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludDMyX3Q+KCpjb2RlLCAxLCAyICsgb2Zmc2V0KSwgMHg0Mik7
CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludDMyX3Q+KCpjb2RlLCAzLCAyICsgb2Zmc2V0KSwgNDIp
OwogICAgIENIRUNLX0VRKGludm9rZTxpbnQzMl90PigqY29kZSwgMiwgMiArIG9mZnNldCksIDQy
KTsKQEAgLTE1MjA1LDcgKzE1MjAyLDcgQEAgdm9pZCB0ZXN0V2FzbUFkZHJlc3MoKQogICAgIGlu
Y1Vwc2lsb24tPnNldFBoaShpbmRleFBoaSk7CiAKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaW52b2tlPHZv
aWQ+KCpjb2RlLCBsb29wQ291bnQsIG51bVRvU3RvcmUsIHZhbHVlcy5kYXRhKCkpOwogICAgIGZv
ciAodW5zaWduZWQgdmFsdWUgOiB2YWx1ZXMpCiAgICAgICAgIENIRUNLX0VRKG51bVRvU3RvcmUs
IHZhbHVlKTsKQEAgLTE1MzE4LDcgKzE1MzE1LDYgQEAgZG91YmxlIG5lZ2F0aXZlWmVybygpCiB2
b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiB7CiAgICAgSlNDOjppbml0aWFsaXplVGhyZWFk
aW5nKCk7Ci0gICAgdm0gPSAmVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKIAogICAg
IERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiB0YXNrczsKIApAQCAtMTU5OTksNyAr
MTU5OTUsNyBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RUcnVu
Yygoc3RhdGljX2Nhc3Q8aW50NjRfdD4oMSkgPDwgNDApICsgNDIpKTsKICAgICBSVU4odGVzdEFk
ZDEoNDUpKTsKICAgICBSVU4odGVzdEFkZDFQdHIoNTEpKTsKLSAgICBSVU4odGVzdEFkZDFQdHIo
Yml0d2lzZV9jYXN0PGludHB0cl90Pih2bSkpKTsKKyAgICBSVU4odGVzdEFkZDFQdHIoc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KDB4YmFhZGJlZWYpKSk7CiAgICAgUlVOKHRlc3ROZWczMig1MikpOwog
ICAgIFJVTih0ZXN0TmVnUHRyKDUzKSk7CiAgICAgUlVOKHRlc3RTdG9yZUFkZExvYWQzMig0Nikp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCShyZXZpc2lv
biAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJQdXJlTmFOLmgiCi0jaW5jbHVkZSAi
Vk0uaCIKICNpbmNsdWRlIDxjbWF0aD4KICNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8c3RyaW5n
PgpAQCAtODAsMTQgKzc5LDEyIEBAIFN0YXRpY0xvY2sgY3Jhc2hMb2NrOwogICAgICAgICBDUkFT
SCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCi1WTSogdm07Ci0KIHN0ZDo6dW5pcXVlX3B0cjxC
Mzo6Q29tcGlsYXRpb24+IGNvbXBpbGUoQjM6OlByb2NlZHVyZSYgcHJvYykKIHsKICAgICBwcmVw
YXJlRm9yR2VuZXJhdGlvbihwcm9jLmNvZGUoKSk7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAg
ICBnZW5lcmF0ZShwcm9jLmNvZGUoKSwgaml0KTsKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
KnZtLCBqaXQsIG51bGxwdHIpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIG51bGxw
dHIpOwogCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKICAg
ICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoInRlc3RhaXIgY29tcGlsYXRpb24iKSks
IHByb2MucmVsZWFzZUJ5cHJvZHVjdHMoKSk7CkBAIC0xODQ5LDcgKzE4NDYsNiBAQCB2b2lkIHRl
c3RYODZWTVVMU0RCYXNlSW5kZXhOZWVkUmV4KCkKIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRl
cikKIHsKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLSAgICB2bSA9ICZWTTo6Y3Jl
YXRlKExhcmdlSGVhcCkubGVha1JlZigpOwogCiAgICAgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8
dm9pZCgpPj4+IHRhc2tzOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxNCw3ICs1MTQsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHlt
b3JwaGljQWNjZXNzCiAgICAgICAgIGNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZyA9
IHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZygpOwogICAgIH0KIAotICAg
IExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9u
Q2FuRmFpbCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgY29kZUJsb2NrLCBKSVRD
b21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRl
KCkpIHsKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJEaWQgZmFp
bCB0byBhbGxvY2F0ZS5cbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsNyArMzk0
LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCiAgICAgbV9zcGVjdWxhdGl2ZS0+Y3Jl
YXRlT1NSRW50cmllcygpOwogICAgIHNldEVuZE9mQ29kZSgpOwogCi0gICAgYXV0byBsaW5rQnVm
ZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPigqdm0oKSwgKnRoaXMsIG1fY29kZUJs
b2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIGF1dG8gbGlua0J1ZmZlciA9IHN0ZDo6
bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4oKnRoaXMsIG1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOwogICAgIGlmIChsaW5rQnVmZmVyLT5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAg
ICAgICAgIG1fZ3JhcGgubV9wbGFuLmZpbmFsaXplciA9IHN0ZDo6bWFrZV91bmlxdWU8RmFpbGVk
RmluYWxpemVyPihtX2dyYXBoLm1fcGxhbik7CiAgICAgICAgIHJldHVybjsKQEAgLTQ4OCw3ICs0
ODgsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIHNldEVuZE9m
Q29kZSgpOwogCiAgICAgLy8gPT09IExpbmsgPT09Ci0gICAgYXV0byBsaW5rQnVmZmVyID0gc3Rk
OjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPigqdm0oKSwgKnRoaXMsIG1fY29kZUJsb2NrLCBKSVRD
b21waWxhdGlvbkNhbkZhaWwpOworICAgIGF1dG8gbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlx
dWU8TGlua0J1ZmZlcj4oKnRoaXMsIG1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwp
OwogICAgIGlmIChsaW5rQnVmZmVyLT5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgIG1f
Z3JhcGgubV9wbGFuLmZpbmFsaXplciA9IHN0ZDo6bWFrZV91bmlxdWU8RmFpbGVkRmluYWxpemVy
PihtX2dyYXBoLm1fcGxhbik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgTGF6eUpTVmFsdWU6OmVtaXQoQ0NhbGxIZWxwZXJz
JiBqaXQKICAgICAKICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgIFtjb2RlQmxvY2ssIGxh
YmVsLCB0aGlzVmFsdWVdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBK
U1ZhbHVlIHJlYWxWYWx1ZSA9IHRoaXNWYWx1ZS5nZXRWYWx1ZShsaW5rQnVmZmVyLnZtKCkpOwor
ICAgICAgICAgICAgSlNWYWx1ZSByZWFsVmFsdWUgPSB0aGlzVmFsdWUuZ2V0VmFsdWUoKmNvZGVC
bG9jay0+dm0oKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWFsVmFsdWUuaXNDZWxs
KCkpOwogCiAgICAgICAgICAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50KHJlYWxWYWx1ZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIu
Y3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lk
IGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKIAogICAgICAgICBleGl0Q29tcGlsZXIu
Y29tcGlsZUV4aXQoKnZtLCBleGl0LCBvcGVyYW5kcywgcmVjb3ZlcnkpOwogICAgICAgICAKLSAg
ICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgY29kZUJsb2NrKTsKKyAgICAg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIGNvZGVCbG9jayk7CiAgICAgICAgIGV4aXQu
bV9jb2RlID0gRklOQUxJWkVfQ09ERV9JRigKICAgICAgICAgICAgIHNob3VsZER1bXBEaXNhc3Nl
bWJseSgpIHx8IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwKICAgICAgICAgICAgIHBhdGNoQnVmZmVy
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEy
LDcgKzEwMTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAg
ICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIocmVxdWlyZWRCeXRlcyksIEpJVENvbXBp
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21w
aWxlcjo6Y2FsbGVlRnJhbWVTbG90KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkud2l0aE9mZnNldChQ
YXlsb2FkT2Zmc2V0KSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklU
Q29tcGlsZXI6OmNhbGxlZUZyYW1lU2xvdChDYWxsRnJhbWVTbG90OjpjYWxsZWUpLndpdGhPZmZz
ZXQoVGFnT2Zmc2V0KSwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICBtX2ppdC5lbWl0RHVtYlZp
cnR1YWxDYWxsKGluZm8pOworICAgICAgICBtX2ppdC5lbWl0RHVtYlZpcnR1YWxDYWxsKCptX2pp
dC52bSgpLCBpbmZvKTsKICAgICAgICAgCiAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAg
ICAgICBzZXRSZXN1bHRBbmRSZXNldFN0YWNrKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIxNDU0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk2Niw3ICs5NjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHBhcnQgd2hlcmUgd2UgbWVh
bnQgdG8gbWFrZSBhIG5vcm1hbCBjYWxsLiBPb3BzLgogICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1
c3RlZEltbTMyKHJlcXVpcmVkQnl0ZXMpLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwogICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1lU2xvdChD
YWxsRnJhbWVTbG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIG1faml0LmVt
aXREdW1iVmlydHVhbENhbGwoY2FsbExpbmtJbmZvKTsKKyAgICAgICAgbV9qaXQuZW1pdER1bWJW
aXJ0dWFsQ2FsbCgqbV9qaXQudm0oKSwgY2FsbExpbmtJbmZvKTsKICAgICAgICAgCiAgICAgICAg
IGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICBzZXRSZXN1bHRBbmRSZXNldFN0YWNrKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAyMTQ1
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkzLDcgKzkzLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5l
cmF0aW9uVAogICAgIAogICAgIGppdC5qdW1wKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJl
c3MoJnZtLT5vc3JFeGl0SnVtcERlc3RpbmF0aW9uKSk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGZ1bmN0aW9uQ2FsbCwgY29tcGlsZU9TUkV4aXQpOwogICAgIApAQCAtMTQwLDcgKzE0MCw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFbnRyeVRodW5rR2VuZXIKIAogICAgIGppdC5q
dW1wKEdQUkluZm86OnJlZ1QxKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCAoIkRGRyBPU1IgZW50cnkgdGh1bmsiKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDggKzE0
MSw3IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5k
bGVyKSk7CiAgICAgICAgIH0pOwogCi0gICAgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVm
ZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPigKLSAgICAgICAgdm0sIGppdCwgY29k
ZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIHN0YXRlLmZpbmFsaXplci0+YjND
b2RlTGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4oaml0LCBjb2RlQmxv
Y2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKHN0YXRlLmZpbmFsaXplci0+YjND
b2RlTGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAgICAgICBzdGF0ZS5hbGxv
Y2F0aW9uRmFpbGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAkocmV2aXNpb24gMjE0NTQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw4ICs1NSw2IEBAIHZvaWQgTGF6eVNsb3dQYXRoOjpnZW5lcmF0ZShDb2Rl
QmxvY2sqIGMKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9zdHViKTsKIAotICAgIFZNJiB2bSA9
ICpjb2RlQmxvY2stPnZtKCk7Ci0KICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CiAg
ICAgR2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBl
eGNlcHRpb25KdW1wczsKQEAgLTY1LDcgKzYzLDcgQEAgdm9pZCBMYXp5U2xvd1BhdGg6OmdlbmVy
YXRlKENvZGVCbG9jayogYwogCiAgICAgbV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CiAK
LSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbk11c3RTdWNjZWVkKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBjb2RlQmxv
Y2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwogICAgIGxpbmtCdWZmZXIubGluayhwYXJh
bXMuZG9uZUp1bXBzLCBtX2RvbmUpOwogICAgIGlmIChtX2V4Y2VwdGlvblRhcmdldCkKICAgICAg
ICAgbGlua0J1ZmZlci5saW5rKGV4Y2VwdGlvbkp1bXBzLCBtX2V4Y2VwdGlvblRhcmdldCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDIxNDU0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAg
aml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBtYWluUGF0aEp1bXBzLmFw
cGVuZChqaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91
bmlxdWU8TGlua0J1ZmZlcj4odm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOworICAgICAgICAgICAgbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZl
cj4oaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgICAgICAgICBp
ZiAobGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAgICAgICAgICAgICAgIHN0
YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAg
LTE4Niw3ICsxODYsNyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICBqaXQuZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG1haW5QYXRo
SnVtcCA9IGppdC5qdW1wKCk7CiAgICAgICAgIAotICAgICAgICBsaW5rQnVmZmVyID0gc3RkOjpt
YWtlX3VuaXF1ZTxMaW5rQnVmZmVyPih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9u
Q2FuRmFpbCk7CisgICAgICAgIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZm
ZXI+KGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICBpZiAo
bGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAgICAgICAgICAgc3RhdGUuYWxs
b2NhdGlvbkZhaWxlZCA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMTQ1
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5ODEsNiArNTk4MSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luID0gY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpOwog
ICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKKyAgICAgICAgVk0qIHZtID0gJnRo
aXMtPnZtKCk7CiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgICAg
IFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOwpAQCAtNjAxOSw3ICs2MDIwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dl
bmVyYXRvcikuY29kZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygK
QEAgLTYyNzgsNiArNjI3OSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luID0gY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpOwogICAgICAgICBTdGF0
ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKKyAgICAgICAgVk0qIHZtID0gJnRoaXMtPnZtKCk7CiAg
ICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgICAgIFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAg
ICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOwpAQCAtNjMyOSw3ICs2MzMxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBq
aXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGxpbmtDYWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCku
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29k
ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBG
dW5jdGlvblB0cihsaW5rQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKQEAgLTY0MDMsNiAr
NjQwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSBjb2RlT3JpZ2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCk7CiAgICAgICAgIFN0YXRlKiBz
dGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAgICBWTSogdm0gPSAmdGhpcy0+dm0oKTsKICAgICAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAg
ICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGpp
dCk7CkBAIC02NDU2LDcgKzY0NTksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGF1dG8g
Y2FsbFdpdGhFeGNlcHRpb25DaGVjayA9IFsmXSAodm9pZCogY2FsbGVlKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsZWUpLCBH
UFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CiAgICAgICAgICAgICAgICAgICAg
IGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKLSAgICAgICAg
ICAgICAgICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soc3Rh
dGUtPnZtKCksIEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5
SGVscGVyczo6RmFySnVtcFdpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMt
PmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCp2bSwgQXNzZW1ibHlIZWxwZXJzOjpOb3Jt
YWxFeGNlcHRpb25DaGVjaywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lkdGgpKTsKICAgICAg
ICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBz
bG93Q2FzZTsKQEAgLTY1ODIsNyArNjU4NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBsaW5rQ2FsbCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci52bSgp
LmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNv
ZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwg
RnVuY3Rpb25QdHIobGlua0NhbGwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENh
bGxMb2NhdGlvbnMoCkBAIC02NjcyLDYgKzY2NzUsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxs
U2l0ZSgpOwogICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKKyAgICAgICAgVk0q
IHZtID0gJnRoaXMtPnZtKCk7CiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAg
ICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwpAQCAtNjc2Myw3ICs2NzY3LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBhdXRvIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2sgPSBbJl0gKHZv
aWQqIGNhbGxlZSkgewogICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoY2FsbGVlKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRH
UFIpOwogICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWRO
b25Bcmd1bWVudEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMtPmFwcGVuZChq
aXQuZW1pdEV4Y2VwdGlvbkNoZWNrKHN0YXRlLT52bSgpLCBBc3NlbWJseUhlbHBlcnM6Ok5vcm1h
bEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOworICAgICAg
ICAgICAgICAgICAgICBleGNlcHRpb25zLT5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjaygq
dm0sIEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVy
czo6RmFySnVtcFdpZHRoKSk7CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAg
IHVuc2lnbmVkIG9yaWdpbmFsU3RhY2tIZWlnaHQgPSBwYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgp
OwpAQCAtNjc3OSw3ICs2NzgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
IGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7
CiAKICAgICAgICAgICAgICAgICAgICAgLy8gZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Ug
bW9kaWZpZXMgdGhlIHN0YWNrIHBvaW50ZXIgaWYgaXQgc3VjY2VlZHMuCi0gICAgICAgICAgICAg
ICAgICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKHN0YXRlLT52bSgpLCBqaXQsIHNj
cmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBpbmxpbmVD
YWxsRnJhbWUsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CisgICAgICAgICAg
ICAgICAgICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKCp2bSwgaml0LCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgaW5saW5lQ2FsbEZy
YW1lLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOwogCiAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKICAgICAgICAgICAg
ICAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKQEAgLTY4NjEsNyArNjg2NSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAg
ICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsaW5rQ2FsbCA9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci52bSgpLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvciku
Y29kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIobGlua0NhbGwuZXhlY3V0YWJsZUFkZHJl
c3MoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCkBAIC02OTIyLDggKzY5MjYsOSBAQCBw
cml2YXRlOgogICAgICAgICAKICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gY29kZU9y
aWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpOwogICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9m
dGxTdGF0ZTsKKyAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIFs9LCAm
dm1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
YWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZUluZGV4ID0gc3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KGNv
ZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIApAQCAtNjk1Niw3ICs2OTYxLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKHJlcXVpcmVkQnl0ZXMpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6
Y2FsbGVlRnJhbWVTbG90KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIEdQUkluZm86OnJlZ1QwKTsK
LSAgICAgICAgICAgICAgICBqaXQuZW1pdER1bWJWaXJ0dWFsQ2FsbChjYWxsTGlua0luZm8pOwor
ICAgICAgICAgICAgICAgIGppdC5lbWl0RHVtYlZpcnR1YWxDYWxsKHZtLCBjYWxsTGlua0luZm8p
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKICAg
ICAgICAgICAgICAgICBqaXQuYWRkUHRyKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OTEsNyArNDkxLDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgcmVp
ZnlJbmxpbmVkQ2FsbEZyYW1lcyhqaXQsIGV4aXQpOwogICAgIGFkanVzdEFuZEp1bXBUb1Rhcmdl
dCgqdm0sIGppdCwgZXhpdCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0s
IGppdCwgY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgY29kZUJs
b2NrKTsKICAgICBleGl0Lm1fY29kZSA9IEZJTkFMSVpFX0NPREVfSUYoCiAgICAgICAgIHNob3Vs
ZER1bXBEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2
ZXJib3NlRlRMT1NSRXhpdCgpLAogICAgICAgICBwYXRjaEJ1ZmZlciwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0SGFuZGxlLmNwcAkocmV2aXNpb24gMjE0
NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0SGFuZGxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsMTMgKzQ0LDE0IEBAIHZvaWQgT1NSRXhpdEhhbmRsZTo6ZW1p
dEV4aXRUaHVuayhTdGF0ZSYKICAgICBqaXQucHVzaFRvU2F2ZUltbWVkaWF0ZVdpdGhvdXRUb3Vj
aGluZ1JlZ2lzdGVycyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmRleCkpOwogICAgIEND
YWxsSGVscGVyczo6UGF0Y2hhYmxlSnVtcCBqdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAg
ICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gc2VsZiA9IHRoaXM7CisgICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKICAgICBqaXQuYWRkTGlua1Rhc2soCi0gICAgICAgIFtzZWxmLCBqdW1wLCBteUxhYmVs
LCBjb21waWxhdGlvbl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgW3NlbGYs
IGp1bXAsIG15TGFiZWwsIGNvbXBpbGF0aW9uLCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CiAgICAgICAgICAgICBzZWxmLT5leGl0Lm1fcGF0Y2hhYmxlSnVtcCA9IENvZGVMb2NhdGlv
bkp1bXAobGlua0J1ZmZlci5sb2NhdGlvbk9mKGp1bXApKTsKIAogICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKAogICAgICAgICAgICAgICAgIGp1bXAubV9qdW1wLAotICAgICAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIudm0oKS5nZXRDVElTdHViKG9zckV4aXRHZW5l
cmF0aW9uVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsKHZtLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvciku
Y29kZSgpKSk7CiAgICAgICAgICAgICBpZiAoY29tcGlsYXRpb24pCiAgICAgICAgICAgICAgICAg
Y29tcGlsYXRpb24tPmFkZE9TUkV4aXRTaXRlKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG15TGFi
ZWwpLmV4ZWN1dGFibGVBZGRyZXNzKCkgfSk7CiAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkocmV2aXNpb24gMjE0NTQ3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTgsMTYgKzExOCwxNCBAQCBTbG93UGF0aENhbGxLZXkgU2xvd1BhdGhD
YWxsQ29udGV4dDo6a2V5CiAgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleShtX3RodW5rU2F2ZVNl
dCwgY2FsbFRhcmdldCwgbV9hcmd1bWVudFJlZ2lzdGVycywgbV9vZmZzZXQpOwogfQogCi1TbG93
UGF0aENhbGwgU2xvd1BhdGhDYWxsQ29udGV4dDo6bWFrZUNhbGwodm9pZCogY2FsbFRhcmdldCkK
K1Nsb3dQYXRoQ2FsbCBTbG93UGF0aENhbGxDb250ZXh0OjptYWtlQ2FsbChWTSYgdm0sIHZvaWQq
IGNhbGxUYXJnZXQpCiB7CiAgICAgU2xvd1BhdGhDYWxsIHJlc3VsdCA9IFNsb3dQYXRoQ2FsbCht
X2ppdC5jYWxsKCksIGtleVdpdGhUYXJnZXQoY2FsbFRhcmdldCkpOwogCiAgICAgbV9qaXQuYWRk
TGlua1Rhc2soCi0gICAgICAgIFtyZXN1bHRdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICBWTSYgdm0gPSBsaW5rQnVmZmVyLnZtKCk7Ci0KKyAgICAgICAgW3Jlc3VsdCwg
JnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHRodW5rID0KLSAgICAgICAgICAgICAgICB2bS5mdGxUaHVua3MtPmdldFNsb3dQ
YXRoQ2FsbFRodW5rKHZtLCByZXN1bHQua2V5KCkpOworICAgICAgICAgICAgICAgIHZtLmZ0bFRo
dW5rcy0+Z2V0U2xvd1BhdGhDYWxsVGh1bmsocmVzdWx0LmtleSgpKTsKIAogICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKHJlc3VsdC5jYWxsKCksIENvZGVMb2NhdGlvbkxhYmVsKHRodW5rLmNv
ZGUoKSkpOwogICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTbG93UGF0aENhbGwuaAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBA
QCBwdWJsaWM6CiAKICAgICAvLyBOT1RFOiBUaGUgY2FsbCB0aGF0IHRoaXMgcmV0dXJucyBpcyBh
bHJlYWR5IGdvaW5nIHRvIGJlIGxpbmtlZCBieSB0aGUgSklUIHVzaW5nIGFkZExpbmtUYXNrKCks
CiAgICAgLy8gc28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgeW91IHRvIGxpbmsgaXQgeW91cnNlbGYu
Ci0gICAgU2xvd1BhdGhDYWxsIG1ha2VDYWxsKHZvaWQqIGNhbGxUYXJnZXQpOworICAgIFNsb3dQ
YXRoQ2FsbCBtYWtlQ2FsbChWTSYsIHZvaWQqIGNhbGxUYXJnZXQpOwogCiBwcml2YXRlOgogICAg
IFNsb3dQYXRoQ2FsbEtleSBrZXlXaXRoVGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpIGNvbnN0OwpA
QCAtODQsNyArODQsNyBAQCBTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKICAgICB7CiAgICAg
ICAgIFNsb3dQYXRoQ2FsbENvbnRleHQgY29udGV4dCh1c2VkUmVnaXN0ZXJzLCBqaXQsIHNpemVv
Zi4uLihBcmd1bWVudFR5cGVzKSArIDEsIHJlc3VsdEdQUik7CiAgICAgICAgIGppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJndW1lbnRzLi4uKTsKLSAgICAgICAgY2FsbCA9IGNvbnRl
eHQubWFrZUNhbGwoZnVuY3Rpb24udmFsdWUoKSk7CisgICAgICAgIGNhbGwgPSBjb250ZXh0Lm1h
a2VDYWxsKHZtLCBmdW5jdGlvbi52YWx1ZSgpKTsKICAgICB9CiAgICAgaWYgKGV4Y2VwdGlvblRh
cmdldCkKICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0LT5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25D
aGVjayh2bSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNp
b24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICB+U3RhdGUoKTsKIAogICAg
IFZNJiB2bSgpIHsgcmV0dXJuIGdyYXBoLm1fdm07IH0KLSAgICAKKwogICAgIC8vIE5vbmUgb2Yg
dGhlc2UgdGhpbmdzIGlzIG93bmVkIGJ5IFN0YXRlLiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkg
b2YKICAgICAvLyBGVEwgcGhhc2VzIHRvIHByb3Blcmx5IG1hbmFnZSB0aGUgbGlmZWN5Y2xlIG9m
IHRoZSBtb2R1bGUgYW5kIGZ1bmN0aW9uLgogICAgIERGRzo6R3JhcGgmIGdyYXBoOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMjE0NTQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTcsNyArMTE3LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmlj
R2VuZQogCiAgICAgaml0LnJldCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
KnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmdW5jdGlvbkNhbGws
IGdlbmVyYXRpb25GdW5jdGlvbik7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsICgiJXMiLCBuYW1lKSk7CiB9CkBAIC0xNjQsNyArMTY0LDcgQEAgc3RhdGljIHZvaWQgcmVn
aXN0ZXJDbG9iYmVyQ2hlY2soQXNzZW1ibAogICAgIH0KIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKFZNJiB2bSwgY29uc3QgU2xvd1BhdGhDYWxs
S2V5JiBrZXkpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0
b3IoY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpCiB7CiAgICAgQXNzZW1ibHlIZWxwZXJzIGpp
dChudWxscHRyKTsKICAgICAKQEAgLTIyMiw3ICsyMjIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgc2xvd1BhdGhDYWxsVGh1bmtHCiAgICAgCiAgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcih2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHBhdGNoQnVmZmVyLmxp
bmsoY2FsbCwgRnVuY3Rpb25QdHIoa2V5LmNhbGxUYXJnZXQoKSkpOwogICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkZUTCBzbG93IHBhdGggY2FsbCB0aHVuayBmb3IgJXMi
LCB0b0NTdHJpbmcoa2V5KS5kYXRhKCkpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExUaHVua3MuaAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3Bh
Y2UgRlRMIHsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtH
ZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsYXp5U2xvd1BhdGhHZW5lcmF0
aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENh
bGxUaHVua0dlbmVyYXRvcihWTSYsIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYpOworTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKGNvbnN0IFNsb3dQYXRoQ2Fs
bEtleSYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlQXJndW1lbnQ+CiBzdHJ1Y3QgVGh1
bmtNYXAgewpAQCAtNTQsMTMgKzU0LDEzIEBAIHN0cnVjdCBUaHVua01hcCB7CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE1hcFR5cGUsIHR5cGVuYW1lIEdlbmVyYXRvclR5cGU+CiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgZ2VuZXJhdGVJZk5lY2Vzc2FyeSgKLSAgICBWTSYgdm0sIE1hcFR5cGUmIG1hcCwg
Y29uc3QgdHlwZW5hbWUgTWFwVHlwZTo6S2V5VHlwZSYga2V5LCBHZW5lcmF0b3JUeXBlIGdlbmVy
YXRvcikKKyAgICBNYXBUeXBlJiBtYXAsIGNvbnN0IHR5cGVuYW1lIE1hcFR5cGU6OktleVR5cGUm
IGtleSwgR2VuZXJhdG9yVHlwZSBnZW5lcmF0b3IpCiB7CiAgICAgdHlwZW5hbWUgTWFwVHlwZTo6
VG9UaHVua01hcDo6aXRlcmF0b3IgaXRlciA9IG1hcC5tX3RvVGh1bmsuZmluZChrZXkpOwogICAg
IGlmIChpdGVyICE9IG1hcC5tX3RvVGh1bmsuZW5kKCkpCiAgICAgICAgIHJldHVybiBpdGVyLT52
YWx1ZTsKICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcmVzdWx0ID0gZ2VuZXJhdG9y
KHZtLCBrZXkpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiByZXN1bHQgPSBnZW5lcmF0b3Io
a2V5KTsKICAgICBtYXAubV90b1RodW5rLmFkZChrZXksIHJlc3VsdCk7CiAgICAgbWFwLm1fZnJv
bVRodW5rLmFkZChyZXN1bHQuY29kZSgpLCBrZXkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC03
NiwxMCArNzYsMTAgQEAgdHlwZW5hbWUgTWFwVHlwZTo6S2V5VHlwZSBrZXlGb3JUaHVuayhNYQog
CiBjbGFzcyBUaHVua3MgewogcHVibGljOgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZXRT
bG93UGF0aENhbGxUaHVuayhWTSYgdm0sIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KQorICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZXRTbG93UGF0aENhbGxUaHVuayhjb25zdCBTbG93UGF0
aENhbGxLZXkmIGtleSkKICAgICB7CiAgICAgICAgIHJldHVybiBnZW5lcmF0ZUlmTmVjZXNzYXJ5
KAotICAgICAgICAgICAgdm0sIG1fc2xvd1BhdGhDYWxsVGh1bmtzLCBrZXksIHNsb3dQYXRoQ2Fs
bFRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgICAgIG1fc2xvd1BhdGhDYWxsVGh1bmtzLCBrZXks
IHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKTsKICAgICB9CiAgICAgCiAgICAgU2xvd1BhdGhD
YWxsS2V5IGtleUZvclNsb3dQYXRoQ2FsbFRodW5rKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBwdHIp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
CShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyNywxNCArNjI3LDE0IEBAIHZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXMKICNlbmRpZgogfQogCi12b2lkIEFzc2Vt
Ymx5SGVscGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsbChDYWxsTGlua0luZm8qIGluZm8pCit2b2lk
IEFzc2VtYmx5SGVscGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5m
byogaW5mbykKIHsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1Qy
KTsKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtUYXNrKAotICAgICAg
ICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3IoJmxpbmtCdWZmZXIudm0o
KSwgKmluZm8pOwotICAgICAgICAgICAgaW5mby0+c2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJv
dXRpbmUodmlydHVhbFRodW5rLCBsaW5rQnVmZmVyLnZtKCksIG51bGxwdHIsIHRydWUpKTsKKyAg
ICAgICAgWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3IoJnZtLCAq
aW5mbyk7CisgICAgICAgICAgICBpbmZvLT5zZXRTbG93U3R1YihjcmVhdGVKSVRTdHViUm91dGlu
ZSh2aXJ0dWFsVGh1bmssIHZtLCBudWxscHRyLCB0cnVlKSk7CiAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwodmlydHVhbFRodW5rLmNvZGUoKSkpOwog
ICAgICAgICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQwOSw3ICsxNDA5LDcgQEAg
cHVibGljOgogICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OlVuZGVmaW5lZCwgdHJ1ZSk7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgZW1pdER1bWJWaXJ0dWFsQ2FsbChDYWxsTGlua0luZm8qKTsK
KyAgICB2b2lkIGVtaXREdW1iVmlydHVhbENhbGwoVk0mLCBDYWxsTGlua0luZm8qKTsKICAgICAK
ICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXBGb3Io
Q29kZUJsb2NrKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzExLDE1ICszMTEsMjUgQEAgcHJpdmF0ZToKIH07CiAKIHN0YXRpYyBGaXhlZFZNUG9vbEV4ZWN1
dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvcjsKK3N0YXRpYyBFeGVjdXRhYmxlQWxsb2NhdG9yKiBl
eGVjdXRhYmxlQWxsb2NhdG9yOwogCiB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxp
emVBbGxvY2F0b3IoKQogewogICAgIEFTU0VSVCghYWxsb2NhdG9yKTsKICAgICBhbGxvY2F0b3Ig
PSBuZXcgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CiAgICAgQ29kZVByb2ZpbGlu
Zzo6bm90aWZ5QWxsb2NhdG9yKGFsbG9jYXRvcik7CisKKyAgICBleGVjdXRhYmxlQWxsb2NhdG9y
ID0gbmV3IEV4ZWN1dGFibGVBbGxvY2F0b3I7Cit9CisKK0V4ZWN1dGFibGVBbGxvY2F0b3ImIEV4
ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpCit7CisgICAgQVNTRVJUKGFsbG9jYXRvcik7
CisgICAgQVNTRVJUKGV4ZWN1dGFibGVBbGxvY2F0b3IpOworICAgIHJldHVybiAqZXhlY3V0YWJs
ZUFsbG9jYXRvcjsKIH0KIAotRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRv
cihWTSYpCitFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKCkKIHsKICAg
ICBBU1NFUlQoYWxsb2NhdG9yKTsKIH0KQEAgLTM2Miw3ICszNzIsNyBAQCBkb3VibGUgRXhlY3V0
YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVm
UHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRl
KFZNJiwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25F
ZmZvcnQgZWZmb3J0KQorUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVB
bGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJ
VENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBpZiAoT3B0aW9uczo6bG9nRXhlY3V0
YWJsZUFsbG9jYXRpb24oKSkgewogICAgICAgICBNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIHN0
YXRzID0gYWxsb2NhdG9yLT5jdXJyZW50U3RhdGlzdGljcygpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIxNDU0
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw4ICs1NSw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFz
cyBWTTsKLQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGppdEFsbG9jYXRpb25HcmFudWxlID0gMzI7
CiAKIHR5cGVkZWYgV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlIEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU7CkBAIC0xMTcsOSArMTE1LDcgQEAgY2xhc3MgRXhlY3V0YWJsZUFsbG9jYXRvciB7CiAgICAg
ZW51bSBQcm90ZWN0aW9uU2V0dGluZyB7IFdyaXRhYmxlLCBFeGVjdXRhYmxlIH07CiAKIHB1Ymxp
YzoKLSAgICBFeGVjdXRhYmxlQWxsb2NhdG9yKFZNJik7Ci0gICAgfkV4ZWN1dGFibGVBbGxvY2F0
b3IoKTsKLSAgICAKKyAgICBzdGF0aWMgRXhlY3V0YWJsZUFsbG9jYXRvciYgc2luZ2xldG9uKCk7
CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUFsbG9jYXRvcigpOwogCiAgICAgYm9vbCBpc1Zh
bGlkKCkgY29uc3Q7CkBAIC0xMzQsMTMgKzEzMCwxNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZv
aWQgZHVtcFByb2ZpbGUoKSB7IH0KICNlbmRpZgogCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IGFsbG9jYXRlKFZNJiwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJ
RCwgSklUQ29tcGlsYXRpb25FZmZvcnQpOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFu
ZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21w
aWxhdGlvbkVmZm9ydCk7CiAKICAgICBib29sIGlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGNvbnN0
IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYWRkcmVzcyk7CiAKICAgICBzdGF0aWMgc2l6ZV90IGNv
bW1pdHRlZEJ5dGVDb3VudCgpOwogCiAgICAgTG9jayYgZ2V0TG9jaygpIGNvbnN0OworcHJpdmF0
ZToKKworICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IoKTsKKyAgICB+RXhlY3V0YWJsZUFsbG9jYXRv
cigpOwogfTsKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpICYmIEVOQUJMRShBU1NFTUJMRVIpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxNiw3ICs3
MTYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAgICAgICAg
IG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCi0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlx
dWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCptX3ZtLCAqdGhpcywgbV9jb2RlQmxv
Y2ssIGVmZm9ydCkpOworICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVm
ZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIGVmZm9ydCkpOwogCiAgICAg
ZG91YmxlIGFmdGVyID0gMDsKICAgICBpZiAoVU5MSUtFTFkoY29tcHV0ZUNvbXBpbGVUaW1lcygp
KSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAy
MTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKEluc3RydQogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXpl
b2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGVtaXREdW1iVmlydHVhbENh
bGwoaW5mbyk7CisgICAgZW1pdER1bWJWaXJ0dWFsQ2FsbCgqdm0oKSwgaW5mbyk7CiAgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE1hdGhJQy5oCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgdm9pZCBnZW5l
cmF0ZU91dE9mTGluZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBGdW5jdGlvblB0ciBj
YWxsUmVwbGFjZW1lbnQpCisgICAgdm9pZCBnZW5lcmF0ZU91dE9mTGluZShDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgRnVuY3Rpb25QdHIgY2FsbFJlcGxhY2VtZW50KQogICAgIHsKICAgICAgICAgYXV0
byBsaW5rSnVtcFRvT3V0T2ZMaW5lU25pcHBldCA9IFsmXSAoKSB7CiAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CkBAIC0xNjAsNyArMTYwLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgaWYgKGdlbmVyYXRlZElubGluZSkgewogICAgICAgICAgICAgICAgIGF1dG8ganVt
cFRvRG9uZSA9IGppdC5qdW1wKCk7CiAKLSAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAg
ICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGls
YXRpb25DYW5GYWlsKTsKICAgICAgICAgICAgICAgICBpZiAoIWxpbmtCdWZmZXIuZGlkRmFpbFRv
QWxsb2NhdGUoKSkgewogICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZ2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoSnVtcHMsIHNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKICAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0RvbmUsIGRvbmVMb2NhdGlvbigp
KTsKQEAgLTIwMCw3ICsyMDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgZW5kSnVtcExpc3QuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgICAgICAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOworICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgY29kZUJs
b2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICAgICAgaWYgKGxpbmtCdWZmZXIu
ZGlkRmFpbFRvQWxsb2NhdGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9u
IDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnBy
aXZhdGVDb21waWxlQ1RJTmF0aXYKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAK
ICAgICAvLyBBbGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxpbmsg
dXAgY2FsbHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRoZSBNYWNoaW5lIG9iamVjdC4KLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgKnRoaXMsIEdMT0JBTF9USFVOS19JRCk7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lEKTsKIAogICAg
IHBhdGNoQnVmZmVyLmxpbmsobmF0aXZlQ2FsbCwgRnVuY3Rpb25QdHIoZnVuYykpOwogICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkpJVCBDVEkgbmF0aXZlIGNhbGwiKSk7
CkBAIC0xMDYxLDcgKzEwNjEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVk
UHJvcGVyCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywgbV9j
b2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2Nr
KTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVs
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVy
bkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNz
VG9TbG93UGF0aCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRp
b25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVz
cyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJu
QWRkcmVzc1RvU2xvd1BhdGgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExOSw3ICsxMTE5LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwogICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlz
LCBtX2NvZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2Rl
QmxvY2spOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9u
TGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3Mo
cmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFk
ZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVM
b2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5y
ZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzc1LDcg
KzIzNzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAgICAg
QVNTRVJUKGFyaXRoUHJvZmlsZSk7CiAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTQW5kUkhT
KG9wMSwgb3AyKTsKICAgICBhdXRvIG5vbk9wdGltaXplVmFyaWFudCA9IG9wZXJhdGlvblZhbHVl
QWRkUHJvZmlsZWROb09wdGltaXplOwotICAgIGFkZElDLT5nZW5lcmF0ZU91dE9mTGluZSgqdm0s
IGV4ZWMtPmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOworICAgIGFkZElDLT5nZW5l
cmF0ZU91dE9mTGluZShleGVjLT5jb2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsKIAog
I2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5kdW1wTWF0
aElDU3RhdHMoKTsKQEAgLTI0MDgsNyArMjQwOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVmEKICAgICBhdXRvIG5vbk9wdGltaXplVmFyaWFudCA9IG9wZXJhdGlv
blZhbHVlQWRkTm9PcHRpbWl6ZTsKICAgICBpZiAoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBhZGRJQy0+YXJpdGhQcm9maWxlKCkpCiAgICAgICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZUxI
U0FuZFJIUyhvcDEsIG9wMik7Ci0gICAgYWRkSUMtPmdlbmVyYXRlT3V0T2ZMaW5lKCp2bSwgZXhl
Yy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CisgICAgYWRkSUMtPmdlbmVyYXRl
T3V0T2ZMaW5lKGV4ZWMtPmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOwogCiAjaWYg
RU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgZXhlYy0+Y29kZUJsb2NrKCktPmR1bXBNYXRoSUNT
dGF0cygpOwpAQCAtMjQ4NSw3ICsyNDg1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25WYQogICAgIGF1dG8gbm9uT3B0aW1pemVWYXJpYW50ID0gb3BlcmF0aW9uVmFs
dWVNdWxOb09wdGltaXplOwogICAgIGlmIChBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG11
bElDLT5hcml0aFByb2ZpbGUoKSkKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTQW5k
UkhTKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDIpKTsKLSAgICBtdWxJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoKnZtLCBleGVjLT5jb2RlQmxvY2so
KSwgbm9uT3B0aW1pemVWYXJpYW50KTsKKyAgICBtdWxJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoZXhl
Yy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CiAKICNpZiBFTkFCTEUoTUFUSF9J
Q19TVEFUUykKICAgICBleGVjLT5jb2RlQmxvY2soKS0+ZHVtcE1hdGhJQ1N0YXRzKCk7CkBAIC0y
NTEyLDcgKzI1MTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZh
CiAgICAgQVNTRVJUKGFyaXRoUHJvZmlsZSk7CiAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhT
QW5kUkhTKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcDIpKTsKICAgICBhdXRvIG5vbk9wdGltaXplVmFyaWFudCA9IG9wZXJhdGlvblZhbHVlTXVs
UHJvZmlsZWROb09wdGltaXplOwotICAgIG11bElDLT5nZW5lcmF0ZU91dE9mTGluZSgqdm0sIGV4
ZWMtPmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOworICAgIG11bElDLT5nZW5lcmF0
ZU91dE9mTGluZShleGVjLT5jb2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsKIAogI2lm
IEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5kdW1wTWF0aElD
U3RhdHMoKTsKQEAgLTI1ODMsNyArMjU4Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQXIKICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG5lZ0lDLT5h
cml0aFByb2ZpbGUoKTsKICAgICBBU1NFUlQoYXJpdGhQcm9maWxlKTsKICAgICBhcml0aFByb2Zp
bGUtPm9ic2VydmVMSFMob3BlcmFuZCk7Ci0gICAgbmVnSUMtPmdlbmVyYXRlT3V0T2ZMaW5lKHZt
LCBleGVjLT5jb2RlQmxvY2soKSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCk7CisgICAg
bmVnSUMtPmdlbmVyYXRlT3V0T2ZMaW5lKGV4ZWMtPmNvZGVCbG9jaygpLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZVByb2ZpbGVkKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGV4ZWMt
PmNvZGVCbG9jaygpLT5kdW1wTWF0aElDU3RhdHMoKTsKQEAgLTI2MDcsNyArMjYwNyw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKIAogICAgIGlmIChBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG5lZ0lDLT5hcml0aFByb2ZpbGUoKSkKICAgICAgICAgYXJp
dGhQcm9maWxlLT5vYnNlcnZlTEhTKG9wZXJhbmQpOwotICAgIG5lZ0lDLT5nZW5lcmF0ZU91dE9m
TGluZSh2bSwgZXhlYy0+Y29kZUJsb2NrKCksIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKKyAgICBu
ZWdJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoZXhlYy0+Y29kZUJsb2NrKCksIG9wZXJhdGlvbkFyaXRo
TmVnYXRlKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGV4ZWMtPmNvZGVCbG9j
aygpLT5kdW1wTWF0aElDU3RhdHMoKTsKQEAgLTI2NzUsNyArMjY3NSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKICAgICBhdXRvIG5vbk9wdGltaXplVmFyaWFu
dCA9IG9wZXJhdGlvblZhbHVlU3ViTm9PcHRpbWl6ZTsKICAgICBpZiAoQXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSBzdWJJQy0+YXJpdGhQcm9maWxlKCkpCiAgICAgICAgIGFyaXRoUHJvZmls
ZS0+b2JzZXJ2ZUxIU0FuZFJIUyhKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkT3AyKSk7Ci0gICAgc3ViSUMtPmdlbmVyYXRlT3V0T2ZMaW5lKCp2bSwg
ZXhlYy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CisgICAgc3ViSUMtPmdlbmVy
YXRlT3V0T2ZMaW5lKGV4ZWMtPmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOwogCiAj
aWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgZXhlYy0+Y29kZUJsb2NrKCktPmR1bXBNYXRo
SUNTdGF0cygpOwpAQCAtMjcwMSw3ICsyNzAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25WYQogICAgIEFTU0VSVChhcml0aFByb2ZpbGUpOwogICAgIGFyaXRoUHJv
ZmlsZS0+b2JzZXJ2ZUxIU0FuZFJIUyhKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkT3AyKSk7CiAgICAgYXV0byBub25PcHRpbWl6ZVZhcmlhbnQgPSBv
cGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkTm9PcHRpbWl6ZTsKLSAgICBzdWJJQy0+Z2VuZXJhdGVP
dXRPZkxpbmUoKnZtLCBleGVjLT5jb2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsKKyAg
ICBzdWJJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoZXhlYy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXpl
VmFyaWFudCk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBleGVjLT5jb2RlQmxv
Y2soKS0+ZHVtcE1hdGhJQ1N0YXRzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDcgQEAg
Y2xhc3MgU3RydWN0dXJlOwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CiBjbGFzcyBTeW1ib2w7
CiBjbGFzcyBTeW1ib2xUYWJsZTsKK2NsYXNzIFZNOwogY2xhc3MgV2F0Y2hwb2ludFNldDsKIAog
c3RydWN0IEJ5VmFsSW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc3LDcgKzE3Nyw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5
VmFsU3R1YkdlbmUKICAgICBqaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICAgICBq
aXQucmV0KCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xP
QkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJTdHJpbmcg
Z2V0X2J5X3ZhbCBzdHViIikpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg4LDcgKzg4LDcgQEAgSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2Vu
ZQogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogICAgIGppdC5yZXQoKTsK
ICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktf
SUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwog
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIlN0cmluZyBnZXRfYnlfdmFs
IHN0dWIiKSk7CiB9CiAKQEAgLTEzMzYsNyArMTMzNiw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5VmFsKEJ5VmFsSW4KICAgICAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywgbV9jb2RlQmxvY2spOworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKICAgICAKICAgICBw
YXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUo
KSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwog
ICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fz
c2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNz
LnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1Bh
dGgpKTsKQEAgLTEzNjIsNyArMTM2Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
VmFsV2l0aENhY2gKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbiA9IGVtaXRHZXRCeVZhbFdp
dGhDYWNoZWRJZChieVZhbEluZm8sIGN1cnJlbnRJbnN0cnVjdGlvbiwgcHJvcGVydHlOYW1lLCBm
YXN0RG9uZUNhc2UsIHNsb3dEb25lQ2FzZSwgc2xvd0Nhc2VzKTsKIAogICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqbV92bSwgKnRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2Fz
ZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4
ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlW
YWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmso
ZmFzdERvbmVDYXNlLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJ
bmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0RvbmVD
YXNlLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRU
eXBlSnVtcFRvTmV4dEhvdFBhdGgpKTsKQEAgLTE0MTksNyArMTQxOSw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICAKICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywgbV9jb2RlQmxv
Y2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFs
dWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkp
OwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNy
b0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRy
ZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xv
d1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1
bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CkBAIC0xNDUz
LDcgKzE0NTMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoCiAg
ICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4gPSBlbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoYnlW
YWxJbmZvLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHB1dEtpbmQsIHByb3BlcnR5TmFtZSwgZG9uZUNh
c2VzLCBzbG93Q2FzZXMpOwogCiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVC
bG9jay0+bV9sb2NrKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywg
bV9jb2RlQmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJs
b2NrKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwo
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJu
QWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NU
b1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lQ2FzZXMsIGJ5VmFsSW5mby0+
YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7
CiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSklUU3R1YlJvdXRpbmVT
ZXQ7CitjbGFzcyBWTTsKIAogLy8gVGhpcyBpcyBhIGJhc2UtY2xhc3MgZm9yIEpJVCBzdHViIHJv
dXRpbmVzLCBhbmQgYWxzbyB0aGUgY2xhc3MgeW91IHdhbnQKIC8vIHRvIGluc3RhbnRpYXRlIGRp
cmVjdGx5IGlmIHlvdSBoYXZlIGEgcm91dGluZSB0aGF0IGRvZXMgbm90IG5lZWQgYW55CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkxLDcgKzkxLDcgQEAgdm9pZCBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKgog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsKS5leGVj
dXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIGtleSA9IGtleS53aXRoQ2FsbFRhcmdldChuZXdD
YWxsZWVGdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgbmV3Q2FsbGVlRnVu
Y3Rpb24gPSBGdW5jdGlvblB0cigKLSAgICAgICAgICAgIHRodW5rcy5nZXRTbG93UGF0aENhbGxU
aHVuayh2bSwga2V5KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICB0
aHVua3MuZ2V0U2xvd1BhdGhDYWxsVGh1bmsoa2V5KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CiAgICAgfQogI2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQpCiAgICAgVU5VU0VEX1BBUkFNKGNv
ZGVCbG9jayk7CkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAog
ICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVn
VDQpOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBzbG93ID0gc3R1YkppdC5qdW1wKCk7CiAg
ICAgICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIodm0sIHN0dWJKaXQsIG93bmVyLCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoc3R1Ykpp
dCwgb3duZXIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKHBhdGNoQnVmZmVyLmRp
ZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgbGlua1ZpcnR1YWxGb3IoZXhlYywgY2FsbExp
bmtJbmZvKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TcGVjaWFsaXplZFRodW5rSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjYsNyArMTY2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgZmluYWxpemUoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxi
YWNrLCBjb25zdCBjaGFyKiB0aHVua0tpbmQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlzLCBHTE9CQUxfVEhVTktfSUQpOworICAgICAg
ICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lEKTsKICAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFiZWwo
ZmFsbGJhY2spKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxz
LnNpemUoKTsgaSsrKQogICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1tp
XS5maXJzdCwgbV9jYWxsc1tpXS5zZWNvbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Nyw3ICs3Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb20K
ICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICBqaXQuanVtcFRvRXhjZXB0
aW9uSGFuZGxlcigqdm0pOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJUaHJv
dyBleGNlcHRpb24gZnJvbSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsKIH0KIApAQCAtMTQyLDcg
KzE0Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXIKICAgICAK
ICAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2FsbCk7CiAgICAgCi0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMaW5rIGNhbGwgc2xvdyBwYXRoIHRodW5rIikp
OwogfQogCkBAIC0xNTQsNyArMTU0LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5
bW9ycGhpY0NhbAogICAgIAogICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtQ
b2x5bW9ycGhpY0NhbGwpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBq
aXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgi
TGluayBwb2x5bW9ycGhpYyBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsKIH0KIApAQCAtMjIzLDcg
KzIyMyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0KICAgICAK
ICAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25WaXJ0dWFsQ2FsbCk7CiAgICAgCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsCiAgICAgICAgICgiVmlydHVh
bCAlcyBzbG93IHBhdGggdGh1bmsiLApAQCAtMzgyLDcgKzM4Miw3IEBAIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKIAogICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5k
bGVyKCp2bSk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxf
VEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIm5hdGl2ZSAlcyVz
IHRyYW1wb2xpbmUiLCBlbnRyeVR5cGUgPT0gRW50ZXJWaWFKdW1wV2l0aFNhdmVkVGFncyA/ICJU
YWlsIFdpdGggU2F2ZWQgVGFncyAiIDogZW50cnlUeXBlID09IEVudGVyVmlhSnVtcFdpdGhvdXRT
YXZlZFRhZ3MgPyAiVGFpbCBXaXRob3V0IFNhdmVkIFRhZ3MgIiA6ICIiLCB0b0NTdHJpbmcoa2lu
ZCkuZGF0YSgpKSk7CiB9CiAKQEAgLTUyOSw3ICs1MjksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgYXJpdHlGaXh1cEdlbmVyYXRvCiAgICAgaml0LnJldCgpOwogI2VuZGlmCiAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoImZpeHVwIGFyaXR5IikpOwogfQogCkBAIC01MzksNyAr
NTM5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHVucmVhY2hhYmxlR2VuZXJhdAogCiAgICAg
aml0LmJyZWFrcG9pbnQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQs
IEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgidW5y
ZWFjaGFibGUgdGh1bmsiKSk7CiB9CiAKQEAgLTExMjcsNyArMTEyNyw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBib3VuZFRoaXNOb0FyZ3NGdW4KICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoKTsKICAgICBqaXQucmV0KCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2
bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCk7CiAgICAgbGlua0J1ZmZlci5saW5rKG5vQ29kZSwgQ29kZUxvY2F0
aW9uTGFiZWwodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3Mo
dm0pKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCiAgICAgICAgIGxpbmtCdWZmZXIsICgi
U3BlY2lhbGl6ZWQgdGh1bmsgZm9yIGJvdW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1l
bnRzIikpOwpAQCAtMTE2Nyw3ICsxMTY3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93
RXhjZXB0aW9uRnJvbQogICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOwog
ICAgIH07CiAKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVO
S19JRCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsK
ICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERSgKICAgICAgICAgbGlua0J1ZmZlciwgKCJUaHJvdyBleGNlcHRpb24g
ZnJvbSBXYXNtIikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1
bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRU
aHVua3MuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJhdGVUaHUKICAgICBqaXQubW92ZShKU0ludGVy
ZmFjZUpJVDo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHRhcmdldCkpLCBKU0lu
dGVyZmFjZUpJVDo6cmVnVDApOwogICAgIGppdC5qdW1wKEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7
CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsK
ICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMTEludCAlcyBwcm9sb2d1
ZSB0aHVuayIsIHRodW5rS2luZCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjE0NTQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0Miw3ICszNDIsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRh
a2VTYW1wbGUoY29uc3QgCiAKICAgICAgICAgTG9ja0hvbGRlciBtYWNoaW5lVGhyZWFkc0xvY2tl
cihtX3ZtLmhlYXAubWFjaGluZVRocmVhZHMoKS5nZXRMb2NrKCkpOwogICAgICAgICBMb2NrSG9s
ZGVyIGNvZGVCbG9ja1NldExvY2tlcihtX3ZtLmhlYXAuY29kZUJsb2NrU2V0KCkuZ2V0TG9jaygp
KTsKLSAgICAgICAgTG9ja0hvbGRlciBleGVjdXRhYmxlQWxsb2NhdG9yTG9ja2VyKG1fdm0uZXhl
Y3V0YWJsZUFsbG9jYXRvci5nZXRMb2NrKCkpOworICAgICAgICBMb2NrSG9sZGVyIGV4ZWN1dGFi
bGVBbGxvY2F0b3JMb2NrZXIoRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0TG9j
aygpKTsKIAogICAgICAgICBib29sIGRpZFN1c3BlbmQgPSBtX2pzY0V4ZWN1dGlvblRocmVhZC0+
c3VzcGVuZCgpOwogICAgICAgICBpZiAoZGlkU3VzcGVuZCkgewpAQCAtMzY0LDcgKzM2NCw3IEBA
IHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBsZShjb25zdCAKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIC8vIEZJWE1FOiBMZXRzIGhhdmUgYSB3YXkgb2YgZGV0ZWN0aW5nIHdoZW4g
d2UncmUgcGFyc2luZyBjb2RlLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1Mjc2MQotICAgICAgICAgICAgaWYgKG1fdm0uZXhlY3V0YWJs
ZUFsbG9jYXRvci5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShleGVjdXRhYmxlQWxsb2NhdG9yTG9j
a2VyLCBtYWNoaW5lUEMpKSB7CisgICAgICAgICAgICBpZiAoRXhlY3V0YWJsZUFsbG9jYXRvcjo6
c2luZ2xldG9uKCkuaXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoZXhlY3V0YWJsZUFsbG9jYXRvckxv
Y2tlciwgbWFjaGluZVBDKSkgewogICAgICAgICAgICAgICAgIGlmIChtX3ZtLmlzRXhlY3V0aW5n
SW5SZWdFeHBKSVQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlJ3JlIGV4ZWN1
dGluZyBhIHJlZ2V4cC4gTGV0cyBnYXRoZXIgbW9yZSBpbnRlcnN0aW5nIGRhdGEuCiAgICAgICAg
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTI3MjkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIx
NDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTY2LDcgKzE2Niw2IEBAIHN0YXRpYyBib29sIGVuYWJsZUFzc2VtYmxlcihFeGVj
dXRhYmxlQWwKIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICA6
IG1fYXBpTG9jayhhZG9wdFJlZihuZXcgSlNMb2NrKHRoaXMpKSkKICNpZiBFTkFCTEUoQVNTRU1C
TEVSKQotICAgICwgZXhlY3V0YWJsZUFsbG9jYXRvcigqdGhpcykKICNlbmRpZgogICAgICwgaGVh
cCh0aGlzLCBoZWFwVHlwZSkKICAgICAsIGF1eGlsaWFyeVNwYWNlKCJBdXhpbGlhcnkiLCBoZWFw
LCBBbGxvY2F0b3JBdHRyaWJ1dGVzKERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpB
dXhpbGlhcnkpKQpAQCAtMTk4LDcgKzE5Nyw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFw
VHlwZSBoZWFwVHlwZSkKICAgICAsIG1fcnRUcmFjZUxpc3QobmV3IFJUVHJhY2VMaXN0KCkpCiAj
ZW5kaWYKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQotICAgICwgbV9jYW5Vc2VBc3NlbWJsZXIoZW5h
YmxlQXNzZW1ibGVyKGV4ZWN1dGFibGVBbGxvY2F0b3IpKQorICAgICwgbV9jYW5Vc2VBc3NlbWJs
ZXIoZW5hYmxlQXNzZW1ibGVyKEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpKSkKICNl
bmRpZgogI2lmIEVOQUJMRShKSVQpCiAgICAgLCBtX2NhblVzZUpJVChtX2NhblVzZUFzc2VtYmxl
ciAmJiBPcHRpb25zOjp1c2VKSVQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkod29ya2luZyBjb3B5KQpAQCAtMjg1LDE0ICsyODUsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxKU0xvY2s+IG1fYXBpTG9jazsKIAogcHVibGljOgotI2lmIEVOQUJMRShBU1NFTUJMRVIpCi0g
ICAgLy8gZXhlY3V0YWJsZUFsbG9jYXRvciBzaG91bGQgYmUgZGVzdHJ1Y3RlZCBhZnRlciB0aGUg
aGVhcCwgYXMgdGhlIGhlYXAgY2FuIGNhbGwgZXhlY3V0YWJsZUFsbG9jYXRvcgotICAgIC8vIGlu
IGl0cyBkZXN0cnVjdG9yLgotICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IgZXhlY3V0YWJsZUFsbG9j
YXRvcjsKLSNlbmRpZgotCi0gICAgLy8gVGhlIGhlYXAgc2hvdWxkIGJlIGp1c3QgYWZ0ZXIgZXhl
Y3V0YWJsZUFsbG9jYXRvciBhbmQgYmVmb3JlIG90aGVyIG1lbWJlcnMgdG8gZW5zdXJlIHRoYXQg
aXQncwotICAgIC8vIGRlc3RydWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJl
bmNlIGl0LgogICAgIEhlYXAgaGVhcDsKICAgICAKICAgICBTdWJzcGFjZSBhdXhpbGlhcnlTcGFj
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCShyZXZp
c2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDcgKzI1MCw3IEBAIHZvaWQgVk1UcmFwczo6dHJ5SW5z
dGFsbFRyYXBCcmVha3BvaW50cygKICAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNl
bmRlciB0cnkgYWdhaW4gbGF0ZXIuCiAKICAgICB7Ci0gICAgICAgIGF1dG8gYWxsb2NhdG9yID0g
dm0uZXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICAgICAgYXV0byYgYWxsb2NhdG9yID0gRXhlY3V0
YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCk7CiAgICAgICAgIGF1dG8gYWxsb2NhdG9yTG9ja2Vy
ID0gdHJ5SG9sZExvY2soYWxsb2NhdG9yLmdldExvY2soKSk7CiAgICAgICAgIGlmICghYWxsb2Nh
dG9yTG9ja2VyKQogICAgICAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0
cnkgYWdhaW4gbGF0ZXIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNw
ZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUlu
c3BlY3Rvci5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9WTUluc3BlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsOCBAQCBh
dXRvIFZNSW5zcGVjdG9yOjppc1ZhbGlkRXhlY3V0YWJsZU1lbW9yCiAjaWYgRU5BQkxFKEpJVCkK
ICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgYm9vbCBoYXNUaW1lb3V0ID0gZmFsc2U7Ci0g
ICAgaXRlcmF0ZShbJl0gKFZNJiB2bSkgLT4gRnVuY3RvclN0YXR1cyB7Ci0gICAgICAgIGF1dG8g
YWxsb2NhdG9yID0gdm0uZXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBpdGVyYXRlKFsmXSAoVk0m
KSAtPiBGdW5jdG9yU3RhdHVzIHsKKyAgICAgICAgYXV0byYgYWxsb2NhdG9yID0gRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6c2luZ2xldG9uKCk7CiAgICAgICAgIGF1dG8mIGxvY2sgPSBhbGxvY2F0b3Iu
Z2V0TG9jaygpOwogCiAgICAgICAgIGJvb2wgaXNTYWZlVG9Mb2NrID0gZW5zdXJlSXNTYWZlVG9M
b2NrKGxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5n
LmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgICAgICAgICAgICAgIEFTU0VSVCgh
IXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CiAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgICAg
ICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRocm93QmFkSTY0KTsKICAgICAgICAgICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQg
aW52YWxpZCBpNjQgdXNlIGluIGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCkpOwogICAgICAgICB9
CkBAIC00MTIsNyArNDEyLDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9K
cyhWTQogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0
aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0
aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpOwogICAgIENvZGVM
b2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRv
Q2hlY2spKTsKQEAgLTQyNiw3ICs0MjYsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHdhc21Ub0pzKFZNCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiV2Vi
QXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1
cmVEZXNjcmlwdGlvbi5hc2NpaSgpLmRhdGEoKSkpOwogfQogCi1zdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHdhc21Ub1dhc20oVk0qIHZtLCB1bnNpZ25lZCBpbXBvcnRJbmRleCkKK3N0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCkK
IHsKICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdp
c3RlckluZm86OmdldCgpOwogICAgIEpJVCBqaXQ7CkBAIC00NjIsNyArNDYyLDcgQEAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9XYXNtKAogICAgIGppdC5sb2FkUHRyKEpJVDo6
QWRkcmVzcyhzY3JhdGNoLCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpvZmZzZXRPZldhc21FbnRyeVBv
aW50Q29kZSgpKSwgc2NyYXRjaCk7CiAgICAgaml0Lmp1bXAoc2NyYXRjaCk7CiAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5XZWJBc3NlbWJseSBpbXBvcnRb
JWldIiwgaW1wb3J0SW5kZXgpKTsKIH0KIApAQCAtNDcwLDcgKzQ3MCw3IEBAIFdhc21FeGl0U3R1
YnMgZXhpdFN0dWJHZW5lcmF0b3IoVk0qIHZtLCAKIHsKICAgICBXYXNtRXhpdFN0dWJzIHN0dWJz
OwogICAgIHN0dWJzLndhc21Ub0pzID0gd2FzbVRvSnModm0sIGNhbGxMaW5rSW5mb3MsIHNpZ25h
dHVyZUluZGV4LCBpbXBvcnRJbmRleCk7Ci0gICAgc3R1YnMud2FzbVRvV2FzbSA9IHdhc21Ub1dh
c20odm0sIGltcG9ydEluZGV4KTsKKyAgICBzdHVicy53YXNtVG9XYXNtID0gd2FzbVRvV2FzbShp
bXBvcnRJbmRleCk7CiAgICAgcmV0dXJuIHN0dWJzOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NywxMyAr
MjY3LDEzIEBAIHZvaWQgUGxhbjo6Y29tcGxldGUoY29uc3QgQWJzdHJhY3RMb2NrZXIKICAgICAg
ICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3Jt
YXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwog
ICAgICAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmVEZXNjcmlwdGlvbiA9IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoJm1fdm0sIHNpZ25hdHVyZUluZGV4KS0+dG9TdHJpbmcoKTsKICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlciht
X3ZtLCAqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CisgICAgICAgICAgICAg
ICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC53YXNtRW50cnlwb2ludEpJVCwg
bnVsbHB0cik7CiAgICAgICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1
bmN0aW9uSW5kZXhdLT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbiA9CiAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPihGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsICgiV2ViQXNzZW1ibHkgZnVuY3Rpb25bJWldICVzIiwgZnVuY3Rpb25JbmRleCwg
c2lnbmF0dXJlRGVzY3JpcHRpb24uYXNjaWkoKS5kYXRhKCkpKSwgV1RGTW92ZShjb250ZXh0Lndh
c21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKG1fdm0s
ICpjb250ZXh0LmpzRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAg
IExpbmtCdWZmZXIgbGlua0J1ZmZlcigqY29udGV4dC5qc0VudHJ5cG9pbnRKSVQsIG51bGxwdHIp
OwogICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY29udGV4dC5qc0VudHJ5cG9p
bnRUb1dhc21FbnRyeXBvaW50Q2FsbCwgRnVuY3Rpb25QdHIobV93YXNtSW50ZXJuYWxGdW5jdGlv
bnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpOwogCiAgICAgICAgICAgICAgICAgICAgIG1fd2FzbUludGVybmFs
RnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLT5qc1RvV2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24g
PQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHJldmlzaW9uIDIx
NDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjQ2LDcgKzI2NDYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAg
IHZvaWQgY29tcGlsZShWTSogdm0sIFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCkKKyAgICB2b2lk
IGNvbXBpbGUoWWFyckNvZGVCbG9jayYgaml0T2JqZWN0KQogICAgIHsKICAgICAgICAgZ2VuZXJh
dGVFbnRlcigpOwogCkBAIC0yNjc0LDcgKzI2NzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGdlbmVy
YXRlKCk7CiAgICAgICAgIGJhY2t0cmFjaygpOwogCi0gICAgICAgIExpbmtCdWZmZXIgbGlua0J1
ZmZlcigqdm0sICp0aGlzLCBSRUdFWFBfQ09ERV9JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsK
KyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp0aGlzLCBSRUdFWFBfQ09ERV9JRCwgSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKICAgICAgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxs
b2NhdGUoKSkgewogICAgICAgICAgICAgaml0T2JqZWN0LnNldEZhbGxCYWNrKHRydWUpOwogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMjcyOSw5ICsyNzI5LDkgQEAgcHJpdmF0ZToKIHZvaWQgaml0
Q29tcGlsZShZYXJyUGF0dGVybiYgcGF0dGVybiwgWWFyckNoYXJTaXplIGNoYXJTaXplLCBWTSog
dm0sIFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCwgWWFyckpJVENvbXBpbGVNb2RlIG1vZGUpCiB7
CiAgICAgaWYgKG1vZGUgPT0gTWF0Y2hPbmx5KQotICAgICAgICBZYXJyR2VuZXJhdG9yPE1hdGNo
T25seT4odm0sIHBhdHRlcm4sIGNoYXJTaXplKS5jb21waWxlKHZtLCBqaXRPYmplY3QpOworICAg
ICAgICBZYXJyR2VuZXJhdG9yPE1hdGNoT25seT4odm0sIHBhdHRlcm4sIGNoYXJTaXplKS5jb21w
aWxlKGppdE9iamVjdCk7CiAgICAgZWxzZQotICAgICAgICBZYXJyR2VuZXJhdG9yPEluY2x1ZGVT
dWJwYXR0ZXJucz4odm0sIHBhdHRlcm4sIGNoYXJTaXplKS5jb21waWxlKHZtLCBqaXRPYmplY3Qp
OworICAgICAgICBZYXJyR2VuZXJhdG9yPEluY2x1ZGVTdWJwYXR0ZXJucz4odm0sIHBhdHRlcm4s
IGNoYXJTaXplKS5jb21waWxlKGppdE9iamVjdCk7CiB9CiAKIH19CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0wMy0yOSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFw
cGxlLmNvbT4KKworICAgICAgICBMaW5rQnVmZmVyIGFuZCBFeGVjdXRhYmxlQWxsb2NhdG9yIHNo
b3VsZG4ndCBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggVk0KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDIxMAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAg
ICAgICogY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDb21waWxlcjo6Y29tcGlsZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Y29tcGlsZSk6CisKIDIwMTctMDMt
MjkgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBW
YXJpYXRpb24gZm9udHM6IE1ha2Ugc3VyZSB0aGF0IGZlYXR1cmUgZGV0ZWN0aW9uIGFuZCBwcmVw
cm9jZXNzb3IgbWFjcm9zIGFyZSByaWdodApJbmRleDogU291cmNlL1dlYkNvcmUvY3Nzaml0L1Nl
bGVjdG9yQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9T
ZWxlY3RvckNvbXBpbGVyLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL1dlYkNvcmUv
Y3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNyArMjU2
LDcgQEAgc3RydWN0IEJhY2t0cmFja2luZ0xldmVsIHsKIGNsYXNzIFNlbGVjdG9yQ29kZUdlbmVy
YXRvciB7CiBwdWJsaWM6CiAgICAgU2VsZWN0b3JDb2RlR2VuZXJhdG9yKGNvbnN0IENTU1NlbGVj
dG9yKiwgU2VsZWN0b3JDb250ZXh0KTsKLSAgICBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIGNv
bXBpbGUoSlNDOjpWTSosIEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmJik7CisgICAgU2VsZWN0
b3JDb21waWxhdGlvblN0YXR1cyBjb21waWxlKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmJik7
CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZXR1
cm5SZWdpc3RlcjsKQEAgLTM5NSw3ICszOTUsNyBAQCBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVz
IGNvbXBpbGVTZWxlY3RvCiAgICAgaWYgKCF2bS0+Y2FuVXNlSklUKCkpCiAgICAgICAgIHJldHVy
biBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpDYW5ub3RDb21waWxlOwogICAgIFNlbGVjdG9y
Q29kZUdlbmVyYXRvciBjb2RlR2VuZXJhdG9yKGxhc3RTZWxlY3Rvciwgc2VsZWN0b3JDb250ZXh0
KTsKLSAgICByZXR1cm4gY29kZUdlbmVyYXRvci5jb21waWxlKHZtLCBjb2RlUmVmKTsKKyAgICBy
ZXR1cm4gY29kZUdlbmVyYXRvci5jb21waWxlKGNvZGVSZWYpOwogfQogCiBzdGF0aWMgaW5saW5l
IEZyYWdtZW50UmVsYXRpb24gZnJhZ21lbnRSZWxhdGlvbkZvclNlbGVjdG9yUmVsYXRpb24oQ1NT
U2VsZWN0b3I6OlJlbGF0aW9uVHlwZSByZWxhdGlvbikKQEAgLTEyMDgsNyArMTIwOCw3IEBAIHZv
aWQgY29tcHV0ZUJhY2t0cmFja2luZ01lbW9yeVJlcXVpcmVtZW4KICAgICB9CiB9CiAKLWlubGlu
ZSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Y29tcGls
ZShKU0M6OlZNKiB2bSwgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVSZWYpCitpbmxp
bmUgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmNvbXBp
bGUoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVSZWYpCiB7CiAgICAgc3dpdGNoICht
X2Z1bmN0aW9uVHlwZSkgewogICAgIGNhc2UgRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNo
ZWNrZXI6CkBAIC0xMjIzLDcgKzEyMjMsNyBAQCBpbmxpbmUgU2VsZWN0b3JDb21waWxhdGlvblN0
YXR1cyBTZWxlY3RvCiAgICAgICAgIHJldHVybiBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpD
YW5ub3RDb21waWxlOwogICAgIH0KIAotICAgIEpTQzo6TGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2
bSwgbV9hc3NlbWJsZXIsIENTU19DT0RFX0lELCBKU0M6OkpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7
CisgICAgSlNDOjpMaW5rQnVmZmVyIGxpbmtCdWZmZXIobV9hc3NlbWJsZXIsIENTU19DT0RFX0lE
LCBKU0M6OkpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKCFsaW5rQnVmZmVyLmlzVmFs
aWQoKSkgewogICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0
dXM6Ok5vdENvbXBpbGVkIGJ1dCB0aGF0IHdvdWxkIGNhdXNlIHVzIHRvIHJlLWVudGVyCiAgICAg
ICAgIC8vIHRoZSBDU1MgSklUIGV2ZXJ5IHRpbWUgd2UgZXZhbHVhdGUgdGhhdCBzZWxlY3Rvci4K
</data>
<flag name="review"
          id="327198"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305794</attachid>
            <date>2017-03-29 14:33:10 -0700</date>
            <delta_ts>2017-03-29 15:55:57 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>137537</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0NTYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4MyBA
QAorMjAxNy0wMy0yOSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBMaW5rQnVmZmVyIGFuZCBFeGVjdXRhYmxlQWxsb2NhdG9yIHNob3VsZG4ndCBoYXZlIGFueXRo
aW5nIHRvIGRvIHdpdGggVk0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MDIxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgTGFtLgorCisgICAg
ICAgIFRoaXMgaXMgb25lIG1vcmUgc3RlcCBpbiB0aGUgZGlyZWN0aW9uIG9mIFBJQy1pZmllZCBX
YXNtLgorICAgICAgICBMaW5rQnVmZmVyIGFuZCBFeGVjdXRhYmxlQWxsb2NhdG9yIGhhdmUgbm8g
YnVzaW5lc3Mga25vd2luZyBhYm91dCBWTS4KKworICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVm
ZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6YWxsb2NhdGUpOgorICAgICAgICAq
IGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OkxpbmtC
dWZmZXIpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjp2bSk6IERlbGV0ZWQuCisgICAgICAg
ICogYjMvQjNDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmNvbXBpbGUpOgorICAgICAg
ICAqIGIzL0IzQ29tcGlsZS5oOgorICAgICAgICAqIGIzL2Fpci90ZXN0YWlyLmNwcDoKKyAgICAg
ICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Y29tcGlsZVByb2MpOgorICAg
ICAgICAoSlNDOjpCMzo6Y29tcGlsZUFuZFJ1bik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TG9h
ZEFjcTQyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RBZGRBcmdaZXJvSW1tWkRlZik6CisgICAg
ICAgIChKU0M6OkIzOjp0ZXN0QWRkTG9hZFR3aWNlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RN
dWxMb2FkVHdpY2UpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE11bEFkZEFyZ3NMZWZ0KToKKyAg
ICAgICAgKEpTQzo6QjM6OnRlc3RNdWxBZGRBcmdzUmlnaHQpOgorICAgICAgICAoSlNDOjpCMzo6
dGVzdE11bEFkZEFyZ3NMZWZ0MzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE11bEFkZEFyZ3NS
aWdodDMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RNdWxTdWJBcmdzTGVmdCk6CisgICAgICAg
IChKU0M6OkIzOjp0ZXN0TXVsU3ViQXJnc1JpZ2h0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RN
dWxTdWJBcmdzTGVmdDMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RNdWxTdWJBcmdzUmlnaHQz
Mik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TXVsTmVnQXJncyk6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0TXVsTmVnQXJnczMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDb21wYXJlRmxvYXRU
b0RvdWJsZVRocm91Z2hQaGkpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdERvdWJsZVRvRmxvYXRU
aHJvdWdoUGhpKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RSZWR1Y2VGbG9hdFRvRG91YmxlVmFs
aWRhdGVzKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3REb3VibGVQcm9kdWNlclBoaVRvRmxvYXRD
b252ZXJzaW9uKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3REb3VibGVQcm9kdWNlclBoaVRvRmxv
YXRDb252ZXJzaW9uV2l0aERvdWJsZUNvbnN1bWVyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RE
b3VibGVQcm9kdWNlclBoaVdpdGhOb25GbG9hdENvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OnRl
c3RJVG9ENjRBcmcpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdElUb0Y2NEFyZyk6CisgICAgICAg
IChKU0M6OkIzOjp0ZXN0SVRvRDMyQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RJVG9GMzJB
cmcpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdElUb0Q2NE1lbSk6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0SVRvRjY0TWVtKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RJVG9EMzJNZW0pOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdElUb0YzMk1lbSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0SVRv
RFJlZHVjZWRUb0lUb0Y2NEFyZyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0SVRvRFJlZHVjZWRU
b0lUb0YzMkFyZyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3RvcmVSZWxBZGRMb2FkQWNxMzIp
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdFN0b3JlUmVsQWRkTG9hZEFjcTgpOgorICAgICAgICAo
SlNDOjpCMzo6dGVzdFN0b3JlUmVsQWRkRmVuY2VMb2FkQWNxOCk6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0U3RvcmVSZWxBZGRMb2FkQWNxMTYpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFN0b3Jl
UmVsQWRkTG9hZEFjcTY0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCcmFuY2gpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdEJyYW5jaFB0cik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0RGlhbW9u
ZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0QnJhbmNoTm90RXF1YWwpOgorICAgICAgICAoSlND
OjpCMzo6dGVzdEJyYW5jaE5vdEVxdWFsQ29tbXV0ZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
QnJhbmNoTm90RXF1YWxOb3RFcXVhbCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0QnJhbmNoRXF1
YWwpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJyYW5jaEVxdWFsRXF1YWwpOgorICAgICAgICAo
SlNDOjpCMzo6dGVzdEJyYW5jaEVxdWFsQ29tbXV0ZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
QnJhbmNoRXF1YWxFcXVhbDEpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJyYW5jaExvYWRQdHIp
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJyYW5jaExvYWQzMik6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0QnJhbmNoTG9hZDhTKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCcmFuY2hMb2FkOFop
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJyYW5jaExvYWQxNlMpOgorICAgICAgICAoSlNDOjpC
Mzo6dGVzdEJyYW5jaExvYWQxNlopOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJyYW5jaDhXaXRo
TG9hZDhaSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENvbXBsZXgpOgorICAgICAgICAo
SlNDOjpCMzo6dGVzdFNpbXBsZUNoZWNrKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja0Zh
bHNlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja1RydWUpOgorICAgICAgICAoSlNDOjpC
Mzo6dGVzdENoZWNrTGVzc1RoYW4pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrTWVnYUNv
bWJvKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja1RyaWNreU1lZ2FDb21ibyk6CisgICAg
ICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tUd29NZWdhQ29tYm9zKToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RDaGVja1R3b05vblJlZHVuZGFudE1lZ2FDb21ib3MpOgorICAgICAgICAoSlNDOjpCMzo6
dGVzdENoZWNrQWRkSW1tKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja0FkZEltbUNvbW11
dGUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrQWRkSW1tU29tZVJlZ2lzdGVyKToKKyAg
ICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja0FkZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hl
Y2tBZGQ2NCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tBZGRGb2xkKToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RDaGVja0FkZEZvbGRGYWlsKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RD
aGVja0FkZFNlbGZPdmVyZmxvdzY0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja0FkZFNl
bGZPdmVyZmxvdzMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja1N1YkltbSk6CisgICAg
ICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tTdWJCYWRJbW0pOgorICAgICAgICAoSlNDOjpCMzo6dGVz
dENoZWNrU3ViKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja1N1YjY0KToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RDaGVja1N1YkZvbGQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNr
U3ViRm9sZEZhaWwpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrTmVnKToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RDaGVja05lZzY0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja011
bCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tNdWxNZW1vcnkpOgorICAgICAgICAoSlND
OjpCMzo6dGVzdENoZWNrTXVsMik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tNdWw2NCk6
CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tNdWxGb2xkKToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RDaGVja011bEZvbGRGYWlsKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja011bDY0
U1Nocik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3dpdGNoKToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RTd2l0Y2hDaGlsbERpdik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3dpdGNoVGFyZ2V0
dGluZ1NhbWVCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3dpdGNoVGFyZ2V0dGluZ1Nh
bWVCbG9ja0ZvbGRQYXRoQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJhc2ljU2Vs
ZWN0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTZWxlY3RUZXN0KToKKyAgICAgICAgKEpTQzo6
QjM6OnRlc3RTZWxlY3RDb21wYXJlRG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTZWxl
Y3REb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNlbGVjdERvdWJsZVRlc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdFNlbGVjdERvdWJsZUNvbXBhcmVEb3VibGUpOgorICAgICAgICAo
SlNDOjpCMzo6dGVzdFNlbGVjdEZsb2F0Q29tcGFyZUZsb2F0KToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RTZWxlY3RGb2xkKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTZWxlY3RJbnZlcnQpOgor
ICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrU2VsZWN0KToKKyAgICAgICAgKEpTQzo6QjM6OnRl
c3RDaGVja1NlbGVjdENoZWNrU2VsZWN0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja1Nl
bGVjdEFuZENTRSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0VHJpdmlhbEluZmluaXRlTG9vcCk6
CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Rm9sZFBhdGhFcXVhbCk6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0TFNoaWZ0U2VsZjMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RSU2hpZnRTZWxmMzIp
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdFVSU2hpZnRTZWxmMzIpOgorICAgICAgICAoSlNDOjpC
Mzo6dGVzdExTaGlmdFNlbGY2NCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0UlNoaWZ0U2VsZjY0
KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RVUlNoaWZ0U2VsZjY0KToKKyAgICAgICAgKEpTQzo6
QjM6OnRlc3RQYXRjaHBvaW50RG91YmxlUmVncyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3Bp
bGxEZWZTbWFsbGVyVGhhblVzZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3BpbGxVc2VMYXJn
ZXJUaGFuRGVmKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMYXRlUmVnaXN0ZXIpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdEludGVycHJldGVyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RFbnRy
eVN3aXRjaFNpbXBsZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0RW50cnlTd2l0Y2hOb0VudHJ5
U3dpdGNoKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RFbnRyeVN3aXRjaFdpdGhDb21tb25QYXRo
cyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0RW50cnlTd2l0Y2hXaXRoQ29tbW9uUGF0aHNBbmRO
b25Ucml2aWFsRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0RW50cnlTd2l0Y2hM
b29wKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTb21lRWFybHlSZWdpc3Rlcik6CisgICAgICAg
IChKU0M6OkIzOjp0ZXN0VGVybWluYWxQYXRjaHBvaW50VGhhdE5lZWRzVG9CZVNwaWxsZWQpOgor
ICAgICAgICAoSlNDOjpCMzo6dGVzdFRlcm1pbmFsUGF0Y2hwb2ludFRoYXROZWVkc1RvQmVTcGls
bGVkMik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0UGF0Y2hwb2ludFRlcm1pbmFsUmV0dXJuVmFs
dWUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE1lbW9yeUZlbmNlKToKKyAgICAgICAgKEpTQzo6
QjM6OnRlc3RTdG9yZUZlbmNlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMb2FkRmVuY2UpOgor
ICAgICAgICAoSlNDOjpCMzo6dGVzdFBDT3JpZ2luTWFwRG9lc250SW5zZXJ0Tm9wcyk6CisgICAg
ICAgIChKU0M6OkIzOjp0ZXN0UGluUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RY
ODZMZWFBZGRBZGRTaGxMZWZ0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RYODZMZWFBZGRBZGRT
aGxSaWdodCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0WDg2TGVhQWRkQWRkKToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RYODZMZWFBZGRTaGxSaWdodCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
WDg2TGVhQWRkU2hsTGVmdFNjYWxlMSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0WDg2TGVhQWRk
U2hsTGVmdFNjYWxlMik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0WDg2TGVhQWRkU2hsTGVmdFNj
YWxlNCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0WDg2TGVhQWRkU2hsTGVmdFNjYWxlOCk6Cisg
ICAgICAgIChKU0M6OkIzOjp0ZXN0QWRkU2hsMzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEFk
ZFNobDY0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RBZGRTaGw2NSk6CisgICAgICAgIChKU0M6
OkIzOjp0ZXN0TG9hZEJhc2VJbmRleFNoaWZ0Mik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TG9h
ZEJhc2VJbmRleFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE9wdGltaXplTWF0ZXJp
YWxpemF0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RBdG9taWNXZWFrQ0FTKToKKyAgICAg
ICAgKEpTQzo6QjM6OnRlc3RBdG9taWNTdHJvbmdDQVMpOgorICAgICAgICAoSlNDOjpCMzo6dGVz
dEF0b21pY1hjaGcpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdERlcGVuZDMyKToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3REZXBlbmQ2NCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0V2FzbUJvdW5k
c0NoZWNrKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RXYXNtQWRkcmVzcyk6CisgICAgICAgIChK
U0M6OkIzOjpydW4pOgorICAgICAgICAoSlNDOjpCMzo6Y29tcGlsZSk6IERlbGV0ZWQuCisgICAg
ICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpQb2x5
bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgICogZGZn
L0RGR0xhenlKU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6ZW1p
dCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAg
ICogZGZnL0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3NyRXhpdEdlbmVyYXRp
b25UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6b3NyRW50cnlUaHVua0dlbmVy
YXRvcik6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMYXp5U2xvd1BhdGguY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OkxhenlTbG93UGF0aDo6Z2VuZXJhdGUpOgorICAgICAgICAqIGZ0bC9GVExMaW5r
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpsaW5rKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZUNhbGxPckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzU3ByZWFkKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ2FsbEV2YWwpOgorICAg
ICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNv
bXBpbGVTdHViKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdEhhbmRsZS5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6T1NSRXhpdEhhbmRsZTo6ZW1pdEV4aXRUaHVuayk6CisgICAgICAgICogZnRs
L0ZUTFNsb3dQYXRoQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsQ29u
dGV4dDo6bWFrZUNhbGwpOgorICAgICAgICAqIGZ0bC9GVExTbG93UGF0aENhbGwuaDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMU3RhdGUuaDoK
KyAgICAgICAgKiBmdGwvRlRMVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpnZW5lcmlj
R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpzbG93UGF0aENh
bGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgICogZnRsL0ZUTFRodW5rcy5oOgorICAgICAgICAo
SlNDOjpGVEw6OmdlbmVyYXRlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpGVEw6OlRodW5r
czo6Z2V0U2xvd1BhdGhDYWxsVGh1bmspOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMu
Y3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXREdW1iVmlydHVhbENhbGwp
OgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6Omlu
aXRpYWxpemVBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpz
aW5nbGV0b24pOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxl
QWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUp
OgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmg6CisgICAgICAgICogaml0L0pJ
VC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKToKKyAgICAg
ICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFs
U2xvd0Nhc2UpOgorICAgICAgICAqIGppdC9KSVRNYXRoSUMuaDoKKyAgICAgICAgKEpTQzo6SklU
TWF0aElDOjpnZW5lcmF0ZU91dE9mTGluZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToK
KyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpw
cml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgICogaml0L0pJVE9wZXJh
dGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpzdHJpbmdHZXRCeVZh
bFN0dWJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlW
YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVk
SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAg
ICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpz
dHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9KSVRTdHViUm91dGlu
ZS5oOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6ZnRsVGh1bmtB
d2FyZVJlcGF0Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbCk6Cisg
ICAgICAgICogaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaDoKKyAgICAgICAgKEpTQzo6U3BlY2lh
bGl6ZWRUaHVua0pJVDo6ZmluYWxpemUpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMu
Y3BwOgorICAgICAgICAoSlNDOjp0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6bGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6dmly
dHVhbFRodW5rRm9yKToKKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6YXJpdHlGaXh1cEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnVucmVhY2hhYmxl
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJh
dG9yKToKKyAgICAgICAgKiBsbGludC9MTEludFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkxM
SW50OjpnZW5lcmF0ZVRodW5rV2l0aEp1bXBUbyk6CisgICAgICAgICogcnVudGltZS9TYW1wbGlu
Z1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBs
ZSk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6Cisg
ICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk1UcmFwcy5jcHA6Cisg
ICAgICAgIChKU0M6OlZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMpOgorICAgICAg
ICAqIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21CaW5kaW5nLmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSnMpOgorICAgICAgICAoSlNDOjpXYXNtOjp3
YXNtVG9XYXNtKToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZXhpdFN0dWJHZW5lcmF0b3IpOgorICAg
ICAgICAqIHdhc20vV2FzbVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpjb21w
bGV0ZSk6CisgICAgICAgICogeWFyci9ZYXJySklULmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6
WWFyckdlbmVyYXRvcjo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OllhcnI6OmppdENvbXBpbGUp
OgorCiAyMDE3LTAzLTI5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZW1vdmUgb2Jzb2xldGUgcmVmZXJlbmNlcyB0byBIZWFwVGltZXIgaW4gSmF2YVNjcmlwdENv
cmUub3JkZXIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZm
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlu
a0J1ZmZlci5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAK
ICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
Ik9wdGlvbnMuaCIKLSNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9Db21waWxhdGlvblRo
cmVhZC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTI0Miw4ICsyNDEsNyBAQCB2b2lkIExpbmtC
dWZmZXI6OmFsbG9jYXRlKE1hY3JvQXNzZW1ibGVyCiAgICAgICAgIGluaXRpYWxTaXplID0gbWFj
cm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKICAgICB9CiAgICAgCi0gICAgQVNT
RVJUKG1fdm0gIT0gbnVsbHB0cik7Ci0gICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gbV92bS0+ZXhl
Y3V0YWJsZUFsbG9jYXRvci5hbGxvY2F0ZSgqbV92bSwgaW5pdGlhbFNpemUsIG93bmVyVUlELCBl
ZmZvcnQpOworICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNp
bmdsZXRvbigpLmFsbG9jYXRlKGluaXRpYWxTaXplLCBvd25lclVJRCwgZWZmb3J0KTsKICAgICBp
ZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29kZSA9IG1f
ZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NyArNDMsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvZGVCbG9jazsKLWNsYXNzIFZN
OwogCiAvLyBMaW5rQnVmZmVyOgogLy8KQEAgLTc5LDExICs3OCwxMCBAQCBjbGFzcyBMaW5rQnVm
ZmVyIHsKICNlbmRpZgogCiBwdWJsaWM6Ci0gICAgTGlua0J1ZmZlcihWTSYgdm0sIE1hY3JvQXNz
ZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCA9IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpCisgICAgTGlua0J1ZmZlcihN
YWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxh
dGlvbkVmZm9ydCBlZmZvcnQgPSBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKQogICAgICAgICA6
IG1fc2l6ZSgwKQogICAgICAgICAsIG1fZGlkQWxsb2NhdGUoZmFsc2UpCiAgICAgICAgICwgbV9j
b2RlKDApCi0gICAgICAgICwgbV92bSgmdm0pCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1f
Y29tcGxldGVkKGZhbHNlKQogI2VuZGlmCkBAIC05NSw3ICs5Myw2IEBAIHB1YmxpYzoKICAgICAg
ICAgOiBtX3NpemUoc2l6ZSkKICAgICAgICAgLCBtX2RpZEFsbG9jYXRlKGZhbHNlKQogICAgICAg
ICAsIG1fY29kZShjb2RlKQotICAgICAgICAsIG1fdm0oMCkKICNpZm5kZWYgTkRFQlVHCiAgICAg
ICAgICwgbV9jb21wbGV0ZWQoZmFsc2UpCiAjZW5kaWYKQEAgLTI1Myw4ICsyNTAsNiBAQCBwdWJs
aWM6CiAgICAgYm9vbCB3YXNBbHJlYWR5RGlzYXNzZW1ibGVkKCkgY29uc3QgeyByZXR1cm4gbV9h
bHJlYWR5RGlzYXNzZW1ibGVkOyB9CiAgICAgdm9pZCBkaWRBbHJlYWR5RGlzYXNzZW1ibGUoKSB7
IG1fYWxyZWFkeURpc2Fzc2VtYmxlZCA9IHRydWU7IH0KIAotICAgIFZNJiB2bSgpIHsgcmV0dXJu
ICptX3ZtOyB9Ci0KIHByaXZhdGU6CiAjaWYgRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQogICAg
IGludCBleGVjdXRhYmxlT2Zmc2V0Rm9yKGludCBsb2NhdGlvbikKQEAgLTMwNSw3ICszMDAsNiBA
QCBwcml2YXRlOgogI2VuZGlmCiAgICAgYm9vbCBtX2RpZEFsbG9jYXRlOwogICAgIHZvaWQqIG1f
Y29kZTsKLSAgICBWTSogbV92bTsKICNpZm5kZWYgTkRFQlVHCiAgICAgYm9vbCBtX2NvbXBsZXRl
ZDsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5jcHAJKHJl
dmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgewogCi1Db21waWxhdGlvbiBjb21waWxlKFZNJiB2bSwgUHJvY2VkdXJlJiBwcm9j
LCB1bnNpZ25lZCBvcHRMZXZlbCkKK0NvbXBpbGF0aW9uIGNvbXBpbGUoUHJvY2VkdXJlJiBwcm9j
LCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgiQ29t
cGlsYXRpb24iKTsKICAgICAKQEAgLTQ2LDcgKzQ2LDcgQEAgQ29tcGlsYXRpb24gY29tcGlsZShW
TSYgdm0sIFByb2NlZHVyZSYgcAogICAgIAogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgZ2Vu
ZXJhdGUocHJvYywgaml0KTsKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgbnVs
bHB0cik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0cik7CiAKICAgICBy
ZXR1cm4gQ29tcGlsYXRpb24oRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkIzOjpDb21waWxh
dGlvbiIpKSwgcHJvYy5yZWxlYXNlQnlwcm9kdWN0cygpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21waWxlLmgJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbXBpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBj
bGFzcyBQcm9jZWR1cmU7CiAvLyBUaGVuIHlvdSBrZWVwIHRoZSBDb21waWxhdGlvbiBvYmplY3Qg
YWxpdmUgZm9yIGFzIGxvbmcgYXMgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBydW4gdGhlIGNvZGUu
CiAvLyBJZiB0aGlzIEFQSSBmZWVscyB0b28gaGlnaC1sZXZlbCwgeW91IGNhbiB1c2UgQjM6Omdl
bmVyYXRlKCkgZGlyZWN0bHkuCiAKLUpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9uIGNvbXBp
bGUoVk0mLCBQcm9jZWR1cmUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOworSlNfRVhQT1JUX1BS
SVZBVEUgQ29tcGlsYXRpb24gY29tcGlsZShQcm9jZWR1cmUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9
IDEpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw2IEBACiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJQdXJl
TmFOLmgiCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlIDxjbWF0aD4KICNpbmNsdWRlIDxzdHJp
bmc+CiAjaW5jbHVkZSA8d3RmL0Zhc3RUTFMuaD4KQEAgLTExOCwxMSArMTE3LDkgQEAgU3RhdGlj
TG9jayBjcmFzaExvY2s7CiAgICAgICAgIENSQVNIKCk7IFwKICAgICB9IHdoaWxlIChmYWxzZSkK
IAotVk0qIHZtOwotCi1zdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNvbXBpbGUoUHJvY2Vk
dXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIG9wdExldmVsID0gMSkKK3N0ZDo6dW5pcXVlX3B0cjxD
b21waWxhdGlvbj4gY29tcGlsZVByb2MoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIG9w
dExldmVsID0gMSkKIHsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4o
QjM6OmNvbXBpbGUoKnZtLCBwcm9jZWR1cmUsIG9wdExldmVsKSk7CisgICAgcmV0dXJuIHN0ZDo6
bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KEIzOjpjb21waWxlKHByb2NlZHVyZSwgb3B0TGV2ZWwp
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgpAQCAt
MTQxLDcgKzEzOCw3IEBAIFQgaW52b2tlKGNvbnN0IENvbXBpbGF0aW9uJiBjb2RlLCBBcmd1bWUK
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KIFQgY29tcGlsZUFu
ZFJ1bihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKIHsKLSAg
ICByZXR1cm4gaW52b2tlPFQ+KCpjb21waWxlKHByb2NlZHVyZSksIGFyZ3VtZW50cy4uLik7Cisg
ICAgcmV0dXJuIGludm9rZTxUPigqY29tcGlsZVByb2MocHJvY2VkdXJlKSwgYXJndW1lbnRzLi4u
KTsKIH0KIAogdm9pZCBsb3dlclRvQWlyRm9yVGVzdGluZyhQcm9jZWR1cmUmIHByb2MpCkBAIC0z
MTIsNyArMzA5LDcgQEAgdm9pZCB0ZXN0TG9hZEFjcTQyKCkKICAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJngpLAogICAgICAgICAgICAg
MCwgSGVhcFJhbmdlKDQyKSwgSGVhcFJhbmdlKDQyKSkpOwogCi0gICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpZiAo
aXNBUk02NCgpKQogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxkYSIpOwog
ICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlKSA9PSA0Mik7CkBAIC02MTUsNyArNjEyLDcgQEAg
dm9pZCB0ZXN0QWRkQXJnWmVyb0ltbVpEZWYoKQogICAgICAgICAgICAgYXJnLAogICAgICAgICAg
ICAgY29uc3RaZXJvKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MsIDApOworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MsIDApOwogICAgIENIRUNLKGludm9rZTxpbnQ2
NF90PigqY29kZSwgMHgwMTIzNDU2Nzg5YWJjZGVmKSA9PSAweDg5YWJjZGVmKTsKIH0KIApAQCAt
NjMyLDcgKzYyOSw3IEBAIHZvaWQgdGVzdEFkZExvYWRUd2ljZSgpCiAgICAgICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBBZGQsIE9yaWdpbigpLCBsb2FkLCBsb2FkKSk7CiAKLSAgICAgICAgYXV0byBjb2RlID0g
Y29tcGlsZShwcm9jLCBvcHRMZXZlbCk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9j
KHByb2MsIG9wdExldmVsKTsKICAgICAgICAgQ0hFQ0soaW52b2tlPGludDMyX3Q+KCpjb2RlKSA9
PSA0MiAqIDIpOwogICAgIH07CiAKQEAgLTk4NCw3ICs5ODEsNyBAQCB2b2lkIHRlc3RNdWxMb2Fk
VHdpY2UoKQogICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgTXVsLCBPcmlnaW4oKSwgbG9hZCwgbG9hZCkp
OwogCi0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYywgb3B0TGV2ZWwpOworICAgICAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jLCBvcHRMZXZlbCk7CiAgICAgICAgIENIRUNL
KGludm9rZTxpbnQzMl90PigqY29kZSkgPT0gNDIgKiA0Mik7CiAgICAgfTsKIApAQCAtMTAwNCw3
ICsxMDAxLDcgQEAgdm9pZCB0ZXN0TXVsQWRkQXJnc0xlZnQoKQogICAgIFZhbHVlKiBhZGRlZCA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgbXVsdGlwbGllZCwg
YXJnMik7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIGFkZGVkKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIHRlc3RWYWx1ZXMgPSBpbnQ2
NE9wZXJhbmRzKCk7CiAgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CkBAIC0xMDI4LDcg
KzEwMjUsNyBAQCB2b2lkIHRlc3RNdWxBZGRBcmdzUmlnaHQoKQogICAgIFZhbHVlKiBhZGRlZCA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYXJnMCwgbXVsdGlw
bGllZCk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIGFkZGVkKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIHRlc3RWYWx1ZXMgPSBpbnQ2
NE9wZXJhbmRzKCk7CiAgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CkBAIC0xMDU1LDcg
KzEwNTIsNyBAQCB2b2lkIHRlc3RNdWxBZGRBcmdzTGVmdDMyKCkKICAgICBWYWx1ZSogYWRkZWQg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIG11bHRpcGxpZWQs
IGFyZzIpOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCBhZGRlZCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgYXV0byB0ZXN0VmFsdWVzID0gaW50
MzJPcGVyYW5kcygpOwogICAgIGZvciAoYXV0byBhIDogdGVzdFZhbHVlcykgewpAQCAtMTA4Miw3
ICsxMDc5LDcgQEAgdm9pZCB0ZXN0TXVsQWRkQXJnc1JpZ2h0MzIoKQogICAgIFZhbHVlKiBhZGRl
ZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYXJnMCwgbXVs
dGlwbGllZCk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwg
T3JpZ2luKCksIGFkZGVkKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIHRlc3RWYWx1ZXMgPSBp
bnQzMk9wZXJhbmRzKCk7CiAgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CkBAIC0xMTA2
LDcgKzExMDMsNyBAQCB2b2lkIHRlc3RNdWxTdWJBcmdzTGVmdCgpCiAgICAgVmFsdWUqIGFkZGVk
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCBtdWx0aXBsaWVk
LCBhcmcyKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgYWRkZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGlu
dDY0T3BlcmFuZHMoKTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTExMzAs
NyArMTEyNyw3IEBAIHZvaWQgdGVzdE11bFN1YkFyZ3NSaWdodCgpCiAgICAgVmFsdWUqIGFkZGVk
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCBhcmcwLCBtdWx0
aXBsaWVkKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgYWRkZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9IGlu
dDY0T3BlcmFuZHMoKTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTExNTcs
NyArMTE1NCw3IEBAIHZvaWQgdGVzdE11bFN1YkFyZ3NMZWZ0MzIoKQogICAgIFZhbHVlKiBhZGRl
ZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgbXVsdGlwbGll
ZCwgYXJnMik7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwg
T3JpZ2luKCksIGFkZGVkKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIHRlc3RWYWx1ZXMgPSBp
bnQzMk9wZXJhbmRzKCk7CiAgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CkBAIC0xMTg0
LDcgKzExODEsNyBAQCB2b2lkIHRlc3RNdWxTdWJBcmdzUmlnaHQzMigpCiAgICAgVmFsdWUqIGFk
ZGVkID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCBhcmcwLCBt
dWx0aXBsaWVkKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgYWRkZWQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGF1dG8gdGVzdFZhbHVlcyA9
IGludDMyT3BlcmFuZHMoKTsKICAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKQEAgLTEy
MDgsNyArMTIwNSw3IEBAIHZvaWQgdGVzdE11bE5lZ0FyZ3MoKQogICAgIFZhbHVlKiBhZGRlZCA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgemVybywgbXVsdGlw
bGllZCk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIGFkZGVkKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIHRlc3RWYWx1ZXMgPSBpbnQ2
NE9wZXJhbmRzKCk7CiAgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CkBAIC0xMjMyLDcg
KzEyMjksNyBAQCB2b2lkIHRlc3RNdWxOZWdBcmdzMzIoKQogICAgIFZhbHVlKiBhZGRlZCA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgemVybywgbXVsdGlwbGll
ZCk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2lu
KCksIGFkZGVkKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBj
b2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIHRlc3RWYWx1ZXMgPSBpbnQzMk9w
ZXJhbmRzKCk7CiAgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CkBAIC00NjM2LDcgKzQ2
MzMsNyBAQCB2b2lkIHRlc3RDb21wYXJlRmxvYXRUb0RvdWJsZVRocm91Z2hQaGkoCiAgICAgVmFs
dWUqIGVxdWFsID0gdGFpbC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBFcXVhbCwgT3JpZ2luKCks
IGRvdWJsZUlucHV0LCBhcmcyQXNGUm91bmRlZERvdWJsZSk7CiAgICAgdGFpbC0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIGVxdWFsKTsKIAotICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CiAgICAgaW50MzJfdCBpbnRlZ2VyQSA9IGJpdHdpc2VfY2FzdDxpbnQzMl90PihhKTsKICAgICBk
b3VibGUgZG91YmxlQiA9IGI7CiAgICAgQ0hFQ0soaW52b2tlPGludDY0X3Q+KCpjb2RlLCAxLCBp
bnRlZ2VyQSwgZG91YmxlQikgPT0gKGEgPT0gYikpOwpAQCAtNDY4NSw3ICs0NjgyLDcgQEAgdm9p
ZCB0ZXN0RG91YmxlVG9GbG9hdFRocm91Z2hQaGkoZmxvYXQgdgogICAgIFZhbHVlKiBmbG9hdFJl
c3VsdCA9IHRhaWwtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgRG91YmxlVG9GbG9hdCwgT3JpZ2lu
KCksIGRvdWJsZUlucHV0KTsKICAgICB0YWlsLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwgZmxvYXRSZXN1bHQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGls
ZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhp
c0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpjb2RlLCAxLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4o
dmFsdWUpKSwgdmFsdWUgKyA0Mi41ZikpOwogICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxm
bG9hdD4oKmNvZGUsIDAsIGJpdHdpc2VfY2FzdDxpbnQzMl90Pih2YWx1ZSkpLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oTV9QSSkpKTsKIH0KQEAgLTQ3NDAsNyArNDczNyw3IEBAIHZvaWQgdGVzdFJlZHVj
ZUZsb2F0VG9Eb3VibGVWYWxpZGF0ZXMoKQogICAgICAgICAgICAgcmVzdWx0KTsKICAgICB0YWls
LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsK
IAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGls
ZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqY29kZSwg
MSksIDExLjVmICogMTEuNWYgKyBzdGF0aWNfY2FzdDxmbG9hdD4oYml0d2lzZV9jYXN0PGRvdWJs
ZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEpKSkgKyAxMS41ZikpOwogICAgIENIRUNLKGlzSWRl
bnRpY2FsKGludm9rZTxmbG9hdD4oKmNvZGUsIDApLCAxMC41ZiAqIDEwLjVmICsgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGJpdHdpc2VfY2FzdDxkb3VibGU+KHN0YXRpY19jYXN0PHVpbnQ2NF90PigwKSkp
ICsgMTAuNWYpKTsKIH0KQEAgLTQ3ODAsNyArNDc3Nyw3IEBAIHZvaWQgdGVzdERvdWJsZVByb2R1
Y2VyUGhpVG9GbG9hdENvbnZlcnMKICAgICBWYWx1ZSogZmxvYXRSZXN1bHQgPSB0YWlsLT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIERvdWJsZVRvRmxvYXQsIE9yaWdpbigpLCBmaW5hbEFkZCk7CiAg
ICAgdGFpbC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIGZs
b2F0UmVzdWx0KTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBj
b2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZs
b2F0PigqY29kZSwgMSwgYml0d2lzZV9jYXN0PGludDMyX3Q+KHZhbHVlKSksIHZhbHVlICsgdmFs
dWUpKTsKICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpjb2RlLCAwLCBiaXR3
aXNlX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSwgNDIuNWYgKyB2YWx1ZSkpOwogfQpAQCAtNDgyOSw3
ICs0ODI2LDcgQEAgdm9pZCB0ZXN0RG91YmxlUHJvZHVjZXJQaGlUb0Zsb2F0Q29udmVycwogCiAg
ICAgdGFpbC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIGRv
dWJsZUFkZCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxkb3Vi
bGU+KCpjb2RlLCAxLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSwgKHZhbHVlICsgdmFs
dWUpICsgc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpKTsKICAgICBDSEVDSyhpc0lkZW50aWNh
bChpbnZva2U8ZG91YmxlPigqY29kZSwgMCwgYml0d2lzZV9jYXN0PGludDMyX3Q+KHZhbHVlKSks
IHN0YXRpY19jYXN0PGRvdWJsZT4oKDQyLjVmICsgdmFsdWUpICsgNDIuNWYpKSk7CiB9CkBAIC00
ODY5LDcgKzQ4NjYsNyBAQCB2b2lkIHRlc3REb3VibGVQcm9kdWNlclBoaVdpdGhOb25GbG9hdENv
CiAgICAgVmFsdWUqIGZsb2F0UmVzdWx0ID0gdGFpbC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBE
b3VibGVUb0Zsb2F0LCBPcmlnaW4oKSwgZmluYWxBZGQpOwogICAgIHRhaWwtPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBmbG9hdFJlc3VsdCk7CiAKLSAgICBh
dXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHBy
b2MpOwogICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxmbG9hdD4oKmNvZGUsIDEsIGJpdHdp
c2VfY2FzdDxpbnQzMl90Pih2YWx1ZSkpLCB2YWx1ZSArIHZhbHVlKSk7CiAgICAgQ0hFQ0soaXNJ
ZGVudGljYWwoaW52b2tlPGZsb2F0PigqY29kZSwgMCwgYml0d2lzZV9jYXN0PGludDMyX3Q+KHZh
bHVlKSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb25zdFZhbHVlICsgdmFsdWUpKSk7CiB9CkBAIC01
MjI1LDcgKzUyMjIsNyBAQCB2b2lkIHRlc3RJVG9ENjRBcmcoKQogICAgIFZhbHVlKiBzcmNBc0Rv
dWJsZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIHNyYyk7
CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCks
IHNyY0FzRG91YmxlKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgZm9yIChhdXRvIHRlc3RWYWx1ZSA6IGlu
dDY0T3BlcmFuZHMoKSkKICAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGRvdWJsZT4o
KmNvZGUsIHRlc3RWYWx1ZS52YWx1ZSksIHN0YXRpY19jYXN0PGRvdWJsZT4odGVzdFZhbHVlLnZh
bHVlKSkpOwogfQpAQCAtNTIzOCw3ICs1MjM1LDcgQEAgdm9pZCB0ZXN0SVRvRjY0QXJnKCkKICAg
ICBWYWx1ZSogc3JjQXNGbG9hdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRiwg
T3JpZ2luKCksIHNyYyk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIHNyY0FzRmxvYXQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShw
cm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBmb3IgKGF1dG8g
dGVzdFZhbHVlIDogaW50NjRPcGVyYW5kcygpKQogICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChp
bnZva2U8ZmxvYXQ+KCpjb2RlLCB0ZXN0VmFsdWUudmFsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
dGVzdFZhbHVlLnZhbHVlKSkpOwogfQpAQCAtNTI1Miw3ICs1MjQ5LDcgQEAgdm9pZCB0ZXN0SVRv
RDMyQXJnKCkKICAgICBWYWx1ZSogc3JjQXNEb3VibGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIElUb0QsIE9yaWdpbigpLCBzcmMpOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBzcmNBc0RvdWJsZSk7CiAKLSAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwog
ICAgIGZvciAoYXV0byB0ZXN0VmFsdWUgOiBpbnQzMk9wZXJhbmRzKCkpCiAgICAgICAgIENIRUNL
KGlzSWRlbnRpY2FsKGludm9rZTxkb3VibGU+KCpjb2RlLCB0ZXN0VmFsdWUudmFsdWUpLCBzdGF0
aWNfY2FzdDxkb3VibGU+KHRlc3RWYWx1ZS52YWx1ZSkpKTsKIH0KQEAgLTUyNjYsNyArNTI2Myw3
IEBAIHZvaWQgdGVzdElUb0YzMkFyZygpCiAgICAgVmFsdWUqIHNyY0FzRmxvYXQgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0YsIE9yaWdpbigpLCBzcmMpOwogICAgIHJvb3QtPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBzcmNBc0Zsb2F0KTsK
IAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGls
ZVByb2MocHJvYyk7CiAgICAgZm9yIChhdXRvIHRlc3RWYWx1ZSA6IGludDMyT3BlcmFuZHMoKSkK
ICAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqY29kZSwgdGVzdFZhbHVl
LnZhbHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRlc3RWYWx1ZS52YWx1ZSkpKTsKIH0KQEAgLTUy
ODAsNyArNTI3Nyw3IEBAIHZvaWQgdGVzdElUb0Q2NE1lbSgpCiAgICAgVmFsdWUqIHNyY0FzRG91
YmxlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgbG9hZGVk
U3JjKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgc3JjQXNEb3VibGUpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBpbnQ2NF90IGluTWVtb3J5VmFs
dWU7CiAgICAgZm9yIChhdXRvIHRlc3RWYWx1ZSA6IGludDY0T3BlcmFuZHMoKSkgewogICAgICAg
ICBpbk1lbW9yeVZhbHVlID0gdGVzdFZhbHVlLnZhbHVlOwpAQCAtNTI5OCw3ICs1Mjk1LDcgQEAg
dm9pZCB0ZXN0SVRvRjY0TWVtKCkKICAgICBWYWx1ZSogc3JjQXNGbG9hdCA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgSVRvRiwgT3JpZ2luKCksIGxvYWRlZFNyYyk7CiAgICAgcm9vdC0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHNyY0FzRmxvYXQp
OwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21w
aWxlUHJvYyhwcm9jKTsKICAgICBpbnQ2NF90IGluTWVtb3J5VmFsdWU7CiAgICAgZm9yIChhdXRv
IHRlc3RWYWx1ZSA6IGludDY0T3BlcmFuZHMoKSkgewogICAgICAgICBpbk1lbW9yeVZhbHVlID0g
dGVzdFZhbHVlLnZhbHVlOwpAQCAtNTMxNiw3ICs1MzEzLDcgQEAgdm9pZCB0ZXN0SVRvRDMyTWVt
KCkKICAgICBWYWx1ZSogc3JjQXNEb3VibGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IElUb0QsIE9yaWdpbigpLCBsb2FkZWRTcmMpOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBzcmNBc0RvdWJsZSk7CiAKLSAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwog
ICAgIGludDMyX3QgaW5NZW1vcnlWYWx1ZTsKICAgICBmb3IgKGF1dG8gdGVzdFZhbHVlIDogaW50
MzJPcGVyYW5kcygpKSB7CiAgICAgICAgIGluTWVtb3J5VmFsdWUgPSB0ZXN0VmFsdWUudmFsdWU7
CkBAIC01MzM0LDcgKzUzMzEsNyBAQCB2b2lkIHRlc3RJVG9GMzJNZW0oKQogICAgIFZhbHVlKiBz
cmNBc0Zsb2F0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9GLCBPcmlnaW4oKSwg
bG9hZGVkU3JjKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgc3JjQXNGbG9hdCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2Mp
OworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGludDMyX3QgaW5NZW1v
cnlWYWx1ZTsKICAgICBmb3IgKGF1dG8gdGVzdFZhbHVlIDogaW50MzJPcGVyYW5kcygpKSB7CiAg
ICAgICAgIGluTWVtb3J5VmFsdWUgPSB0ZXN0VmFsdWUudmFsdWU7CkBAIC01MzkyLDcgKzUzODks
NyBAQCB2b2lkIHRlc3RJVG9EUmVkdWNlZFRvSVRvRjY0QXJnKCkKICAgICBWYWx1ZSogZmxvYXRS
ZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIERvdWJsZVRvRmxvYXQsIE9yaWdp
bigpLCBzcmNBc0RvdWJsZSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2Ms
IFJldHVybiwgT3JpZ2luKCksIGZsb2F0UmVzdWx0KTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBp
bGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgZm9yIChh
dXRvIHRlc3RWYWx1ZSA6IGludDY0T3BlcmFuZHMoKSkKICAgICAgICAgQ0hFQ0soaXNJZGVudGlj
YWwoaW52b2tlPGZsb2F0PigqY29kZSwgdGVzdFZhbHVlLnZhbHVlKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHRlc3RWYWx1ZS52YWx1ZSkpKTsKIH0KQEAgLTU0MDcsNyArNTQwNCw3IEBAIHZvaWQgdGVz
dElUb0RSZWR1Y2VkVG9JVG9GMzJBcmcoKQogICAgIFZhbHVlKiBmbG9hdFJlc3VsdCA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgRG91YmxlVG9GbG9hdCwgT3JpZ2luKCksIHNyY0FzRG91
YmxlKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgZmxvYXRSZXN1bHQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBmb3IgKGF1dG8gdGVzdFZhbHVl
IDogaW50MzJPcGVyYW5kcygpKQogICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8Zmxv
YXQ+KCpjb2RlLCB0ZXN0VmFsdWUudmFsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4odGVzdFZhbHVl
LnZhbHVlKSkpOwogfQpAQCAtNTc4OSw3ICs1Nzg2LDcgQEAgdm9pZCB0ZXN0U3RvcmVSZWxBZGRM
b2FkQWNxMzIoaW50IGFtb3VudAogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAg
ICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwog
Ci0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxl
UHJvYyhwcm9jKTsKICAgICBpZiAoaXNBUk02NCgpKSB7CiAgICAgICAgIGNoZWNrVXNlc0luc3Ry
dWN0aW9uKCpjb2RlLCAibGRhIik7CiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2Rl
LCAic3RsIik7CkBAIC01ODYyLDcgKzU4NTksNyBAQCB2b2lkIHRlc3RTdG9yZVJlbEFkZExvYWRB
Y3E4KGludCBhbW91bnQsCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAg
ICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9j
KHByb2MpOwogICAgIGlmIChpc0FSTTY0KCkpIHsKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rp
b24oKmNvZGUsICJsZGEiKTsKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJz
dGwiKTsKQEAgLTU5MDEsNyArNTg5OCw3IEBAIHZvaWQgdGVzdFN0b3JlUmVsQWRkRmVuY2VMb2Fk
QWNxOChpbnQgYW0KICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1
dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CiAgICAgaWYgKGlzQVJNNjQoKSkgewogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigq
Y29kZSwgImxkYSIpOwogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInN0bCIp
OwpAQCAtNTk3NCw3ICs1OTcxLDcgQEAgdm9pZCB0ZXN0U3RvcmVSZWxBZGRMb2FkQWNxMTYoaW50
IGFtb3VudAogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICByb290LT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
ICAgICBpZiAoaXNBUk02NCgpKSB7CiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2Rl
LCAibGRhIik7CiAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAic3RsIik7CkBA
IC02MDQzLDcgKzYwNDAsNyBAQCB2b2lkIHRlc3RTdG9yZVJlbEFkZExvYWRBY3E2NChpbnQgYW1v
dW50CiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUg
PSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAg
IGlmIChpc0FSTTY0KCkpIHsKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJs
ZGEiKTsKICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJzdGwiKTsKQEAgLTcw
NDksNyArNzA0Niw3IEBAIHZvaWQgdGVzdEJyYW5jaCgpCiAgICAgICAgIHByb2MsIFJldHVybiwg
T3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29k
ZSwgNDIpID09IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0K
QEAgLTcwNzQsNyArNzA3MSw3IEBAIHZvaWQgdGVzdEJyYW5jaFB0cigpCiAgICAgICAgIHByb2Ms
IFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8
aW50PigqY29kZSwgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDQyKSkgPT0gMSk7CiAgICAgQ0hFQ0so
aW52b2tlPGludD4oKmNvZGUsIHN0YXRpY19jYXN0PGludHB0cl90PigwKSkgPT0gMCk7CiB9CkBA
IC03MTA3LDcgKzcxMDQsNyBAQCB2b2lkIHRlc3REaWFtb25kKCkKICAgICBlbHNlUmVzdWx0LT5z
ZXRQaGkocGhpKTsKICAgICBkb25lLT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgcGhpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNv
ZGUsIDQyKSA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMCkgPT0gMCk7CiB9
CkBAIC03MTM3LDcgKzcxMzQsNyBAQCB2b2lkIHRlc3RCcmFuY2hOb3RFcXVhbCgpCiAgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGls
ZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhp
bnZva2U8aW50PigqY29kZSwgNDIpID09IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2Rl
LCAwKSA9PSAwKTsKIH0KQEAgLTcxNjcsNyArNzE2NCw3IEBAIHZvaWQgdGVzdEJyYW5jaE5vdEVx
dWFsQ29tbXV0ZSgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVs
c2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0g
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgNDIpID09IDEpOwogICAgIENI
RUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAwKTsKIH0KQEAgLTcyMDAsNyArNzE5Nyw3IEBA
IHZvaWQgdGVzdEJyYW5jaE5vdEVxdWFsTm90RXF1YWwoKQogICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLAogICAgICAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNv
ZGUsIDQyKSA9PSAxKTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMCkgPT0gMCk7CiB9
CkBAIC03MjMwLDcgKzcyMjcsNyBAQCB2b2lkIHRlc3RCcmFuY2hFcXVhbCgpCiAgICAgICAgIHBy
b2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShw
cm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZv
a2U8aW50PigqY29kZSwgNDIpID09IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAw
KSA9PSAwKTsKIH0KQEAgLTcyNjMsNyArNzI2MCw3IEBAIHZvaWQgdGVzdEJyYW5jaEVxdWFsRXF1
YWwoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICBlbHNlQ2FzZS0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDQyKSA9PSAxKTsKICAgICBDSEVDSyhpbnZv
a2U8aW50PigqY29kZSwgMCkgPT0gMCk7CiB9CkBAIC03MjkzLDcgKzcyOTAsNyBAQCB2b2lkIHRl
c3RCcmFuY2hFcXVhbENvbW11dGUoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAog
ICAgICAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IDEpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDQyKSA9PSAx
KTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMCkgPT0gMCk7CiB9CkBAIC03MzI2LDcg
KzczMjMsNyBAQCB2b2lkIHRlc3RCcmFuY2hFcXVhbEVxdWFsMSgpCiAgICAgICAgIHByb2MsIFJl
dHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgMSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50
PigqY29kZSwgNDIpID09IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAwKSA9PSAw
KTsKIH0KQEAgLTc3NDEsNyArNzczOCw3IEBAIHZvaWQgdGVzdEJyYW5jaExvYWRQdHIoKQogICAg
ICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29kZSA9IGNv
bXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaW50
cHRyX3QgY29uZDsKICAgICBjb25kID0gNDI7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUs
ICZjb25kKSA9PSAxKTsKQEAgLTc3NzEsNyArNzc2OCw3IEBAIHZvaWQgdGVzdEJyYW5jaExvYWQz
MigpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
ICAgICBpbnQzMl90IGNvbmQ7CiAgICAgY29uZCA9IDQyOwogICAgIENIRUNLKGludm9rZTxpbnQ+
KCpjb2RlLCAmY29uZCkgPT0gMSk7CkBAIC03ODAxLDcgKzc3OTgsNyBAQCB2b2lkIHRlc3RCcmFu
Y2hMb2FkOFMoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICBlbHNl
Q2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAg
IGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CiAgICAgaW50OF90IGNvbmQ7CiAgICAgY29uZCA9IC0xOwogICAgIENIRUNLKGludm9r
ZTxpbnQ+KCpjb2RlLCAmY29uZCkgPT0gMSk7CkBAIC03ODMxLDcgKzc4MjgsNyBAQCB2b2lkIHRl
c3RCcmFuY2hMb2FkOFooKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAg
ICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsK
IAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGls
ZVByb2MocHJvYyk7CiAgICAgdWludDhfdCBjb25kOwogICAgIGNvbmQgPSAxOwogICAgIENIRUNL
KGludm9rZTxpbnQ+KCpjb2RlLCAmY29uZCkgPT0gMSk7CkBAIC03ODYxLDcgKzc4NTgsNyBAQCB2
b2lkIHRlc3RCcmFuY2hMb2FkMTZTKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwK
ICAgICAgICAgZWxzZUNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGludDE2X3QgY29uZDsKICAgICBjb25kID0gLTE7CiAg
ICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsICZjb25kKSA9PSAxKTsKQEAgLTc4OTEsNyArNzg4
OCw3IEBAIHZvaWQgdGVzdEJyYW5jaExvYWQxNlooKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLAogICAgICAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgdWludDE2X3QgY29uZDsKICAgICBjb25k
ID0gMTsKICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJmNvbmQpID09IDEpOwpAQCAtNzkz
MSw3ICs3OTI4LDcgQEAgdm9pZCB0ZXN0QnJhbmNoOFdpdGhMb2FkOFpJbmRleCgpCiAgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGls
ZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICB1aW50MzJf
dCBjb25kOwogICAgIGNvbmQgPSAweGZmZmZmZmZmVTsgLy8gQWxsIGJ5dGVzIGFyZSAweGZmLgog
ICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAmY29uZCAtIDIsIChzaXplb2YodWludDMyX3Qp
ICogMikgPj4gbG9nU2NhbGUpID09IDEpOwpAQCAtODA2OCw3ICs4MDY1LDcgQEAgdm9pZCB0ZXN0
Q29tcGxleCh1bnNpZ25lZCBudW1WYXJzLCB1bnNpZwogCiAgICAgY3VycmVudC0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHZhcnNbMF0pOwogCi0gICAgY29t
cGlsZShwcm9jKTsKKyAgICBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIGRvdWJsZSBhZnRlciA9
IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7CiAgICAgZGF0YUxvZyh0b0NTdHJpbmco
IiAgICBUaGF0IHRvb2sgIiwgYWZ0ZXIgLSBiZWZvcmUsICIgbXMuXG4iKSk7CkBAIC04NjE3LDcg
Kzg2MTQsNyBAQCB2b2lkIHRlc3RTaW1wbGVDaGVjaygpCiAgICAgcm9vdC0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKAogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290LT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0gICAgYXV0byBjb2RlID0g
Y29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICAK
ICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgMCkgPT0gMCk7CiAgICAgQ0hFQ0soaW52b2tl
PGludD4oKmNvZGUsIDEpID09IDQyKTsKQEAgLTg2MzYsNyArODYzMyw3IEBAIHZvaWQgdGVzdENo
ZWNrRmFsc2UoKQogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKICAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgCiAgICAgQ0hFQ0soaW52b2tlPGludD4o
KmNvZGUpID09IDApOwogfQpAQCAtODY2Miw3ICs4NjU5LDcgQEAgdm9pZCB0ZXN0Q2hlY2tUcnVl
KCkKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCiAgICAgICAgIHByb2MsIFJldHVy
biwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCAwKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIAogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlKSA9
PSA0Mik7CiB9CkBAIC04NjkzLDcgKzg2OTAsNyBAQCB2b2lkIHRlc3RDaGVja0xlc3NUaGFuKCkK
ICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCiAgICAgICAgIHByb2MsIFJldHVybiwg
T3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAw
KSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOwogICAgIAogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCA0Mikg
PT0gMCk7CiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUsIDEwMDApID09IDApOwpAQCAtODcz
OSw3ICs4NzM2LDcgQEAgdm9pZCB0ZXN0Q2hlY2tNZWdhQ29tYm8oKQogICAgIHJvb3QtPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZSgKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcm9vdC0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CiAKICAgICBpbnQ4X3QgdmFsdWU7CiAgICAgdmFsdWUgPSA0MjsKQEAgLTg3OTQsNyArODc5MSw3
IEBAIHZvaWQgdGVzdENoZWNrVHJpY2t5TWVnYUNvbWJvKCkKICAgICByb290LT5hcHBlbmROZXdD
b250cm9sVmFsdWUoCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAKLSAgICBhdXRvIGNvZGUg
PSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAg
ICAgaW50OF90IHZhbHVlOwogICAgIHZhbHVlID0gNDI7CkBAIC04ODU4LDcgKzg4NTUsNyBAQCB2
b2lkIHRlc3RDaGVja1R3b01lZ2FDb21ib3MoKQogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZSgKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBp
bGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBpbnQ4
X3QgdmFsdWU7CiAgICAgdmFsdWUgPSA0MjsKQEAgLTg5MzksNyArODkzNiw3IEBAIHZvaWQgdGVz
dENoZWNrVHdvTm9uUmVkdW5kYW50TWVnYUNvbWJvcygKICAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKAogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBlbHNlQ2FzZS0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQ1KSk7CiAKLSAgICBhdXRv
IGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OwogCiAgICAgaW50OF90IHZhbHVlOwogCkBAIC04OTk0LDcgKzg5OTEsNyBAQCB2b2lkIHRlc3RD
aGVja0FkZEltbSgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrQWRkKSk7CiAK
LSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDApID09IDQyLjAp
OwogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAxKSA9PSA0My4wKTsKQEAgLTkwMzAs
NyArOTAyNyw3IEBAIHZvaWQgdGVzdENoZWNrQWRkSW1tQ29tbXV0ZSgpCiAgICAgICAgIHByb2Ms
IFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
SVRvRCwgT3JpZ2luKCksIGNoZWNrQWRkKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52
b2tlPGRvdWJsZT4oKmNvZGUsIDApID09IDQyLjApOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+
KCpjb2RlLCAxKSA9PSA0My4wKTsKQEAgLTkwNjUsNyArOTA2Miw3IEBAIHZvaWQgdGVzdENoZWNr
QWRkSW1tU29tZVJlZ2lzdGVyKCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tB
ZGQpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMCkg
PT0gNDIuMCk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDEpID09IDQzLjApOwpA
QCAtOTEwMiw3ICs5MDk5LDcgQEAgdm9pZCB0ZXN0Q2hlY2tBZGQoKQogICAgICAgICBwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpLAogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElU
b0QsIE9yaWdpbigpLCBjaGVja0FkZCkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9r
ZTxkb3VibGU+KCpjb2RlLCAwLCA0MikgPT0gNDIuMCk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJs
ZT4oKmNvZGUsIDEsIDQyKSA9PSA0My4wKTsKQEAgLTkxMzUsNyArOTEzMiw3IEBAIHZvaWQgdGVz
dENoZWNrQWRkNjQoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9yaWdpbigpLCBjaGVja0FkZCkpOwog
Ci0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxl
UHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwbGwsIDQybGwp
ID09IDQyLjApOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAxbGwsIDQybGwpID09
IDQzLjApOwpAQCAtOTE1Niw3ICs5MTUzLDcgQEAgdm9pZCB0ZXN0Q2hlY2tBZGRGb2xkKGludCBh
LCBpbnQgYikKICAgICAgICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIGNoZWNrQWRkKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBp
bGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVD
SyhpbnZva2U8aW50PigqY29kZSkgPT0gYSArIGIpOwogfQpAQCAtOTE3Nyw3ICs5MTc0LDcgQEAg
dm9pZCB0ZXN0Q2hlY2tBZGRGb2xkRmFpbChpbnQgYSwgaW50IGIpCiAgICAgICAgIH0pOwogICAg
IHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjaGVj
a0FkZCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUpID09IDQy
KTsKIH0KQEAgLTkyODQsNyArOTI4MSw3IEBAIHZvaWQgdGVzdENoZWNrQWRkU2VsZk92ZXJmbG93
NjQoKQogCiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIGNoZWNrQWRkKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8aW50NjRf
dD4oKmNvZGUsIDBsbCkgPT0gMCk7CiAgICAgQ0hFQ0soaW52b2tlPGludDY0X3Q+KCpjb2RlLCAx
bGwpID09IDIpOwpAQCAtOTMxNSw3ICs5MzEyLDcgQEAgdm9pZCB0ZXN0Q2hlY2tBZGRTZWxmT3Zl
cmZsb3czMigpCiAKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgY2hlY2tBZGQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxp
bnQzMl90PigqY29kZSwgMGxsKSA9PSAwKTsKICAgICBDSEVDSyhpbnZva2U8aW50MzJfdD4oKmNv
ZGUsIDFsbCkgPT0gMik7CkBAIC05MzUwLDcgKzkzNDcsNyBAQCB2b2lkIHRlc3RDaGVja1N1Yklt
bSgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrU3ViKSk7CiAKLSAgICBhdXRv
IGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDApID09IC00Mi4wKTsKICAgICBD
SEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMSkgPT0gLTQxLjApOwpAQCAtOTM5Miw3ICs5Mzg5
LDcgQEAgdm9pZCB0ZXN0Q2hlY2tTdWJCYWRJbW0oKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLAogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9yaWdp
bigpLCBjaGVja1N1YikpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxkb3VibGU+
KCpjb2RlLCAwKSA9PSAtc3RhdGljX2Nhc3Q8ZG91YmxlPihiYWRJbW0pKTsKICAgICBDSEVDSyhp
bnZva2U8ZG91YmxlPigqY29kZSwgLTEpID09IC1zdGF0aWNfY2FzdDxkb3VibGU+KGJhZEltbSkg
LSAxKTsKQEAgLTk0MjksNyArOTQyNiw3IEBAIHZvaWQgdGVzdENoZWNrU3ViKCkKICAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tTdWIpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBp
bGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVD
SyhpbnZva2U8ZG91YmxlPigqY29kZSwgMCwgNDIpID09IC00Mi4wKTsKICAgICBDSEVDSyhpbnZv
a2U8ZG91YmxlPigqY29kZSwgMSwgNDIpID09IC00MS4wKTsKQEAgLTk0NjcsNyArOTQ2NCw3IEBA
IHZvaWQgdGVzdENoZWNrU3ViNjQoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAog
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9yaWdpbigpLCBjaGVj
a1N1YikpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAw
bGwsIDQybGwpID09IC00Mi4wKTsKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMWxs
LCA0MmxsKSA9PSAtNDEuMCk7CkBAIC05NDg4LDcgKzk0ODUsNyBAQCB2b2lkIHRlc3RDaGVja1N1
YkZvbGQoaW50IGEsIGludCBiKQogICAgICAgICB9KTsKICAgICByb290LT5hcHBlbmROZXdDb250
cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2hlY2tTdWIpOwogCi0gICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
IAogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlKSA9PSBhIC0gYik7CiB9CkBAIC05NTA5LDcg
Kzk1MDYsNyBAQCB2b2lkIHRlc3RDaGVja1N1YkZvbGRGYWlsKGludCBhLCBpbnQgYikKICAgICAg
ICAgfSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIGNoZWNrU3ViKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBDSEVDSyhpbnZva2U8aW50Pigq
Y29kZSkgPT0gNDIpOwogfQpAQCAtOTUzOCw3ICs5NTM1LDcgQEAgdm9pZCB0ZXN0Q2hlY2tOZWco
KQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIElUb0QsIE9yaWdpbigpLCBjaGVja05lZykpOwogCi0gICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
IAogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAwKSA9PSAwLjApOwogICAgIENIRUNL
KGludm9rZTxkb3VibGU+KCpjb2RlLCAxKSA9PSAtMS4wKTsKQEAgLTk1NjgsNyArOTU2NSw3IEBA
IHZvaWQgdGVzdENoZWNrTmVnNjQoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAog
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9yaWdpbigpLCBjaGVj
a05lZykpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAw
bGwpID09IDAuMCk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDFsbCkgPT0gLTEu
MCk7CkBAIC05NjA1LDcgKzk2MDIsNyBAQCB2b2lkIHRlc3RDaGVja011bCgpCiAgICAgICAgIHBy
b2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgSVRvRCwgT3JpZ2luKCksIGNoZWNrTXVsKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxl
KHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0so
aW52b2tlPGRvdWJsZT4oKmNvZGUsIDAsIDQyKSA9PSAwLjApOwogICAgIENIRUNLKGludm9rZTxk
b3VibGU+KCpjb2RlLCAxLCA0MikgPT0gNDIuMCk7CkBAIC05NjQ2LDcgKzk2NDMsNyBAQCB2b2lk
IHRlc3RDaGVja011bE1lbW9yeSgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNr
TXVsKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgbGVmdCA9IDA7CiAgICAgcmlnaHQgPSA0MjsKQEAg
LTk2OTMsNyArOTY5MCw3IEBAIHZvaWQgdGVzdENoZWNrTXVsMigpCiAgICAgICAgIHByb2MsIFJl
dHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRv
RCwgT3JpZ2luKCksIGNoZWNrTXVsKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2Mp
OworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tl
PGRvdWJsZT4oKmNvZGUsIDApID09IDAuMCk7CiAgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNv
ZGUsIDEpID09IDIuMCk7CkBAIC05NzI2LDcgKzk3MjMsNyBAQCB2b2lkIHRlc3RDaGVja011bDY0
KCkKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tNdWwpKTsKIAotICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CiAKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMCwgNDIpID09IDAuMCk7CiAgICAg
Q0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDEsIDQyKSA9PSA0Mi4wKTsKQEAgLTk3NDcsNyAr
OTc0NCw3IEBAIHZvaWQgdGVzdENoZWNrTXVsRm9sZChpbnQgYSwgaW50IGIpCiAgICAgICAgIH0p
OwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBjaGVja011bCk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUp
ID09IGEgKiBiKTsKIH0KQEAgLTk3NjgsNyArOTc2NSw3IEBAIHZvaWQgdGVzdENoZWNrTXVsRm9s
ZEZhaWwoaW50IGEsIGludCBiKQogICAgICAgICB9KTsKICAgICByb290LT5hcHBlbmROZXdDb250
cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2hlY2tNdWwpOwogCi0gICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
IAogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlKSA9PSA0Mik7CiB9CkBAIC05ODg0LDcgKzk4
ODEsNyBAQCB2b2lkIHRlc3RDaGVja011bDY0U1NocigpCiAgICAgICAgIHByb2MsIFJldHVybiwg
T3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3Jp
Z2luKCksIGNoZWNrTXVsKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgQ0hFQ0soaW52b2tlPGRvdWJs
ZT4oKmNvZGUsIDBsbCwgNDJsbCkgPT0gMC4wKTsKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigq
Y29kZSwgMWxsLCA0MmxsKSA9PSAwLjApOwpAQCAtMTA3MzQsNyArMTA3MzEsNyBAQCB2b2lkIHRl
c3RTd2l0Y2godW5zaWduZWQgZGVncmVlLCB1bnNpZ25lCiAgICAgICAgIHN3aXRjaFZhbHVlLT5h
cHBlbmRDYXNlKFN3aXRjaENhc2UoZ2FwICogaSwgRnJlcXVlbnRlZEJsb2NrKG5ld0Jsb2NrKSkp
OwogICAgIH0KIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVn
cmVlOyArK2kpIHsKICAgICAgICAgQ0hFQ0soaW52b2tlPGludDMyX3Q+KCpjb2RlLCBpICogZ2Fw
LCA0MiwgMTEpID09ICgoaSAmIDEpID8gMTEgOiA0MikpOwpAQCAtMTA3NzcsNyArMTA3NzQsNyBA
QCB2b2lkIHRlc3RTd2l0Y2hDaGlsbERpdih1bnNpZ25lZCBkZWdyZWUsCiAgICAgICAgIHN3aXRj
aFZhbHVlLT5hcHBlbmRDYXNlKFN3aXRjaENhc2UoZ2FwICogaSwgRnJlcXVlbnRlZEJsb2NrKG5l
d0Jsb2NrKSkpOwogICAgIH0KIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZGVncmVlOyArK2kpIHsKICAgICAgICAgZGF0YUxvZygiaSA9ICIsIGksICJcbiIpOwpA
QCAtMTA4MTYsNyArMTA4MTMsNyBAQCB2b2lkIHRlc3RTd2l0Y2hUYXJnZXR0aW5nU2FtZUJsb2Nr
KCkKICAgICBzd2l0Y2hWYWx1ZS0+YXBwZW5kQ2FzZShTd2l0Y2hDYXNlKDMsIEZyZXF1ZW50ZWRC
bG9jayhvdGhlclRhcmdldCkpKTsKICAgICBzd2l0Y2hWYWx1ZS0+YXBwZW5kQ2FzZShTd2l0Y2hD
YXNlKDEzLCBGcmVxdWVudGVkQmxvY2sob3RoZXJUYXJnZXQpKSk7CiAKLSAgICBhdXRvIGNvZGUg
PSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDIwOyArK2kpIHsKICAgICAgICAgaW50MzJfdCBl
eHBlY3RlZCA9IChpID09IDMgfHwgaSA9PSAxMykgPyA0MiA6IDU7CkBAIC0xMDg0NCw3ICsxMDg0
MSw3IEBAIHZvaWQgdGVzdFN3aXRjaFRhcmdldHRpbmdTYW1lQmxvY2tGb2xkUGEKICAgICBzd2l0
Y2hWYWx1ZS0+YXBwZW5kQ2FzZShTd2l0Y2hDYXNlKDMsIEZyZXF1ZW50ZWRCbG9jayhvdGhlclRh
cmdldCkpKTsKICAgICBzd2l0Y2hWYWx1ZS0+YXBwZW5kQ2FzZShTd2l0Y2hDYXNlKDEzLCBGcmVx
dWVudGVkQmxvY2sob3RoZXJUYXJnZXQpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IDIwOyArK2kpIHsKICAgICAgICAgaW50MzJfdCBleHBlY3RlZCA9IChp
ID09IDMgfHwgaSA9PSAxMykgPyBpIDogNDI7CkBAIC0xMTIwMiw3ICsxMTE5OSw3IEBAIHZvaWQg
dGVzdEJhc2ljU2VsZWN0KCkKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKICAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIyKSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50
cHRyX3Q+KCpjb2RlLCA0MiwgMSwgMikgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGludHB0cl90
PigqY29kZSwgNDIsIDY0MjQ2MiwgMzI1MzMpID09IDY0MjQ2Mik7CiAgICAgQ0hFQ0soaW52b2tl
PGludHB0cl90PigqY29kZSwgNDMsIDEsIDIpID09IDIpOwpAQCAtMTEyMjEsNyArMTEyMTgsNyBA
QCB2b2lkIHRlc3RTZWxlY3RUZXN0KCkKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShw
cm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZv
a2U8aW50cHRyX3Q+KCpjb2RlLCA0MiwgMSwgMikgPT0gMSk7CiAgICAgQ0hFQ0soaW52b2tlPGlu
dHB0cl90PigqY29kZSwgNDIsIDY0MjQ2MiwgMzI1MzMpID09IDY0MjQ2Mik7CiAgICAgQ0hFQ0so
aW52b2tlPGludHB0cl90PigqY29kZSwgMCwgMSwgMikgPT0gMik7CkBAIC0xMTI0Myw3ICsxMTI0
MCw3IEBAIHZvaWQgdGVzdFNlbGVjdENvbXBhcmVEb3VibGUoKQogICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApLAogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSk7CiAKLSAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwog
ICAgIENIRUNLKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIC0xLjAsIDEuMCwgMSwgMikgPT0gMSk7
CiAgICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwgNDIuNSwgNDIuNTEsIDY0MjQ2Miwg
MzI1MzMpID09IDY0MjQ2Mik7CiAgICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwgUE5h
TiwgMC4wLCAxLCAyKSA9PSAyKTsKQEAgLTExMzQwLDcgKzExMzM3LDcgQEAgdm9pZCB0ZXN0U2Vs
ZWN0RG91YmxlKCkKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6YXJndW1lbnRGUFIwKSwKICAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6
YXJndW1lbnRGUFIxKSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigq
Y29kZSwgNDIsIDEuNSwgMi42KSA9PSAxLjUpOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpj
b2RlLCA0MiwgNjQyNDYyLjcsIDMyNTMzLjgpID09IDY0MjQ2Mi43KTsKICAgICBDSEVDSyhpbnZv
a2U8ZG91YmxlPigqY29kZSwgNDMsIDEuOSwgMi4wKSA9PSAyLjApOwpAQCAtMTEzNTksNyArMTEz
NTYsNyBAQCB2b2lkIHRlc3RTZWxlY3REb3VibGVUZXN0KCkKICAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6YXJndW1l
bnRGUFIwKSwKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6YXJndW1lbnRGUFIxKSkpOwogCi0gICAgYXV0byBjb2Rl
ID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAg
ICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgNDIsIDEuNSwgMi42KSA9PSAxLjUpOwogICAg
IENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCA0MiwgNjQyNDYyLjcsIDMyNTMzLjgpID09IDY0
MjQ2Mi43KTsKICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMCwgMS45LCAyLjApID09
IDIuMCk7CkBAIC0xMTM4MSw3ICsxMTM3OCw3IEBAIHZvaWQgdGVzdFNlbGVjdERvdWJsZUNvbXBh
cmVEb3VibGUoKQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjIpLAogICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjph
cmd1bWVudEZQUjMpKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpj
b2RlLCAtMS4wLCAxLjAsIDEuMSwgMi4yKSA9PSAxLjEpOwogICAgIENIRUNLKGludm9rZTxkb3Vi
bGU+KCpjb2RlLCA0Mi41LCA0Mi41MSwgNjQyNDYyLjMsIDMyNTMzLjQpID09IDY0MjQ2Mi4zKTsK
ICAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgUE5hTiwgMC4wLCAxLjUsIDIuNikgPT0g
Mi42KTsKQEAgLTExNDY3LDcgKzExNDY0LDcgQEAgdm9pZCB0ZXN0U2VsZWN0RG91YmxlQ29tcGFy
ZURvdWJsZShib29sIAogICAgICAgICAgICAgICAgICAgICBhcmcxKSwKICAgICAgICAgICAgICAg
ICBhcmcyLAogICAgICAgICAgICAgICAgIGFyZzMpKTsKLSAgICAgICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAg
ICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRvdWJsZT4oKSkg
ewogICAgICAgICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxk
b3VibGU+KCkpIHsKQEAgLTExNDk0LDcgKzExNDkxLDcgQEAgdm9pZCB0ZXN0U2VsZWN0RG91Ymxl
Q29tcGFyZURvdWJsZShib29sIAogICAgICAgICBrZWVwVmFsdWVzTGl2ZS0+c2V0R2VuZXJhdG9y
KFsmXSAoQ0NhbGxIZWxwZXJzJiwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeyB9
KTsKIAogICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgcmVzdWx0KTsKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAg
ICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICAgICAgZm9yIChhdXRv
JiBsZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRvdWJsZT4oKSkgewogICAgICAgICAgICAg
Zm9yIChhdXRvJiByaWdodCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxkb3VibGU+KCkpIHsKQEAg
LTExNTIxLDcgKzExNTE4LDcgQEAgdm9pZCB0ZXN0U2VsZWN0RG91YmxlQ29tcGFyZURvdWJsZShi
b29sIAogICAgICAgICBrZWVwVmFsdWVzTGl2ZS0+c2V0R2VuZXJhdG9yKFsmXSAoQ0NhbGxIZWxw
ZXJzJiwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeyB9KTsKIAogICAgICAgICBy
b290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0
KTsKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRp
bmdQb2ludE9wZXJhbmRzPGRvdWJsZT4oKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiByaWdo
dCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxkb3VibGU+KCkpIHsKQEAgLTExNTQ5LDcgKzExNTQ2
LDcgQEAgdm9pZCB0ZXN0U2VsZWN0RG91YmxlQ29tcGFyZURvdWJsZShib29sIAogICAgICAgICBr
ZWVwVmFsdWVzTGl2ZS0+c2V0R2VuZXJhdG9yKFsmXSAoQ0NhbGxIZWxwZXJzJiwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeyB9KTsKIAogICAgICAgICByb290LT5hcHBlbmROZXdD
b250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKLSAgICAgICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CiAKICAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRz
PGRvdWJsZT4oKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZsb2F0aW5nUG9p
bnRPcGVyYW5kczxkb3VibGU+KCkpIHsKQEAgLTExNTc1LDcgKzExNTcyLDcgQEAgdm9pZCB0ZXN0
U2VsZWN0RG91YmxlQ29tcGFyZURvdWJsZShib29sIAogICAgICAgICAgICAgICAgICAgICBhcmcx
KSwKICAgICAgICAgICAgICAgICBhcmcyLAogICAgICAgICAgICAgICAgIGFyZzApKTsKLSAgICAg
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGls
ZVByb2MocHJvYyk7CiAKICAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2ludE9w
ZXJhbmRzPGRvdWJsZT4oKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZsb2F0
aW5nUG9pbnRPcGVyYW5kczxkb3VibGU+KCkpIHsKQEAgLTExNjAxLDcgKzExNTk4LDcgQEAgdm9p
ZCB0ZXN0U2VsZWN0RG91YmxlQ29tcGFyZURvdWJsZShib29sIAogICAgICAgICBrZWVwVmFsdWVz
TGl2ZS0+c2V0R2VuZXJhdG9yKFsmXSAoQ0NhbGxIZWxwZXJzJiwgY29uc3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJikgeyB9KTsKIAogICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFs
dWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKLSAgICAgICAgYXV0byBjb2RlID0g
Y29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAK
ICAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRvdWJsZT4o
KSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5k
czxkb3VibGU+KCkpIHsKQEAgLTExNjUzLDcgKzExNjUwLDcgQEAgdm9pZCB0ZXN0U2VsZWN0Rmxv
YXRDb21wYXJlRmxvYXQoYm9vbCAoKgogICAgICAgICAgICAgICAgICAgICBhcmcxKSwKICAgICAg
ICAgICAgICAgICBhcmcyLAogICAgICAgICAgICAgICAgIGFyZzMpKTsKLSAgICAgICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CiAKICAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZs
b2F0PigpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9w
ZXJhbmRzPGZsb2F0PigpKSB7CkBAIC0xMTY4OCw3ICsxMTY4NSw3IEBAIHZvaWQgdGVzdFNlbGVj
dEZsb2F0Q29tcGFyZUZsb2F0KGJvb2wgKCoKICAgICAgICAga2VlcFZhbHVlc0xpdmUtPnNldEdl
bmVyYXRvcihbJl0gKENDYWxsSGVscGVycyYsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsgfSk7CiAKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIHJlc3VsdCk7Ci0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJv
Yyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAgICAgIGZv
ciAoYXV0byYgbGVmdCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSkgewogICAgICAg
ICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSkg
ewpAQCAtMTE3MjMsNyArMTE3MjAsNyBAQCB2b2lkIHRlc3RTZWxlY3RGbG9hdENvbXBhcmVGbG9h
dChib29sICgqCiAgICAgICAgIGtlZXBWYWx1ZXNMaXZlLT5zZXRHZW5lcmF0b3IoWyZdIChDQ2Fs
bEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7IH0pOwogCiAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBy
ZXN1bHQpOwotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAogICAgICAgICBmb3IgKGF1dG8mIGxlZnQgOiBm
bG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYg
cmlnaHQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpIHsKQEAgLTExNzU5LDcgKzEx
NzU2LDcgQEAgdm9pZCB0ZXN0U2VsZWN0RmxvYXRDb21wYXJlRmxvYXQoYm9vbCAoKgogICAgICAg
ICBrZWVwVmFsdWVzTGl2ZS0+c2V0R2VuZXJhdG9yKFsmXSAoQ0NhbGxIZWxwZXJzJiwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeyB9KTsKIAogICAgICAgICByb290LT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKLSAgICAgICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CiAKICAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJh
bmRzPGZsb2F0PigpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQ
b2ludE9wZXJhbmRzPGZsb2F0PigpKSB7CkBAIC0xMTc5MSw3ICsxMTc4OCw3IEBAIHZvaWQgdGVz
dFNlbGVjdEZsb2F0Q29tcGFyZUZsb2F0KGJvb2wgKCoKICAgICAgICAgICAgICAgICAgICAgYXJn
MSksCiAgICAgICAgICAgICAgICAgYXJnMiwKICAgICAgICAgICAgICAgICBhcmcwKSk7Ci0gICAg
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBp
bGVQcm9jKHByb2MpOwogCiAgICAgICAgIGZvciAoYXV0byYgbGVmdCA6IGZsb2F0aW5nUG9pbnRP
cGVyYW5kczxmbG9hdD4oKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZsb2F0
aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSkgewpAQCAtMTE4MjMsNyArMTE4MjAsNyBAQCB2b2lk
IHRlc3RTZWxlY3RGbG9hdENvbXBhcmVGbG9hdChib29sICgqCiAgICAgICAgIGtlZXBWYWx1ZXNM
aXZlLT5zZXRHZW5lcmF0b3IoWyZdIChDQ2FsbEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmKSB7IH0pOwogCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwotICAgICAgICBhdXRvIGNvZGUgPSBj
b21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKIAog
ICAgICAgICBmb3IgKGF1dG8mIGxlZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkp
IHsKICAgICAgICAgICAgIGZvciAoYXV0byYgcmlnaHQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8
ZmxvYXQ+KCkpIHsKQEAgLTExODYwLDcgKzExODU3LDcgQEAgdm9pZCB0ZXN0U2VsZWN0Rm9sZChp
bnRwdHJfdCB2YWx1ZSkKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSwKICAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKSkpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhpbnZva2U8aW50cHRy
X3Q+KCpjb2RlLCAxLCAyKSA9PSAodmFsdWUgPT0gNDIgPyAxIDogMikpOwogICAgIENIRUNLKGlu
dm9rZTxpbnRwdHJfdD4oKmNvZGUsIDY0MjQ2MiwgMzI1MzMpID09ICh2YWx1ZSA9PSA0MiA/IDY0
MjQ2MiA6IDMyNTMzKSk7CiB9CkBAIC0xMTg4Myw3ICsxMTg4MCw3IEBAIHZvaWQgdGVzdFNlbGVj
dEludmVydCgpCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCiAgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMikpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52b2tlPGludHB0cl90Pigq
Y29kZSwgNDIsIDEsIDIpID09IDEpOwogICAgIENIRUNLKGludm9rZTxpbnRwdHJfdD4oKmNvZGUs
IDQyLCA2NDI0NjIsIDMyNTMzKSA9PSA2NDI0NjIpOwogICAgIENIRUNLKGludm9rZTxpbnRwdHJf
dD4oKmNvZGUsIDQzLCAxLCAyKSA9PSAyKTsKQEAgLTExOTI2LDcgKzExOTIzLDcgQEAgdm9pZCB0
ZXN0Q2hlY2tTZWxlY3QoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAg
ICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwogCi0g
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKICAgICBDSEVDSyhnZW5lcmF0aW9uQ291bnQgPT0gMSk7CiAgICAgQ0hFQ0soaW52
b2tlPGludD4oKmNvZGUsIHRydWUpID09IDApOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2Rl
LCBmYWxzZSkgPT0gNjY2KTsKQEAgLTExOTk3LDcgKzExOTk0LDcgQEAgdm9pZCB0ZXN0Q2hlY2tT
ZWxlY3RDaGVja1NlbGVjdCgpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CiAK
LSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOwogICAgIENIRUNLKGdlbmVyYXRpb25Db3VudCA9PSAxKTsKICAgICBDSEVDSyhn
ZW5lcmF0aW9uQ291bnQyID09IDEpOwogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCB0cnVl
LCB0cnVlKSA9PSAwKTsKQEAgLTEyMDQzLDcgKzEyMDQwLDcgQEAgdm9pZCB0ZXN0Q2hlY2tTZWxl
Y3RBbmRDU0UoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGFkZFZhbHVlLCBhZGRWYWx1
ZTIpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soZ2VuZXJhdGlvbkNvdW50ID09IDEpOwogICAg
IENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCB0cnVlKSA9PSAwKTsKICAgICBDSEVDSyhpbnZva2U8
aW50PigqY29kZSwgZmFsc2UpID09IDY2Nik7CkBAIC0xMjQ1Miw3ICsxMjQ0OSw3IEBAIHZvaWQg
dGVzdFRyaXZpYWxJbmZpbml0ZUxvb3AoKQogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShwcm9jLCBKdW1wLCBPcmlnaW4oKSwgRnJlcXVlbnRlZEJsb2NrKGxvb3ApKTsKICAgICBsb29w
LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1ZW50ZWRC
bG9jayhsb29wKSk7CiAKLSAgICBjb21waWxlKHByb2MpOworICAgIGNvbXBpbGVQcm9jKHByb2Mp
OwogfQogCiB2b2lkIHRlc3RGb2xkUGF0aEVxdWFsKCkKQEAgLTEyNDc3LDcgKzEyNDc0LDcgQEAg
dm9pZCB0ZXN0Rm9sZFBhdGhFcXVhbCgpCiAgICAgICAgIGVsc2VCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPigKICAgICAgICAgICAgIHByb2MsIEVxdWFsLCBPcmlnaW4oKSwgYXJnLCBlbHNlQmxvY2st
PmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpKTsKIAotICAgIGF1
dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CiAgICAgQ0hFQ0soaW52b2tlPGludHB0cl90PigqY29kZSwgMCkgPT0gMSk7CiAgICAgQ0hF
Q0soaW52b2tlPGludHB0cl90PigqY29kZSwgMSkgPT0gMCk7CiAgICAgQ0hFQ0soaW52b2tlPGlu
dHB0cl90PigqY29kZSwgNDIpID09IDApOwpAQCAtMTI0OTQsNyArMTI0OTEsNyBAQCB2b2lkIHRl
c3RMU2hpZnRTZWxmMzIoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCksIGFyZywgYXJnKSk7
CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBp
bGVQcm9jKHByb2MpOwogCiAgICAgYXV0byBjaGVjayA9IFsmXSAoaW50MzJfdCB2YWx1ZSkgewog
ICAgICAgICBDSEVDSyhpbnZva2U8aW50MzJfdD4oKmNvZGUsIHZhbHVlKSA9PSB2YWx1ZSA8PCAo
dmFsdWUgJiAzMSkpOwpAQCAtMTI1MTcsNyArMTI1MTQsNyBAQCB2b2lkIHRlc3RSU2hpZnRTZWxm
MzIoKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9yaWdpbigpLCBhcmcsIGFyZykpOwogCi0gICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKIAogICAgIGF1dG8gY2hlY2sgPSBbJl0gKGludDMyX3QgdmFsdWUpIHsKICAgICAgICAgQ0hF
Q0soaW52b2tlPGludDMyX3Q+KCpjb2RlLCB2YWx1ZSkgPT0gdmFsdWUgPj4gKHZhbHVlICYgMzEp
KTsKQEAgLTEyNTQwLDcgKzEyNTM3LDcgQEAgdm9pZCB0ZXN0VVJTaGlmdFNlbGYzMigpCiAgICAg
ICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIGFyZywgYXJnKSk7CiAKLSAgICBhdXRvIGNvZGUgPSBj
b21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogCiAgICAg
YXV0byBjaGVjayA9IFsmXSAodWludDMyX3QgdmFsdWUpIHsKICAgICAgICAgQ0hFQ0soaW52b2tl
PHVpbnQzMl90PigqY29kZSwgdmFsdWUpID09IHZhbHVlID4+ICh2YWx1ZSAmIDMxKSk7CkBAIC0x
MjU2Miw3ICsxMjU1OSw3IEBAIHZvaWQgdGVzdExTaGlmdFNlbGY2NCgpCiAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4oCiAgICAgICAgICAgICBwcm9jLCBTaGwsIE9yaWdpbigpLCBhcmcs
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLCBhcmcpKSk7CiAK
LSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOwogCiAgICAgYXV0byBjaGVjayA9IFsmXSAoaW50NjRfdCB2YWx1ZSkgewogICAg
ICAgICBDSEVDSyhpbnZva2U8aW50NjRfdD4oKmNvZGUsIHZhbHVlKSA9PSB2YWx1ZSA8PCAodmFs
dWUgJiA2MykpOwpAQCAtMTI1ODYsNyArMTI1ODMsNyBAQCB2b2lkIHRlc3RSU2hpZnRTZWxmNjQo
KQogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAogICAgICAgICAgICAgcHJvYywgU1No
ciwgT3JpZ2luKCksIGFyZywgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3Jp
Z2luKCksIGFyZykpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRvIGNoZWNrID0gWyZdIChpbnQ2
NF90IHZhbHVlKSB7CiAgICAgICAgIENIRUNLKGludm9rZTxpbnQ2NF90PigqY29kZSwgdmFsdWUp
ID09IHZhbHVlID4+ICh2YWx1ZSAmIDYzKSk7CkBAIC0xMjYxMCw3ICsxMjYwNyw3IEBAIHZvaWQg
dGVzdFVSU2hpZnRTZWxmNjQoKQogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAogICAg
ICAgICAgICAgcHJvYywgWlNociwgT3JpZ2luKCksIGFyZywgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBUcnVuYywgT3JpZ2luKCksIGFyZykpKTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBp
bGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAKICAgICBhdXRv
IGNoZWNrID0gWyZdICh1aW50NjRfdCB2YWx1ZSkgewogICAgICAgICBDSEVDSyhpbnZva2U8dWlu
dDY0X3Q+KCpjb2RlLCB2YWx1ZSkgPT0gdmFsdWUgPj4gKHZhbHVlICYgNjMpKTsKQEAgLTEyNjQz
LDcgKzEyNjQwLDcgQEAgdm9pZCB0ZXN0UGF0Y2hwb2ludERvdWJsZVJlZ3MoKQogCiAgICAgcm9v
dC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHBhdGNocG9p
bnQpOwogCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDSyhudW1DYWxscyA9PSAxKTsKICAgICBDSEVDSyhp
bnZva2U8ZG91YmxlPigqY29kZSwgNDIuNSkgPT0gNDIuNSk7CiB9CkBAIC0xMjY3Niw3ICsxMjY3
Myw3IEBAIHZvaWQgdGVzdFNwaWxsRGVmU21hbGxlclRoYW5Vc2UoKQogICAgIFZhbHVlKiByZXN1
bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIGZvcmNlU3Bp
bGwsIGFyZzY0KTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgcmVzdWx0KTsKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7Cisg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0soaW52b2tlPGludDY0
X3Q+KCpjb2RlLCAweGZmZmZmZmZmMDAwMDAwMDApID09IDApOwogfQogCkBAIC0xMjczMCw3ICsx
MjcyNyw3IEBAIHZvaWQgdGVzdFNwaWxsVXNlTGFyZ2VyVGhhbkRlZigpCiAgICAgZWxzZVJlc3Vs
dC0+c2V0UGhpKHBoaSk7CiAgICAgdGFpbC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIHBoaSk7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLKGludm9rZTx1aW50
NjRfdD4oKmNvZGUsIDEsIDB4ZmZmZmZmZmYwMDAwMDAwMCkgPT0gMCk7CiAgICAgQ0hFQ0soaW52
b2tlPHVpbnQ2NF90PigqY29kZSwgMCwgMHhmZmZmZmZmZjAwMDAwMDAwKSA9PSAweGZmZmZmZmZm
MDAwMDAwMDApOwogCkBAIC0xMjgxMiw3ICsxMjgwOSw3IEBAIHZvaWQgdGVzdExhdGVSZWdpc3Rl
cigpCiAgICAgICAgIH0pOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpLCBzZWNvbmRQYXRjaHBvaW50KTsKICAgICAKLSAgICBhdXRvIGNvZGUg
PSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAg
IENIRUNLKGludm9rZTx1aW50NjRfdD4oKmNvZGUpID09IHJlc3VsdCk7CiB9CiAKQEAgLTEyOTg2
LDcgKzEyOTgzLDcgQEAgdm9pZCB0ZXN0SW50ZXJwcmV0ZXIoKQogICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLAogICAgICAgICBzdG9wLT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmln
aW4oKSwgcG9pbnRlclR5cGUoKSwgMCkpOwogICAgIAotICAgIGF1dG8gaW50ZXJwcmV0ZXIgPSBj
b21waWxlKHByb2MpOworICAgIGF1dG8gaW50ZXJwcmV0ZXIgPSBjb21waWxlUHJvYyhwcm9jKTsK
ICAgICAKICAgICBWZWN0b3I8aW50cHRyX3Q+IGRhdGE7CiAgICAgVmVjdG9yPGludHB0cl90PiBj
b2RlOwpAQCAtMTMxMzYsNyArMTMxMzMsNyBAQCB2b2lkIHRlc3RFbnRyeVN3aXRjaFNpbXBsZSgp
CiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwot
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7CisgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKGppdCwgbnVsbHB0cik7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFi
ZWxPbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOwog
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHBy
b2MuZW50cnlwb2ludExhYmVsKDEpKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFRocmVl
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDIpKTsKQEAgLTEz
MTY5LDcgKzEzMTY2LDcgQEAgdm9pZCB0ZXN0RW50cnlTd2l0Y2hOb0VudHJ5U3dpdGNoKCkKICAg
ICAKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIGdlbmVyYXRlKHByb2MsIGppdCk7Ci0gICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKKyAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoaml0LCBudWxscHRyKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbE9u
ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgwKSk7CiAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgbGFiZWxUd28gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5l
bnRyeXBvaW50TGFiZWwoMSkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsVGhyZWUgPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMikpOwpAQCAtMTMyNTYs
NyArMTMyNTMsNyBAQCB2b2lkIHRlc3RFbnRyeVN3aXRjaFdpdGhDb21tb25QYXRocygpCiAgICAg
CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwotICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7CisgICAgTGlua0J1ZmZlciBs
aW5rQnVmZmVyKGppdCwgbnVsbHB0cik7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOwogICAgIENv
ZGVMb2NhdGlvbkxhYmVsIGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50
cnlwb2ludExhYmVsKDEpKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbFRocmVlID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDIpKTsKQEAgLTEzMzczLDcg
KzEzMzcwLDcgQEAgdm9pZCB0ZXN0RW50cnlTd2l0Y2hXaXRoQ29tbW9uUGF0aHNBbmRObwogICAg
IAogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgZ2VuZXJhdGUocHJvYywgaml0KTsKLSAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIG51bGxwdHIpOworICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcihqaXQsIG51bGxwdHIpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsT25l
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVsKDApKTsKICAgICBD
b2RlTG9jYXRpb25MYWJlbCBsYWJlbFR3byA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVu
dHJ5cG9pbnRMYWJlbCgxKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxUaHJlZSA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZihwcm9jLmVudHJ5cG9pbnRMYWJlbCgyKSk7CkBAIC0xMzQ1MSw3
ICsxMzQ0OCw3IEBAIHZvaWQgdGVzdEVudHJ5U3dpdGNoTG9vcCgpCiAgICAgCiAgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKICAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOwotICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGpp
dCwgbnVsbHB0cik7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWxPbmUgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YocHJvYy5lbnRyeXBvaW50TGFiZWwoMCkpOwogICAgIENvZGVMb2NhdGlvbkxh
YmVsIGxhYmVsVHdvID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHByb2MuZW50cnlwb2ludExhYmVs
KDEpKTsKICAgICAKQEAgLTEzNTAwLDcgKzEzNDk3LDcgQEAgdm9pZCB0ZXN0U29tZUVhcmx5UmVn
aXN0ZXIoKQogICAgICAgICAKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpLCBwYXRjaHBvaW50KTsKICAgICAgICAgCi0gICAgICAgIGNvbXBpbGUo
cHJvYyk7CisgICAgICAgIGNvbXBpbGVQcm9jKHByb2MpOwogICAgICAgICBDSEVDSyhyYW5GaXJz
dFBhdGNocG9pbnQpOwogICAgICAgICBDSEVDSyhyYW5TZWNvbmRQYXRjaHBvaW50KTsKICAgICB9
OwpAQCAtMTM2MTQsNyArMTM2MTEsNyBAQCB2b2lkIHRlc3RUZXJtaW5hbFBhdGNocG9pbnRUaGF0
TmVlZHNUb0JlCiAgICAgCiAgICAgc2xvd1BhdGgtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgc2xvd1BhdGgtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCAyMCkpOwogICAgIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KmNvZGUpLCAxMCk7CiB9CiAKQEAgLTEzNzAyLDcgKzEzNjk5LDcgQEAgdm9pZCB0ZXN0VGVybWlu
YWxQYXRjaHBvaW50VGhhdE5lZWRzVG9CZQogICAgIE9wdGlvbnM6Om1heEIzVGFpbER1cEJsb2Nr
U2l6ZSgpID0gMDsKICAgICBPcHRpb25zOjptYXhCM1RhaWxEdXBCbG9ja1N1Y2Nlc3NvcnMoKSA9
IDA7CiAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpjb2RlLCAxKSwgMSk7
CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKmNvZGUsIDApLCAwKTsKICAgICBDSEVDS19FUShp
bnZva2U8aW50PigqY29kZSwgNDIpLCA2NjYpOwpAQCAtMTM3NzYsNyArMTM3NzMsNyBAQCB2b2lk
IHRlc3RQYXRjaHBvaW50VGVybWluYWxSZXR1cm5WYWx1ZShiCiAgICAgc2xvd1BhdGhVcHNpbG9u
LT5zZXRQaGkocGhpKTsKICAgICBjb250aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwgcGhpKTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpjb2RlLCAwKSwgMzEpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpjb2Rl
LCAxKSwgMzIpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpjb2RlLCA0MSksIDcyKTsKQEAg
LTEzNzk0LDcgKzEzNzkxLDcgQEAgdm9pZCB0ZXN0TWVtb3J5RmVuY2UoKQogICAgIHJvb3QtPmFw
cGVuZE5ldzxGZW5jZVZhbHVlPihwcm9jLCBPcmlnaW4oKSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290LT5hcHBlbmRJbnRDb25zdGFudChw
cm9jLCBPcmlnaW4oKSwgSW50MzIsIDQyKSk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGls
ZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDS19F
UShpbnZva2U8aW50PigqY29kZSksIDQyKTsKICAgICBpZiAoaXNYODYoKSkKICAgICAgICAgY2hl
Y2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJsb2NrIG9yICQweDAsICglcnNwKSIpOwpAQCAtMTM4
MTMsNyArMTM4MTAsNyBAQCB2b2lkIHRlc3RTdG9yZUZlbmNlKCkKICAgICByb290LT5hcHBlbmRO
ZXc8RmVuY2VWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEhlYXBSYW5nZTo6dG9wKCksIEhlYXBSYW5n
ZSgpKTsKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCks
IHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCBJbnQzMiwgNDIpKTsKICAg
ICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBp
bGVQcm9jKHByb2MpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpjb2RlKSwgNDIpOwogICAg
IGNoZWNrRG9lc05vdFVzZUluc3RydWN0aW9uKCpjb2RlLCAibG9jayIpOwogICAgIGNoZWNrRG9l
c05vdFVzZUluc3RydWN0aW9uKCpjb2RlLCAibWZlbmNlIik7CkBAIC0xMzgzMCw3ICsxMzgyNyw3
IEBAIHZvaWQgdGVzdExvYWRGZW5jZSgpCiAgICAgcm9vdC0+YXBwZW5kTmV3PEZlbmNlVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBIZWFwUmFuZ2UoKSwgSGVhcFJhbmdlOjp0b3AoKSk7CiAgICAgcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290LT5hcHBlbmRJ
bnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50MzIsIDQyKSk7CiAgICAgCi0gICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
ICAgICBDSEVDS19FUShpbnZva2U8aW50PigqY29kZSksIDQyKTsKICAgICBjaGVja0RvZXNOb3RV
c2VJbnN0cnVjdGlvbigqY29kZSwgImxvY2siKTsKICAgICBjaGVja0RvZXNOb3RVc2VJbnN0cnVj
dGlvbigqY29kZSwgIm1mZW5jZSIpOwpAQCAtMTQwNTUsNyArMTQwNTIsNyBAQCB2b2lkIHRlc3RQ
Q09yaWdpbk1hcERvZXNudEluc2VydE5vcHMoKQogCiAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKIAotICAgIGNvbXBpbGUocHJvYyk7CisgICAgY29t
cGlsZVByb2MocHJvYyk7CiB9CiAKIHZvaWQgdGVzdFBpblJlZ2lzdGVycygpCkBAIC0xNDA5MCw3
ICsxNDA4Nyw3IEBAIHZvaWQgdGVzdFBpblJlZ2lzdGVycygpCiAgICAgICAgICAgICAgICAgQ0hF
Q0tfRVEocGFyYW1zWzBdLmdwcigpLCBHUFJJbmZvOjpyZWdDUzApOwogICAgICAgICAgICAgfSk7
CiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSk7
Ci0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogICAgICAgICBib29sIHVzZXNDU1JzID0gZmFsc2U7CiAgICAg
ICAgIGZvciAoQWlyOjpCYXNpY0Jsb2NrKiBibG9jayA6IHByb2MuY29kZSgpKSB7CiAgICAgICAg
ICAgICBmb3IgKEFpcjo6SW5zdCYgaW5zdCA6ICpibG9jaykgewpAQCAtMTQxMjksNyArMTQxMjYs
NyBAQCB2b2lkIHRlc3RYODZMZWFBZGRBZGRTaGxMZWZ0KCkKICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMDApKTsKICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CiAgICAgCi0gICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhw
cm9jKTsKICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxlYSAweDY0KCVyZGksJXJz
aSw0KSwgJXJheCIpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEsIDIp
LCAoMSArICgyIDw8IDIpKSArIDEwMCk7CiB9CkBAIC0xNDE1MSw3ICsxNDE0OCw3IEBAIHZvaWQg
dGVzdFg4NkxlYUFkZEFkZFNobFJpZ2h0KCkKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0
UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMDApKTsKICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CiAgICAgCi0gICAgYXV0byBjb2Rl
ID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAg
ICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxlYSAweDY0KCVyZGksJXJzaSw0KSwgJXJh
eCIpOwogICAgIENIRUNLX0VRKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAoMSArICgy
IDw8IDIpKSArIDEwMCk7CiB9CkBAIC0xNDE3MCw3ICsxNDE2Nyw3IEBAIHZvaWQgdGVzdFg4Nkxl
YUFkZEFkZCgpCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgMTAwKSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLCByZXN1bHQpOwogICAgIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludHB0cl90PigqY29kZSwgMSwgMiksICgxICsgMikgKyAxMDApOwogICAgIGNoZWNrRGlzYXNz
ZW1ibHkoCiAgICAgICAgICpjb2RlLApAQCAtMTQxOTUsNyArMTQxOTIsNyBAQCB2b2lkIHRlc3RY
ODZMZWFBZGRTaGxSaWdodCgpCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgMikpKTsKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBjaGVj
a1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxlYSAoJXJkaSwlcnNpLDQpLCAlcmF4Iik7CiAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludHB0cl90PigqY29kZSwgMSwgMiksIDEgKyAoMiA8PCAyKSk7CiB9
CkBAIC0xNDIxNCw3ICsxNDIxMSw3IEBAIHZvaWQgdGVzdFg4NkxlYUFkZFNobExlZnRTY2FsZTEo
KQogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIDApKSk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLCByZXN1bHQpOwogICAgIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludHB0
cl90PigqY29kZSwgMSwgMiksIDEgKyAyKTsKICAgICBjaGVja0Rpc2Fzc2VtYmx5KAogICAgICAg
ICAqY29kZSwKQEAgLTE0MjM5LDcgKzE0MjM2LDcgQEAgdm9pZCB0ZXN0WDg2TGVhQWRkU2hsTGVm
dFNjYWxlMigpCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgMSkpKTsKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVy
biwgT3JpZ2luKCksIHJlc3VsdCk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBjaGVja1VzZXNJbnN0
cnVjdGlvbigqY29kZSwgImxlYSAoJXJkaSwlcnNpLDIpLCAlcmF4Iik7CiAgICAgQ0hFQ0tfRVEo
aW52b2tlPGludHB0cl90PigqY29kZSwgMSwgMiksIDEgKyAoMiA8PCAxKSk7CiB9CkBAIC0xNDI1
OCw3ICsxNDI1NSw3IEBAIHZvaWQgdGVzdFg4NkxlYUFkZFNobExlZnRTY2FsZTQoKQogICAgICAg
ICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCkpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MpOworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGNoZWNrVXNlc0lu
c3RydWN0aW9uKCpjb2RlLCAibGVhICglcmRpLCVyc2ksNCksICVyYXgiKTsKICAgICBDSEVDS19F
UShpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCAxLCAyKSwgMSArICgyIDw8IDIpKTsKIH0KQEAgLTE0
Mjc3LDcgKzE0Mjc0LDcgQEAgdm9pZCB0ZXN0WDg2TGVhQWRkU2hsTGVmdFNjYWxlOCgpCiAgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMykp
KTsKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJl
c3VsdCk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNv
ZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwg
ImxlYSAoJXJkaSwlcnNpLDgpLCAlcmF4Iik7CiAgICAgQ0hFQ0tfRVEoaW52b2tlPGludHB0cl90
PigqY29kZSwgMSwgMiksIDEgKyAoMiA8PCAzKSk7CiB9CkBAIC0xNDI5Niw3ICsxNDI5Myw3IEBA
IHZvaWQgdGVzdEFkZFNobDMyKCkKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCAzMikpKTsKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CiAgICAgCi0gICAgYXV0byBjb2RlID0g
Y29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBD
SEVDS19FUShpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCAxLCAyKSwgMSArIChzdGF0aWNfY2FzdDxp
bnRwdHJfdD4oMikgPDwgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDMyKSkpOwogfQogCkBAIC0xNDMx
NCw3ICsxNDMxMSw3IEBAIHZvaWQgdGVzdEFkZFNobDY0KCkKICAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA2NCkpKTsKICAgICByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CiAgICAgCi0g
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCAxLCAyKSwgMSAr
IDIpOwogfQogCkBAIC0xNDMzMiw3ICsxNDMyOSw3IEBAIHZvaWQgdGVzdEFkZFNobDY1KCkKICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA2
NSkpKTsKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCks
IHJlc3VsdCk7CiAgICAgCi0gICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKICAgICBDSEVDS19FUShpbnZva2U8aW50cHRyX3Q+
KCpjb2RlLCAxLCAyKSwgMSArICgyIDw8IDEpKTsKIH0KIApAQCAtMTQzOTYsNyArMTQzOTMsNyBA
QCB2b2lkIHRlc3RMb2FkQmFzZUluZGV4U2hpZnQyKCkKICAgICAgICAgICAgICAgICAgICAgcHJv
YywgU2hsLCBPcmlnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpLAog
ICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgMikpKSkpOwotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaWYgKGlzWDg2KCkpCiAgICAgICAgIGNo
ZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiKCVyZGksJXJzaSw0KSIpOwogICAgIGludDMyX3Qg
dmFsdWUgPSAxMjM0MTIzNDsKQEAgLTE0NDIwLDcgKzE0NDE3LDcgQEAgdm9pZCB0ZXN0TG9hZEJh
c2VJbmRleFNoaWZ0MzIoKQogICAgICAgICAgICAgICAgICAgICBwcm9jLCBTaGwsIE9yaWdpbigp
LAogICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCiAgICAgICAgICAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAzMikpKSkp
OwotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGls
ZVByb2MocHJvYyk7CiAgICAgaW50MzJfdCB2YWx1ZSA9IDEyMzQxMjM0OwogICAgIGNoYXIqIHB0
ciA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oJnZhbHVlKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgMTA7ICsraSkKQEAgLTE0NDM3LDcgKzE0NDM0LDcgQEAgdm9pZCB0ZXN0T3B0aW1pemVN
YXRlcmlhbGl6YXRpb24oKQogICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDB4MTIzNDIzNDUzNDU2bGx1ICsgMzUpKTsKICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOwogICAgIAotICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgIGZvciAoQWlyOjpCYXNpY0Jsb2NrKiBibG9jayA6
IHByb2MuY29kZSgpKSB7CiAgICAgICAgIGZvciAoQWlyOjpJbnN0JiBpbnN0IDogKmJsb2NrKSB7
CkBAIC0xNDQ5Myw3ICsxNDQ5MCw3IEBAIHZvaWQgdGVzdEF0b21pY1dlYWtDQVMoKQogICAgICAg
ICAKICAgICAgICAgZG9uZS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigp
KTsKICAgICAgICAgCi0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgICAgICBUIHZhbHVlWzJdOwogICAg
ICAgICB2YWx1ZVswXSA9IDQyOwogICAgICAgICB2YWx1ZVsxXSA9IDEzOwpAQCAtMTQ1MjQsNyAr
MTQ1MjEsNyBAQCB2b2lkIHRlc3RBdG9taWNXZWFrQ0FTKCkKICAgICAgICAgCiAgICAgICAgIGRv
bmUtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSk7CiAgICAgICAgIAot
ICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKICAgICAgICAgVCB2YWx1ZVsyXTsKICAgICAgICAgdmFsdWVbMF0g
PSA0MjsKICAgICAgICAgdmFsdWVbMV0gPSAxMzsKQEAgLTE0NTU4LDcgKzE0NTU1LDcgQEAgdm9p
ZCB0ZXN0QXRvbWljV2Vha0NBUygpCiAgICAgICAgIAogICAgICAgICBmYWlsLT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOwogICAgICAgICAKLSAgICAgICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAg
IHZhbHVlWzFdID0gMTM7CkBAIC0xNDYwMCw3ICsxNDU5Nyw3IEBAIHZvaWQgdGVzdEF0b21pY1dl
YWtDQVMoKQogICAgICAgICAKICAgICAgICAgZmFpbC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpKTsKICAgICAgICAgCi0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgICAgICBU
IHZhbHVlWzJdOwogICAgICAgICB2YWx1ZVswXSA9IDQyOwogICAgICAgICB2YWx1ZVsxXSA9IDEz
OwpAQCAtMTQ2MjYsNyArMTQ2MjMsNyBAQCB2b2lkIHRlc3RBdG9taWNXZWFrQ0FTKCkKICAgICAg
ICAgICAgICAgICByb290LT5hcHBlbmRJbnRDb25zdGFudChwcm9jLCBPcmlnaW4oKSwgdHlwZSwg
MHhiZWVmKSwKICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKTsKICAgICAgICAgCi0g
ICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOwogICAgICAgICBUIHZhbHVlWzJdOwogICAgICAgICB2YWx1ZVswXSA9
IDQyOwogICAgICAgICB2YWx1ZVsxXSA9IDEzOwpAQCAtMTQ2NTUsNyArMTQ2NTIsNyBAQCB2b2lk
IHRlc3RBdG9taWNXZWFrQ0FTKCkKICAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
KSwKICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgMCkpKTsKICAgICAgICAgCi0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJv
Yyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgICAgICBUIHZh
bHVlWzJdOwogICAgICAgICB2YWx1ZVswXSA9IDQyOwogICAgICAgICB2YWx1ZVsxXSA9IDEzOwpA
QCAtMTQ2ODIsNyArMTQ2NzksNyBAQCB2b2lkIHRlc3RBdG9taWNXZWFrQ0FTKCkKICAgICAgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCksCiAgICAgICAgICAgICAgICAgNDIpKTsKICAgICAgICAg
Ci0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOwogICAgICAgICBUIHZhbHVlWzJdOwogICAgICAgICB2YWx1ZVsw
XSA9IDQyOwogICAgICAgICB2YWx1ZVsxXSA9IDEzOwpAQCAtMTQ3NDYsNyArMTQ3NDMsNyBAQCB2
b2lkIHRlc3RBdG9taWNTdHJvbmdDQVMoKQogICAgICAgICAKICAgICAgICAgZmFpbC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKICAgICAgICAgCi0gICAgICAgIGF1
dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9j
KHByb2MpOwogICAgICAgICBUIHZhbHVlWzJdOwogICAgICAgICB2YWx1ZVswXSA9IDQyOwogICAg
ICAgICB2YWx1ZVsxXSA9IDEzOwpAQCAtMTQ3ODcsNyArMTQ3ODQsNyBAQCB2b2lkIHRlc3RBdG9t
aWNTdHJvbmdDQVMoKQogICAgICAgICAKICAgICAgICAgZmFpbC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKICAgICAgICAgCi0gICAgICAgIGF1dG8gY29kZSA9IGNv
bXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAg
ICAgICBUIHZhbHVlWzJdOwogICAgICAgICB2YWx1ZVswXSA9IDQyOwogICAgICAgICB2YWx1ZVsx
XSA9IDEzOwpAQCAtMTQ4MjgsNyArMTQ4MjUsNyBAQCB2b2lkIHRlc3RBdG9taWNTdHJvbmdDQVMo
KQogICAgICAgICAKICAgICAgICAgZmFpbC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4s
IE9yaWdpbigpKTsKICAgICAgICAgCi0gICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgICAgICBUIHZhbHVl
WzJdOwogICAgICAgICB2YWx1ZVswXSA9IDQyOwogICAgICAgICB2YWx1ZVsxXSA9IDEzOwpAQCAt
MTQ4NTMsNyArMTQ4NTAsNyBAQCB2b2lkIHRlc3RBdG9taWNTdHJvbmdDQVMoKQogICAgICAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBlLCAweGJl
ZWYpLAogICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOwogICAgICAgICAKLSAgICAg
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGls
ZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7
CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBAIC0xNDg4NSw3ICsxNDg4Miw3IEBAIHZvaWQgdGVz
dEF0b21pY1N0cm9uZ0NBUygpCiAgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSks
CiAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCks
IHR5cGUsIDQyKSkpOwogICAgICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFs
dWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNDI7CiAgICAgICAgIHZhbHVlWzFdID0gMTM7CkBA
IC0xNDkxNiw3ICsxNDkxMyw3IEBAIHZvaWQgdGVzdEF0b21pY1N0cm9uZ0NBUygpCiAgICAgICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHByb2MsIE9yaWdpbigpLCB0eXBl
LCA0MikpLAogICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCAwKSkpOwogICAgICAgICAgICAgCi0gICAgICAgIGF1dG8gY29kZSA9IGNv
bXBpbGUocHJvYyk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAg
ICAgICBUIHZhbHVlWzJdOwogICAgICAgICB2YWx1ZVswXSA9IDQyOwogICAgICAgICB2YWx1ZVsx
XSA9IDEzOwpAQCAtMTQ5OTcsNyArMTQ5OTQsNyBAQCB2b2lkIHRlc3RBdG9taWNYY2hnKEIzOjpP
cGNvZGUgb3Bjb2RlKQogICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZEludENvbnN0YW50KHBy
b2MsIE9yaWdpbigpLCB0eXBlLCAxKSwKICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
KTsKICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAg
IHZhbHVlWzBdID0gNTsKICAgICAgICAgdmFsdWVbMV0gPSAxMDA7CkBAIC0xNTAxNyw3ICsxNTAx
NCw3IEBAIHZvaWQgdGVzdEF0b21pY1hjaGcoQjM6Ok9wY29kZSBvcGNvZGUpCiAgICAgICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIHR5cGUsIDQyKSwK
ICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKTsKICAgICAKLSAgICAgICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CiAgICAgICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNTsKICAgICAgICAg
dmFsdWVbMV0gPSAxMDA7CkBAIC0xNTAzNiw3ICsxNTAzMyw3IEBAIHZvaWQgdGVzdEF0b21pY1hj
aGcoQjM6Ok9wY29kZSBvcGNvZGUpCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwogICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkpOwogICAg
IAotICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgICAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKICAgICAgICAgVCB2YWx1ZVsyXTsKICAgICAgICAgdmFsdWVb
MF0gPSA1OwogICAgICAgICB2YWx1ZVsxXSA9IDEwMDsKQEAgLTE1MDU2LDcgKzE1MDUzLDcgQEAg
dm9pZCB0ZXN0QXRvbWljWGNoZyhCMzo6T3Bjb2RlIG9wY29kZSkKICAgICAgICAgICAgIDAsIEhl
YXBSYW5nZSg0MiksIEhlYXBSYW5nZSgpKTsKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKICAgICAKLSAgICAgICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAg
ICAgIFQgdmFsdWVbMl07CiAgICAgICAgIHZhbHVlWzBdID0gNTsKICAgICAgICAgdmFsdWVbMV0g
PSAxMDA7CkBAIC0xNTA4OSw3ICsxNTA4Niw3IEBAIHZvaWQgdGVzdERlcGVuZDMyKCkKICAgICB2
YWx1ZXNbMF0gPSA0MjsKICAgICB2YWx1ZXNbMV0gPSAweGJlZWY7CiAgICAgCi0gICAgYXV0byBj
b2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
ICAgICBpZiAoaXNBUk02NCgpKQogICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwg
ImVvciIpOwogICAgIGVsc2UgaWYgKGlzWDg2KCkpIHsKQEAgLTE1MTE5LDcgKzE1MTE2LDcgQEAg
dm9pZCB0ZXN0RGVwZW5kNjQoKQogICAgIHZhbHVlc1swXSA9IDQyOwogICAgIHZhbHVlc1sxXSA9
IDB4YmVlZjsKICAgICAKLSAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwogICAgIGlmIChpc0FSTTY0KCkpCiAgICAgICAgIGNo
ZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiZW9yIik7CiAgICAgZWxzZSBpZiAoaXNYODYoKSkg
ewpAQCAtMTUxNTQsNyArMTUxNTEsNyBAQCB2b2lkIHRlc3RXYXNtQm91bmRzQ2hlY2sodW5zaWdu
ZWQgb2Zmc2V0CiAgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCAweDQyKTsKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFs
dWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKIAotICAgIGF1dG8gY29kZSA9IGNv
bXBpbGUocHJvYyk7CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludDMyX3Q+KCpjb2RlLCAxLCAyICsgb2Zmc2V0KSwgMHg0Mik7CiAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludDMyX3Q+KCpjb2RlLCAzLCAyICsgb2Zmc2V0KSwgNDIpOwogICAg
IENIRUNLX0VRKGludm9rZTxpbnQzMl90PigqY29kZSwgMiwgMiArIG9mZnNldCksIDQyKTsKQEAg
LTE1MjA1LDcgKzE1MjAyLDcgQEAgdm9pZCB0ZXN0V2FzbUFkZHJlc3MoKQogICAgIGluY1Vwc2ls
b24tPnNldFBoaShpbmRleFBoaSk7CiAKIAotICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CiAgICAgaW52b2tlPHZvaWQ+KCpj
b2RlLCBsb29wQ291bnQsIG51bVRvU3RvcmUsIHZhbHVlcy5kYXRhKCkpOwogICAgIGZvciAodW5z
aWduZWQgdmFsdWUgOiB2YWx1ZXMpCiAgICAgICAgIENIRUNLX0VRKG51bVRvU3RvcmUsIHZhbHVl
KTsKQEAgLTE1MzE4LDcgKzE1MzE1LDYgQEAgZG91YmxlIG5lZ2F0aXZlWmVybygpCiB2b2lkIHJ1
bihjb25zdCBjaGFyKiBmaWx0ZXIpCiB7CiAgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7
Ci0gICAgdm0gPSAmVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKIAogICAgIERlcXVl
PFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiB0YXNrczsKIApAQCAtMTU5OTksNyArMTU5OTUs
NyBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RUcnVuYygoc3Rh
dGljX2Nhc3Q8aW50NjRfdD4oMSkgPDwgNDApICsgNDIpKTsKICAgICBSVU4odGVzdEFkZDEoNDUp
KTsKICAgICBSVU4odGVzdEFkZDFQdHIoNTEpKTsKLSAgICBSVU4odGVzdEFkZDFQdHIoYml0d2lz
ZV9jYXN0PGludHB0cl90Pih2bSkpKTsKKyAgICBSVU4odGVzdEFkZDFQdHIoc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KDB4YmFhZGJlZWYpKSk7CiAgICAgUlVOKHRlc3ROZWczMig1MikpOwogICAgIFJV
Tih0ZXN0TmVnUHRyKDUzKSk7CiAgICAgUlVOKHRlc3RTdG9yZUFkZExvYWQzMig0NikpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCShyZXZpc2lvbiAyMTQ1
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJQdXJlTmFOLmgiCi0jaW5jbHVkZSAiVk0uaCIK
ICNpbmNsdWRlIDxjbWF0aD4KICNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8c3RyaW5nPgpAQCAt
ODAsMTQgKzc5LDEyIEBAIFN0YXRpY0xvY2sgY3Jhc2hMb2NrOwogICAgICAgICBDUkFTSCgpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIH0gd2hpbGUgKGZhbHNlKQogCi1WTSogdm07Ci0KIHN0ZDo6dW5pcXVlX3B0cjxCMzo6Q29t
cGlsYXRpb24+IGNvbXBpbGUoQjM6OlByb2NlZHVyZSYgcHJvYykKIHsKICAgICBwcmVwYXJlRm9y
R2VuZXJhdGlvbihwcm9jLmNvZGUoKSk7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICBnZW5l
cmF0ZShwcm9jLmNvZGUoKSwgaml0KTsKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBq
aXQsIG51bGxwdHIpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIG51bGxwdHIpOwog
CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QjM6OkNvbXBpbGF0aW9uPigKICAgICAgICAg
RklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoInRlc3RhaXIgY29tcGlsYXRpb24iKSksIHByb2Mu
cmVsZWFzZUJ5cHJvZHVjdHMoKSk7CkBAIC0xODQ5LDcgKzE4NDYsNiBAQCB2b2lkIHRlc3RYODZW
TVVMU0RCYXNlSW5kZXhOZWVkUmV4KCkKIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKIHsK
ICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLSAgICB2bSA9ICZWTTo6Y3JlYXRlKExh
cmdlSGVhcCkubGVha1JlZigpOwogCiAgICAgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgp
Pj4+IHRhc2tzOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxNCw3ICs1MTQsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGlj
QWNjZXNzCiAgICAgICAgIGNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZyA9IHN0YXRl
LmNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZygpOwogICAgIH0KIAotICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbkNhbkZhaWwpOwogICAgIGlmIChsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsK
ICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJEaWQgZmFpbCB0byBh
bGxvY2F0ZS5cbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsNyArMzk0LDcgQEAg
dm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCiAgICAgbV9zcGVjdWxhdGl2ZS0+Y3JlYXRlT1NS
RW50cmllcygpOwogICAgIHNldEVuZE9mQ29kZSgpOwogCi0gICAgYXV0byBsaW5rQnVmZmVyID0g
c3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPigqdm0oKSwgKnRoaXMsIG1fY29kZUJsb2NrLCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIGF1dG8gbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91
bmlxdWU8TGlua0J1ZmZlcj4oKnRoaXMsIG1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOwogICAgIGlmIChsaW5rQnVmZmVyLT5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAg
IG1fZ3JhcGgubV9wbGFuLmZpbmFsaXplciA9IHN0ZDo6bWFrZV91bmlxdWU8RmFpbGVkRmluYWxp
emVyPihtX2dyYXBoLm1fcGxhbik7CiAgICAgICAgIHJldHVybjsKQEAgLTQ4OCw3ICs0ODgsNyBA
QCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIHNldEVuZE9mQ29kZSgp
OwogCiAgICAgLy8gPT09IExpbmsgPT09Ci0gICAgYXV0byBsaW5rQnVmZmVyID0gc3RkOjptYWtl
X3VuaXF1ZTxMaW5rQnVmZmVyPigqdm0oKSwgKnRoaXMsIG1fY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbkNhbkZhaWwpOworICAgIGF1dG8gbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlu
a0J1ZmZlcj4oKnRoaXMsIG1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAg
IGlmIChsaW5rQnVmZmVyLT5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgIG1fZ3JhcGgu
bV9wbGFuLmZpbmFsaXplciA9IHN0ZDo6bWFrZV91bmlxdWU8RmFpbGVkRmluYWxpemVyPihtX2dy
YXBoLm1fcGxhbik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI5LDcgKzIyOSw3IEBAIHZvaWQgTGF6eUpTVmFsdWU6OmVtaXQoQ0NhbGxIZWxwZXJzJiBqaXQK
ICAgICAKICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgIFtjb2RlQmxvY2ssIGxhYmVsLCB0
aGlzVmFsdWVdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICBKU1ZhbHVl
IHJlYWxWYWx1ZSA9IHRoaXNWYWx1ZS5nZXRWYWx1ZShsaW5rQnVmZmVyLnZtKCkpOworICAgICAg
ICAgICAgSlNWYWx1ZSByZWFsVmFsdWUgPSB0aGlzVmFsdWUuZ2V0VmFsdWUoKmNvZGVCbG9jay0+
dm0oKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWFsVmFsdWUuaXNDZWxsKCkpOwog
CiAgICAgICAgICAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50KHJlYWxWYWx1ZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCShy
ZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIGNvbXBp
bGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKIAogICAgICAgICBleGl0Q29tcGlsZXIuY29tcGls
ZUV4aXQoKnZtLCBleGl0LCBvcGVyYW5kcywgcmVjb3ZlcnkpOwogICAgICAgICAKLSAgICAgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgY29kZUJsb2NrKTsKKyAgICAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIGNvZGVCbG9jayk7CiAgICAgICAgIGV4aXQubV9jb2Rl
ID0gRklOQUxJWkVfQ09ERV9JRigKICAgICAgICAgICAgIHNob3VsZER1bXBEaXNhc3NlbWJseSgp
IHx8IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEyLDcgKzEw
MTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAg
IG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIocmVxdWlyZWRCeXRlcyksIEpJVENvbXBpbGVyOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6
Y2FsbGVlRnJhbWVTbG90KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkud2l0aE9mZnNldChQYXlsb2Fk
T2Zmc2V0KSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGls
ZXI6OmNhbGxlZUZyYW1lU2xvdChDYWxsRnJhbWVTbG90OjpjYWxsZWUpLndpdGhPZmZzZXQoVGFn
T2Zmc2V0KSwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICBtX2ppdC5lbWl0RHVtYlZpcnR1YWxD
YWxsKGluZm8pOworICAgICAgICBtX2ppdC5lbWl0RHVtYlZpcnR1YWxDYWxsKCptX2ppdC52bSgp
LCBpbmZvKTsKICAgICAgICAgCiAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICBz
ZXRSZXN1bHRBbmRSZXNldFN0YWNrKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk2Niw3ICs5NjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlKiBub2RlCiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHBhcnQgd2hlcmUgd2UgbWVhbnQgdG8g
bWFrZSBhIG5vcm1hbCBjYWxsLiBPb3BzLgogICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZElt
bTMyKHJlcXVpcmVkQnl0ZXMpLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1lU2xvdChDYWxsRnJh
bWVTbG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIG1faml0LmVtaXREdW1i
VmlydHVhbENhbGwoY2FsbExpbmtJbmZvKTsKKyAgICAgICAgbV9qaXQuZW1pdER1bWJWaXJ0dWFs
Q2FsbCgqbV9qaXQudm0oKSwgY2FsbExpbmtJbmZvKTsKICAgICAgICAgCiAgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOwogICAgICAgICBzZXRSZXN1bHRBbmRSZXNldFN0YWNrKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkzLDcgKzkzLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9u
VAogICAgIAogICAgIGppdC5qdW1wKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJnZt
LT5vc3JFeGl0SnVtcERlc3RpbmF0aW9uKSk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1
bmN0aW9uQ2FsbCwgY29tcGlsZU9TUkV4aXQpOwogICAgIApAQCAtMTQwLDcgKzE0MCw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFbnRyeVRodW5rR2VuZXIKIAogICAgIGppdC5qdW1wKEdQ
UkluZm86OnJlZ1QxKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0
LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkRG
RyBPU1IgZW50cnkgdGh1bmsiKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDggKzE0MSw3IEBA
IHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7
CiAgICAgICAgIH0pOwogCi0gICAgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyID0g
c3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPigKLSAgICAgICAgdm0sIGppdCwgY29kZUJsb2Nr
LCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlu
a0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4oaml0LCBjb2RlQmxvY2ssIEpJ
VENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlu
a0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAgICAgICBzdGF0ZS5hbGxvY2F0aW9u
RmFpbGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NSw4ICs1NSw2IEBAIHZvaWQgTGF6eVNsb3dQYXRoOjpnZW5lcmF0ZShDb2RlQmxvY2sq
IGMKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9zdHViKTsKIAotICAgIFZNJiB2bSA9ICpjb2Rl
QmxvY2stPnZtKCk7Ci0KICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CiAgICAgR2Vu
ZXJhdGlvblBhcmFtcyBwYXJhbXM7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRp
b25KdW1wczsKQEAgLTY1LDcgKzYzLDcgQEAgdm9pZCBMYXp5U2xvd1BhdGg6OmdlbmVyYXRlKENv
ZGVCbG9jayogYwogCiAgICAgbV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CiAKLSAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11
c3RTdWNjZWVkKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBjb2RlQmxvY2ssIEpJ
VENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwogICAgIGxpbmtCdWZmZXIubGluayhwYXJhbXMuZG9u
ZUp1bXBzLCBtX2RvbmUpOwogICAgIGlmIChtX2V4Y2VwdGlvblRhcmdldCkKICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGV4Y2VwdGlvbkp1bXBzLCBtX2V4Y2VwdGlvblRhcmdldCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
Miw3ICsxNjIsNyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgaml0LmVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBtYWluUGF0aEp1bXBzLmFwcGVuZChq
aXQuanVtcCgpKTsKIAotICAgICAgICAgICAgbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8
TGlua0J1ZmZlcj4odm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwor
ICAgICAgICAgICAgbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4oaml0
LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgICAgICAgICBpZiAobGlu
a0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAgICAgICAgICAgICAgIHN0YXRlLmFs
bG9jYXRpb25GYWlsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4Niw3
ICsxODYsNyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICBqaXQuZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoKTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG1haW5QYXRoSnVtcCA9
IGppdC5qdW1wKCk7CiAgICAgICAgIAotICAgICAgICBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3Vu
aXF1ZTxMaW5rQnVmZmVyPih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7CisgICAgICAgIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KGpp
dCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICBpZiAobGlua0J1
ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAgICAgICAgICAgc3RhdGUuYWxsb2NhdGlv
bkZhaWxlZCA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU5ODEsNiArNTk4MSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgQ29kZU9yaWdp
biBjb2RlT3JpZ2luID0gY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpOwogICAgICAg
ICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKKyAgICAgICAgVk0qIHZtID0gJnRoaXMtPnZt
KCk7CiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgICAgIFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOwpAQCAtNjAxOSw3ICs2MDIwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRv
cikuY29kZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dD
YWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKQEAgLTYy
NzgsNiArNjI3OSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
ID0gY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpOwogICAgICAgICBTdGF0ZSogc3Rh
dGUgPSAmbV9mdGxTdGF0ZTsKKyAgICAgICAgVk0qIHZtID0gJnRoaXMtPnZtKCk7CiAgICAgICAg
IHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
ICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQp
OwpAQCAtNjMyOSw3ICs2MzMxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewogICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtD
YWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlv
blB0cihsaW5rQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKQEAgLTY0MDMsNiArNjQwNSw3
IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBj
b2RlT3JpZ2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCk7CiAgICAgICAgIFN0YXRlKiBzdGF0ZSA9
ICZtX2Z0bFN0YXRlOworICAgICAgICBWTSogdm0gPSAmdGhpcy0+dm0oKTsKICAgICAgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CkBA
IC02NDU2LDcgKzY0NTksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGF1dG8gY2FsbFdp
dGhFeGNlcHRpb25DaGVjayA9IFsmXSAodm9pZCogY2FsbGVlKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsZWUpLCBHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7CiAgICAgICAgICAgICAgICAgICAgIGppdC5j
YWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKLSAgICAgICAgICAgICAg
ICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soc3RhdGUtPnZt
KCksIEFzc2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVy
czo6RmFySnVtcFdpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMtPmFwcGVu
ZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCp2bSwgQXNzZW1ibHlIZWxwZXJzOjpOb3JtYWxFeGNl
cHRpb25DaGVjaywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lkdGgpKTsKICAgICAgICAgICAg
ICAgICB9OwogCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2Fz
ZTsKQEAgLTY1ODIsNyArNjU4NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsaW5r
Q2FsbCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci52bSgpLmdldENU
SVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rp
b25QdHIobGlua0NhbGwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2Nh
dGlvbnMoCkBAIC02NjcyLDYgKzY2NzUsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luID0gY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgp
OwogICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKKyAgICAgICAgVk0qIHZtID0g
JnRoaXMtPnZtKCk7CiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKICAgICAgICAg
ICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOwpAQCAtNjc2Myw3ICs2NzY3LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBhdXRvIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2sgPSBbJl0gKHZvaWQqIGNh
bGxlZSkgewogICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoY2FsbGVlKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOwog
ICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1
bWVudEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMtPmFwcGVuZChqaXQuZW1p
dEV4Y2VwdGlvbkNoZWNrKHN0YXRlLT52bSgpLCBBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2Vw
dGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOworICAgICAgICAgICAg
ICAgICAgICBleGNlcHRpb25zLT5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjaygqdm0sIEFz
c2VtYmx5SGVscGVyczo6Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFy
SnVtcFdpZHRoKSk7CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG9yaWdpbmFsU3RhY2tIZWlnaHQgPSBwYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpOwpAQCAt
Njc3OSw3ICs2NzgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlubGlu
ZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CiAKICAg
ICAgICAgICAgICAgICAgICAgLy8gZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2UgbW9kaWZp
ZXMgdGhlIHN0YWNrIHBvaW50ZXIgaWYgaXQgc3VjY2VlZHMuCi0gICAgICAgICAgICAgICAgICAg
IGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKHN0YXRlLT52bSgpLCBqaXQsIHNjcmF0Y2hH
UFIyLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBpbmxpbmVDYWxsRnJh
bWUsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CisgICAgICAgICAgICAgICAg
ICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKCp2bSwgaml0LCBzY3JhdGNoR1BSMiwg
c2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgaW5saW5lQ2FsbEZyYW1lLCBk
YXRhLT5maXJzdFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOwogCiAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKICAgICAgICAgICAgICAgICAg
ICAgc2xvd0Nhc2UubGluaygmaml0KTsKQEAgLTY4NjEsNyArNjg2NSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgICAgICBbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBsaW5rQ2FsbCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci52bSgpLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIobGlua0NhbGwuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCkBAIC02OTIyLDggKzY5MjYsOSBAQCBwcml2YXRl
OgogICAgICAgICAKICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gY29kZU9yaWdpbkRl
c2NyaXB0aW9uT2ZDYWxsU2l0ZSgpOwogICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0
ZTsKKyAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIFs9LCAmdm1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CiAgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
ID0gc3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KGNvZGVPcmln
aW4pOwogICAgICAgICAgICAgICAgIApAQCAtNjk1Niw3ICs2OTYxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKHJlcXVpcmVkQnl0ZXMpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6Y2FsbGVl
RnJhbWVTbG90KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAg
ICAgICAgICAgICBqaXQuZW1pdER1bWJWaXJ0dWFsQ2FsbChjYWxsTGlua0luZm8pOworICAgICAg
ICAgICAgICAgIGppdC5lbWl0RHVtYlZpcnR1YWxDYWxsKHZtLCBjYWxsTGlua0luZm8pOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKICAgICAgICAg
ICAgICAgICBqaXQuYWRkUHRyKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OTEsNyArNDkxLDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgcmVpZnlJbmxp
bmVkQ2FsbEZyYW1lcyhqaXQsIGV4aXQpOwogICAgIGFkanVzdEFuZEp1bXBUb1RhcmdldCgqdm0s
IGppdCwgZXhpdCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwg
Y29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgY29kZUJsb2NrKTsK
ICAgICBleGl0Lm1fY29kZSA9IEZJTkFMSVpFX0NPREVfSUYoCiAgICAgICAgIHNob3VsZER1bXBE
aXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3Nl
RlRMT1NSRXhpdCgpLAogICAgICAgICBwYXRjaEJ1ZmZlciwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0SGFuZGxlLmNwcAkocmV2aXNpb24gMjE0NTQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0SGFuZGxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsMTMgKzQ0LDE0IEBAIHZvaWQgT1NSRXhpdEhhbmRsZTo6ZW1pdEV4aXRU
aHVuayhTdGF0ZSYKICAgICBqaXQucHVzaFRvU2F2ZUltbWVkaWF0ZVdpdGhvdXRUb3VjaGluZ1Jl
Z2lzdGVycyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmRleCkpOwogICAgIENDYWxsSGVs
cGVyczo6UGF0Y2hhYmxlSnVtcCBqdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBSZWZQ
dHI8T1NSRXhpdEhhbmRsZT4gc2VsZiA9IHRoaXM7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
ICAgICBqaXQuYWRkTGlua1Rhc2soCi0gICAgICAgIFtzZWxmLCBqdW1wLCBteUxhYmVsLCBjb21w
aWxhdGlvbl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgW3NlbGYsIGp1bXAs
IG15TGFiZWwsIGNvbXBpbGF0aW9uLCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAg
ICAgICAgICAgICBzZWxmLT5leGl0Lm1fcGF0Y2hhYmxlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXAo
bGlua0J1ZmZlci5sb2NhdGlvbk9mKGp1bXApKTsKIAogICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKAogICAgICAgICAgICAgICAgIGp1bXAubV9qdW1wLAotICAgICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIudm0oKS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9u
VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsKHZtLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikuY29kZSgp
KSk7CiAgICAgICAgICAgICBpZiAoY29tcGlsYXRpb24pCiAgICAgICAgICAgICAgICAgY29tcGls
YXRpb24tPmFkZE9TUkV4aXRTaXRlKHsgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG15TGFiZWwpLmV4
ZWN1dGFibGVBZGRyZXNzKCkgfSk7CiAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTgsMTYgKzExOCwxNCBAQCBTbG93UGF0aENhbGxLZXkgU2xvd1BhdGhDYWxsQ29u
dGV4dDo6a2V5CiAgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleShtX3RodW5rU2F2ZVNldCwgY2Fs
bFRhcmdldCwgbV9hcmd1bWVudFJlZ2lzdGVycywgbV9vZmZzZXQpOwogfQogCi1TbG93UGF0aENh
bGwgU2xvd1BhdGhDYWxsQ29udGV4dDo6bWFrZUNhbGwodm9pZCogY2FsbFRhcmdldCkKK1Nsb3dQ
YXRoQ2FsbCBTbG93UGF0aENhbGxDb250ZXh0OjptYWtlQ2FsbChWTSYgdm0sIHZvaWQqIGNhbGxU
YXJnZXQpCiB7CiAgICAgU2xvd1BhdGhDYWxsIHJlc3VsdCA9IFNsb3dQYXRoQ2FsbChtX2ppdC5j
YWxsKCksIGtleVdpdGhUYXJnZXQoY2FsbFRhcmdldCkpOwogCiAgICAgbV9qaXQuYWRkTGlua1Rh
c2soCi0gICAgICAgIFtyZXN1bHRdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAg
ICAgICBWTSYgdm0gPSBsaW5rQnVmZmVyLnZtKCk7Ci0KKyAgICAgICAgW3Jlc3VsdCwgJnZtXSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHRodW5rID0KLSAgICAgICAgICAgICAgICB2bS5mdGxUaHVua3MtPmdldFNsb3dQYXRoQ2Fs
bFRodW5rKHZtLCByZXN1bHQua2V5KCkpOworICAgICAgICAgICAgICAgIHZtLmZ0bFRodW5rcy0+
Z2V0U2xvd1BhdGhDYWxsVGh1bmsocmVzdWx0LmtleSgpKTsKIAogICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKHJlc3VsdC5jYWxsKCksIENvZGVMb2NhdGlvbkxhYmVsKHRodW5rLmNvZGUoKSkp
OwogICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1Bh
dGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93
UGF0aENhbGwuaAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJs
aWM6CiAKICAgICAvLyBOT1RFOiBUaGUgY2FsbCB0aGF0IHRoaXMgcmV0dXJucyBpcyBhbHJlYWR5
IGdvaW5nIHRvIGJlIGxpbmtlZCBieSB0aGUgSklUIHVzaW5nIGFkZExpbmtUYXNrKCksCiAgICAg
Ly8gc28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgeW91IHRvIGxpbmsgaXQgeW91cnNlbGYuCi0gICAg
U2xvd1BhdGhDYWxsIG1ha2VDYWxsKHZvaWQqIGNhbGxUYXJnZXQpOworICAgIFNsb3dQYXRoQ2Fs
bCBtYWtlQ2FsbChWTSYsIHZvaWQqIGNhbGxUYXJnZXQpOwogCiBwcml2YXRlOgogICAgIFNsb3dQ
YXRoQ2FsbEtleSBrZXlXaXRoVGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpIGNvbnN0OwpAQCAtODQs
NyArODQsNyBAQCBTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKICAgICB7CiAgICAgICAgIFNs
b3dQYXRoQ2FsbENvbnRleHQgY29udGV4dCh1c2VkUmVnaXN0ZXJzLCBqaXQsIHNpemVvZi4uLihB
cmd1bWVudFR5cGVzKSArIDEsIHJlc3VsdEdQUik7CiAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJndW1lbnRzLi4uKTsKLSAgICAgICAgY2FsbCA9IGNvbnRleHQubWFr
ZUNhbGwoZnVuY3Rpb24udmFsdWUoKSk7CisgICAgICAgIGNhbGwgPSBjb250ZXh0Lm1ha2VDYWxs
KHZtLCBmdW5jdGlvbi52YWx1ZSgpKTsKICAgICB9CiAgICAgaWYgKGV4Y2VwdGlvblRhcmdldCkK
ICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0LT5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjayh2
bSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMjE0
NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICB+U3RhdGUoKTsKIAogICAgIFZNJiB2
bSgpIHsgcmV0dXJuIGdyYXBoLm1fdm07IH0KLSAgICAKKwogICAgIC8vIE5vbmUgb2YgdGhlc2Ug
dGhpbmdzIGlzIG93bmVkIGJ5IFN0YXRlLiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YKICAg
ICAvLyBGVEwgcGhhc2VzIHRvIHByb3Blcmx5IG1hbmFnZSB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBt
b2R1bGUgYW5kIGZ1bmN0aW9uLgogICAgIERGRzo6R3JhcGgmIGdyYXBoOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTcsNyArMTE3LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmljR2VuZQog
CiAgICAgaml0LnJldCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBq
aXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmdW5jdGlvbkNhbGwsIGdlbmVy
YXRpb25GdW5jdGlvbik7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgi
JXMiLCBuYW1lKSk7CiB9CkBAIC0xNjQsNyArMTY0LDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJD
bG9iYmVyQ2hlY2soQXNzZW1ibAogICAgIH0KIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNs
b3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKFZNJiB2bSwgY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBr
ZXkpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IoY29u
c3QgU2xvd1BhdGhDYWxsS2V5JiBrZXkpCiB7CiAgICAgQXNzZW1ibHlIZWxwZXJzIGppdChudWxs
cHRyKTsKICAgICAKQEAgLTIyMiw3ICsyMjIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xv
d1BhdGhDYWxsVGh1bmtHCiAgICAgCiAgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcih2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bCwgRnVuY3Rpb25QdHIoa2V5LmNhbGxUYXJnZXQoKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCAoIkZUTCBzbG93IHBhdGggY2FsbCB0aHVuayBmb3IgJXMiLCB0b0NT
dHJpbmcoa2V5KS5kYXRhKCkpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExU
aHVua3MuaAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgRlRM
IHsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0
b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1
bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVu
a0dlbmVyYXRvcihWTSYsIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYpOworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYp
OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlQXJndW1lbnQ+CiBzdHJ1Y3QgVGh1bmtNYXAg
ewpAQCAtNTQsMTMgKzU0LDEzIEBAIHN0cnVjdCBUaHVua01hcCB7CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE1hcFR5cGUsIHR5cGVuYW1lIEdlbmVyYXRvclR5cGU+CiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgZ2VuZXJhdGVJZk5lY2Vzc2FyeSgKLSAgICBWTSYgdm0sIE1hcFR5cGUmIG1hcCwgY29uc3Qg
dHlwZW5hbWUgTWFwVHlwZTo6S2V5VHlwZSYga2V5LCBHZW5lcmF0b3JUeXBlIGdlbmVyYXRvcikK
KyAgICBNYXBUeXBlJiBtYXAsIGNvbnN0IHR5cGVuYW1lIE1hcFR5cGU6OktleVR5cGUmIGtleSwg
R2VuZXJhdG9yVHlwZSBnZW5lcmF0b3IpCiB7CiAgICAgdHlwZW5hbWUgTWFwVHlwZTo6VG9UaHVu
a01hcDo6aXRlcmF0b3IgaXRlciA9IG1hcC5tX3RvVGh1bmsuZmluZChrZXkpOwogICAgIGlmIChp
dGVyICE9IG1hcC5tX3RvVGh1bmsuZW5kKCkpCiAgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsK
ICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcmVzdWx0ID0gZ2VuZXJhdG9yKHZtLCBr
ZXkpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiByZXN1bHQgPSBnZW5lcmF0b3Ioa2V5KTsK
ICAgICBtYXAubV90b1RodW5rLmFkZChrZXksIHJlc3VsdCk7CiAgICAgbWFwLm1fZnJvbVRodW5r
LmFkZChyZXN1bHQuY29kZSgpLCBrZXkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC03NiwxMCAr
NzYsMTAgQEAgdHlwZW5hbWUgTWFwVHlwZTo6S2V5VHlwZSBrZXlGb3JUaHVuayhNYQogCiBjbGFz
cyBUaHVua3MgewogcHVibGljOgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZXRTbG93UGF0
aENhbGxUaHVuayhWTSYgdm0sIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KQorICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBnZXRTbG93UGF0aENhbGxUaHVuayhjb25zdCBTbG93UGF0aENhbGxL
ZXkmIGtleSkKICAgICB7CiAgICAgICAgIHJldHVybiBnZW5lcmF0ZUlmTmVjZXNzYXJ5KAotICAg
ICAgICAgICAgdm0sIG1fc2xvd1BhdGhDYWxsVGh1bmtzLCBrZXksIHNsb3dQYXRoQ2FsbFRodW5r
R2VuZXJhdG9yKTsKKyAgICAgICAgICAgIG1fc2xvd1BhdGhDYWxsVGh1bmtzLCBrZXksIHNsb3dQ
YXRoQ2FsbFRodW5rR2VuZXJhdG9yKTsKICAgICB9CiAgICAgCiAgICAgU2xvd1BhdGhDYWxsS2V5
IGtleUZvclNsb3dQYXRoQ2FsbFRodW5rKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBwdHIpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZp
c2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyNywxNCArNjI3LDE0IEBAIHZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXMKICNlbmRpZgogfQogCi12b2lkIEFzc2VtYmx5SGVs
cGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsbChDYWxsTGlua0luZm8qIGluZm8pCit2b2lkIEFzc2Vt
Ymx5SGVscGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyogaW5m
bykKIHsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAg
ICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtUYXNrKAotICAgICAgICBbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3IoJmxpbmtCdWZmZXIudm0oKSwgKmlu
Zm8pOwotICAgICAgICAgICAgaW5mby0+c2V0U2xvd1N0dWIoY3JlYXRlSklUU3R1YlJvdXRpbmUo
dmlydHVhbFRodW5rLCBsaW5rQnVmZmVyLnZtKCksIG51bGxwdHIsIHRydWUpKTsKKyAgICAgICAg
Wz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmsgPSB2aXJ0dWFsVGh1bmtGb3IoJnZtLCAqaW5mbyk7
CisgICAgICAgICAgICBpbmZvLT5zZXRTbG93U3R1YihjcmVhdGVKSVRTdHViUm91dGluZSh2aXJ0
dWFsVGh1bmssIHZtLCBudWxscHRyLCB0cnVlKSk7CiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwodmlydHVhbFRodW5rLmNvZGUoKSkpOwogICAgICAg
ICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuaAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQwOSw3ICsxNDA5LDcgQEAgcHVibGlj
OgogICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OlVuZGVmaW5lZCwgdHJ1ZSk7CiAgICAgfQog
ICAgIAotICAgIHZvaWQgZW1pdER1bWJWaXJ0dWFsQ2FsbChDYWxsTGlua0luZm8qKTsKKyAgICB2
b2lkIGVtaXREdW1iVmlydHVhbENhbGwoVk0mLCBDYWxsTGlua0luZm8qKTsKICAgICAKICAgICBW
ZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXBGb3IoQ29kZUJs
b2NrKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzExLDE1
ICszMTEsMjUgQEAgcHJpdmF0ZToKIH07CiAKIHN0YXRpYyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVB
bGxvY2F0b3IqIGFsbG9jYXRvcjsKK3N0YXRpYyBFeGVjdXRhYmxlQWxsb2NhdG9yKiBleGVjdXRh
YmxlQWxsb2NhdG9yOwogCiB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxv
Y2F0b3IoKQogewogICAgIEFTU0VSVCghYWxsb2NhdG9yKTsKICAgICBhbGxvY2F0b3IgPSBuZXcg
Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CiAgICAgQ29kZVByb2ZpbGluZzo6bm90
aWZ5QWxsb2NhdG9yKGFsbG9jYXRvcik7CisKKyAgICBleGVjdXRhYmxlQWxsb2NhdG9yID0gbmV3
IEV4ZWN1dGFibGVBbGxvY2F0b3I7Cit9CisKK0V4ZWN1dGFibGVBbGxvY2F0b3ImIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpCit7CisgICAgQVNTRVJUKGFsbG9jYXRvcik7CisgICAg
QVNTRVJUKGV4ZWN1dGFibGVBbGxvY2F0b3IpOworICAgIHJldHVybiAqZXhlY3V0YWJsZUFsbG9j
YXRvcjsKIH0KIAotRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihWTSYp
CitFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKCkKIHsKICAgICBBU1NF
UlQoYWxsb2NhdG9yKTsKIH0KQEAgLTM2Miw3ICszNzIsNyBAQCBkb3VibGUgRXhlY3V0YWJsZUFs
bG9jYXRvcjo6bWVtb3J5UHJlc3N1CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKFZNJiwg
c2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQg
ZWZmb3J0KQorUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0
b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBpZiAoT3B0aW9uczo6bG9nRXhlY3V0YWJsZUFs
bG9jYXRpb24oKSkgewogICAgICAgICBNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIHN0YXRzID0g
YWxsb2NhdG9yLT5jdXJyZW50U3RhdGlzdGljcygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIxNDU0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw4ICs1NSw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBWTTsK
LQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGppdEFsbG9jYXRpb25HcmFudWxlID0gMzI7CiAKIHR5
cGVkZWYgV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU7CkBA
IC0xMTcsOSArMTE1LDcgQEAgY2xhc3MgRXhlY3V0YWJsZUFsbG9jYXRvciB7CiAgICAgZW51bSBQ
cm90ZWN0aW9uU2V0dGluZyB7IFdyaXRhYmxlLCBFeGVjdXRhYmxlIH07CiAKIHB1YmxpYzoKLSAg
ICBFeGVjdXRhYmxlQWxsb2NhdG9yKFZNJik7Ci0gICAgfkV4ZWN1dGFibGVBbGxvY2F0b3IoKTsK
LSAgICAKKyAgICBzdGF0aWMgRXhlY3V0YWJsZUFsbG9jYXRvciYgc2luZ2xldG9uKCk7CiAgICAg
c3RhdGljIHZvaWQgaW5pdGlhbGl6ZUFsbG9jYXRvcigpOwogCiAgICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3Q7CkBAIC0xMzQsMTMgKzEzMCwxNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVt
cFByb2ZpbGUoKSB7IH0KICNlbmRpZgogCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU+IGFsbG9jYXRlKFZNJiwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklU
Q29tcGlsYXRpb25FZmZvcnQpOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBh
bGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlv
bkVmZm9ydCk7CiAKICAgICBib29sIGlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgdm9pZCogYWRkcmVzcyk7CiAKICAgICBzdGF0aWMgc2l6ZV90IGNvbW1pdHRl
ZEJ5dGVDb3VudCgpOwogCiAgICAgTG9jayYgZ2V0TG9jaygpIGNvbnN0OworcHJpdmF0ZToKKwor
ICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IoKTsKKyAgICB+RXhlY3V0YWJsZUFsbG9jYXRvcigpOwog
fTsKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpICYmIEVOQUJMRShBU1NFTUJMRVIpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxNiw3ICs3MTYsNyBA
QCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJVENvbXBpCiAgICAgICAgIG1fZGlz
YXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRl
ZmF1bHRDb2RlT3JpZ2luKCkpOwogCi0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRy
PExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCptX3ZtLCAqdGhpcywgbV9jb2RlQmxvY2ssIGVm
Zm9ydCkpOworICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihu
ZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIGVmZm9ydCkpOwogCiAgICAgZG91Ymxl
IGFmdGVyID0gMDsKICAgICBpZiAoVU5MSUtFTFkoY29tcHV0ZUNvbXBpbGVUaW1lcygpKSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyMTQ1NDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKElu
c3RydQogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVn
aXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGVtaXREdW1iVmlydHVhbENhbGwoaW5m
byk7CisgICAgZW1pdER1bWJWaXJ0dWFsQ2FsbCgqdm0oKSwgaW5mbyk7CiAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRNYXRoSUMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE1hdGhJQy5oCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE1hdGhJQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgdm9pZCBnZW5lcmF0ZU91
dE9mTGluZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBGdW5jdGlvblB0ciBjYWxsUmVw
bGFjZW1lbnQpCisgICAgdm9pZCBnZW5lcmF0ZU91dE9mTGluZShDb2RlQmxvY2sqIGNvZGVCbG9j
aywgRnVuY3Rpb25QdHIgY2FsbFJlcGxhY2VtZW50KQogICAgIHsKICAgICAgICAgYXV0byBsaW5r
SnVtcFRvT3V0T2ZMaW5lU25pcHBldCA9IFsmXSAoKSB7CiAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnMgaml0KGNvZGVCbG9jayk7CkBAIC0xNjAsNyArMTYwLDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgaWYgKGdlbmVyYXRlZElubGluZSkgewogICAgICAgICAgICAgICAgIGF1dG8ganVtcFRvRG9u
ZSA9IGppdC5qdW1wKCk7CiAKLSAgICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
dm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICAgICAg
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25D
YW5GYWlsKTsKICAgICAgICAgICAgICAgICBpZiAoIWxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2Nh
dGUoKSkgewogICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZ2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoSnVtcHMsIHNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKICAgICAgICAgICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0RvbmUsIGRvbmVMb2NhdGlvbigpKTsKQEAg
LTIwMCw3ICsyMDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgZW5kSnVtcExpc3QuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgICAgICAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOworICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgY29kZUJsb2NrLCBK
SVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgICAgICAgICAgaWYgKGxpbmtCdWZmZXIuZGlkRmFp
bFRvQWxsb2NhdGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDIxNDU0
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVD
b21waWxlQ1RJTmF0aXYKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKICAgICAv
LyBBbGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxpbmsgdXAgY2Fs
bHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRoZSBNYWNoaW5lIG9iamVjdC4KLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgKnRoaXMsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lEKTsKIAogICAgIHBhdGNo
QnVmZmVyLmxpbmsobmF0aXZlQ2FsbCwgRnVuY3Rpb25QdHIoZnVuYykpOwogICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkpJVCBDVEkgbmF0aXZlIGNhbGwiKSk7CkBAIC0x
MDYxLDcgKzEwNjEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVy
CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywgbV9jb2RlQmxv
Y2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKICAg
ICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJl
c3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93
UGF0aCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJl
bChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVz
c1RvU2xvd1BhdGgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExOSw3ICsxMTE5LDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwogICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlzLCBtX2Nv
ZGVCbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2sp
OwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwo
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJu
QWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NU
b1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlv
bkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNz
KHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5B
ZGRyZXNzVG9TbG93UGF0aCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzc1LDcgKzIzNzUs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAgICAgQVNTRVJU
KGFyaXRoUHJvZmlsZSk7CiAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTQW5kUkhTKG9wMSwg
b3AyKTsKICAgICBhdXRvIG5vbk9wdGltaXplVmFyaWFudCA9IG9wZXJhdGlvblZhbHVlQWRkUHJv
ZmlsZWROb09wdGltaXplOwotICAgIGFkZElDLT5nZW5lcmF0ZU91dE9mTGluZSgqdm0sIGV4ZWMt
PmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOworICAgIGFkZElDLT5nZW5lcmF0ZU91
dE9mTGluZShleGVjLT5jb2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsKIAogI2lmIEVO
QUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5kdW1wTWF0aElDU3Rh
dHMoKTsKQEAgLTI0MDgsNyArMjQwOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVmEKICAgICBhdXRvIG5vbk9wdGltaXplVmFyaWFudCA9IG9wZXJhdGlvblZhbHVl
QWRkTm9PcHRpbWl6ZTsKICAgICBpZiAoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBhZGRJ
Qy0+YXJpdGhQcm9maWxlKCkpCiAgICAgICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZUxIU0FuZFJI
UyhvcDEsIG9wMik7Ci0gICAgYWRkSUMtPmdlbmVyYXRlT3V0T2ZMaW5lKCp2bSwgZXhlYy0+Y29k
ZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CisgICAgYWRkSUMtPmdlbmVyYXRlT3V0T2ZM
aW5lKGV4ZWMtPmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOwogCiAjaWYgRU5BQkxF
KE1BVEhfSUNfU1RBVFMpCiAgICAgZXhlYy0+Y29kZUJsb2NrKCktPmR1bXBNYXRoSUNTdGF0cygp
OwpAQCAtMjQ4NSw3ICsyNDg1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25WYQogICAgIGF1dG8gbm9uT3B0aW1pemVWYXJpYW50ID0gb3BlcmF0aW9uVmFsdWVNdWxO
b09wdGltaXplOwogICAgIGlmIChBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG11bElDLT5h
cml0aFByb2ZpbGUoKSkKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTQW5kUkhTKEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKTsK
LSAgICBtdWxJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoKnZtLCBleGVjLT5jb2RlQmxvY2soKSwgbm9u
T3B0aW1pemVWYXJpYW50KTsKKyAgICBtdWxJQy0+Z2VuZXJhdGVPdXRPZkxpbmUoZXhlYy0+Y29k
ZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFU
UykKICAgICBleGVjLT5jb2RlQmxvY2soKS0+ZHVtcE1hdGhJQ1N0YXRzKCk7CkBAIC0yNTEyLDcg
KzI1MTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAgICAg
QVNTRVJUKGFyaXRoUHJvZmlsZSk7CiAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTQW5kUkhT
KEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIp
KTsKICAgICBhdXRvIG5vbk9wdGltaXplVmFyaWFudCA9IG9wZXJhdGlvblZhbHVlTXVsUHJvZmls
ZWROb09wdGltaXplOwotICAgIG11bElDLT5nZW5lcmF0ZU91dE9mTGluZSgqdm0sIGV4ZWMtPmNv
ZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOworICAgIG11bElDLT5nZW5lcmF0ZU91dE9m
TGluZShleGVjLT5jb2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsKIAogI2lmIEVOQUJM
RShNQVRIX0lDX1NUQVRTKQogICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5kdW1wTWF0aElDU3RhdHMo
KTsKQEAgLTI1ODMsNyArMjU4Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQXIKICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG5lZ0lDLT5hcml0aFBy
b2ZpbGUoKTsKICAgICBBU1NFUlQoYXJpdGhQcm9maWxlKTsKICAgICBhcml0aFByb2ZpbGUtPm9i
c2VydmVMSFMob3BlcmFuZCk7Ci0gICAgbmVnSUMtPmdlbmVyYXRlT3V0T2ZMaW5lKHZtLCBleGVj
LT5jb2RlQmxvY2soKSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCk7CisgICAgbmVnSUMt
PmdlbmVyYXRlT3V0T2ZMaW5lKGV4ZWMtPmNvZGVCbG9jaygpLCBvcGVyYXRpb25Bcml0aE5lZ2F0
ZVByb2ZpbGVkKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGV4ZWMtPmNvZGVC
bG9jaygpLT5kdW1wTWF0aElDU3RhdHMoKTsKQEAgLTI2MDcsNyArMjYwNyw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKIAogICAgIGlmIChBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IG5lZ0lDLT5hcml0aFByb2ZpbGUoKSkKICAgICAgICAgYXJpdGhQcm9m
aWxlLT5vYnNlcnZlTEhTKG9wZXJhbmQpOwotICAgIG5lZ0lDLT5nZW5lcmF0ZU91dE9mTGluZSh2
bSwgZXhlYy0+Y29kZUJsb2NrKCksIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKKyAgICBuZWdJQy0+
Z2VuZXJhdGVPdXRPZkxpbmUoZXhlYy0+Y29kZUJsb2NrKCksIG9wZXJhdGlvbkFyaXRoTmVnYXRl
KTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5k
dW1wTWF0aElDU3RhdHMoKTsKQEAgLTI2NzUsNyArMjY3NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKICAgICBhdXRvIG5vbk9wdGltaXplVmFyaWFudCA9IG9w
ZXJhdGlvblZhbHVlU3ViTm9PcHRpbWl6ZTsKICAgICBpZiAoQXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSBzdWJJQy0+YXJpdGhQcm9maWxlKCkpCiAgICAgICAgIGFyaXRoUHJvZmlsZS0+b2Jz
ZXJ2ZUxIU0FuZFJIUyhKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AyKSk7Ci0gICAgc3ViSUMtPmdlbmVyYXRlT3V0T2ZMaW5lKCp2bSwgZXhlYy0+
Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFudCk7CisgICAgc3ViSUMtPmdlbmVyYXRlT3V0
T2ZMaW5lKGV4ZWMtPmNvZGVCbG9jaygpLCBub25PcHRpbWl6ZVZhcmlhbnQpOwogCiAjaWYgRU5B
QkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgZXhlYy0+Y29kZUJsb2NrKCktPmR1bXBNYXRoSUNTdGF0
cygpOwpAQCAtMjcwMSw3ICsyNzAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25WYQogICAgIEFTU0VSVChhcml0aFByb2ZpbGUpOwogICAgIGFyaXRoUHJvZmlsZS0+
b2JzZXJ2ZUxIU0FuZFJIUyhKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSksIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AyKSk7CiAgICAgYXV0byBub25PcHRpbWl6ZVZhcmlhbnQgPSBvcGVyYXRp
b25WYWx1ZVN1YlByb2ZpbGVkTm9PcHRpbWl6ZTsKLSAgICBzdWJJQy0+Z2VuZXJhdGVPdXRPZkxp
bmUoKnZtLCBleGVjLT5jb2RlQmxvY2soKSwgbm9uT3B0aW1pemVWYXJpYW50KTsKKyAgICBzdWJJ
Qy0+Z2VuZXJhdGVPdXRPZkxpbmUoZXhlYy0+Y29kZUJsb2NrKCksIG5vbk9wdGltaXplVmFyaWFu
dCk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBleGVjLT5jb2RlQmxvY2soKS0+
ZHVtcE1hdGhJQ1N0YXRzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuaAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDcgQEAgY2xhc3Mg
U3RydWN0dXJlOwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CiBjbGFzcyBTeW1ib2w7CiBjbGFz
cyBTeW1ib2xUYWJsZTsKK2NsYXNzIFZNOwogY2xhc3MgV2F0Y2hwb2ludFNldDsKIAogc3RydWN0
IEJ5VmFsSW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc3LDcgKzE3Nyw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1
YkdlbmUKICAgICBqaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICAgICBqaXQucmV0
KCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
KTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJTdHJpbmcgZ2V0X2J5
X3ZhbCBzdHViIikpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4
LDcgKzg4LDcgQEAgSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZQogICAg
IGppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogICAgIGppdC5yZXQoKTsKICAgICAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIlN0cmluZyBnZXRfYnlfdmFsIHN0dWIi
KSk7CiB9CiAKQEAgLTEzMzYsNyArMTMzNiw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5VmFsKEJ5VmFsSW4KICAgICAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywgbV9jb2RlQmxvY2spOworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKICAgICAKICAgICBwYXRjaEJ1
ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxh
YmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVl
KCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsK
QEAgLTEzNjIsNyArMTM2Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0
aENhY2gKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbiA9IGVtaXRHZXRCeVZhbFdpdGhDYWNo
ZWRJZChieVZhbEluZm8sIGN1cnJlbnRJbnN0cnVjdGlvbiwgcHJvcGVydHlOYW1lLCBmYXN0RG9u
ZUNhc2UsIHNsb3dEb25lQ2FzZSwgc2xvd0Nhc2VzKTsKIAogICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqbV92bSwgKnRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp0aGlzLCBtX2NvZGVCbG9jayk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENv
ZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFi
bGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZv
LT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFzdERv
bmVDYXNlLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5i
YWRUeXBlSnVtcFRvRG9uZSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0RvbmVDYXNlLCBi
eVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVt
cFRvTmV4dEhvdFBhdGgpKTsKQEAgLTE0MTksNyArMTQxOSw3IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywgbV9jb2RlQmxvY2spOwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKICAgICBwYXRj
aEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkp
LmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwogICAg
IHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZh
bHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgp
KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFi
ZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CkBAIC0xNDUzLDcgKzE0
NTMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoCiAgICAgSklU
UHV0QnlJZEdlbmVyYXRvciBnZW4gPSBlbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoYnlWYWxJbmZv
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHB1dEtpbmQsIHByb3BlcnR5TmFtZSwgZG9uZUNhc2VzLCBz
bG93Q2FzZXMpOwogCiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywgbV9jb2Rl
QmxvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVz
cy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQ
YXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lQ2FzZXMsIGJ5VmFsSW5mby0+YmFkVHlw
ZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAgICAg
aWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2
ICszMyw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7Citj
bGFzcyBWTTsKIAogLy8gVGhpcyBpcyBhIGJhc2UtY2xhc3MgZm9yIEpJVCBzdHViIHJvdXRpbmVz
LCBhbmQgYWxzbyB0aGUgY2xhc3MgeW91IHdhbnQKIC8vIHRvIGluc3RhbnRpYXRlIGRpcmVjdGx5
IGlmIHlvdSBoYXZlIGEgcm91dGluZSB0aGF0IGRvZXMgbm90IG5lZWQgYW55CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcg
KzkxLDcgQEAgdm9pZCBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKgogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsKS5leGVjdXRhYmxl
QWRkcmVzcygpKSk7CiAgICAgICAgIGtleSA9IGtleS53aXRoQ2FsbFRhcmdldChuZXdDYWxsZWVG
dW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24g
PSBGdW5jdGlvblB0cigKLSAgICAgICAgICAgIHRodW5rcy5nZXRTbG93UGF0aENhbGxUaHVuayh2
bSwga2V5KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICB0aHVua3Mu
Z2V0U2xvd1BhdGhDYWxsVGh1bmsoa2V5KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAg
ICAgfQogI2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQpCiAgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9j
ayk7CkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgIHN0
dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOwog
ICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBzbG93ID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAg
IAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIodm0sIHN0dWJKaXQsIG93bmVyLCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoc3R1YkppdCwgb3du
ZXIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxU
b0FsbG9jYXRlKCkpIHsKICAgICAgICAgbGlua1ZpcnR1YWxGb3IoZXhlYywgY2FsbExpbmtJbmZv
KTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVj
aWFsaXplZFRodW5rSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TcGVjaWFsaXplZFRodW5rSklULmgJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjYsNyArMTY2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgZmluYWxpemUoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxiYWNrLCBj
b25zdCBjaGFyKiB0aHVua0tpbmQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlzLCBHTE9CQUxfVEhVTktfSUQpOworICAgICAgICAgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lEKTsKICAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsobV9mYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFiZWwoZmFsbGJh
Y2spKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxzLnNpemUo
KTsgaSsrKQogICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1tpXS5maXJz
dCwgbV9jYWxsc1tpXS5zZWNvbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3
ICs3Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb20KICAgICBq
aXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFu
ZGxlcigqdm0pOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFM
X1RIVU5LX0lEKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJUaHJvdyBleGNl
cHRpb24gZnJvbSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsKIH0KIApAQCAtMTQyLDcgKzE0Miw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXIKICAgICAKICAgICBz
bG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2FsbCk7CiAgICAgCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMaW5rIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOwogfQog
CkBAIC0xNTQsNyArMTU0LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhp
Y0NhbAogICAgIAogICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtQb2x5bW9y
cGhpY0NhbGwpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdM
T0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiTGluayBw
b2x5bW9ycGhpYyBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsKIH0KIApAQCAtMjIzLDcgKzIyMyw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3IoVk0KICAgICAKICAgICBz
bG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25WaXJ0dWFsQ2FsbCk7CiAgICAgCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklO
QUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsCiAgICAgICAgICgiVmlydHVhbCAlcyBz
bG93IHBhdGggdGh1bmsiLApAQCAtMzgyLDcgKzM4Miw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbmF0aXZlRm9yR2UKIAogICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2
bSk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktf
SUQpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwog
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIm5hdGl2ZSAlcyVzIHRyYW1w
b2xpbmUiLCBlbnRyeVR5cGUgPT0gRW50ZXJWaWFKdW1wV2l0aFNhdmVkVGFncyA/ICJUYWlsIFdp
dGggU2F2ZWQgVGFncyAiIDogZW50cnlUeXBlID09IEVudGVyVmlhSnVtcFdpdGhvdXRTYXZlZFRh
Z3MgPyAiVGFpbCBXaXRob3V0IFNhdmVkIFRhZ3MgIiA6ICIiLCB0b0NTdHJpbmcoa2luZCkuZGF0
YSgpKSk7CiB9CiAKQEAgLTUyOSw3ICs1MjksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJp
dHlGaXh1cEdlbmVyYXRvCiAgICAgaml0LnJldCgpOwogI2VuZGlmCiAKLSAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCAoImZpeHVwIGFyaXR5IikpOwogfQogCkBAIC01MzksNyArNTM5LDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHVucmVhY2hhYmxlR2VuZXJhdAogCiAgICAgaml0LmJy
ZWFrcG9pbnQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JB
TF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVO
S19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgidW5yZWFjaGFi
bGUgdGh1bmsiKSk7CiB9CiAKQEAgLTExMjcsNyArMTEyNyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBib3VuZFRoaXNOb0FyZ3NGdW4KICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsK
ICAgICBqaXQucmV0KCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0
LCBHTE9CQUxfVEhVTktfSUQpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCk7CiAgICAgbGlua0J1ZmZlci5saW5rKG5vQ29kZSwgQ29kZUxvY2F0aW9uTGFi
ZWwodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3Modm0pKSk7
CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCiAgICAgICAgIGxpbmtCdWZmZXIsICgiU3BlY2lh
bGl6ZWQgdGh1bmsgZm9yIGJvdW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1lbnRzIikp
OwpAQCAtMTE2Nyw3ICsxMTY3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0
aW9uRnJvbQogICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOwogICAgIH07
CiAKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7
CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICBs
aW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKICAgICByZXR1cm4gRklO
QUxJWkVfQ09ERSgKICAgICAgICAgbGlua0J1ZmZlciwgKCJUaHJvdyBleGNlcHRpb24gZnJvbSBX
YXNtIikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3Mu
Y3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJhdGVUaHUKICAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJ
VDo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHRhcmdldCkpLCBKU0ludGVyZmFj
ZUpJVDo6cmVnVDApOwogICAgIGppdC5qdW1wKEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7CiAgICAg
Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsK
KyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMTEludCAlcyBwcm9sb2d1ZSB0aHVu
ayIsIHRodW5rS2luZCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0Miw3ICszNDIsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1w
bGUoY29uc3QgCiAKICAgICAgICAgTG9ja0hvbGRlciBtYWNoaW5lVGhyZWFkc0xvY2tlcihtX3Zt
LmhlYXAubWFjaGluZVRocmVhZHMoKS5nZXRMb2NrKCkpOwogICAgICAgICBMb2NrSG9sZGVyIGNv
ZGVCbG9ja1NldExvY2tlcihtX3ZtLmhlYXAuY29kZUJsb2NrU2V0KCkuZ2V0TG9jaygpKTsKLSAg
ICAgICAgTG9ja0hvbGRlciBleGVjdXRhYmxlQWxsb2NhdG9yTG9ja2VyKG1fdm0uZXhlY3V0YWJs
ZUFsbG9jYXRvci5nZXRMb2NrKCkpOworICAgICAgICBMb2NrSG9sZGVyIGV4ZWN1dGFibGVBbGxv
Y2F0b3JMb2NrZXIoRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0TG9jaygpKTsK
IAogICAgICAgICBib29sIGRpZFN1c3BlbmQgPSBtX2pzY0V4ZWN1dGlvblRocmVhZC0+c3VzcGVu
ZCgpOwogICAgICAgICBpZiAoZGlkU3VzcGVuZCkgewpAQCAtMzY0LDcgKzM2NCw3IEBAIHZvaWQg
U2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBsZShjb25zdCAKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIC8vIEZJWE1FOiBMZXRzIGhhdmUgYSB3YXkgb2YgZGV0ZWN0aW5nIHdoZW4gd2UncmUg
cGFyc2luZyBjb2RlLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1Mjc2MQotICAgICAgICAgICAgaWYgKG1fdm0uZXhlY3V0YWJsZUFsbG9j
YXRvci5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShleGVjdXRhYmxlQWxsb2NhdG9yTG9ja2VyLCBt
YWNoaW5lUEMpKSB7CisgICAgICAgICAgICBpZiAoRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xl
dG9uKCkuaXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoZXhlY3V0YWJsZUFsbG9jYXRvckxvY2tlciwg
bWFjaGluZVBDKSkgewogICAgICAgICAgICAgICAgIGlmIChtX3ZtLmlzRXhlY3V0aW5nSW5SZWdF
eHBKSVQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlJ3JlIGV4ZWN1dGluZyBh
IHJlZ2V4cC4gTGV0cyBnYXRoZXIgbW9yZSBpbnRlcnN0aW5nIGRhdGEuCiAgICAgICAgICAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3MjkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIxNDU0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY1LDkgKzE2NSw2IEBAIHN0YXRpYyBib29sIGVuYWJsZUFzc2VtYmxlcihFeGVjdXRhYmxl
QWwKIAogVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIDogbV9h
cGlMb2NrKGFkb3B0UmVmKG5ldyBKU0xvY2sodGhpcykpKQotI2lmIEVOQUJMRShBU1NFTUJMRVIp
Ci0gICAgLCBleGVjdXRhYmxlQWxsb2NhdG9yKCp0aGlzKQotI2VuZGlmCiAgICAgLCBoZWFwKHRo
aXMsIGhlYXBUeXBlKQogICAgICwgYXV4aWxpYXJ5U3BhY2UoIkF1eGlsaWFyeSIsIGhlYXAsIEFs
bG9jYXRvckF0dHJpYnV0ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkF1eGls
aWFyeSkpCiAgICAgLCBjZWxsU3BhY2UoIkpTQ2VsbCIsIGhlYXAsIEFsbG9jYXRvckF0dHJpYnV0
ZXMoRG9lc05vdE5lZWREZXN0cnVjdGlvbiwgSGVhcENlbGw6OkpTQ2VsbCkpCkBAIC0xOTgsNyAr
MTk1LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwg
bV9ydFRyYWNlTGlzdChuZXcgUlRUcmFjZUxpc3QoKSkKICNlbmRpZgogI2lmIEVOQUJMRShBU1NF
TUJMRVIpCi0gICAgLCBtX2NhblVzZUFzc2VtYmxlcihlbmFibGVBc3NlbWJsZXIoZXhlY3V0YWJs
ZUFsbG9jYXRvcikpCisgICAgLCBtX2NhblVzZUFzc2VtYmxlcihlbmFibGVBc3NlbWJsZXIoRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkpKQogI2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkK
ICAgICAsIG1fY2FuVXNlSklUKG1fY2FuVXNlQXNzZW1ibGVyICYmIE9wdGlvbnM6OnVzZUpJVCgp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMTQ1NDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODUsMTQgKzI4NSw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEpTTG9jaz4gbV9hcGlMb2NrOwog
CiBwdWJsaWM6Ci0jaWYgRU5BQkxFKEFTU0VNQkxFUikKLSAgICAvLyBleGVjdXRhYmxlQWxsb2Nh
dG9yIHNob3VsZCBiZSBkZXN0cnVjdGVkIGFmdGVyIHRoZSBoZWFwLCBhcyB0aGUgaGVhcCBjYW4g
Y2FsbCBleGVjdXRhYmxlQWxsb2NhdG9yCi0gICAgLy8gaW4gaXRzIGRlc3RydWN0b3IuCi0gICAg
RXhlY3V0YWJsZUFsbG9jYXRvciBleGVjdXRhYmxlQWxsb2NhdG9yOwotI2VuZGlmCi0KLSAgICAv
LyBUaGUgaGVhcCBzaG91bGQgYmUganVzdCBhZnRlciBleGVjdXRhYmxlQWxsb2NhdG9yIGFuZCBi
ZWZvcmUgb3RoZXIgbWVtYmVycyB0byBlbnN1cmUgdGhhdCBpdCdzCi0gICAgLy8gZGVzdHJ1Y3Rl
ZCBhZnRlciBhbGwgdGhlIG9iamVjdHMgdGhhdCByZWZlcmVuY2UgaXQuCiAgICAgSGVhcCBoZWFw
OwogICAgIAogICAgIFN1YnNwYWNlIGF1eGlsaWFyeVNwYWNlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTAsNyArMjUwLDcgQEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKAog
ICAgICAgICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4K
IAogICAgIHsKLSAgICAgICAgYXV0byBhbGxvY2F0b3IgPSB2bS5leGVjdXRhYmxlQWxsb2NhdG9y
OworICAgICAgICBhdXRvJiBhbGxvY2F0b3IgPSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0
b24oKTsKICAgICAgICAgYXV0byBhbGxvY2F0b3JMb2NrZXIgPSB0cnlIb2xkTG9jayhhbGxvY2F0
b3IuZ2V0TG9jaygpKTsKICAgICAgICAgaWYgKCFhbGxvY2F0b3JMb2NrZXIpCiAgICAgICAgICAg
ICByZXR1cm47IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAkocmV2aXNpb24g
MjE0NTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA3LDggKzEwNyw4IEBAIGF1dG8gVk1JbnNwZWN0b3I6OmlzVmFs
aWRFeGVjdXRhYmxlTWVtb3IKICNpZiBFTkFCTEUoSklUKQogICAgIGJvb2wgZm91bmQgPSBmYWxz
ZTsKICAgICBib29sIGhhc1RpbWVvdXQgPSBmYWxzZTsKLSAgICBpdGVyYXRlKFsmXSAoVk0mIHZt
KSAtPiBGdW5jdG9yU3RhdHVzIHsKLSAgICAgICAgYXV0byBhbGxvY2F0b3IgPSB2bS5leGVjdXRh
YmxlQWxsb2NhdG9yOworICAgIGl0ZXJhdGUoWyZdIChWTSYpIC0+IEZ1bmN0b3JTdGF0dXMgewor
ICAgICAgICBhdXRvJiBhbGxvY2F0b3IgPSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24o
KTsKICAgICAgICAgYXV0byYgbG9jayA9IGFsbG9jYXRvci5nZXRMb2NrKCk7CiAKICAgICAgICAg
Ym9vbCBpc1NhZmVUb0xvY2sgPSBlbnN1cmVJc1NhZmVUb0xvY2sobG9jayk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCShyZXZpc2lvbiAyMTQ1NDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdh
c21Ub0pzKFZNCiAgICAgICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNo
KTsKICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigq
dm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1
ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
Y2FsbCwgdGhyb3dCYWRJNjQpOwogICAgICAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlu
a0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbnZhbGlkIGk2NCB1c2UgaW4gaW1w
b3J0WyVpXSIsIGltcG9ydEluZGV4KSk7CiAgICAgICAgIH0KQEAgLTQxMiw3ICs0MTIsNyBAQCBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAgICAgICAgIH0pOwogICAg
IH0KIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19J
RCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAg
ICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIodm0tPmdldENUSVN0dWIo
bGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAg
ICBDb2RlTG9jYXRpb25MYWJlbCBjYWxsUmV0dXJuTG9jYXRpb24ocGF0Y2hCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsKHNsb3dDYWxsKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJl
Z2luKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YodGFyZ2V0VG9DaGVjaykpOwpAQCAtNDI2LDcgKzQy
Niw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0KICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBp
bXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZURlc2NyaXB0aW9uLmFzY2lpKCku
ZGF0YSgpKSk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvV2FzbShW
TSogdm0sIHVuc2lnbmVkIGltcG9ydEluZGV4KQorc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB3YXNtVG9XYXNtKHVuc2lnbmVkIGltcG9ydEluZGV4KQogewogICAgIGNvbnN0IFBpbm5lZFJl
Z2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CiAgICAg
SklUIGppdDsKQEAgLTQ2Miw3ICs0NjIsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHdhc21Ub1dhc20oCiAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0Y2gsIFdlYkFz
c2VtYmx5RnVuY3Rpb246Om9mZnNldE9mV2FzbUVudHJ5UG9pbnRDb2RlKCkpLCBzY3JhdGNoKTsK
ICAgICBqaXQuanVtcChzY3JhdGNoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZt
LCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
ICgiV2ViQXNzZW1ibHktPldlYkFzc2VtYmx5IGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCkpOwog
fQogCkBAIC00NzAsNyArNDcwLDcgQEAgV2FzbUV4aXRTdHVicyBleGl0U3R1YkdlbmVyYXRvcihW
TSogdm0sIAogewogICAgIFdhc21FeGl0U3R1YnMgc3R1YnM7CiAgICAgc3R1YnMud2FzbVRvSnMg
PSB3YXNtVG9Kcyh2bSwgY2FsbExpbmtJbmZvcywgc2lnbmF0dXJlSW5kZXgsIGltcG9ydEluZGV4
KTsKLSAgICBzdHVicy53YXNtVG9XYXNtID0gd2FzbVRvV2FzbSh2bSwgaW1wb3J0SW5kZXgpOwor
ICAgIHN0dWJzLndhc21Ub1dhc20gPSB3YXNtVG9XYXNtKGltcG9ydEluZGV4KTsKICAgICByZXR1
cm4gc3R1YnM7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5j
cHAJKHJldmlzaW9uIDIxNDU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
bGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY3LDEzICsyNjcsMTMgQEAgdm9pZCBQbGFuOjpj
b21wbGV0ZShjb25zdCBBYnN0cmFjdExvY2tlcgogICAgICAgICAgICAgICAgIFNpZ25hdHVyZUlu
ZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlv
blNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07CiAgICAgICAgICAgICAgICAgU3RyaW5n
IHNpZ25hdHVyZURlc2NyaXB0aW9uID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCgmbV92bSwg
c2lnbmF0dXJlSW5kZXgpLT50b1N0cmluZygpOwogICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKG1fdm0sICpjb250ZXh0Lndhc21FbnRy
eXBvaW50SklULCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKCpjb250ZXh0Lndhc21FbnRyeXBvaW50SklULCBudWxscHRyKTsKICAgICAgICAgICAg
ICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndhc21FbnRy
eXBvaW50LmNvbXBpbGF0aW9uID0KICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1
ZTxCMzo6Q29tcGlsYXRpb24+KEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJs
eSBmdW5jdGlvblslaV0gJXMiLCBmdW5jdGlvbkluZGV4LCBzaWduYXR1cmVEZXNjcmlwdGlvbi5h
c2NpaSgpLmRhdGEoKSkpLCBXVEZNb3ZlKGNvbnRleHQud2FzbUVudHJ5cG9pbnRCeXByb2R1Y3Rz
KSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIobV92bSwgKmNvbnRleHQuanNFbnRyeXBvaW50
SklULCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KCpjb250ZXh0LmpzRW50cnlwb2ludEpJVCwgbnVsbHB0cik7CiAgICAgICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhjb250ZXh0LmpzRW50cnlwb2ludFRvV2FzbUVudHJ5cG9pbnRDYWxs
LCBGdW5jdGlvblB0cihtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS0+d2Fz
bUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAK
ICAgICAgICAgICAgICAgICAgICAgbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRl
eF0tPmpzVG9XYXNtRW50cnlwb2ludC5jb21waWxhdGlvbiA9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNpb24gMjE0NTQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NDYsNyArMjY0
Niw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlKFZNKiB2bSwg
WWFyckNvZGVCbG9jayYgaml0T2JqZWN0KQorICAgIHZvaWQgY29tcGlsZShZYXJyQ29kZUJsb2Nr
JiBqaXRPYmplY3QpCiAgICAgewogICAgICAgICBnZW5lcmF0ZUVudGVyKCk7CiAKQEAgLTI2NzQs
NyArMjY3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgZ2VuZXJhdGUoKTsKICAgICAgICAgYmFja3Ry
YWNrKCk7CiAKLSAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgKnRoaXMsIFJFR0VY
UF9DT0RFX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIoKnRoaXMsIFJFR0VYUF9DT0RFX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwog
ICAgICAgICBpZiAobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7CiAgICAgICAgICAg
ICBqaXRPYmplY3Quc2V0RmFsbEJhY2sodHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0y
NzI5LDkgKzI3MjksOSBAQCBwcml2YXRlOgogdm9pZCBqaXRDb21waWxlKFlhcnJQYXR0ZXJuJiBw
YXR0ZXJuLCBZYXJyQ2hhclNpemUgY2hhclNpemUsIFZNKiB2bSwgWWFyckNvZGVCbG9jayYgaml0
T2JqZWN0LCBZYXJySklUQ29tcGlsZU1vZGUgbW9kZSkKIHsKICAgICBpZiAobW9kZSA9PSBNYXRj
aE9ubHkpCi0gICAgICAgIFlhcnJHZW5lcmF0b3I8TWF0Y2hPbmx5Pih2bSwgcGF0dGVybiwgY2hh
clNpemUpLmNvbXBpbGUodm0sIGppdE9iamVjdCk7CisgICAgICAgIFlhcnJHZW5lcmF0b3I8TWF0
Y2hPbmx5Pih2bSwgcGF0dGVybiwgY2hhclNpemUpLmNvbXBpbGUoaml0T2JqZWN0KTsKICAgICBl
bHNlCi0gICAgICAgIFlhcnJHZW5lcmF0b3I8SW5jbHVkZVN1YnBhdHRlcm5zPih2bSwgcGF0dGVy
biwgY2hhclNpemUpLmNvbXBpbGUodm0sIGppdE9iamVjdCk7CisgICAgICAgIFlhcnJHZW5lcmF0
b3I8SW5jbHVkZVN1YnBhdHRlcm5zPih2bSwgcGF0dGVybiwgY2hhclNpemUpLmNvbXBpbGUoaml0
T2JqZWN0KTsKIH0KIAogfX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNDU0NykKKysrIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisy
MDE3LTAzLTI5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIExp
bmtCdWZmZXIgYW5kIEV4ZWN1dGFibGVBbGxvY2F0b3Igc2hvdWxkbid0IGhhdmUgYW55dGhpbmcg
dG8gZG8gd2l0aCBWTQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcwMjEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWFyayBMYW0uCisKKyAgICAgICAg
KiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rv
ckNvbXBpbGVyOjpjb21waWxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
b21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpjb21waWxlKToKKwogMjAxNy0wMy0yOSAg
TXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFZhcmlh
dGlvbiBmb250czogTWFrZSBzdXJlIHRoYXQgZmVhdHVyZSBkZXRlY3Rpb24gYW5kIHByZXByb2Nl
c3NvciBtYWNyb3MgYXJlIHJpZ2h0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0
b3JDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVj
dG9yQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMTQ1NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Nq
aXQvU2VsZWN0b3JDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Niw3ICsyNTYsNyBA
QCBzdHJ1Y3QgQmFja3RyYWNraW5nTGV2ZWwgewogY2xhc3MgU2VsZWN0b3JDb2RlR2VuZXJhdG9y
IHsKIHB1YmxpYzoKICAgICBTZWxlY3RvckNvZGVHZW5lcmF0b3IoY29uc3QgQ1NTU2VsZWN0b3Iq
LCBTZWxlY3RvckNvbnRleHQpOwotICAgIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29tcGls
ZShKU0M6OlZNKiwgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYmKTsKKyAgICBTZWxlY3RvckNv
bXBpbGF0aW9uU3RhdHVzIGNvbXBpbGUoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYmKTsKIAog
cHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJldHVyblJl
Z2lzdGVyOwpAQCAtMzk1LDcgKzM5NSw3IEBAIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgY29t
cGlsZVNlbGVjdG8KICAgICBpZiAoIXZtLT5jYW5Vc2VKSVQoKSkKICAgICAgICAgcmV0dXJuIFNl
bGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OkNhbm5vdENvbXBpbGU7CiAgICAgU2VsZWN0b3JDb2Rl
R2VuZXJhdG9yIGNvZGVHZW5lcmF0b3IobGFzdFNlbGVjdG9yLCBzZWxlY3RvckNvbnRleHQpOwot
ICAgIHJldHVybiBjb2RlR2VuZXJhdG9yLmNvbXBpbGUodm0sIGNvZGVSZWYpOworICAgIHJldHVy
biBjb2RlR2VuZXJhdG9yLmNvbXBpbGUoY29kZVJlZik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgRnJh
Z21lbnRSZWxhdGlvbiBmcmFnbWVudFJlbGF0aW9uRm9yU2VsZWN0b3JSZWxhdGlvbihDU1NTZWxl
Y3Rvcjo6UmVsYXRpb25UeXBlIHJlbGF0aW9uKQpAQCAtMTIwOCw3ICsxMjA4LDcgQEAgdm9pZCBj
b21wdXRlQmFja3RyYWNraW5nTWVtb3J5UmVxdWlyZW1lbgogICAgIH0KIH0KIAotaW5saW5lIFNl
bGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpjb21waWxlKEpT
Qzo6Vk0qIHZtLCBKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZVJlZikKK2lubGluZSBT
ZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Y29tcGlsZShK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZVJlZikKIHsKICAgICBzd2l0Y2ggKG1fZnVu
Y3Rpb25UeXBlKSB7CiAgICAgY2FzZSBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tl
cjoKQEAgLTEyMjMsNyArMTIyMyw3IEBAIGlubGluZSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVz
IFNlbGVjdG8KICAgICAgICAgcmV0dXJuIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OkNhbm5v
dENvbXBpbGU7CiAgICAgfQogCi0gICAgSlNDOjpMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBt
X2Fzc2VtYmxlciwgQ1NTX0NPREVfSUQsIEpTQzo6SklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAg
ICBKU0M6OkxpbmtCdWZmZXIgbGlua0J1ZmZlcihtX2Fzc2VtYmxlciwgQ1NTX0NPREVfSUQsIEpT
Qzo6SklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAoIWxpbmtCdWZmZXIuaXNWYWxpZCgp
KSB7CiAgICAgICAgIC8vIFRoaXMgY291bGQgYmUgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6
Tm90Q29tcGlsZWQgYnV0IHRoYXQgd291bGQgY2F1c2UgdXMgdG8gcmUtZW50ZXIKICAgICAgICAg
Ly8gdGhlIENTUyBKSVQgZXZlcnkgdGltZSB3ZSBldmFsdWF0ZSB0aGF0IHNlbGVjdG9yLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>