<?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>168408</bug_id>
          
          <creation_ts>2017-02-15 20:41:23 -0800</creation_ts>
          <short_desc>Refactor AccessCase to be more like B3Value</short_desc>
          <delta_ts>2017-02-16 11:46:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1277484</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-02-15 20:41:23 -0800</bug_when>
    <thetext>Refactor AccessCase to be more like B3Value</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1277494</commentid>
    <comment_count>1</comment_count>
      <attachid>301700</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-02-15 21:06:23 -0800</bug_when>
    <thetext>Created attachment 301700
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1277699</commentid>
    <comment_count>2</comment_count>
      <attachid>301775</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-02-16 09:28:06 -0800</bug_when>
    <thetext>Created attachment 301775
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1277702</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-16 09:31:11 -0800</bug_when>
    <thetext>Attachment 301775 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/AccessCase.h:47:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/bytecode/AccessCase.h:55:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/bytecode/AccessCase.h:64:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 3 in 21 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>1277706</commentid>
    <comment_count>4</comment_count>
      <attachid>301775</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-16 09:36:30 -0800</bug_when>
    <thetext>Comment on attachment 301775
Patch

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

&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:160
&gt; +IntrinsicGetterAccessCase::~IntrinsicGetterAccessCase()

Can we put these in separate files named after the class?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1277714</commentid>
    <comment_count>5</comment_count>
      <attachid>301776</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-02-16 09:57:47 -0800</bug_when>
    <thetext>Created attachment 301776
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1277716</commentid>
    <comment_count>6</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-02-16 09:58:49 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 301775 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=301775&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:160
&gt; &gt; +IntrinsicGetterAccessCase::~IntrinsicGetterAccessCase()
&gt; 
&gt; Can we put these in separate files named after the class?

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1277726</commentid>
    <comment_count>7</comment_count>
      <attachid>301779</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-02-16 10:19:24 -0800</bug_when>
    <thetext>Created attachment 301779
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1277728</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-16 10:21:02 -0800</bug_when>
    <thetext>Attachment 301779 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/AccessCase.h:47:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/bytecode/AccessCase.h:55:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/bytecode/AccessCase.h:64:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 3 in 25 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>1277778</commentid>
    <comment_count>9</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-02-16 11:46:37 -0800</bug_when>
    <thetext>Committed r212453: &lt;http://trac.webkit.org/changeset/212453&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301700</attachid>
            <date>2017-02-15 21:06:23 -0800</date>
            <delta_ts>2017-02-16 09:28:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168408-20170215210345.patch</filename>
            <type>text/plain</type>
            <size>178115</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjExOTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MzY5MGI0MWZjOGQxOWEyZWE2NjIyYmZhOTYzYzkwNGI0NmUwMjhkLi4wNzA2ODg5OTY3Y2NiYTU1
MTdhNGE0NWY5M2NjZGNhYmQ0YzljNTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzAgQEAKKzIwMTctMDItMTUgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgQWNjZXNzQ2FzZSB0byBiZSBtb3JlIGxpa2UgQjNW
YWx1ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4
NDA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBtYWtlcyBBY2Nlc3NDYXNlIChhbmQgbmV3IHN1YmNsYXNzZXMpIG1vcmUgbGlrZSBC
M1ZhbHVlLiBJbiB0aGUgbmV3IHN5c3RlbSBlYWNoCisgICAgICAgIHR5cGUgaGFzIGFuIGFzc29j
aWF0ZWQgQWNjZXNzQ2FzZSBzdWJjbGFzcy4gRm9yIGluc3RhbmNlIGFueSBnZXR0ZXIgc2hvdWxk
IHVzZSB0aGUKKyAgICAgICAgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSBzdWJjbGFzcy4gVGhlIG5l
dyBzeXN0ZW0gaXMgZWFzaWVyIHRvIGZvbGxvdyBzaW5jZSB5b3Ugbm8gbG9uZ2VyIG5lZWQKKyAg
ICAgICAgdG8ga25vdyBleGFjdGx5IHdoaWNoIG1lbWJlcnMgYXJlIHVzZWQgYnkgd2hpY2ggdHlw
ZXMuIFRoZSBzdWJjbGFzcyB0byBBY2Nlc3NUeXBlIG1hcHBpbmcgaXM6CisKKyAgICAgICAgR2V0
dGVyU2V0dGVyQWNjZXNzQ2FzZToKKyAgICAgICAgICAgIEdldHRlcgorICAgICAgICAgICAgQ3Vz
dG9tQWNjZXNzb3JHZXR0ZXIKKyAgICAgICAgICAgIEN1c3RvbVZhbHVlR2V0dGVyCisgICAgICAg
ICAgICBTZXR0ZXIKKworICAgICAgICBQcm94eWFibGVBY2Nlc3NDYXNlOgorICAgICAgICAgICAg
TG9hZAorICAgICAgICAgICAgTWlzcworICAgICAgICAgICAgR2V0R2V0dGVyCisKKyAgICAgICAg
SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZToKKyAgICAgICAgICAgIEludHJpbnNpY0dldHRlcgor
CisgICAgICAgIEFjY2Vzc0Nhc2U6CisgICAgICAgICAgICBFdmVyeXRoaW5nIGVsc2UKKworICAg
ICAgICBJdCBhbHNvIGhhcyB0aGUgYWRkaXRpb25hbCBhZHZhbnRhZ2UgdGhhdCBpdCB1c2VzIGxl
c3MgbWVtb3J5IGZvciB0aGUgY2FzZXMgd2hlcmUgd2Ugd291bGQgaGF2ZSBuZWVkZWQKKyAgICAg
ICAgcmFyZSBkYXRhIGluIHRoZSBwYXN0IGJ1dCB0aGF0IGNhc2Ugd291bGQgb25seSB1c2UgYSBz
bWFsbCBiaXQgb2YgaXQuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3Bw
LgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6
SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZSk6Cisg
ICAgICAgIChKU0M6OlByb3h5YWJsZUFjY2Vzc0Nhc2U6OlByb3h5YWJsZUFjY2Vzc0Nhc2UpOgor
ICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SW50cmluc2lj
R2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6UHJveHlhYmxlQWNjZXNz
Q2FzZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6fkFjY2Vzc0Nhc2UpOgor
ICAgICAgICAoSlNDOjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjp+SW50cmluc2ljR2V0dGVy
QWNjZXNzQ2FzZSk6CisgICAgICAgIChKU0M6OlByb3h5YWJsZUFjY2Vzc0Nhc2U6On5Qcm94eWFi
bGVBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6fkdl
dHRlclNldHRlckFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpmcm9tU3Ry
dWN0dXJlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjbG9uZSk6CisgICAg
ICAgIChKU0M6OkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OmNsb25lKToKKyAgICAgICAgKEpT
Qzo6UHJveHlhYmxlQWNjZXNzQ2FzZTo6Y2xvbmUpOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlOjpjbG9uZSk6CisgICAgICAgIChKU0M6OkdldHRlclNldHRlckFjY2Vzc0Nh
c2U6OmFsdGVybmF0ZUJhc2UpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjb21taXQpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayk6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmRvZXNDYWxscyk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nh
c2U6OmNvdWxkU3RpbGxTdWNjZWVkKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2FuUmVw
bGFjZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmR1bXApOgorICAgICAgICAoSlNDOjpH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpkdW1wSW1wbCk6CisgICAgICAgIChKU0M6OlByb3h5YWJs
ZUFjY2Vzc0Nhc2U6OmR1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dmlzaXRX
ZWFrKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2Vu
ZXJhdGVJbXBsKToKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERP
TUpJVEdldHRlcik6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6YXMpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp0eXBlKToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6c3RhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpvZmZzZXQpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpzdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjb25kaXRp
b25TZXQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjphbHRlcm5hdGVCYXNlKToKKyAgICAg
ICAgKEpTQzo6QWNjZXNzQ2FzZTo6YWRkaXRpb25hbFNldCk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OnZpYVByb3h5KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6aXNHZXR0ZXIpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppc0FjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXNldFN0YXRl
KToKKyAgICAgICAgKiBieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjYWxsTGlua0luZm8pOgorICAg
ICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjdXN0b21TbG90QmFzZSk6CisgICAg
ICAgIChKU0M6OkdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmRvbUpJVCk6CisgICAgICAgICogYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKiBieXRl
Y29kZS9JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpJ
bnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjppbnRyaW5zaWNGdW5jdGlvbik6CisgICAgICAgIChK
U0M6OkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OmludHJpbnNpYyk6CisgICAgICAgICogYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0Fj
Y2Vzczo6cmVnZW5lcmF0ZSk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6dHJ5R2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6
Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6bWVnYW1vcnBoaWNMb2Fk
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6cmVwbGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpzZXR0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjppbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdldExlbmd0
aCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdldEludHJpbnNpYyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6On5BY2Nlc3NDYXNlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2xvbmUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpBY2Nlc3NDYXNlOjpjb21taXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmFsdGVybmF0ZUJhc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpkb2VzQ2FsbHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjb3Vs
ZFN0aWxsU3VjY2VlZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNhbkJl
UmVwbGFjZWRCeU1lZ2Ftb3JwaGljTG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNhblJlcGxhY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpk
dW1wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dmlzaXRXZWFrKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEdldHRlcik6IERlbGV0ZWQuCisgICAgICAgICog
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6
dHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnN0YXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6b2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6dmlhUHJveHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpzdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpu
ZXdTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjb25kaXRp
b25TZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppbnRyaW5zaWNGdW5j
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmludHJpbnNpYyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmRvbUpJVCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmFkZGl0aW9uYWxTZXQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpBY2Nlc3NDYXNlOjpjdXN0b21TbG90QmFzZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkFjY2Vzc0Nhc2U6OmlzR2V0dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2Fz
ZTo6Y2FsbExpbmtJbmZvKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6UmFy
ZURhdGE6OlJhcmVEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Qcm94eWFibGVB
Y2Nlc3NDYXNlLmg6IEFkZGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3Bw
OgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAg
ICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlU3R1YkluZm86OnJlc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVUcnlHZXRCeUlkKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlJZCk6CisgICAgICAg
ICogaml0L0ludHJpbnNpY0VtaXR0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRyaW5zaWNHZXR0
ZXJBY2Nlc3NDYXNlOjpjYW5FbWl0SW50cmluc2ljR2V0dGVyKToKKyAgICAgICAgKEpTQzo6SW50
cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdEludHJpbnNpY0dldHRlcik6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6OmNhbkVtaXRJbnRyaW5zaWNHZXR0ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjplbWl0SW50cmluc2ljR2V0dGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQpOgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAg
ICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRC
eUlEKToKKyAgICAgICAgKEpTQzo6dHJ5UmVwYXRjaEluKToKKyAgICAgICAgKiBqaXQvUmVwYXRj
aC5oOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorCiAyMDE3LTAyLTA4ICBLZWl0aCBN
aWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIG9wX2luIHNo
b3VsZCBoYXZlIEFycmF5UHJvZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0
ZGI2NjcyOWE1NTdjMDNjNWNlZTgwOGI2NzExNjNiYjZhZTE5NWU3Li4wNjBmZDdlNWQ3MmIxOGY5
M2E4OTUxZmE4NjQ4ZmZmNjU4MGEwNGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTMwNCw2ICsxMzA0LDExIEBACiAJCTUzNDkwMjg1MUM3Mjc2QjcwMDEyQkNCOCAvKiBUeXBl
ZEFycmF5Q1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTM0OTAyODIxQzcyNDJDODAwMTJCQ0I4IC8qIFR5cGVkQXJyYXlDVGVzdC5jcHAgKi87
IH07CiAJCTUzNEM0NTdDMUJDNzI0MTEwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
NEM0NTdCMUJDNzI0MTEwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAq
LzsgfTsKIAkJNTM0QzQ1N0UxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MzRDNDU3RDFCQzcyNTQ5MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
LmNwcCAqLzsgfTsKKwkJNTM0RTAzNEUxRTRENEIxNjAwMjEzRjY0IC8qIEFjY2Vzc0Nhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNEUwMzREMUU0
RDRCMTYwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmggKi87IH07CisJCTUzNEUwMzUwMUU0RDk1RUQw
MDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzNEUwMzRGMUU0RDk1RUQwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmNw
cCAqLzsgfTsKKwkJNTM0RTAzNTQxRTUzQkQyOTAwMjEzRjY0IC8qIEludHJpbnNpY0dldHRlckFj
Y2Vzc0Nhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzNEUwMzUzMUU1M0JEMjkwMDIxM0Y2NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgg
Ki87IH07CisJCTUzNEUwMzU2MUU1M0JFREUwMDIxM0Y2NCAvKiBQcm94eWFibGVBY2Nlc3NDYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzRFMDM1
NTFFNTNCRURFMDAyMTNGNjQgLyogUHJveHlhYmxlQWNjZXNzQ2FzZS5oICovOyB9OworCQk1MzRF
MDM1ODFFNTNCRjJGMDAyMTNGNjQgLyogR2V0dGVyU2V0dGVydGVyQWNjZXNzQ2FzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0RTAzNTcxRTUzQkYy
RjAwMjEzRjY0IC8qIEdldHRlclNldHRlcnRlckFjY2Vzc0Nhc2UuaCAqLzsgfTsKIAkJNTM1MjlB
NEMxQzQ1N0I3NTAwMEI0OUM2IC8qIEFQSVV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzUyOUE0QjFDNDU3Qjc1MDAwQjQ5QzYgLyogQVBJVXRp
bHMuaCAqLzsgfTsKIAkJNTM1NTU3MTQxRDlEOUVBNTAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTU1NzEzMUQ5
RDlFQTUwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmggKi87IH07CiAJCTUzNTU1NzE2MUQ5REZBMzIw
MDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzNTU1NzE1MUQ5REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNw
cCAqLzsgfTsKQEAgLTM3NDAsNiArMzc0NSwxMSBAQAogCQk1MzRDNDU3QTFCQzcwM0RDMDA3NDc2
QTcgLyogVHlwZWRBcnJheUNvbnN0cnVjdG9yLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZh
c2NyaXB0OyBwYXRoID0gVHlwZWRBcnJheUNvbnN0cnVjdG9yLmpzOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzRDNDU3QjFCQzcyNDExMDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRD
NDU3RDFCQzcyNTQ5MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNEUwMzREMUU0RDRC
MTYwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RTAzNEYx
RTREOTVFRDAwMjEzRjY0IC8qIEFjY2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQWNjZXNzQ2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUzNEUwMzUzMUU1M0JEMjkwMDIxM0Y2NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vz
c0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RTAzNTUxRTUzQkVERTAw
MjEzRjY0IC8qIFByb3h5YWJsZUFjY2Vzc0Nhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHJveHlhYmxlQWNjZXNzQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MzRFMDM1NzFFNTNCRjJGMDAyMTNGNjQgLyogR2V0dGVyU2V0dGVydGVyQWNjZXNzQ2Fz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZXR0ZXJTZXR0ZXJ0ZXJBY2Nl
c3NDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNTI5QTRCMUM0NTdCNzUw
MDBCNDlDNiAvKiBBUElVdGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
UElVdGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzU1NTcxMzFEOUQ5RUE1
MDA2RDU4M0IgLyogV2FzbU1lbW9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXYXNtTWVtb3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNTU1NzE1MUQ5
REZBMzIwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdhc21NZW1vcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNjAxMCw2ICs2MDIwLDE4IEBACiAJCQl0YWJXaWR0aCA9IDQ7CiAJCQl1c2VzVGFicyA9IDA7
CiAJCX07CisJCTUzNEUwMzUyMUU1M0JCQTkwMDIxM0Y2NCAvKiBhY2Nlc3NDYXNlICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1MzRFMDM0RjFFNEQ5NUVE
MDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5jcHAgKi8sCisJCQkJNTM0RTAzNEQxRTRENEIxNjAwMjEz
RjY0IC8qIEFjY2Vzc0Nhc2UuaCAqLywKKwkJCQk1MzRFMDM1MzFFNTNCRDI5MDAyMTNGNjQgLyog
SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oICovLAorCQkJCTUzNEUwMzU1MUU1M0JFREUwMDIx
M0Y2NCAvKiBQcm94eWFibGVBY2Nlc3NDYXNlLmggKi8sCisJCQkJNTM0RTAzNTcxRTUzQkYyRjAw
MjEzRjY0IC8qIEdldHRlclNldHRlcnRlckFjY2Vzc0Nhc2UuaCAqLywKKwkJCSk7CisJCQluYW1l
ID0gYWNjZXNzQ2FzZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTY1MEZE
RjhEMDlEMEZDQTcwMDc2OUU1NCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNzI4Niw2ICs3MzA4LDcgQEAKIAkJOTY5QTA3
OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1MzRFMDM1MjFFNTNCQkE5MDAyMTNGNjQgLyogYWNjZXNz
Q2FzZSAqLywKIAkJCQk1MzcwQjRGMzFCRjI1RUEyMDA1QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAgKi8sCiAJCQkJNTM3MEI0RjQxQkYyNUVB
MjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2Uu
aCAqLywKIAkJCQk3OUEyMjgzMzFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmNwcCAq
LywKQEAgLTc5NjksNiArNzk5Miw3IEBACiAJCQkJMEY2QjhBRTUxQzRFRkUxNzAwOTY5MDUyIC8q
IEIzRml4U1NBLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcyNUNCMDFDNTA2RDNCMDBBRDk0M0Eg
LyogQjNGb2xkUGF0aENvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTUz
NEUwMzU2MUU1M0JFREUwMDIxM0Y2NCAvKiBQcm94eWFibGVBY2Nlc3NDYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODUxNzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTE5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVy
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxQTFCREFDREFDMDA4MEZGNzQgLyogQjNH
ZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKQEAgLTg0MjMsNiArODQ0Nyw3
IEBACiAJCQkJMEZFQTBBMTIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0ZDQzI2RDE3QTBCNkFBMDA3ODZEMUEgLyogRlRMU3dpdGNoQ2FzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRTIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNTM0RTAzNTQxRTUzQkQyOTAwMjEzRjY0IC8qIEludHJpbnNp
Y0dldHRlckFjY2Vzc0Nhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTIwMTcwOEIwMDcw
MEJCNzIyQyAvKiBGVExUeXBlZFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREIyQ0NB
MTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY1QTYyODQxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFkZXJz
ICovLApAQCAtODQzNyw2ICs4NDYyLDcgQEAKIAkJCQk1MkIzMTBGQjE5NzRBRTYxMDA4MDg1N0Mg
LyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRCRkYy
QzFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDA1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBGdW5jdGlvblByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTM0RTAzNTgxRTUzQkYyRjAwMjEzRjY0IC8qIEdldHRlclNldHRlcnRl
ckFjY2Vzc0Nhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRDJEMzkwMUFERjEwM0YwMDAyMDZD
MSAvKiBGdW5jdGlvblJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUEwQzQwMzFDREQ3
RDFEMDA0ODE5OTEgLyogRnVuY3Rpb25XaGl0ZWxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTJB
QUNFNjNEMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJz
ICovLApAQCAtODcwNiw2ICs4NzMyLDcgQEAKIAkJCQlBNTAzRkExRTE4OEUwRkIwMDAxMTBGMTQg
LyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
MDEzQ0E4QzFCNDkxQTk0MDBDQUU2MTMgLyogSlNKb2IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDE2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTM0RTAzNEUxRTRENEIxNjAwMjEzRjY0IC8qIEFjY2Vzc0Nhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDIzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xvY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFu
YWdlZFZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApAQCAtMTAzMjgsNiArMTAzNTUsNyBA
QAogCQkJCUFEMkZDQkU4MURCNThEQUQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5UnVudGltZUVy
cm9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFEMkZDQkVBMURCNThEQUQwMEIzRTczNiAvKiBK
U1dlYkFzc2VtYmx5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MjU2NjExNUVERTk4
RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzNEUwMzUw
MUU0RDk1RUQwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2
RTNDNjE4MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291cmNlcyAqLywK
IAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3Bw
IGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQWNjZXNzQ2FzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uY2VmMDE1Njc4MTM4ZDA1ZjIxYWY0ZmRjNmUyMWY5ZmM1MDRm
NTRmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcApAQCAtMCwwICsxLDEyNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWNj
ZXNzQ2FzZS5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkdldHRlclNldHRlckFj
Y2Vzc0Nhc2UuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWxsTGlu
a0luZm8uaCIKKyNpbmNsdWRlICJET01KSVRBY2Nlc3NDYXNlUGF0Y2hwb2ludFBhcmFtcy5oIgor
I2luY2x1ZGUgIkRPTUpJVENhbGxET01HZXR0ZXJQYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiRE9N
SklUR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVk
ZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSGVhcElubGluZXMuaCIKKyNpbmNsdWRlICJJ
bnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMu
aCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3Mu
aCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRl
ICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIGNvbnN0
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0KQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX29mZnNldChvZmZzZXQpCit7
CisgICAgbV9zdHJ1Y3R1cmUuc2V0TWF5QmVOdWxsKHZtLCBvd25lciwgc3RydWN0dXJlKTsKKyAg
ICBtX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKK30KKworSW50cmluc2ljR2V0dGVyQWNj
ZXNzQ2FzZTo6SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZShWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIEpTRnVuY3Rpb24qIGludHJpbnNp
Y0Z1bmN0aW9uKQorICAgIDogQmFzZSh2bSwgb3duZXIsIEludHJpbnNpY0dldHRlciwgb2Zmc2V0
LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkKK3sKKyAgICBtX2ludHJpbnNpY0Z1bmN0aW9uLnNl
dCh2bSwgb3duZXIsIGludHJpbnNpY0Z1bmN0aW9uKTsKK30KKworUHJveHlhYmxlQWNjZXNzQ2Fz
ZTo6UHJveHlhYmxlQWNjZXNzQ2FzZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUg
YWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgYm9vbCB2aWFQ
cm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCkKKyAgICA6IEJhc2Uodm0sIG93bmVy
LCBhY2Nlc3NUeXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KQorICAgICwgbV92
aWFQcm94eSh2aWFQcm94eSkKKyAgICAsIG1fYWRkaXRpb25hbFNldChhZGRpdGlvbmFsU2V0KQor
eworfQorCitHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0LCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRp
dGlvbmFsU2V0LCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UpCisgICAgOiBCYXNlKHZtLCBvd25l
ciwgYWNjZXNzVHlwZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgdmlhUHJveHks
IGFkZGl0aW9uYWxTZXQpCit7CisgICAgbV9jdXN0b21TbG90QmFzZS5zZXRNYXlCZU51bGwodm0s
IG93bmVyLCBjdXN0b21TbG90QmFzZSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiBBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5
cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBJbkhpdDoKKyAgICAgICAgY2FzZSBJbk1pc3M6
CisgICAgICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgU3RyaW5nTGVuZ3RoOgor
ICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c0xlbmd0aDoKKyAgICAgICAgY2FzZSBTY29wZWRB
cmd1bWVudHNMZW5ndGg6CisgICAgICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPihu
ZXcgQWNjZXNzQ2FzZSh2bSwgb3duZXIsIHR5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRp
b25TZXQpKTsKKyAgICB9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlIHR5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgYm9vbCB2
aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwKKyAgICBQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYyBjdXN0b21HZXR0ZXIsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSwgRE9N
SklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVCkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIEdldHRlcjoKKyAgICBjYXNlIEN1c3RvbUFjY2Vzc29yR2V0dGVyOgorICAgIGNhc2UgQ3Vz
dG9tVmFsdWVHZXR0ZXI6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH07CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8ID4gcmVz
dWx0KG5ldyBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKHZtLCBvd25lciwgdHlwZSwgb2Zmc2V0LCBz
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgdmlhUHJveHksIGFkZGl0aW9uYWxTZXQsIGN1c3RvbVNs
b3RCYXNlKSk7CisgICAgcmVzdWx0LT5tX2RvbUpJVCA9IGRvbUpJVDsKKyAgICByZXN1bHQtPm1f
Y3VzdG9tQWNjZXNzb3IuZ2V0dGVyID0gY3VzdG9tR2V0dGVyOworICAgIHJldHVybiBXVEZNb3Zl
KHJlc3VsdCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBJbnRyaW5zaWNHZXR0
ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0LCBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbikKK3sK
KyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+KG5ldyBJbnRyaW5zaWNHZXR0
ZXJBY2Nlc3NDYXNlKHZtLCBvd25lciwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwg
aW50cmluc2ljRnVuY3Rpb24pKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IFBy
b3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5
cGUgdHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgYm9vbCB2aWFQcm94
eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCkKK3sKKyAgICBBU1NFUlQodHlwZSA9PSBM
b2FkIHx8IHR5cGUgPT0gTWlzcyB8fCB0eXBlID09IEdldEdldHRlcik7CisgICAgcmV0dXJuIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPihuZXcgUHJveHlhYmxlQWNjZXNzQ2FzZSh2bSwgb3du
ZXIsIHR5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHZpYVByb3h5LCBhZGRp
dGlvbmFsU2V0KSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5
cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAorICAgIEpTT2JqZWN0KiBjdXN0b21TbG90
QmFzZSkKK3sKKyAgICBBU1NFUlQodHlwZSA9PSBTZXR0ZXIgfHwgdHlwZSA9PSBDdXN0b21WYWx1
ZVNldHRlciB8fCB0eXBlID09IEN1c3RvbUFjY2Vzc29yU2V0dGVyKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlKHZtLCBvd25lciwgdHlwZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwg
ZmFsc2UsIG51bGxwdHIsIGN1c3RvbVNsb3RCYXNlKSk7CisgICAgcmVzdWx0LT5tX2N1c3RvbUFj
Y2Vzc29yLnNldHRlciA9IGN1c3RvbVNldHRlcjsKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQp
OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y3JlYXRlKAor
ICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCisgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChvbGRTdHJ1Y3R1cmUgPT0gbmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOworCisgICAg
Ly8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3
ZSBkb24ndCBoYXZlCisgICAgLy8gZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4K
KyAgICBpZiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2CisgICAgICAgICYmIG9sZFN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkKKyAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4obmV3IEFjY2Vzc0Nhc2Uodm0sIG93bmVyLCBUcmFuc2l0aW9uLCBv
ZmZzZXQsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0KSk7Cit9CisKK0FjY2Vzc0Nhc2U6On5B
Y2Nlc3NDYXNlKCkKK3sKK30KKworSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6fkludHJpbnNp
Y0dldHRlckFjY2Vzc0Nhc2UoKQoreworfQorCitQcm94eWFibGVBY2Nlc3NDYXNlOjp+UHJveHlh
YmxlQWNjZXNzQ2FzZSgpCit7Cit9CisKK0dldHRlclNldHRlckFjY2Vzc0Nhc2U6On5HZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlKCkKK3sKK30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFj
Y2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbygKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBzd2l0Y2ggKHN0dWJJbmZv
LmNhY2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKKyAgICAgICAg
cmV0dXJuIFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIHN0dWJJ
bmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCkpOworCisgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgorICAg
ICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgc3R1Yklu
Zm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSk7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjbG9uZSgp
IGNvbnN0Cit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNj
ZXNzQ2FzZSgqdGhpcykpOworICAgIHJlc3VsdC0+cmVzZXRTdGF0ZSgpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBJbnRyaW5zaWNHZXR0ZXJB
Y2Nlc3NDYXNlOjpjbG9uZSgpIGNvbnN0Cit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEludHJpbnNp
Y0dldHRlckFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZSgq
dGhpcykpOworICAgIHJlc3VsdC0+cmVzZXRTdGF0ZSgpOworICAgIHJldHVybiBXVEZNb3ZlKHJl
c3VsdCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBQcm94eWFibGVBY2Nlc3ND
YXNlOjpjbG9uZSgpIGNvbnN0Cit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFByb3h5YWJsZUFjY2Vz
c0Nhc2U+IHJlc3VsdChuZXcgUHJveHlhYmxlQWNjZXNzQ2FzZSgqdGhpcykpOworICAgIHJlc3Vs
dC0+cmVzZXRTdGF0ZSgpOworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKK0dldHRl
clNldHRlckFjY2Vzc0Nhc2U6OkdldHRlclNldHRlckFjY2Vzc0Nhc2UoY29uc3QgR2V0dGVyU2V0
dGVyQWNjZXNzQ2FzZSYgb3RoZXIpCisgICAgOiBCYXNlKG90aGVyKQorICAgICwgbV9jdXN0b21T
bG90QmFzZShvdGhlci5tX2N1c3RvbVNsb3RCYXNlKQoreworICAgIG1fY3VzdG9tQWNjZXNzb3Iu
b3BhcXVlID0gb3RoZXIubV9jdXN0b21BY2Nlc3Nvci5vcGFxdWU7CisgICAgbV9kb21KSVQgPSBv
dGhlci5tX2RvbUpJVDsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEdldHRlclNl
dHRlckFjY2Vzc0Nhc2U6OmNsb25lKCkgY29uc3QKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R2V0
dGVyU2V0dGVyQWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKCp0
aGlzKSk7CisgICAgcmVzdWx0LT5yZXNldFN0YXRlKCk7CisgICAgcmV0dXJuIFdURk1vdmUocmVz
dWx0KTsKK30KKworSlNPYmplY3QqIEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmFsdGVybmF0ZUJh
c2UoKSBjb25zdAoreworICAgIGlmIChjdXN0b21TbG90QmFzZSgpKQorICAgICAgICByZXR1cm4g
Y3VzdG9tU2xvdEJhc2UoKTsKKyAgICByZXR1cm4gY29uZGl0aW9uU2V0KCkuc2xvdEJhc2VDb25k
aXRpb24oKS5vYmplY3QoKTsKK30KKworVmVjdG9yPFdhdGNocG9pbnRTZXQqLCAyPiBBY2Nlc3ND
YXNlOjpjb21taXQoVk0mIHZtLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKK3sKKyAgICAvLyBJ
dCdzIGZpbmUgdG8gY29tbWl0IHNvbWV0aGluZyB0aGF0IGlzIGFscmVhZHkgY29tbWl0dGVkLiBU
aGF0IGFyaXNlcyB3aGVuIHdlIHN3aXRjaCB0byB1c2luZworICAgIC8vIG5ld2x5IGFsbG9jYXRl
ZCB3YXRjaHBvaW50cy4gV2hlbiBpdCBoYXBwZW5zLCBpdCdzIG5vdCBlZmZpY2llbnQgLSBidXQg
d2UgdGhpbmsgdGhhdCdzIE9LCisgICAgLy8gYmVjYXVzZSBtb3N0IEFjY2Vzc0Nhc2VzIGhhdmUg
bm8gZXh0cmEgd2F0Y2hwb2ludHMgYW55d2F5LgorICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUg
PT0gUHJpbW9yZGlhbCB8fCBtX3N0YXRlID09IENvbW1pdHRlZCk7CisKKyAgICBWZWN0b3I8V2F0
Y2hwb2ludFNldCosIDI+IHJlc3VsdDsKKworICAgIGlmICgoc3RydWN0dXJlKCkgJiYgc3RydWN0
dXJlKCktPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgfHwgbV9jb25k
aXRpb25TZXQubmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICByZXN1bHQu
YXBwZW5kKHZtLmVuc3VyZVdhdGNocG9pbnRTZXRGb3JJbXB1cmVQcm9wZXJ0eShpZGVudCkpOwor
CisgICAgaWYgKGFkZGl0aW9uYWxTZXQoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChhZGRpdGlv
bmFsU2V0KCkpOworCisgICAgbV9zdGF0ZSA9IENvbW1pdHRlZDsKKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2Jvb2wgQWNjZXNzQ2FzZTo6Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSBjb25z
dAoreworICAgIGlmICh2aWFQcm94eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBz
d2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQXJyYXlMZW5ndGg6CisgICAgY2FzZSBTdHJpbmdM
ZW5ndGg6CisgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNMZW5ndGg6CisgICAgY2FzZSBTY29wZWRB
cmd1bWVudHNMZW5ndGg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgQWNjZXNzQ2FzZTo6ZG9lc0NhbGxz
KFZlY3RvcjxKU0NlbGwqPiogY2VsbHNUb01hcmspIGNvbnN0Cit7CisgICAgc3dpdGNoICh0eXBl
KCkpIHsKKyAgICBjYXNlIEdldHRlcjoKKyAgICBjYXNlIFNldHRlcjoKKyAgICBjYXNlIEN1c3Rv
bVZhbHVlR2V0dGVyOgorICAgIGNhc2UgQ3VzdG9tQWNjZXNzb3JHZXR0ZXI6CisgICAgY2FzZSBD
dXN0b21WYWx1ZVNldHRlcjoKKyAgICBjYXNlIEN1c3RvbUFjY2Vzc29yU2V0dGVyOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIGlmIChuZXdTdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKQorICAgICAgICAgICAgJiYgc3RydWN0dXJlKCktPmNvdWxkSGF2ZUluZGV4aW5nSGVh
ZGVyKCkpIHsKKyAgICAgICAgICAgIGlmIChjZWxsc1RvTWFyaykKKyAgICAgICAgICAgICAgICBj
ZWxsc1RvTWFyay0+YXBwZW5kKG5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIEFjY2Vzc0Nhc2U6OmNvdWxkU3Rp
bGxTdWNjZWVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb25kaXRpb25TZXQuc3RydWN0dXJl
c0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKTsKK30KKwor
Ym9vbCBBY2Nlc3NDYXNlOjpjYW5SZXBsYWNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKSBjb25z
dAoreworICAgIC8vIFRoaXMgcHV0cyBpbiBhIGdvb2QgZWZmb3J0IHRvIHRyeSB0byBmaWd1cmUg
b3V0IGlmICdvdGhlcicgaXMgbWFkZSBzdXBlcmZsdW91cyBieSAnKnRoaXMnLgorICAgIC8vIEl0
J3MgZmluZSBmb3IgdGhpcyB0byByZXR1cm4gZmFsc2UgaWYgaXQncyBpbiBkb3VidC4KKworICAg
IHN3aXRjaCAodHlwZSgpKSB7CisgICAgY2FzZSBBcnJheUxlbmd0aDoKKyAgICBjYXNlIFN0cmlu
Z0xlbmd0aDoKKyAgICBjYXNlIERpcmVjdEFyZ3VtZW50c0xlbmd0aDoKKyAgICBjYXNlIFNjb3Bl
ZEFyZ3VtZW50c0xlbmd0aDoKKyAgICAgICAgcmV0dXJuIG90aGVyLnR5cGUoKSA9PSB0eXBlKCk7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKCFndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpIHx8
ICFvdGhlci5ndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUoKSA9PSBvdGhlci5zdHJ1Y3R1cmUoKTsK
KyAgICB9Cit9CisKK3ZvaWQgQWNjZXNzQ2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludChtX3R5cGUsICI6KCIpOworCisgICAgQ29tbWFQcmludGVyIGNv
bW1hOworCisgICAgb3V0LnByaW50KGNvbW1hLCBtX3N0YXRlKTsKKworICAgIGlmIChtX3R5cGUg
PT0gVHJhbnNpdGlvbikKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RydWN0dXJlID0gIiwg
cG9pbnRlckR1bXAoc3RydWN0dXJlKCkpLCAiIC0+ICIsIHBvaW50ZXJEdW1wKG5ld1N0cnVjdHVy
ZSgpKSk7CisgICAgZWxzZSBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgInN0cnVjdHVyZSA9ICIsIHBvaW50ZXJEdW1wKG1fc3RydWN0dXJlLmdldCgpKSk7CisKKyAg
ICBpZiAoaXNWYWxpZE9mZnNldChtX29mZnNldCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwg
Im9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHko
KSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY29uZGl0aW9ucyA9ICIsIG1fY29uZGl0aW9u
U2V0KTsKKworICAgIGR1bXBJbXBsKG91dCwgY29tbWEpOworICAgIG91dC5wcmludCgiKSIpOwor
fQorCit2b2lkIEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBv
dXQsIENvbW1hUHJpbnRlciYgY29tbWEpIGNvbnN0Cit7CisgICAgQmFzZTo6ZHVtcEltcGwob3V0
LCBjb21tYSk7CisgICAgb3V0LnByaW50KGNvbW1hLCAiY3VzdG9tU2xvdEJhc2UgPSAiLCBSYXdQ
b2ludGVyKGN1c3RvbVNsb3RCYXNlKCkpKTsKKyAgICBpZiAoY2FsbExpbmtJbmZvKCkpCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgImNhbGxMaW5rSW5mbyA9ICIsIFJhd1BvaW50ZXIoY2FsbExp
bmtJbmZvKCkpKTsKKyAgICBvdXQucHJpbnQoY29tbWEsICJjdXN0b21BY2Nlc3NvciA9ICIsIFJh
d1BvaW50ZXIobV9jdXN0b21BY2Nlc3Nvci5vcGFxdWUpKTsKK30KKwordm9pZCBQcm94eWFibGVB
Y2Nlc3NDYXNlOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0LCBDb21tYVByaW50ZXImIGNvbW1h
KSBjb25zdAoreworICAgIEJhc2U6OmR1bXBJbXBsKG91dCwgY29tbWEpOworICAgIG91dC5wcmlu
dChjb21tYSwgInZpYVByb3h5ID0gIiwgdmlhUHJveHkoKSk7CisgICAgb3V0LnByaW50KGNvbW1h
LCAiYWRkaXRpb25hbFNldCA9ICIsIFJhd1BvaW50ZXIoYWRkaXRpb25hbFNldCgpKSk7Cit9CisK
K2Jvb2wgQWNjZXNzQ2FzZTo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKK3sKKyAgICBpZiAobV9z
dHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLmdldCgpKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZlKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaXNBY2Nlc3NvcigpKSB7CisgICAgICAgIGF1
dG8mIGFjY2Vzc29yID0gdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKTsKKyAgICAg
ICAgaWYgKGFjY2Vzc29yLmNhbGxMaW5rSW5mbygpKQorICAgICAgICAgICAgYWNjZXNzb3IuY2Fs
bExpbmtJbmZvKCktPnZpc2l0V2Vhayh2bSk7CisgICAgICAgIGlmIChhY2Nlc3Nvci5jdXN0b21T
bG90QmFzZSgpICYmICFIZWFwOjppc01hcmtlZChhY2Nlc3Nvci5jdXN0b21TbG90QmFzZSgpKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKHR5cGUoKSA9PSBJbnRy
aW5zaWNHZXR0ZXIpIHsKKyAgICAgICAgYXV0byYgaW50cmluc2ljID0gdGhpcy0+YXM8SW50cmlu
c2ljR2V0dGVyQWNjZXNzQ2FzZT4oKTsKKyAgICAgICAgaWYgKGludHJpbnNpYy5pbnRyaW5zaWNG
dW5jdGlvbigpICYmICFIZWFwOjppc01hcmtlZChpbnRyaW5zaWMuaW50cmluc2ljRnVuY3Rpb24o
KSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpIGNvbnN0Cit7CisgICAgYm9vbCByZXN1bHQgPSB0cnVlOworCisgICAgaWYgKG1f
c3RydWN0dXJlKQorICAgICAgICByZXN1bHQgJj0gbV9zdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZp
c2l0b3IpOworCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIFRyYW5zaXRpb246Cisg
ICAgICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShtX3N0cnVjdHVyZS0+cHJldmlv
dXNJRCgpKSkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQobV9zdHJ1Y3R1
cmUuZ2V0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgK
KyAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
JiBmYWxsVGhyb3VnaCkKK3sKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29w
ZShmYWxzZSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09IENvbW1pdHRlZCk7Cisg
ICAgbV9zdGF0ZSA9IEdlbmVyYXRlZDsKKworICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0YXRl
LmppdDsKKyAgICBWTSYgdm0gPSAqaml0LnZtKCk7CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdz
ID0gc3RhdGUudmFsdWVSZWdzOworICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGUuYmFzZUdQUjsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHN0YXRlLnNjcmF0Y2hHUFI7CisKKyAgICBVTlVTRURf
UEFSQU0odm0pOworCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIEFycmF5TGVuZ3Ro
OiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CisgICAgICAgIGppdC5sb2FkOChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAg
ICAgICAgaml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Olpl
cm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7Cisg
ICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2hUZXN0MzIo
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzaykpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBTdHJpbmdMZW5ndGg6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQ
cm94eSgpKTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgaml0LmJy
YW5jaDgoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
U3RyaW5nVHlwZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBEaXJlY3RB
cmd1bWVudHNMZW5ndGg6IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKKyAgICAgICAg
ZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaDgoCisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoRGlyZWN0QXJndW1lbnRzVHlw
ZSkpKTsKKworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJh
bmNoVGVzdFB0cigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIERpcmVjdEFyZ3VtZW50
czo6b2Zmc2V0T2ZNYXBwZWRBcmd1bWVudHMoKSkpKTsKKyAgICAgICAgaml0LmxvYWQzMigKKyAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBEaXJlY3RBcmd1bWVudHM6
Om9mZnNldE9mTGVuZ3RoKCkpLAorICAgICAgICAgICAgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7
CisgICAgICAgIGppdC5ib3hJbnQzMih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3Mp
OworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBjYXNlIFNjb3BlZEFyZ3VtZW50c0xlbmd0aDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5
KCkpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNo
OCgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihTY29w
ZWRBcmd1bWVudHNUeXBlKSkpOworCisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAg
ICAgICAgIGppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5v
blplcm8sCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIFNj
b3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5ncygpKSkpOworICAgICAgICBqaXQu
bG9hZDMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIFNjb3Bl
ZEFyZ3VtZW50czo6b2Zmc2V0T2ZUb3RhbExlbmd0aCgpKSwKKyAgICAgICAgICAgIHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCkpOworICAgICAgICBqaXQuYm94SW50MzIodmFsdWVSZWdzLnBheWxvYWRH
UFIoKSwgdmFsdWVSZWdzKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgZGVmYXVsdDogeworICAgICAgICBpZiAodmlhUHJveHkoKSkgewor
ICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgICAgIGppdC5icmFu
Y2g4KAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSkpOworCisgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKKworICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAor
ICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUoKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdHJ1
Y3R1cmUoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUoKSkpOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0gfTsKKworICAgIGdlbmVyYXRlSW1wbChz
dGF0ZSk7Cit9CisKK3ZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGlvblN0
YXRlJiBzdGF0ZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09IENvbW1pdHRlZCk7
CisgICAgbV9zdGF0ZSA9IEdlbmVyYXRlZDsKKworICAgIGdlbmVyYXRlSW1wbChzdGF0ZSk7Cit9
CisKK3ZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYg
c3RhdGUpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2Up
OworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJcblxuR2VuZXJhdGluZyBjb2Rl
IGZvcjogIiwgKnRoaXMsICJcbiIpOworCisgICAgQVNTRVJUKG1fc3RhdGUgPT0gR2VuZXJhdGVk
KTsgLy8gV2UgcmVseSBvbiB0aGUgY2FsbGVycyBzZXR0aW5nIHRoaXMgZm9yIHVzLgorCisgICAg
Q0NhbGxIZWxwZXJzJiBqaXQgPSAqc3RhdGUuaml0OworICAgIFZNJiB2bSA9ICpqaXQudm0oKTsK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKKyAgICBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8gPSAqc3RhdGUuc3R1YkluZm87CisgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQgPSAqc3RhdGUuaWRlbnQ7CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0g
c3RhdGUudmFsdWVSZWdzOworICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGUuYmFzZUdQUjsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHN0YXRlLnNjcmF0Y2hHUFI7CisKKyAgICBBU1NFUlQobV9j
b25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKSk7CisKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiBjb25kaXRpb24gOiBtX2NvbmRpdGlvblNldCkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisKKyAgICAgICAgaWYgKGNv
bmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsK
KyAgICAgICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3RhdGUuYWRk
V2F0Y2hwb2ludChjb25kaXRpb24pKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1p
bmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKSkgeworICAgICAgICAgICAgLy8g
VGhlIHJlYXNvbiB3aHkgdGhpcyBjYW5ub3QgaGFwcGVuIGlzIHRoYXQgd2UgcmVxdWlyZSB0aGF0
IFBvbHltb3JwaGljQWNjZXNzIGNhbGxzCisgICAgICAgICAgICAvLyBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZSgpIG9ubHkgYWZ0ZXIgaXQgaGFzIHZlcmlmaWVkIHRoYXQKKyAgICAgICAgICAgIC8vIEFj
Y2Vzc0Nhc2U6OmNvdWxkU3RpbGxTdWNjZWVkKCkgcmV0dXJuZWQgdHJ1ZS4KKworICAgICAgICAg
ICAgZGF0YUxvZygiVGhpcyBjb25kaXRpb24gaXMgbm8gbG9uZ2VyIG1ldDogIiwgY29uZGl0aW9u
LCAiXG4iKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBXZSB3aWxsIGVtaXQgY29kZSB0aGF0IGhhcyBhIHdlYWsgcmVm
ZXJlbmNlIHRoYXQgaXNuJ3Qgb3RoZXJ3aXNlIGxpc3RlZCBhbnl3aGVyZS4KKyAgICAgICAgc3Rh
dGUud2Vha1JlZmVyZW5jZXMuYXBwZW5kKFdyaXRlQmFycmllcjxKU0NlbGw+KHZtLCBjb2RlQmxv
Y2ssIHN0cnVjdHVyZSkpOworCisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihjb25kaXRpb24ub2JqZWN0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RhdGUu
ZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVyZSgK
KyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSkpOworICAgIH0KKworICAgIHN3aXRj
aCAobV90eXBlKSB7CisgICAgY2FzZSBJbkhpdDoKKyAgICBjYXNlIEluTWlzczoKKyAgICAgICAg
aml0LmJveEJvb2xlYW5QYXlsb2FkKG1fdHlwZSA9PSBJbkhpdCwgdmFsdWVSZWdzLnBheWxvYWRH
UFIoKSk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2FzZSBNaXNzOgorICAgICAgICBqaXQubW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCB2
YWx1ZVJlZ3MpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAgICAgIHJldHVybjsKKwor
ICAgIGNhc2UgTG9hZDoKKyAgICBjYXNlIEdldEdldHRlcjoKKyAgICBjYXNlIEdldHRlcjoKKyAg
ICBjYXNlIFNldHRlcjoKKyAgICBjYXNlIEN1c3RvbVZhbHVlR2V0dGVyOgorICAgIGNhc2UgQ3Vz
dG9tQWNjZXNzb3JHZXR0ZXI6CisgICAgY2FzZSBDdXN0b21WYWx1ZVNldHRlcjoKKyAgICBjYXNl
IEN1c3RvbUFjY2Vzc29yU2V0dGVyOiB7CisgICAgICAgIEdQUlJlZyB2YWx1ZVJlZ3NQYXlsb2Fk
R1BSID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsKKworICAgICAgICBpZiAoaXNWYWxpZE9mZnNl
dChtX29mZnNldCkpIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZTsKKyAg
ICAgICAgICAgIGlmIChtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
Y3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZSgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBtX2NvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigp
Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0
V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgb2Zmc2V0KCkpOworICAgICAgICB9
CisKKyAgICAgICAgR1BSUmVnIGJhc2VGb3JHZXRHUFI7CisgICAgICAgIGlmICh2aWFQcm94eSgp
KSB7CisgICAgICAgICAgICBBU1NFUlQobV90eXBlICE9IEN1c3RvbVZhbHVlU2V0dGVyIHx8IG1f
dHlwZSAhPSBDdXN0b21BY2Nlc3NvclNldHRlcik7IC8vIEJlY2F1c2Ugc2V0dGVycyBuZWVkIHRv
IG5vdCB0cmFzaCB2YWx1ZVJlZ3NQYXlsb2FkR1BSLgorICAgICAgICAgICAgaWYgKG1fdHlwZSA9
PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikKKyAgICAgICAgICAgICAgICBiYXNlRm9yR2V0
R1BSID0gc2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYXNl
Rm9yR2V0R1BSID0gdmFsdWVSZWdzUGF5bG9hZEdQUjsKKworICAgICAgICAgICAgQVNTRVJUKCht
X3R5cGUgIT0gR2V0dGVyICYmIG1fdHlwZSAhPSBTZXR0ZXIpIHx8IGJhc2VGb3JHZXRHUFIgIT0g
YmFzZUdQUik7CisgICAgICAgICAgICBBU1NFUlQobV90eXBlICE9IFNldHRlciB8fCBiYXNlRm9y
R2V0R1BSICE9IHZhbHVlUmVnc1BheWxvYWRHUFIpOworCisgICAgICAgICAgICBqaXQubG9hZFB0
cigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94
eTo6dGFyZ2V0T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSBiYXNlR1BSOworCisgICAg
ICAgIEdQUlJlZyBiYXNlRm9yQWNjZXNzR1BSOworICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaml0Lm1vdmUoCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGFsdGVybmF0ZUJhc2UoKSksCisgICAgICAgICAgICAg
ICAgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQ
UjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gYmFzZUZv
ckdldEdQUjsKKworICAgICAgICBHUFJSZWcgbG9hZGVkVmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVn
OworICAgICAgICBpZiAobV90eXBlICE9IEN1c3RvbVZhbHVlR2V0dGVyICYmIG1fdHlwZSAhPSBD
dXN0b21BY2Nlc3NvckdldHRlciAmJiBtX3R5cGUgIT0gQ3VzdG9tVmFsdWVTZXR0ZXIgJiYgbV90
eXBlICE9IEN1c3RvbUFjY2Vzc29yU2V0dGVyKSB7CisgICAgICAgICAgICBpZiAobV90eXBlID09
IExvYWQgfHwgbV90eXBlID09IEdldEdldHRlcikKKyAgICAgICAgICAgICAgICBsb2FkZWRWYWx1
ZUdQUiA9IHZhbHVlUmVnc1BheWxvYWRHUFI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbG9hZGVkVmFsdWVHUFIgPSBzY3JhdGNoR1BSOworCisgICAgICAgICAgICBBU1NFUlQo
KG1fdHlwZSAhPSBHZXR0ZXIgJiYgbV90eXBlICE9IFNldHRlcikgfHwgbG9hZGVkVmFsdWVHUFIg
IT0gYmFzZUdQUik7CisgICAgICAgICAgICBBU1NFUlQobV90eXBlICE9IFNldHRlciB8fCBsb2Fk
ZWRWYWx1ZUdQUiAhPSB2YWx1ZVJlZ3NQYXlsb2FkR1BSKTsKKworICAgICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VHUFI7CisgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKQor
ICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBiYXNlRm9yQWNjZXNzR1BSOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlRm9yQWNjZXNzR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7Cisg
ICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGxvYWRlZFZhbHVlR1BSOworICAgICAgICAgICAg
fQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGppdC5sb2FkNjQoCisgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZl
VG9CYXNlKG1fb2Zmc2V0KSksIGxvYWRlZFZhbHVlR1BSKTsKKyNlbHNlCisgICAgICAgICAgICBp
ZiAobV90eXBlID09IExvYWQgfHwgbV90eXBlID09IEdldEdldHRlcikgeworICAgICAgICAgICAg
ICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShtX29mZnNldCkgKyBUYWdPZmZzZXQp
LAorICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UobV9vZmZzZXQpICsgUGF5
bG9hZE9mZnNldCksCisgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworI2VuZGlmCisg
ICAgICAgIH0KKworICAgICAgICBpZiAobV90eXBlID09IExvYWQgfHwgbV90eXBlID09IEdldEdl
dHRlcikgeworICAgICAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZURPTUpJVCgpICYmIG1fdHlw
ZSA9PSBDdXN0b21BY2Nlc3NvckdldHRlciAmJiB0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlPigpLmRvbUpJVCgpKSB7CisgICAgICAgICAgICBhdXRvJiBhY2Nlc3MgPSB0aGlzLT5hczxH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpOworICAgICAgICAgICAgLy8gV2UgZG8gbm90IG5lZWQg
dG8gZW1pdCBDaGVja0RPTSBvcGVyYXRpb24gc2luY2Ugc3RydWN0dXJlIGNoZWNrIGVuc3VyZXMK
KyAgICAgICAgICAgIC8vIHRoYXQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZ2l2ZW4gYmFzZSB2YWx1
ZSBpcyBzdHJ1Y3R1cmUoKSEgU28gYWxsIHdlIHNob3VsZAorICAgICAgICAgICAgLy8gZG8gaXMg
cGVyZm9ybWluZyB0aGUgQ2hlY2tET00gdGhpbmd5IGluIElDIGNvbXBpbGluZyB0aW1lIGhlcmUu
CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2Yo
YWNjZXNzLmRvbUpJVCgpLT50aGlzQ2xhc3NJbmZvKCkpKSB7CisgICAgICAgICAgICAgICAgYWNj
ZXNzLmVtaXRET01KSVRHZXR0ZXIoc3RhdGUsIGJhc2VGb3JHZXRHUFIpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0dWZm
IGZvciBjdXN0b20gZ2V0dGVycy9zZXR0ZXJzLgorICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
b3BlcmF0aW9uQ2FsbDsKKworICAgICAgICAvLyBTdHVmZiBmb3IgSlMgZ2V0dGVycy9zZXR0ZXJz
LgorICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rRnVuY3Rp
b25DaGVjazsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RQYXRoQ2FsbDsKKyAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbDsKKworICAgICAgICAvLyBUaGlzIGFs
c28gZG9lcyB0aGUgbmVjZXNzYXJ5IGNhbGN1bGF0aW9ucyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdy
ZSBhbgorICAgICAgICAvLyBleGNlcHRpb24gaGFuZGxpbmcgY2FsbCBzaXRlLgorICAgICAgICBB
Y2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNl
cnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCk7CisKKyAgICAgICAgYXV0byByZXN0b3Jl
TGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwgPSBbJl0oQWNjZXNzR2VuZXJhdGlvblN0YXRl
OjpTcGlsbFN0YXRlJiBzcGlsbFN0YXRlLCBib29sIGNhbGxIYXNSZXR1cm5WYWx1ZSkgeworICAg
ICAgICAgICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmU7CisgICAgICAgICAgICBpZiAoY2FsbEhh
c1JldHVyblZhbHVlKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmVzdWx0IHZh
bHVlLiBXZSBkb24ndCB3YW50IHRvIG92ZXJ3cml0ZSB0aGUgcmVzdWx0IHdpdGggd2hhdCB3ZSBz
dG9yZWQgdG8gdGhlIHN0YWNrLgorICAgICAgICAgICAgICAgIC8vIFdlIHNvbWV0aW1lcyBoYXZl
IHRvIHN0b3JlIGl0IHRvIHRoZSBzdGFjayBqdXN0IGluIGNhc2Ugd2UgdGhyb3cgYW4gZXhjZXB0
aW9uIGFuZCBuZWVkIHRoZSBvcmlnaW5hbCB2YWx1ZS4KKyAgICAgICAgICAgICAgICBkb250UmVz
dG9yZS5zZXQodmFsdWVSZWdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLnJl
c3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRlLCBkb250UmVzdG9y
ZSk7CisgICAgICAgIH07CisKKyAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFu
ZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFn
Rm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCkpKTsKKworICAgICAgICBpZiAobV90eXBlID09IEdldHRlciB8fCBtX3R5cGUgPT0gU2V0
dGVyKSB7CisgICAgICAgICAgICBhdXRvJiBhY2Nlc3MgPSB0aGlzLT5hczxHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlPigpOworICAgICAgICAgICAgQVNTRVJUKGJhc2VHUFIgIT0gbG9hZGVkVmFsdWVH
UFIpOworICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSAhPSBTZXR0ZXIgfHwgKGJhc2VHUFIgIT0g
dmFsdWVSZWdzUGF5bG9hZEdQUiAmJiBsb2FkZWRWYWx1ZUdQUiAhPSB2YWx1ZVJlZ3NQYXlsb2Fk
R1BSKSk7CisKKyAgICAgICAgICAgIC8vIENyZWF0ZSBhIEpTIGNhbGwgdXNpbmcgYSBKUyBjYWxs
IGlubGluZSBjYWNoZS4gQXNzdW1lIHRoYXQ6CisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gLSBTUCBpcyBhbGlnbmVkIGFuZCByZXByZXNlbnRzIHRoZSBleHRlbnQgb2YgdGhlIGNhbGxp
bmcgY29tcGlsZXIncyBzdGFjayB1c2FnZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAv
LyAtIEZQIGlzIHNldCBjb3JyZWN0bHkgKGkuZS4gaXQgcG9pbnRzIHRvIHRoZSBjYWxsZXIncyBj
YWxsIGZyYW1lIGhlYWRlcikuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gLSBTUCAt
IEZQIGlzIGFuIGFsaWduZWQgZGlmZmVyZW5jZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAvLyAtIEFueSBieXRlIGJldHdlZW4gRlAgKGV4Y2x1c2l2ZSkgYW5kIFNQIChpbmNsdXNpdmUp
IGNvdWxkIGJlIGxpdmUgaW4gdGhlIGNhbGxpbmcKKyAgICAgICAgICAgIC8vICAgY29kZS4KKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIHRlbXBvcmFyaWx5IGdy
b3cgdGhlIHN0YWNrIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgY2FsbCBhbmQgdGhlbgorICAgICAg
ICAgICAgLy8gc2hyaW5rIGl0IGFmdGVyLgorCisgICAgICAgICAgICBzdGF0ZS5zZXRTcGlsbFN0
YXRlRm9ySlNHZXR0ZXJTZXR0ZXIoc3BpbGxTdGF0ZSk7CisKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFhY2Nlc3MuY2FsbExpbmtJbmZvKCkpOworICAgICAgICAgICAgYWNjZXNzLm1fY2Fs
bExpbmtJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua0luZm8+KCk7CisKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBJZiB3ZSBnZW5lcmF0ZWQgYSBwb2x5bW9ycGhpYyBjYWxsIHN0dWIgdGhh
dCBqdW1wZWQgYmFjayB0byB0aGUgZ2V0dGVyCisgICAgICAgICAgICAvLyBzdHViLCB3aGljaCB0
aGVuIGp1bXBlZCBiYWNrIHRvIHRoZSBtYWluIGNvZGUsIHRoZW4gd2UnZCBoYXZlIGEgcmVhY2hh
YmlsaXR5CisgICAgICAgICAgICAvLyBzaXR1YXRpb24gdGhhdCB0aGUgR0MgZG9lc24ndCBrbm93
IGFib3V0LiBUaGUgR0Mgd291bGQgZW5zdXJlIHRoYXQgdGhlIHBvbHltb3JwaGljCisgICAgICAg
ICAgICAvLyBjYWxsIHN0dWIgc3RheWVkIGFsaXZlLCBhbmQgaXQgd291bGQgZW5zdXJlIHRoYXQg
dGhlIG1haW4gY29kZSBzdGF5ZWQgYWxpdmUsIGJ1dAorICAgICAgICAgICAgLy8gaXQgd291bGRu
J3Qga25vdyB0aGF0IHRoZSBnZXR0ZXIgc3R1YiB3YXMgYWxpdmUuIElkZWFsbHkgSklUIHN0dWIg
cm91dGluZXMgd291bGQKKyAgICAgICAgICAgIC8vIGJlIEdDIG9iamVjdHMsIGFuZCB0aGVuIHdl
J2QgYmUgYWJsZSB0byBzYXkgdGhhdCB0aGUgcG9seW1vcnBoaWMgY2FsbCBzdHViIGhhcyBhCisg
ICAgICAgICAgICAvLyByZWZlcmVuY2UgdG8gdGhlIGdldHRlciBzdHViLgorICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODkxNAorICAgICAg
ICAgICAgYWNjZXNzLmNhbGxMaW5rSW5mbygpLT5kaXNhbGxvd1N0dWJzKCk7CisKKyAgICAgICAg
ICAgIGFjY2Vzcy5jYWxsTGlua0luZm8oKS0+c2V0VXBDYWxsKAorICAgICAgICAgICAgICAgIENh
bGxMaW5rSW5mbzo6Q2FsbCwgc3R1YkluZm8uY29kZU9yaWdpbiwgbG9hZGVkVmFsdWVHUFIpOwor
CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICAgICAgICAg
IC8vIFRoZXJlIGlzIGEgInRoaXMiIGFyZ3VtZW50LgorICAgICAgICAgICAgdW5zaWduZWQgbnVt
YmVyT2ZQYXJhbWV0ZXJzID0gMTsKKyAgICAgICAgICAgIC8vIC4uLiBhbmQgYSB2YWx1ZSBhcmd1
bWVudCBpZiB3ZSdyZSBjYWxsaW5nIGEgc2V0dGVyLgorICAgICAgICAgICAgaWYgKG1fdHlwZSA9
PSBTZXR0ZXIpCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7CisKKyAgICAg
ICAgICAgIC8vIEdldCB0aGUgYWNjZXNzb3I7IGlmIHRoZXJlIGFpbid0IG9uZSB0aGVuIHRoZSBy
ZXN1bHQgaXMganNVbmRlZmluZWQoKS4KKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gU2V0dGVy
KSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRP
ZlNldHRlcigpKSwKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0
ZXI6Om9mZnNldE9mR2V0dGVyKCkpLAorICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQ
Uik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCByZXR1
cm5VbmRlZmluZWQgPSBqaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Olplcm8sIGxvYWRlZFZhbHVlR1BSKTsKKworICAgICAgICAgICAgdW5zaWduZWQgbnVt
YmVyT2ZSZWdzRm9yQ2FsbCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgbnVt
YmVyT2ZQYXJhbWV0ZXJzOworICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNh
bGwgPSBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKTsKKworICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0
ZXNGb3JDYWxsID0KKyAgICAgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0Fs
aWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKKworICAgICAgICAgICAgaml0
LnN1YlB0cigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGln
bmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MgY2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAtc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKworICAgICAg
ICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIobnVtYmVyT2ZQYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53
aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgUGF5bG9hZE9mZnNldCkpOworCisgICAgICAgICAgICBqaXQuc3RvcmVDZWxsKAorICAgICAg
ICAgICAgICAgIGxvYWRlZFZhbHVlR1BSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpKTsKKworICAgICAgICAgICAgaml0LnN0
b3JlQ2VsbCgKKyAgICAgICAgICAgICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAgIGNhbGxl
ZUZyYW1lLndpdGhPZmZzZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkub2Zmc2V0KCkg
KiBzaXplb2YoUmVnaXN0ZXIpKSk7CisKKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gU2V0dGVy
KSB7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgICAg
IHZhbHVlUmVncywKKyAgICAgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCgK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd0Nhc2UgPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAor
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGxvYWRlZFZhbHVlR1BSLCBh
ZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjaywKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoMCkpOworCisgICAgICAgICAgICBmYXN0UGF0aENhbGwgPSBqaXQubmVh
ckNhbGwoKTsKKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyKQorICAgICAgICAgICAg
ICAgIGppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5k
KGppdC5qdW1wKCkpOworCisgICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOworICAgICAg
ICAgICAgaml0Lm1vdmUobG9hZGVkVmFsdWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgLy8gV2UgKmFsd2F5cyoga25vdyB0aGF0IHRoZSBn
ZXR0ZXIvc2V0dGVyLCBpZiBub24tbnVsbCwgaXMgYSBjZWxsLgorICAgICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86
OnJlZ1QxKTsKKyNlbmRpZgorICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGFjY2Vzcy5jYWxsTGlua0luZm8oKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAg
ICAgICAgIHNsb3dQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgaWYgKG1f
dHlwZSA9PSBHZXR0ZXIpCisgICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJl
Z3MpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgICAg
IHJldHVyblVuZGVmaW5lZC5saW5rKCZqaXQpOworICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBH
ZXR0ZXIpCisgICAgICAgICAgICAgICAgaml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQo
KSwgdmFsdWVSZWdzKTsKKworICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOworCisgICAgICAg
ICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKChjb2RlQmxvY2stPnN0
YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkgLSBzdGF0ZS5wcmVzZXJ2ZWRS
ZXVzZWRSZWdpc3RlclN0YXRlLm51bWJlck9mQnl0ZXNQcmVzZXJ2ZWQgLSBzcGlsbFN0YXRlLm51
bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiksCisgICAgICAgICAg
ICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUgPSBpc0dl
dHRlcigpOworICAgICAgICAgICAgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxs
KHNwaWxsU3RhdGUsIGNhbGxIYXNSZXR1cm5WYWx1ZSk7CisKKyAgICAgICAgICAgIGppdC5hZGRM
aW5rVGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAg
ICAgIHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExpbmtJbmZvKCktPnNl
dENhbGxMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dQYXRoQ2FsbCkpLAorICAgICAgICAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2YoYWRkcmVzc09m
TGlua0Z1bmN0aW9uQ2hlY2spKSwKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGwoZmFzdFBhdGhDYWxsKSk7CisKKyAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCwKKyAgICAgICAgICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS5jb2RlKCkpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5cGUgPT0g
Q3VzdG9tQWNjZXNzb3JHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyIHx8IG1f
dHlwZSA9PSBDdXN0b21BY2Nlc3NvclNldHRlcik7CisKKyAgICAgICAgICAgIC8vIE5lZWQgdG8g
bWFrZSByb29tIGZvciB0aGUgQyBjYWxsIHNvIGFueSBvZiBvdXIgc3RhY2sgc3BpbGxhZ2UgaXNu
J3Qgb3ZlcndyaXR0ZW4uIEl0J3MKKyAgICAgICAgICAgIC8vIGhhcmQgdG8gdHJhY2sgaWYgc29t
ZW9uZSBkaWQgc3BpbGxhZ2Ugb3Igbm90LCBzbyB3ZSBqdXN0IGFzc3VtZSB0aGF0IHdlIGFsd2F5
cyBuZWVkCisgICAgICAgICAgICAvLyB0byBtYWtlIHNvbWUgc3BhY2UgaGVyZS4KKyAgICAgICAg
ICAgIGppdC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKKworICAgICAgICAgICAgLy8gZ2V0
dGVyOiBFbmNvZGVkSlNWYWx1ZSAoKkdldFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgLy8gc2V0dGVyOiB2
b2lkICgqUHV0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSk7CisgICAgICAgICAgICAvLyBDdXN0b20gdmFsdWVzIGFy
ZSBwYXNzZWQgdGhlIHNsb3RCYXNlICh0aGUgcHJvcGVydHkgaG9sZGVyKSwgY3VzdG9tIGFjY2Vz
c29ycyBhcmUgcGFzc2VkIHRoZSB0aGlzVmF1bGUgKHJlY2lldmVyKS4KKyAgICAgICAgICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhpcyBkaWZmZXJlbmNlcyBpbiBjdXN0b20gdmFsdWVzIGFuZCBjdXN0
b20gYWNjZXNzb3JzLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1ODAxNAorICAgICAgICAgICAgR1BSUmVnIGJhc2VGb3JDdXN0b21WYWx1
ZSA9IG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tVmFsdWVT
ZXR0ZXIgPyBiYXNlRm9yQWNjZXNzR1BSIDogYmFzZUZvckdldEdQUjsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5
cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICBqaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgICAgICAgICBiYXNlRm9yQ3VzdG9t
VmFsdWUsCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihp
ZGVudC5pbXBsKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckN1c3RvbVZhbHVlLCB2YWx1ZVJlZ3Mu
Z3ByKCkpOworI2Vsc2UKKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0
ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyKSB7CisgICAgICAgICAgICAgICAg
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgRUFC
SV8zMkJJVF9EVU1NWV9BUkcgYmFzZUZvckN1c3RvbVZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwoKSkpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKAorICAgICAgICAgICAgICAgICAgICBFQUJJXzMyQklUX0RVTU1ZX0FSRyBi
YXNlRm9yQ3VzdG9tVmFsdWUsCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgfQorI2Vu
ZGlmCisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
ICZ2bS50b3BDYWxsRnJhbWUpOworCisgICAgICAgICAgICBvcGVyYXRpb25DYWxsID0gaml0LmNh
bGwoKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwg
RnVuY3Rpb25QdHIodGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5tX2N1c3RvbUFj
Y2Vzc29yLm9wYXF1ZSkpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmIChtX3R5
cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVy
KQorICAgICAgICAgICAgICAgIGppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKKyAgICAgICAg
ICAgIGppdC5yZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKKworICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIG5vRXhjZXB0aW9uID0KKyAgICAgICAgICAgIGppdC5lbWl0RXhjZXB0
aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKKworICAgICAg
ICAgICAgc3RhdGUucmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsV2l0aFRocm93
bkV4Y2VwdGlvbihzcGlsbFN0YXRlKTsKKyAgICAgICAgICAgIHN0YXRlLmVtaXRFeHBsaWNpdEV4
Y2VwdGlvbkhhbmRsZXIoKTsKKworICAgICAgICAgICAgbm9FeGNlcHRpb24ubGluaygmaml0KTsK
KyAgICAgICAgICAgIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlID0gaXNHZXR0ZXIoKTsKKyAgICAg
ICAgICAgIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRlLCBj
YWxsSGFzUmV0dXJuVmFsdWUpOworICAgICAgICB9CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2UgUmVwbGFjZTogeworICAgICAgICBp
ZiAoSW5mZXJyZWRUeXBlKiB0eXBlID0gc3RydWN0dXJlKCktPmluZmVycmVkVHlwZUZvcihpZGVu
dC5pbXBsKCkpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCJIYXZlIHR5cGU6ICIsIHR5cGUtPmRlc2NyaXB0b3IoKSwgIlxuIik7CisgICAgICAg
ICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoCisgICAgICAgICAgICAgICAgaml0LmJy
YW5jaElmTm90VHlwZSh2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkp
OworICAgICAgICB9IGVsc2UgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJEb24n
dCBoYXZlIHR5cGUuXG4iKTsKKworICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQobV9vZmZzZXQp
KSB7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAgICAgICB2YWx1ZVJl
Z3MsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAg
ICAgICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkgKworICAgICAgICAgICAgICAgICAgICBvZmZzZXRJbklubGluZVN0b3Jh
Z2UobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQuc3Rv
cmVWYWx1ZSgKKyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSLCBvZmZz
ZXRJbkJ1dHRlcmZseShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgfQor
ICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBj
YXNlIFRyYW5zaXRpb246IHsKKyAgICAgICAgLy8gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbigpIHNo
b3VsZCBoYXZlIHJldHVybmVkIG51bGwgaWYgdGhpcyB3YXNuJ3QgdHJ1ZS4KKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOworCisgICAgICAgIGlm
IChJbmZlcnJlZFR5cGUqIHR5cGUgPSBuZXdTdHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRm9yKGlk
ZW50LmltcGwoKSkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
IGRhdGFMb2coIkhhdmUgdHlwZTogIiwgdHlwZS0+ZGVzY3JpcHRvcigpLCAiXG4iKTsKKyAgICAg
ICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBqaXQu
YnJhbmNoSWZOb3RUeXBlKHZhbHVlUmVncywgc2NyYXRjaEdQUiwgdHlwZS0+ZGVzY3JpcHRvcigp
KSk7CisgICAgICAgIH0gZWxzZSBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkRv
bid0IGhhdmUgdHlwZS5cbiIpOworCisgICAgICAgIC8vIE5PVEU6IFRoaXMgbG9naWMgaXMgZHVw
bGljYXRlZCBpbiBBY2Nlc3NDYXNlOjpkb2VzQ2FsbHMoKS4gSXQncyBpbXBvcnRhbnQgdGhhdCBk
b2VzQ2FsbHMoKSBrbm93cworICAgICAgICAvLyBleGFjdGx5IHdoZW4gdGhpcyB3b3VsZCBtYWtl
IGNhbGxzLgorICAgICAgICBib29sIGFsbG9jYXRpbmcgPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAg
ICAgYm9vbCByZWFsbG9jYXRpbmcgPSBhbGxvY2F0aW5nICYmIHN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpOworICAgICAgICBib29sIGFsbG9jYXRpbmdJbmxpbmUgPSBhbGxvY2F0aW5n
ICYmICFzdHJ1Y3R1cmUoKS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKTsKKworICAgICAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdp
c3RlcnMpOworICAgICAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBhbGxvY2F0b3IubG9jayhzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnBhdGNoLmJhc2VUYWdHUFIpKTsKKyNlbmRpZgorICAgICAgICBhbGxvY2F0b3IubG9jayh2
YWx1ZVJlZ3MpOworICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKworICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUjMgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkg
eworICAgICAgICAgICAgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCk7CisgICAgICAgICAgICBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKKyAgICAgICAgfQorCisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJl
c2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGUgPQorICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVS
ZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4
dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPnRyYW5zaXRp
b25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOworCisgICAgICAgIGlmIChhbGxv
Y2F0aW5nKSB7CisgICAgICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG5ld1N0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworCisgICAgICAgICAgICBpZiAo
YWxsb2NhdGluZ0lubGluZSkgeworICAgICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxs
b2NhdG9yID0gdm0uYXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yKG5ld1NpemUpOworCisgICAg
ICAgICAgICAgICAgaWYgKCFhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gWXVj
aywgdGhpcyBjYXNlIHdvdWxkIHN1Y2shCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQ
UjIpOworICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUiwgYWxsb2Nh
dG9yLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICAgICAgICAgICAg
ICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUgKyBzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUik7CisKKyAgICAgICAgICAgICAgICBzaXplX3Qg
b2xkU2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFs
dWUpOworICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisKKyAgICAg
ICAgICAgICAgICBpZiAocmVhbGxvY2F0aW5nKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEhh
bmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgcmVhbGxvY2F0aW5nIChpLmUuIHRoZSBvbGQgc3Ry
dWN0dXJlL2J1dHRlcmZseQorICAgICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGhhZCBvdXQt
b2YtbGluZSBwcm9wZXJ0eSBzdG9yYWdlKS4KKworICAgICAgICAgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaEdQUjMpOworCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUg
c2NyYXRjaEdQUiA9IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BSMyA9IG9sZCBzdG9yYWdlLAorICAg
ICAgICAgICAgICAgICAgICAvLyBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQorICAgICAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQg
Kz0gc2l6ZW9mKHZvaWQqKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yo
dm9pZCopKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNjcmF0Y2hHUFIyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQ
UiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZf
dD4ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IG9mZnNldCA9IG9sZFNpemU7IG9mZnNldCA8IG5ld1NpemU7IG9mZnNldCArPSBzaXpl
b2Yodm9pZCopKQorICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKDApLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgLXN0
YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZv
aWQqKSkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSGFuZGxl
IHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBhbGxvY2F0aW5nIG91dC1vZi1saW5lIHVzaW5nIGFuIG9w
ZXJhdGlvbi4KKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmU7CisgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldChiYXNl
R1BSKTsKKyAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KHZhbHVl
UmVncyk7CisgICAgICAgICAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRl
IHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChl
eHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JF
eGNlcHRpb25IYW5kbGluZ09yT3JpZ2luYWwoKS5iaXRzKCkpLAorICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaml0Lm1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmICghcmVhbGxvY2F0aW5nKSB7CisgICAgICAgICAgICAgICAgICAg
IGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUik7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9u
Q2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxs
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblJlYWxs
b2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KSk7
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgcmVhbGxvY2F0
aW5nIChpLmUuIHRoZSBvbGQgc3RydWN0dXJlL2J1dHRlcmZseQorICAgICAgICAgICAgICAgICAg
ICAvLyBhbHJlYWR5IGhhZCBvdXQtb2YtbGluZSBwcm9wZXJ0eSBzdG9yYWdlKS4KKyAgICAgICAg
ICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJhc2VHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUg
LyBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRnVuY3Rpb25QdHIob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1By
b3BlcnR5U3RvcmFnZSkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0LnJlY2xhaW1TcGFjZU9u
U3RhY2tGb3JDQ2FsbCgpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgbm9FeGNlcHRpb24gPSBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNr
KENDYWxsSGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgc3RhdGUucmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JD
YWxsV2l0aFRocm93bkV4Y2VwdGlvbihzcGlsbFN0YXRlKTsKKyAgICAgICAgICAgICAgICBzdGF0
ZS5lbWl0RXhwbGljaXRFeGNlcHRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbm9FeGNlcHRpb24ubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICBzdGF0
ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoc3BpbGxTdGF0ZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpc0lubGluZU9mZnNl
dChtX29mZnNldCkpIHsKKyAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAorICAgICAgICAgICAg
ICAgIHZhbHVlUmVncywKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisg
ICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArCisgICAgICAgICAgICAgICAgICAgIG9mZnNldElu
SW5saW5lU3RvcmFnZShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmICghYWxsb2NhdGluZykKKyAgICAgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKKyAg
ICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVvZihK
U1ZhbHVlKSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoYWxsb2NhdGluZ0lu
bGluZSkgeworICAgICAgICAgICAgLy8gV2Ugc2V0IHRoZSBuZXcgYnV0dGVyZmx5IGFuZCB0aGUg
c3RydWN0dXJlIGxhc3QuIERvaW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMgdGhhdAorICAgICAgICAg
ICAgLy8gd2hhdGV2ZXIgd2UgaGFkIGRvbmUgdXAgdG8gdGhpcyBwb2ludCBpcyBmb3Jnb3R0ZW4g
aWYgd2UgY2hvb3NlIHRvIGJyYW5jaCB0byBzbG93CisgICAgICAgICAgICAvLyBwYXRoLgorICAg
ICAgICAgICAgaml0Lm51a2VTdHJ1Y3R1cmVBbmRTdG9yZUJ1dHRlcmZseShzY3JhdGNoR1BSLCBi
YXNlR1BSKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdWludDMyX3Qgc3RydWN0dXJl
Qml0cyA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4obmV3U3RydWN0dXJlKCktPmlkKCkpOworICAg
ICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KHN0cnVjdHVyZUJpdHMpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgICAgICAKKyAgICAgICAgYWxs
b2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0
ZSk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIHdp
bGwgaGF2ZSBhIHNsb3cgcGF0aCBpZiB3ZSB3ZXJlIGFsbG9jYXRpbmcgd2l0aG91dCB0aGUgaGVs
cCBvZiBhbiBvcGVyYXRpb24uCisgICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7CisgICAg
ICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgICAg
ICAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0
b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAg
ICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQo
c2xvd1BhdGgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNs
b3dQYXRoLmVtcHR5KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBj
YXNlIEFycmF5TGVuZ3RoOiB7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJy
YXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdGF0ZS5m
YWlsQW5kSWdub3JlLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2gzMihDQ2FsbEhlbHBl
cnM6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkp
OworICAgICAgICBqaXQuYm94SW50MzIoc2NyYXRjaEdQUiwgdmFsdWVSZWdzKTsKKyAgICAgICAg
c3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBj
YXNlIFN0cmluZ0xlbmd0aDogeworICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHZhbHVlUmVncy5wYXls
b2FkR1BSKCkpOworICAgICAgICBqaXQuYm94SW50MzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwg
dmFsdWVSZWdzKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgICAgICAKKyAgICBjYXNlIEludHJpbnNpY0dldHRlcjogeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCgpKSk7CisgICAgICAgIAorICAgICAgICAv
LyBXZSBuZWVkIHRvIGVuc3VyZSB0aGUgZ2V0dGVyIHZhbHVlIGRvZXMgbm90IG1vdmUgZnJvbSB1
bmRlciB1cy4gTm90ZSB0aGF0IEdldHRlclNldHRlcnMKKyAgICAgICAgLy8gYXJlIGltbXV0YWJs
ZSBzbyB3ZSBqdXN0IG5lZWQgdG8gd2F0Y2ggdGhlIHByb3BlcnR5IG5vdCBhbnkgdmFsdWUgaW5z
aWRlIGl0LgorICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7CisgICAgICAgIGlmICht
X2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gc3Ry
dWN0dXJlKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBtX2Nv
bmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKKyAg
ICAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRz
KHZtLCBvZmZzZXQoKSk7CisgICAgICAgIAorICAgICAgICB0aGlzLT5hczxJbnRyaW5zaWNHZXR0
ZXJBY2Nlc3NDYXNlPigpLmVtaXRJbnRyaW5zaWNHZXR0ZXIoc3RhdGUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIERpcmVjdEFyZ3VtZW50c0xlbmd0aDoKKyAg
ICBjYXNlIFNjb3BlZEFyZ3VtZW50c0xlbmd0aDoKKyAgICAgICAgLy8gVGhlc2UgbmVlZCB0byBi
ZSBoYW5kbGVkIGJ5IGdlbmVyYXRlV2l0aEd1YXJkKCksIHNpbmNlIHRoZSBndWFyZCBpcyBwYXJ0
IG9mIHRoZQorICAgICAgICAvLyBhbGdvcml0aG0uIFdlIGNhbiBiZSBzdXJlIHRoYXQgbm9ib2R5
IHdpbGwgY2FsbCBnZW5lcmF0ZSgpIGRpcmVjdGx5IGZvciB0aGVzZSBzaW5jZSB0aGV5CisgICAg
ICAgIC8vIGFyZSBub3QgZ3VhcmRlZCBieSBzdHJ1Y3R1cmUgY2hlY2tzLgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmVtaXRE
T01KSVRHZXR0ZXIoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgR1BSUmVnIGJhc2VGb3JH
ZXRHUFIpCit7CisgICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqc3RhdGUuaml0OworICAgIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICpzdGF0ZS5zdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVn
cyB2YWx1ZVJlZ3MgPSBzdGF0ZS52YWx1ZVJlZ3M7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0
ZS5iYXNlR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGUuc2NyYXRjaEdQUjsKKyAg
ICAKKyAgICAvLyBXZSBjb25zdHJ1Y3QgdGhlIGVudmlyb25tZW50IHRoYXQgY2FuIGV4ZWN1dGUg
dGhlIERPTUpJVDo6UGF0Y2hwb2ludCBoZXJlLgorICAgIFJlZjxET01KSVQ6OkNhbGxET01HZXR0
ZXJQYXRjaHBvaW50PiBwYXRjaHBvaW50ID0gZG9tSklUKCktPmNhbGxET01HZXR0ZXIoKTsKKyAg
ICAKKyAgICBWZWN0b3I8R1BSUmVnPiBncFNjcmF0Y2g7CisgICAgVmVjdG9yPEZQUlJlZz4gZnBT
Y3JhdGNoOworICAgIFZlY3RvcjxET01KSVQ6OlZhbHVlPiByZWdzOworICAgIAorICAgIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVy
cyk7CisgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkK
KyAgICBhbGxvY2F0b3IubG9jayhzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJh
c2VUYWdHUFIpKTsKKyNlbmRpZgorICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CisgICAg
YWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisgICAgCisgICAgR1BSUmVnIHBhcmFtQmFzZUdQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgR1BSUmVnIHBhcmFtR2xvYmFsT2JqZWN0R1BSID0gSW52
YWxpZEdQUlJlZzsKKyAgICBKU1ZhbHVlUmVncyBwYXJhbVZhbHVlUmVncyA9IHZhbHVlUmVnczsK
KyAgICBHUFJSZWcgcmVtYWluaW5nU2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgCisg
ICAgLy8gdmFsdWVSZWdzIGFuZCBiYXNlRm9yR2V0R1BSIG1heSBiZSB0aGUgc2FtZS4gRm9yIGV4
YW1wbGUsIGluIEJhc2VsaW5lIEpJVCwgd2UgcGFzcyB0aGUgc2FtZSByZWdUMCBmb3IgYmFzZUdQ
UiBhbmQgdmFsdWVSZWdzLgorICAgIC8vIEluIEZUTCwgdGhlcmUgaXMgbm8gY29uc3RyYWludCB0
aGF0IHRoZSBiYXNlRm9yR2V0R1BSIGludGVyZmVyZXMgd2l0aCB0aGUgcmVzdWx0LiBUbyBtYWtl
IGltcGxlbWVudGF0aW9uIHNpbXBsZSBpbgorICAgIC8vIERPTUpJVDo6UGF0Y2hwb2ludCwgRE9N
SklUOjpQYXRjaHBvaW50IGFzc3VtZXMgdGhhdCByZXN1bHQgcmVnaXN0ZXJzIGFsd2F5cyBlYXJs
eSBpbnRlcmZlcmUgd2l0aCBpbnB1dCByZWdpc3RlcnMsIGluIHRoaXMgY2FzZSwKKyAgICAvLyBi
YXNlRm9yR2V0R1BSLiBTbyB3ZSBtb3ZlIGJhc2VGb3JHZXRHUFIgdG8gdGhlIG90aGVyIHJlZ2lz
dGVyIGlmIGJhc2VGb3JHZXRHUFIgPT0gdmFsdWVSZWdzLgorICAgIGlmIChiYXNlRm9yR2V0R1BS
ICE9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpIHsKKyAgICAgICAgcGFyYW1CYXNlR1BSID0gYmFz
ZUZvckdldEdQUjsKKyAgICAgICAgaWYgKCFwYXRjaHBvaW50LT5yZXF1aXJlR2xvYmFsT2JqZWN0
KQorICAgICAgICAgICAgcmVtYWluaW5nU2NyYXRjaEdQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHBhcmFtR2xvYmFsT2JqZWN0R1BSID0gc2NyYXRjaEdQUjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBqaXQubW92ZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgcGFyYW1CYXNlR1BSID0gc2NyYXRjaEdQUjsKKyAgICAgICAgaWYg
KHBhdGNocG9pbnQtPnJlcXVpcmVHbG9iYWxPYmplY3QpCisgICAgICAgICAgICBwYXJhbUdsb2Jh
bE9iamVjdEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICB9CisgICAg
CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdEZvckRPTUpJVCA9IHN0cnVjdHVyZSgp
LT5nbG9iYWxPYmplY3QoKTsKKyAgICAKKyAgICByZWdzLmFwcGVuZChwYXJhbVZhbHVlUmVncyk7
CisgICAgcmVncy5hcHBlbmQocGFyYW1CYXNlR1BSKTsKKyAgICBpZiAocGF0Y2hwb2ludC0+cmVx
dWlyZUdsb2JhbE9iamVjdCkgeworICAgICAgICBBU1NFUlQocGFyYW1HbG9iYWxPYmplY3RHUFIg
IT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIHJlZ3MuYXBwZW5kKERPTUpJVDo6VmFsdWUocGFy
YW1HbG9iYWxPYmplY3RHUFIsIGdsb2JhbE9iamVjdEZvckRPTUpJVCkpOworICAgIH0KKyAgICAK
KyAgICBpZiAocGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKSB7CisgICAgICAgIHVu
c2lnbmVkIGkgPSAwOworICAgICAgICBpZiAocmVtYWluaW5nU2NyYXRjaEdQUiAhPSBJbnZhbGlk
R1BSUmVnKSB7CisgICAgICAgICAgICBncFNjcmF0Y2guYXBwZW5kKHJlbWFpbmluZ1NjcmF0Y2hH
UFIpOworICAgICAgICAgICAgKytpOworICAgICAgICB9CisgICAgICAgIGZvciAoOyBpIDwgcGF0
Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyArK2kpCisgICAgICAgICAgICBncFNjcmF0
Y2guYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKSk7CisgICAgfQorICAgIAor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdp
c3RlcnM7ICsraSkKKyAgICAgICAgZnBTY3JhdGNoLmFwcGVuZChhbGxvY2F0b3IuYWxsb2NhdGVT
Y3JhdGNoRlBSKCkpOworICAgIAorICAgIC8vIExldCdzIHN0b3JlIHRoZSByZXVzZWQgcmVnaXN0
ZXJzIHRvIHRoZSBzdGFjay4gQWZ0ZXIgdGhhdCwgd2UgY2FuIHVzZSBhbGxvY2F0ZWQgc2NyYXRj
aCByZWdpc3RlcnMuCisgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0
ZSBwcmVzZXJ2ZWRTdGF0ZSA9CisgICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJz
QnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6
OlNwYWNlRm9yQ0NhbGwpOworICAgIAorICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgIGRhdGFM
b2coImJhc2VHUFIgPSAiLCBiYXNlR1BSLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygidmFsdWVS
ZWdzID0gIiwgdmFsdWVSZWdzLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygic2NyYXRjaEdQUiA9
ICIsIHNjcmF0Y2hHUFIsICJcbiIpOworICAgICAgICBkYXRhTG9nKCJwYXJhbUJhc2VHUFIgPSAi
LCBwYXJhbUJhc2VHUFIsICJcbiIpOworICAgICAgICBpZiAocGFyYW1HbG9iYWxPYmplY3RHUFIg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGRhdGFMb2coInBhcmFtR2xvYmFsT2JqZWN0
R1BSID0gIiwgcGFyYW1HbG9iYWxPYmplY3RHUFIsICJcbiIpOworICAgICAgICBkYXRhTG9nKCJw
YXJhbVZhbHVlUmVncyA9ICIsIHBhcmFtVmFsdWVSZWdzLCAiXG4iKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsgKytp
KQorICAgICAgICAgICAgZGF0YUxvZygiZ3BTY3JhdGNoWyIsIGksICJdID0gIiwgZ3BTY3JhdGNo
W2ldLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgaWYgKHBhdGNocG9pbnQtPnJlcXVpcmVHbG9i
YWxPYmplY3QpCisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihn
bG9iYWxPYmplY3RGb3JET01KSVQpLCBwYXJhbUdsb2JhbE9iamVjdEdQUik7CisgICAgCisgICAg
Ly8gV2UganVzdCBzcGlsbCB0aGUgcmVnaXN0ZXJzIHVzZWQgaW4gRE9NSklUOjpQYXRjaHBvaW50
IGhlcmUuIEZvciBub3Qgc3BpbGxlZCByZWdpc3RlcnMgaGVyZSBleHBsaWNpdGx5LAorICAgIC8v
IHRoZXkgbXVzdCBiZSBpbiB0aGUgdXNlZCByZWdpc3RlciBzZXQgcGFzc2VkIGJ5IHRoZSBjYWxs
ZXJzIChCYXNlbGluZSwgREZHLCBhbmQgRlRMKSBpZiB0aGV5IG5lZWQgdG8gYmUga2VwdC4KKyAg
ICAvLyBTb21lIHJlZ2lzdGVycyBjYW4gYmUgbG9ja2VkLCBidXQgbm90IGluIHRoZSB1c2VkIHJl
Z2lzdGVyIHNldC4gRm9yIGV4YW1wbGUsIHRoZSBjYWxsZXIgY291bGQgbWFrZSBiYXNlR1BSCisg
ICAgLy8gc2FtZSB0byB2YWx1ZVJlZ3MsIGFuZCBub3QgaW5jbHVkZSBpdCBpbiB0aGUgdXNlZCBy
ZWdpc3RlcnMgc2luY2UgaXQgd2lsbCBiZSBjaGFuZ2VkLgorICAgIFJlZ2lzdGVyU2V0IHJlZ2lz
dGVyc1RvU3BpbGxGb3JDQ2FsbDsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogcmVncykgeworICAg
ICAgICBET01KSVQ6OlJlZyByZWcgPSB2YWx1ZS5yZWcoKTsKKyAgICAgICAgaWYgKHJlZy5pc0pT
VmFsdWVSZWdzKCkpCisgICAgICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJl
Zy5qc1ZhbHVlUmVncygpKTsKKyAgICAgICAgZWxzZSBpZiAocmVnLmlzR1BSKCkpCisgICAgICAg
ICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZy5ncHIoKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVnLmZwcigpKTsK
KyAgICB9CisgICAgZm9yIChHUFJSZWcgcmVnIDogZ3BTY3JhdGNoKQorICAgICAgICByZWdpc3Rl
cnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7CisgICAgZm9yIChGUFJSZWcgcmVnIDogZnBTY3Jh
dGNoKQorICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7CisgICAgcmVn
aXN0ZXJzVG9TcGlsbEZvckNDYWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90
U2F2ZUZvckNDYWxsKCkpOworICAgIAorICAgIERPTUpJVEFjY2Vzc0Nhc2VQYXRjaHBvaW50UGFy
YW1zIHBhcmFtcyhXVEZNb3ZlKHJlZ3MpLCBXVEZNb3ZlKGdwU2NyYXRjaCksIFdURk1vdmUoZnBT
Y3JhdGNoKSk7CisgICAgcGF0Y2hwb2ludC0+Z2VuZXJhdG9yKCktPnJ1bihqaXQsIHBhcmFtcyk7
CisgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVz
ZXJ2ZWRTdGF0ZSk7CisgICAgc3RhdGUuc3VjY2VlZCgpOworICAgIAorICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3QgZXhjZXB0aW9ucyA9IHBhcmFtcy5lbWl0U2xvd1BhdGhDYWxscyhzdGF0ZSwg
cmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLCBqaXQpOworICAgIGlmICghZXhjZXB0aW9ucy5lbXB0
eSgpKSB7CisgICAgICAgIGV4Y2VwdGlvbnMubGluaygmaml0KTsKKyAgICAgICAgYWxsb2NhdG9y
LnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7Cisg
ICAgICAgIHN0YXRlLmVtaXRFeHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIoKTsKKyAgICB9Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5ZTFhZGY5NzUyNGM1MzE3NjY3YTA4MDM2
Y2JlNTc2NGU3MzJkMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5oCkBAIC0wLDAgKzEsMjMyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
SklUKQorCisjaW5jbHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKKyNpbmNsdWRlICJPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZTsKKworLy8gQW4gQWNjZXNzQ2FzZSBkZXNjcmliZXMgb25lIG9mIHRo
ZSBjYXNlcyBvZiBhIFBvbHltb3JwaGljQWNjZXNzLiBBIFBvbHltb3JwaGljQWNjZXNzIHJlcHJl
c2VudHMgYQorLy8gcGxhbm5lZCAodG8gZ2VuZXJhdGUgaW4gZnV0dXJlKSBvciBnZW5lcmF0ZWQg
c3R1YiBmb3Igc29tZSBpbmxpbmUgY2FjaGUuIFRoYXQgc3R1YiBjb250YWlucyBmYXN0CisvLyBw
YXRoIGNvZGUgZm9yIHNvbWUgZmluaXRlIG51bWJlciBvZiBmYXN0IGNhc2VzLCBlYWNoIGRlc2Ny
aWJlZCBieSBhbiBBY2Nlc3NDYXNlIG9iamVjdC4KKy8vCisvLyBBbiBBY2Nlc3NDYXNlIG9iamVj
dCBoYXMgYSBsaWZlY3ljbGUgdGhhdCBwcm9jZWVkcyB0aHJvdWdoIHNldmVyYWwgc3RhdGVzLiBO
b3RlIHRoYXQgdGhlIHN0YXRlcworLy8gb2YgQWNjZXNzQ2FzZSBoYXZlIGEgbG90IHRvIGRvIHdp
dGggdGhlIGdsb2JhbCBlZmZlY3QgZXBvY2ggKHdlJ2xsIHNheSBlcG9jaCBmb3Igc2hvcnQpLiBU
aGlzIGlzCisvLyBhIHNpbXBsZSB3YXkgb2YgcmVhc29uaW5nIGFib3V0IHRoZSBzdGF0ZSBvZiB0
aGUgc3lzdGVtIG91dHNpZGUgdGhpcyBBY2Nlc3NDYXNlLiBBbnkgb2JzZXJ2YWJsZQorLy8gZWZm
ZWN0IC0gbGlrZSBzdG9yaW5nIHRvIGEgcHJvcGVydHksIGNoYW5naW5nIGFuIG9iamVjdCdzIHN0
cnVjdHVyZSwgZXRjLiAtIGluY3JlbWVudHMgdGhlIGVwb2NoLgorLy8gVGhlIHN0YXRlcyBhcmU6
CisvLworLy8gUHJpbW9yZGlhbDogICBUaGlzIGlzIGFuIEFjY2Vzc0Nhc2UgdGhhdCB3YXMganVz
dCBhbGxvY2F0ZWQuIEl0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYW55IGFjdHVhbAorLy8gICAg
ICAgICAgICAgICBjb2RlIGFuZCBpdCBpcyBub3Qgb3duZWQgYnkgYW55IFBvbHltb3JwaGljQWNj
ZXNzLiBJbiB0aGlzIHN0YXRlLCB0aGUgQWNjZXNzQ2FzZQorLy8gICAgICAgICAgICAgICBhc3N1
bWVzIHRoYXQgaXQgaXMgaW4gdGhlIHNhbWUgZXBvY2ggYXMgd2hlbiBpdCB3YXMgY3JlYXRlZC4g
VGhpcyBpcyBpbXBvcnRhbnQKKy8vICAgICAgICAgICAgICAgYmVjYXVzZSBpdCBtYXkgbWFrZSBj
bGFpbXMgYWJvdXQgaXRzZWxmICgiSSByZXByZXNlbnQgYSB2YWxpZCBjYXNlIHNvIGxvbmcgYXMg
eW91CisvLyAgICAgICAgICAgICAgIHJlZ2lzdGVyIGEgd2F0Y2hwb2ludCBvbiB0aGlzIHNldCIp
IHRoYXQgY291bGQgYmUgY29udHJhZGljdGVkIGJ5IHNvbWUgb3V0c2lkZQorLy8gICAgICAgICAg
ICAgICBlZmZlY3RzIChsaWtlIGZpcmluZyBhbmQgZGVsZXRpbmcgdGhlIHdhdGNocG9pbnQgc2V0
IGluIHF1ZXN0aW9uKS4gVGhpcyBpcyBhbHNvIHRoZQorLy8gICAgICAgICAgICAgICBzdGF0ZSB0
aGF0IGFuIEFjY2Vzc0Nhc2UgaXMgaW4gd2hlbiBpdCBpcyBjbG9uZWQgKEFjY2Vzc0Nhc2U6OmNs
b25lKCkpLgorLy8KKy8vIENvbW1pdHRlZDogICAgVGhpcyBoYXBwZW5zIGFzIHNvb24gYXMgc29t
ZSBQb2x5bW9ycGhpY0FjY2VzcyB0YWtlcyBvd25lcnNoaXAgb2YgdGhpcyBBY2Nlc3NDYXNlLgor
Ly8gICAgICAgICAgICAgICBJbiB0aGlzIHN0YXRlLCB0aGUgQWNjZXNzQ2FzZSBubyBsb25nZXIg
YXNzdW1lcyBhbnl0aGluZyBhYm91dCB0aGUgZXBvY2guIFRvCisvLyAgICAgICAgICAgICAgIGFj
Y29tcGxpc2ggdGhpcywgUG9seW1vcnBoaWNBY2Nlc3MgY2FsbHMgQWNjZXNzQ2FzZTo6Y29tbWl0
KCkuIFRoaXMgbXVzdCBiZSBkb25lCisvLyAgICAgICAgICAgICAgIGR1cmluZyB0aGUgc2FtZSBl
cG9jaCB3aGVuIHRoZSBBY2Nlc3NDYXNlIHdhcyBjcmVhdGVkLCBlaXRoZXIgYnkgdGhlIGNsaWVu
dCBvciBieQorLy8gICAgICAgICAgICAgICBjbG9uZSgpLiBXaGVuIGNyZWF0ZWQgYnkgdGhlIGNs
aWVudCwgY29tbWl0dGluZyBkdXJpbmcgdGhlIHNhbWUgZXBvY2ggd29ya3MgYmVjYXVzZQorLy8g
ICAgICAgICAgICAgICB3ZSBjYW4gYmUgc3VyZSB0aGF0IHdoYXRldmVyIHdhdGNocG9pbnQgc2V0
cyB0aGV5IHNwb2tlIG9mIGFyZSBzdGlsbCB2YWxpZC4gV2hlbgorLy8gICAgICAgICAgICAgICBj
cmVhdGVkIGJ5IGNsb25lKCksIHdlIGNhbiBiZSBzdXJlIHRoYXQgdGhlIHNldCBpcyBzdGlsbCB2
YWxpZCBiZWNhdXNlIHRoZSBvcmlnaW5hbAorLy8gICAgICAgICAgICAgICBvZiB0aGUgY2xvbmUg
c3RpbGwgaGFzIHdhdGNocG9pbnRzIG9uIGl0LgorLy8KKy8vIEdlbmVyYXRlZDogICAgVGhpcyBp
cyB0aGUgc3RhdGUgd2hlbiB0aGUgUG9seW1vcnBoaWNBY2Nlc3MgZ2VuZXJhdGVzIGNvZGUgZm9y
IHRoaXMgY2FzZSBieQorLy8gICAgICAgICAgICAgICBjYWxsaW5nIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlKCkgb3IgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoKS4gQXQgdGhpcyBwb2ludAor
Ly8gICAgICAgICAgICAgICB0aGUgY2FzZSBvYmplY3Qgd2lsbCBoYXZlIHNvbWUgZXh0cmEgc3R1
ZmYgaW4gaXQsIGxpa2UgcG9zc2libHkgdGhlIENhbGxMaW5rSW5mbworLy8gICAgICAgICAgICAg
ICBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmxpbmUgY2FjaGUuCisvLyAgICAgICAgICAg
ICAgIEZJWE1FOiBNb3ZpbmcgaW50byB0aGUgR2VuZXJhdGVkIHN0YXRlIHNob3VsZCBub3QgbXV0
YXRlIHRoZSBBY2Nlc3NDYXNlIG9iamVjdCBvcgorLy8gICAgICAgICAgICAgICBwdXQgbW9yZSBz
dHVmZiBpbnRvIGl0LiBJZiB3ZSBmaXggdGhpcywgdGhlbiB3ZSBjYW4gZ2V0IHJpZCBvZiBBY2Nl
c3NDYXNlOjpjbG9uZSgpLgorLy8gICAgICAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NDU2CisvLworLy8gQW4gQWNjZXNzQ2FzZSBtYXkgYmUgZGVz
dHJveWVkIHdoaWxlIGluIGFueSBvZiB0aGVzZSBzdGF0ZXMuCisvLworLy8gV2Ugd2lsbCBzb21l
dGltZXMgYnVmZmVyIGNvbW1pdHRlZCBBY2Nlc3NDYXNlcyBpbiB0aGUgUG9seW1vcnBoaWNBY2Nl
c3Mgb2JqZWN0IGJlZm9yZSBnZW5lcmF0aW5nCisvLyBjb2RlLiBUaGlzIGFsbG93cyB1cyB0byBv
bmx5IHJlZ2VuZXJhdGUgb25jZSB3ZSd2ZSBhY2N1bXVsYXRlZCAoaG9wZWZ1bGx5KSBtb3JlIHRo
YW4gb25lIG5ldworLy8gQWNjZXNzQ2FzZS4KK2NsYXNzIEFjY2Vzc0Nhc2UgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGVudW0gQWNjZXNzVHlwZSA6IHVpbnQ4
X3QgeworICAgICAgICBMb2FkLAorICAgICAgICBUcmFuc2l0aW9uLAorICAgICAgICBSZXBsYWNl
LAorICAgICAgICBNaXNzLAorICAgICAgICBHZXRHZXR0ZXIsCisgICAgICAgIEdldHRlciwKKyAg
ICAgICAgU2V0dGVyLAorICAgICAgICBDdXN0b21WYWx1ZUdldHRlciwKKyAgICAgICAgQ3VzdG9t
QWNjZXNzb3JHZXR0ZXIsCisgICAgICAgIEN1c3RvbVZhbHVlU2V0dGVyLAorICAgICAgICBDdXN0
b21BY2Nlc3NvclNldHRlciwKKyAgICAgICAgSW50cmluc2ljR2V0dGVyLAorICAgICAgICBJbkhp
dCwKKyAgICAgICAgSW5NaXNzLAorICAgICAgICBBcnJheUxlbmd0aCwKKyAgICAgICAgU3RyaW5n
TGVuZ3RoLAorICAgICAgICBEaXJlY3RBcmd1bWVudHNMZW5ndGgsCisgICAgICAgIFNjb3BlZEFy
Z3VtZW50c0xlbmd0aAorICAgIH07CisKKyAgICBlbnVtIFN0YXRlIDogdWludDhfdCB7CisgICAg
ICAgIFByaW1vcmRpYWwsCisgICAgICAgIENvbW1pdHRlZCwKKyAgICAgICAgR2VuZXJhdGVkCisg
ICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCYgYXMoKSB7IHJldHVybiAq
c3RhdGljX2Nhc3Q8VCo+KHRoaXMpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IGNvbnN0IFQmIGFzKCkgY29uc3QgeyByZXR1cm4gKnN0YXRpY19jYXN0PGNvbnN0IFQqPih0aGlz
KTsgfQorCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBY2Nlc3NDYXNlVHlwZSwgdHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZVR5cGU+
IGNyZWF0ZShBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlVHlwZT4obmV3IEFjY2Vzc0Nhc2VUeXBlKGFyZ3VtZW50
cy4uLikpOworICAgIH0KKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
Y3JlYXRlKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQgPSBp
bnZhbGlkT2Zmc2V0LAorICAgICAgICBTdHJ1Y3R1cmUqID0gbnVsbHB0ciwgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CisK
KyAgICAvLyBUaGlzIGNyZWF0ZSBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgZm9yIHRyYW5zaXRpb25z
LgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlND
ZWxsKiBvd25lciwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAorICAg
ICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7CisKKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhWTSYsIEpTQ2Vs
bCogb3duZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7CisKKyAgICBBY2Nlc3NUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGU7IH0KKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X29mZnNldDsgfQorCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKG1fdHlwZSA9PSBUcmFuc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuIG1fc3Ry
dWN0dXJlLT5wcmV2aW91c0lEKCk7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsK
KyAgICB9CisgICAgYm9vbCBndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpIGNvbnN0OworCisgICAg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
dHlwZSA9PSBUcmFuc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOwor
ICAgIH0KKworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9CisKKyAgICB2aXJ0dWFsIEpTT2JqZWN0KiBh
bHRlcm5hdGVCYXNlKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9uU2V0KCkuc2xvdEJhc2VDb25k
aXRpb24oKS5vYmplY3QoKTsgfQorICAgIHZpcnR1YWwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25h
bFNldCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlhUHJv
eHkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgLy8gSWYgeW91IHN1cHBseSB0aGUg
b3B0aW9uYWwgdmVjdG9yLCB0aGlzIHdpbGwgYXBwZW5kIHRoZSBzZXQgb2YgY2VsbHMgdGhhdCB0
aGlzIHdpbGwgbmVlZCB0byBrZWVwIGFsaXZlCisgICAgLy8gcGFzdCB0aGUgY2FsbC4KKyAgICBi
b29sIGRvZXNDYWxscyhWZWN0b3I8SlNDZWxsKj4qIGNlbGxzVG9NYXJrID0gbnVsbHB0cikgY29u
c3Q7CisKKyAgICBib29sIGlzR2V0dGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
dHlwZSgpKSB7CisgICAgICAgIGNhc2UgR2V0dGVyOgorICAgICAgICBjYXNlIEN1c3RvbVZhbHVl
R2V0dGVyOgorICAgICAgICBjYXNlIEN1c3RvbUFjY2Vzc29yR2V0dGVyOgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGlzQWNjZXNzb3IoKSBjb25zdCB7IHJldHVy
biBpc0dldHRlcigpIHx8IHR5cGUoKSA9PSBTZXR0ZXI7IH0KKworICAgIC8vIElzIGl0IHN0aWxs
IHBvc3NpYmxlIGZvciB0aGlzIGNhc2UgdG8gZXZlciBiZSB0YWtlbj8gTXVzdCBjYWxsIHRoaXMg
YXMgYSBwcmVyZXF1aXNpdGUgZm9yCisgICAgLy8gY2FsbGluZyBnZW5lcmF0ZSgpIGFuZCBmcmll
bmRzLiBJZiB0aGlzIHJldHVybnMgdHJ1ZSwgdGhlbiB5b3UgY2FuIGNhbGwgZ2VuZXJhdGUoKS4g
SWYKKyAgICAvLyB0aGlzIHJldHVybnMgZmFsc2UsIHRoZW4gZ2VuZXJhdGUoKSB3aWxsIGNyYXNo
LiBZb3UgbXVzdCBjYWxsIGdlbmVyYXRlKCkgaW4gdGhlIHNhbWUgZXBvY2gKKyAgICAvLyBhcyB3
aGVuIHlvdSBjYWxsZWQgY291bGRTdGlsbFN1Y2NlZWQoKS4KKyAgICBib29sIGNvdWxkU3RpbGxT
dWNjZWVkKCkgY29uc3Q7CisKKyAgICAvLyBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIHRydWUsIHRo
ZW4gaXQncyBhIGdvb2QgaWRlYSB0byByZW1vdmUgJ290aGVyJyBmcm9tIHRoZSBhY2Nlc3Mgb25j
ZSAndGhpcycKKyAgICAvLyBpcyBhZGRlZC4gVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0IGluIGNh
c2Ugb2YgY29udHJhZGljdGlvbnMsICd0aGlzJyByZXByZXNlbnRzIGEgbmV3ZXIsIGFuZCBzbwor
ICAgIC8vIG1vcmUgdXNlZnVsLCB0cnV0aC4gVGhpcyBtZXRob2QgY2FuIGJlIGNvbnNlcnZhdGl2
ZTsgaXQgd2lsbCByZXR1cm4gZmFsc2Ugd2hlbiBpdCBkb3VidC4KKyAgICBib29sIGNhblJlcGxh
Y2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpIGNvbnN0OworCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkdW1wSW1wbChQcmludFN0cmVh
bSYsIENvbW1hUHJpbnRlciYpIGNvbnN0IHsgfQorCisgICAgdmlydHVhbCB+QWNjZXNzQ2FzZSgp
OworCitwcm90ZWN0ZWQ6CisgICAgQWNjZXNzQ2FzZShWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vz
c1R5cGUsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYpOworICAgIEFjY2Vzc0Nhc2UoY29uc3QgQWNjZXNzQ2FzZSYpID0gZGVmYXVs
dDsKKyAgICBBY2Nlc3NDYXNlJiBvcGVyYXRvcj0oY29uc3QgQWNjZXNzQ2FzZSYpID0gZGVsZXRl
OworICAgIHZvaWQgcmVzZXRTdGF0ZSgpIHsgbV9zdGF0ZSA9IFByaW1vcmRpYWw7IH0KKworcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOworICAgIGZyaWVuZCBjbGFzcyBQb2x5
bW9ycGhpY0FjY2VzczsKKworICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7CisgICAgYm9v
bCBwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpIGNvbnN0OworCisgICAgLy8gRklY
TUU6IFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBvZiBob3cgQWNjZXNzQ2FzZSBwdXRzIHBvc3Qt
Z2VuZXJhdGlvbiB0aGluZ3MgaW50byBpdHNlbGYuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ1NgorICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IGNsb25lKCkgY29uc3Q7CisKKyAgICAvLyBQZXJmb3JtIGFueSBhY3Rpb24g
dGhhdCBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgZXBvY2ggaW4gd2hp
Y2ggdGhlIGNhc2UKKyAgICAvLyB3YXMgY3JlYXRlZC4gUmV0dXJucyBhIHNldCBvZiB3YXRjaHBv
aW50IHNldHMgdGhhdCB3aWxsIG5lZWQgdG8gYmUgd2F0Y2hlZC4KKyAgICBWZWN0b3I8V2F0Y2hw
b2ludFNldCosIDI+IGNvbW1pdChWTSYsIGNvbnN0IElkZW50aWZpZXImKTsKKworICAgIC8vIEZh
bGwgdGhyb3VnaCBvbiBzdWNjZXNzLiBUd28ga2luZHMgb2YgZmFpbHVyZXMgYXJlIHN1cHBvcnRl
ZDogZmFsbC10aHJvdWdoLCB3aGljaCBtZWFucyB0aGF0IHdlCisgICAgLy8gc2hvdWxkIHRyeSBh
IGRpZmZlcmVudCBjYXNlOyBhbmQgZmFpbHVyZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIHdhcyB0
aGUgcmlnaHQgY2FzZSBidXQgaXQgbmVlZHMKKyAgICAvLyBoZWxwIGZyb20gdGhlIHNsb3cgcGF0
aC4KKyAgICB2b2lkIGdlbmVyYXRlV2l0aEd1YXJkKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gpOworCisgICAgLy8gRmFsbCB0aHJv
dWdoIG9uIHN1Y2Nlc3MsIGFkZCBhIGp1bXAgdG8gdGhlIGZhaWx1cmUgbGlzdCBvbiBmYWlsdXJl
LgorICAgIHZvaWQgZ2VuZXJhdGUoQWNjZXNzR2VuZXJhdGlvblN0YXRlJik7CisKKyAgICB2b2lk
IGdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmKTsKKworICAgIEFjY2Vzc1R5cGUg
bV90eXBlOworICAgIFN0YXRlIG1fc3RhdGUgeyBQcmltb3JkaWFsIH07CisgICAgUHJvcGVydHlP
ZmZzZXQgbV9vZmZzZXQ7CisKKyAgICAvLyBVc3VhbGx5IHRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0
aGF0IHdlIGV4cGVjdCB0aGUgYmFzZSBvYmplY3QgdG8gaGF2ZS4gQnV0LCB0aGlzIGlzIHRoZSAq
bmV3KgorICAgIC8vIHN0cnVjdHVyZSBmb3IgYSB0cmFuc2l0aW9uIGFuZCB3ZSByZWx5IG9uIHRo
ZSBmYWN0IHRoYXQgaXQgaGFzIGEgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGUgb2xkCisgICAgLy8g
c3RydWN0dXJlLiBGb3IgcHJveGllcywgdGhpcyBpcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBvYmpl
Y3QgYmVoaW5kIHRoZSBwcm94eS4KKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVj
dHVyZTsKKworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCmluZGV4IGE2YzQ1OGNiNzNiZTU3NTJk
OThkMjU1YjM3Yzk5ZDVhZWI0MjMzN2QuLjIwZTM3OTVjZTllMTJkMzU1N2MxN2ZlMmYzM2M0MjYw
YzMzMzlmM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkU3RhdHVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHAKQEAgLTI2LDggKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiR2V0QnlJZFN0YXR1cy5oIgogCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2Fz
ZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbXBsZXhHZXRTdGF0dXMu
aCIKKyNpbmNsdWRlICJJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTU2NvcGUuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIK
QEAgLTIzMSwxOSArMjMzLDE5IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OkludHJpbnNpY0dldHRlcjogewotICAgICAgICAgICAgICAgICAgICBpbnRyaW5zaWNGdW5j
dGlvbiA9IGFjY2Vzcy5pbnRyaW5zaWNGdW5jdGlvbigpOworICAgICAgICAgICAgICAgICAgICBp
bnRyaW5zaWNGdW5jdGlvbiA9IGFjY2Vzcy5hczxJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlPigp
LmludHJpbnNpY0Z1bmN0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkdldHRlcjogewog
ICAgICAgICAgICAgICAgICAgICBjYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2Fs
bExpbmtTdGF0dXM+KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbyA9IGFjY2Vzcy5jYWxsTGlua0luZm8oKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBhY2Nlc3MuYXM8R2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
KmNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBj
YWxsRXhpdFNpdGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBBY2Nl
c3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlcjogewotICAgICAgICAgICAgICAgICAgICBkb21K
SVQgPSBhY2Nlc3MuZG9tSklUKCk7CisgICAgICAgICAgICAgICAgICAgIGRvbUpJVCA9IGFjY2Vz
cy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmRvbUpJVCgpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoIWRvbUpJVCkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlk
U3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQu
bV9zdGF0ZSA9IEN1c3RvbTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXR0ZXJTZXR0ZXJ0ZXJBY2Nlc3NDYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0dGVyU2V0dGVydGVyQWNjZXNzQ2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2MTkyZGFj
MjQyYWZmNTIzMGNlM2Y2YjU1MzQxZDIzM2Q0ZjdlOGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVydGVyQWNjZXNzQ2FzZS5oCkBA
IC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJQcm94eWFi
bGVBY2Nlc3NDYXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlIDogcHVibGljIFByb3h5YWJsZUFjY2Vzc0Nhc2UgeworcHVibGljOgorICAgIHR5
cGVkZWYgUHJveHlhYmxlQWNjZXNzQ2FzZSBCYXNlOworICAgIGZyaWVuZCBjbGFzcyBBY2Nlc3ND
YXNlOworCisgICAgLy8gVGhpcyBjYW4gcmV0dXJuIG51bGwgaWYgaXQgaGFzbid0IGJlZW4gZ2Vu
ZXJhdGVkIHlldC4gVGhhdCdzCisgICAgLy8gYWN0dWFsbHkgc29tZXdoYXQgbGlrZWx5IGJlY2F1
c2Ugb2YgaG93IHdlIGRvIGJ1ZmZlcmluZyBvZiBuZXcgY2FzZXMuCisgICAgQ2FsbExpbmtJbmZv
KiBjYWxsTGlua0luZm8oKSBjb25zdCB7IHJldHVybiBtX2NhbGxMaW5rSW5mby5nZXQoKTsgfQor
ICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tU2xv
dEJhc2UuZ2V0KCk7IH0KKyAgICBET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUKCkgY29uc3Qg
eyByZXR1cm4gbV9kb21KSVQ7IH0KKworICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGVtaXRET01KSVRHZXR0ZXIoQWNjZXNzR2VuZXJhdGlv
blN0YXRlJiwgR1BSUmVnIGJhc2VGb3JHZXRHUFIpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNj
ZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosCisgICAgICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCisg
ICAgICAgIGJvb2wgdmlhUHJveHkgPSBmYWxzZSwKKyAgICAgICAgV2F0Y2hwb2ludFNldCogYWRk
aXRpb25hbFNldCA9IG51bGxwdHIsCisgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
ID0gbnVsbHB0ciwKKyAgICAgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlID0gbnVsbHB0ciwK
KyAgICAgICAgRE9NSklUOjpHZXR0ZXJTZXR0ZXIqID0gbnVsbHB0cik7CisKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCogb3duZXIsIEFj
Y2Vzc1R5cGUsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0LAorICAgICAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jID0g
bnVsbHB0ciwKKyAgICAgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlID0gbnVsbHB0cik7CisK
KyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJiwgQ29tbWFQcmludGVyJikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNsb25lKCkgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICB+R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSgpOworCitwcml2YXRlOgorICAg
IEdldHRlclNldHRlckFjY2Vzc0Nhc2UoVk0mLCBKU0NlbGwqLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0
eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBi
b29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBKU09iamVjdCogY3Vz
dG9tU2xvdEJhc2UpOworCisgICAgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZShjb25zdCBHZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlJik7CisKKyAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fY3VzdG9t
U2xvdEJhc2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0lu
Zm87CisgICAgdW5pb24geworICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBz
ZXR0ZXI7CisgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRlcjsKKyAgICAg
ICAgdm9pZCogb3BhcXVlOworICAgIH0gbV9jdXN0b21BY2Nlc3NvcjsKKyAgICBET01KSVQ6Okdl
dHRlclNldHRlciogbV9kb21KSVQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0ludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDIxYzE4ZTZk
YjBmMWRiNWYyYjNkMTRmMmE0ZGY1NzA1OWE2ZGZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaApAQCAt
MCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQWNjZXNzQ2Fz
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSW50cmluc2ljR2V0dGVyQWNjZXNzQ2Fz
ZSA6IHB1YmxpYyBBY2Nlc3NDYXNlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEFjY2Vzc0Nhc2Ug
QmFzZTsKKyAgICBmcmllbmQgY2xhc3MgQWNjZXNzQ2FzZTsKKworICAgIEpTRnVuY3Rpb24qIGlu
dHJpbnNpY0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbnRyaW5zaWNGdW5jdGlvbi5nZXQo
KTsgfQorICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25zdCB7IHJldHVybiBtX2ludHJpbnNp
Y0Z1bmN0aW9uLT5pbnRyaW5zaWMoKTsgfQorCisgICAgc3RhdGljIGJvb2wgY2FuRW1pdEludHJp
bnNpY0dldHRlcihKU0Z1bmN0aW9uKiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBlbWl0SW50cmlu
c2ljR2V0dGVyKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYpOworCisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwqLCBQcm9wZXJ0eU9mZnNldCwg
U3RydWN0dXJlKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBKU0Z1bmN0aW9u
KiBpbnRyaW5zaWNGdW5jdGlvbik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
Y2xvbmUoKSBjb25zdCBvdmVycmlkZTsKKworICAgIH5JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNl
KCk7CisKK3ByaXZhdGU6CisgICAgSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZShWTSYsIEpTQ2Vs
bCosIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYsIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uKTsKKworICAgIFdyaXRlQmFy
cmllcjxKU0Z1bmN0aW9uPiBtX2ludHJpbnNpY0Z1bmN0aW9uOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKaW5kZXggM2NkMTk4NGY4ZGQ2
N2ZlNzdkYTI3YjhlN2ZjODg3MWJmYmM0NGZmOC4uMGNlYzAyNjI3MDdmOTRlODFmZTU3MDU5Yzhj
MGZjZTZlZWU5ZDg5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCkBAIC0zMSwxNiArMzEsMTAgQEAKICNpbmNsdWRlICJC
aW5hcnlTd2l0Y2guaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKLSNpbmNsdWRlICJET01KSVRBY2Nlc3NDYXNlUGF0Y2hwb2ludFBhcmFtcy5oIgot
I2luY2x1ZGUgIkRPTUpJVENhbGxET01HZXR0ZXJQYXRjaHBvaW50LmgiCi0jaW5jbHVkZSAiRGly
ZWN0QXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSGVh
cC5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgot
I2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5o
IgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KQEAgLTIxMCwxMzU4ICsyMDQsNiBAQCB2
b2lkIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6ZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcigp
CiAgICAgfQogfQogCi1BY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKCkKLXsKLX0KLQotc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnRyeUdldCgKLSAgICBWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29u
ZGl0aW9uU2V0LCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0KQot
ewotICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2Uo
KSk7Ci0KLSAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7Ci0gICAgcmVzdWx0LT5tX29mZnNldCA9
IG9mZnNldDsKLSAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVy
ZSk7Ci0gICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLQotICAgIGlm
ICh2aWFQcm94eSB8fCBhZGRpdGlvbmFsU2V0KSB7Ci0gICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0
YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7Ci0gICAgICAgIHJlc3VsdC0+bV9yYXJl
RGF0YS0+dmlhUHJveHkgPSB2aWFQcm94eTsKLSAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5h
ZGRpdGlvbmFsU2V0ID0gYWRkaXRpb25hbFNldDsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Z2V0KAotICAg
IFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFk
ZGl0aW9uYWxTZXQsCi0gICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgY3VzdG9tR2V0dGVy
LCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UsIERPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVQp
Ci17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2Fz
ZSgpKTsKLQotICAgIHJlc3VsdC0+bV90eXBlID0gdHlwZTsKLSAgICByZXN1bHQtPm1fb2Zmc2V0
ID0gb2Zmc2V0OwotICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0
dXJlKTsKLSAgICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotCi0gICAg
aWYgKHZpYVByb3h5IHx8IGFkZGl0aW9uYWxTZXQgfHwgcmVzdWx0LT5kb2VzQ2FsbHMoKSB8fCBj
dXN0b21HZXR0ZXIgfHwgY3VzdG9tU2xvdEJhc2UgfHwgZG9tSklUKSB7Ci0gICAgICAgIHJlc3Vs
dC0+bV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7Ci0gICAgICAgIHJl
c3VsdC0+bV9yYXJlRGF0YS0+dmlhUHJveHkgPSB2aWFQcm94eTsKLSAgICAgICAgcmVzdWx0LT5t
X3JhcmVEYXRhLT5hZGRpdGlvbmFsU2V0ID0gYWRkaXRpb25hbFNldDsKLSAgICAgICAgcmVzdWx0
LT5tX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5nZXR0ZXIgPSBjdXN0b21HZXR0ZXI7Ci0gICAg
ICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9tU2xvdEJhc2Uuc2V0TWF5QmVOdWxsKHZtLCBv
d25lciwgY3VzdG9tU2xvdEJhc2UpOwotICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmRvbUpJ
VCA9IGRvbUpJVDsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6bWVnYW1vcnBoaWNMb2FkKFZNJiB2bSwgSlND
ZWxsKiBvd25lcikKLXsKLSAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIFVOVVNFRF9QQVJBTShv
d25lcik7Ci0gICAgCi0gICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgOSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKLSAgICAKLSAgICByZXN1bHQtPm1fdHlwZSA9
IE1lZ2Ftb3JwaGljTG9hZDsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6cmVwbGFjZSgKLSAgICBWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
Ci17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2Fz
ZSgpKTsKLQotICAgIHJlc3VsdC0+bV90eXBlID0gUmVwbGFjZTsKLSAgICByZXN1bHQtPm1fb2Zm
c2V0ID0gb2Zmc2V0OwotICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3Ry
dWN0dXJlKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxBY2Nl
c3NDYXNlPiBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChvbGRTdHJ1Y3R1cmUgPT0gbmV3
U3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOwotCi0gICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBj
YXNlIHdoZXJlIHdlIG5lZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCi0gICAgLy8gZW5v
dWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KLSAgICBpZiAoR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnMgPCA2Ci0gICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAhPSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgJiYgb2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFj
Y2Vzc0Nhc2UoKSk7Ci0KLSAgICByZXN1bHQtPm1fdHlwZSA9IFRyYW5zaXRpb247Ci0gICAgcmVz
dWx0LT5tX29mZnNldCA9IG9mZnNldDsKLSAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwg
b3duZXIsIG5ld1N0cnVjdHVyZSk7Ci0gICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRp
dGlvblNldDsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxBY2Nl
c3NDYXNlPiBBY2Nlc3NDYXNlOjpzZXR0ZXIoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBB
Y2Nlc3NUeXBlIHR5cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwg
UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAotICAgIEpTT2JqZWN0
KiBjdXN0b21TbG90QmFzZSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVz
dWx0KG5ldyBBY2Nlc3NDYXNlKCkpOwotCi0gICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAg
IHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQo
dm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25k
aXRpb25TZXQ7Ci0gICAgcmVzdWx0LT5tX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJl
RGF0YT4oKTsKLSAgICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbUFjY2Vzc29yLnNldHRlciA9
IGN1c3RvbVNldHRlcjsKLSAgICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlLnNl
dE1heUJlTnVsbCh2bSwgb3duZXIsIGN1c3RvbVNsb3RCYXNlKTsKLQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjppbigKLSAg
ICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNl
dCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3ND
YXNlKCkpOwotCi0gICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zdHJ1
Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICByZXN1bHQtPm1fY29uZGl0aW9u
U2V0ID0gY29uZGl0aW9uU2V0OwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmdldExlbmd0aChWTSYsIEpTQ2VsbCosIEFj
Y2Vzc1R5cGUgdHlwZSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0
KG5ldyBBY2Nlc3NDYXNlKCkpOwotCi0gICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nh
c2U6OmdldEludHJpbnNpYygKLSAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTRnVuY3Rpb24q
IGdldHRlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQotewotICAg
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7Ci0K
LSAgICByZXN1bHQtPm1fdHlwZSA9IEludHJpbnNpY0dldHRlcjsKLSAgICByZXN1bHQtPm1fc3Ry
dWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0LT5tX2NvbmRpdGlv
blNldCA9IGNvbmRpdGlvblNldDsKLSAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OwotCi0g
ICAgcmVzdWx0LT5tX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKLSAg
ICByZXN1bHQtPm1fcmFyZURhdGEtPmludHJpbnNpY0Z1bmN0aW9uLnNldCh2bSwgb3duZXIsIGdl
dHRlcik7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1BY2Nlc3NDYXNlOjp+QWNjZXNzQ2Fz
ZSgpCi17Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpmcm9t
U3RydWN0dXJlU3R1YkluZm8oCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5cGUpIHsK
LSAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6Ci0gICAgICAgIHJldHVybiBnZXQoCi0g
ICAgICAgICAgICB2bSwgb3duZXIsIExvYWQsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LAot
ICAgICAgICAgICAgc3R1YkluZm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgp
KTsKLQotICAgIGNhc2UgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKLSAgICAgICAgcmV0dXJu
IHJlcGxhY2UoCi0gICAgICAgICAgICB2bSwgb3duZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFz
ZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQpOwotCi0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfQotCi1zdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y2xvbmUoKSBjb25zdAotewotICAgIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7Ci0gICAg
cmVzdWx0LT5tX3R5cGUgPSBtX3R5cGU7Ci0gICAgcmVzdWx0LT5tX29mZnNldCA9IG1fb2Zmc2V0
OwotICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUgPSBtX3N0cnVjdHVyZTsKLSAgICByZXN1bHQtPm1f
Y29uZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQ7Ci0gICAgaWYgKFJhcmVEYXRhKiByYXJlRGF0
YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKLSAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhID0gc3Rk
OjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKLSAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT52
aWFQcm94eSA9IHJhcmVEYXRhLT52aWFQcm94eTsKLSAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRh
LT5hZGRpdGlvbmFsU2V0ID0gcmFyZURhdGEtPmFkZGl0aW9uYWxTZXQ7Ci0gICAgICAgIC8vIE5P
VEU6IFdlIGRvbid0IGNvcHkgdGhlIGNhbGxMaW5rSW5mbywgc2luY2UgdGhhdCdzIGNyZWF0ZWQg
ZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbi4KLSAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0
b21BY2Nlc3Nvci5vcGFxdWUgPSByYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iub3BhcXVlOwotICAg
ICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlID0gcmFyZURhdGEtPmN1c3Rv
bVNsb3RCYXNlOwotICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmludHJpbnNpY0Z1bmN0aW9u
ID0gcmFyZURhdGEtPmludHJpbnNpY0Z1bmN0aW9uOwotICAgICAgICByZXN1bHQtPm1fcmFyZURh
dGEtPmRvbUpJVCA9IHJhcmVEYXRhLT5kb21KSVQ7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLVZlY3RvcjxXYXRjaHBvaW50U2V0KiwgMj4gQWNjZXNzQ2FzZTo6Y29tbWl0KFZNJiB2
bSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCi17Ci0gICAgLy8gSXQncyBmaW5lIHRvIGNvbW1p
dCBzb21ldGhpbmcgdGhhdCBpcyBhbHJlYWR5IGNvbW1pdHRlZC4gVGhhdCBhcmlzZXMgd2hlbiB3
ZSBzd2l0Y2ggdG8gdXNpbmcKLSAgICAvLyBuZXdseSBhbGxvY2F0ZWQgd2F0Y2hwb2ludHMuIFdo
ZW4gaXQgaGFwcGVucywgaXQncyBub3QgZWZmaWNpZW50IC0gYnV0IHdlIHRoaW5rIHRoYXQncyBP
SwotICAgIC8vIGJlY2F1c2UgbW9zdCBBY2Nlc3NDYXNlcyBoYXZlIG5vIGV4dHJhIHdhdGNocG9p
bnRzIGFueXdheS4KLSAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09IFByaW1vcmRpYWwgfHwg
bV9zdGF0ZSA9PSBDb21taXR0ZWQpOwotICAgIAotICAgIFZlY3RvcjxXYXRjaHBvaW50U2V0Kiwg
Mj4gcmVzdWx0OwotICAgIAotICAgIGlmICgoc3RydWN0dXJlKCkgJiYgc3RydWN0dXJlKCktPm5l
ZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKLSAgICAgICAgfHwgbV9jb25kaXRpb25TZXQu
bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQotICAgICAgICByZXN1bHQuYXBwZW5kKHZt
LmVuc3VyZVdhdGNocG9pbnRTZXRGb3JJbXB1cmVQcm9wZXJ0eShpZGVudCkpOwotCi0gICAgaWYg
KGFkZGl0aW9uYWxTZXQoKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChhZGRpdGlvbmFsU2V0KCkp
OwotICAgIAotICAgIG1fc3RhdGUgPSBDb21taXR0ZWQ7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotYm9vbCBBY2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpIGNvbnN0
Ci17Ci0gICAgaWYgKHZpYVByb3h5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3
aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBNZWdhbW9ycGhpY0xvYWQ6Ci0gICAgY2FzZSBBcnJh
eUxlbmd0aDoKLSAgICBjYXNlIFN0cmluZ0xlbmd0aDoKLSAgICBjYXNlIERpcmVjdEFyZ3VtZW50
c0xlbmd0aDoKLSAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c0xlbmd0aDoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0KLQot
SlNPYmplY3QqIEFjY2Vzc0Nhc2U6OmFsdGVybmF0ZUJhc2UoKSBjb25zdAotewotICAgIGlmIChj
dXN0b21TbG90QmFzZSgpKQotICAgICAgICByZXR1cm4gY3VzdG9tU2xvdEJhc2UoKTsKLSAgICBy
ZXR1cm4gY29uZGl0aW9uU2V0KCkuc2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKTsKLX0KLQot
Ym9vbCBBY2Nlc3NDYXNlOjpkb2VzQ2FsbHMoVmVjdG9yPEpTQ2VsbCo+KiBjZWxsc1RvTWFyaykg
Y29uc3QKLXsKLSAgICBzd2l0Y2ggKHR5cGUoKSkgewotICAgIGNhc2UgR2V0dGVyOgotICAgIGNh
c2UgU2V0dGVyOgotICAgIGNhc2UgQ3VzdG9tVmFsdWVHZXR0ZXI6Ci0gICAgY2FzZSBDdXN0b21B
Y2Nlc3NvckdldHRlcjoKLSAgICBjYXNlIEN1c3RvbVZhbHVlU2V0dGVyOgotICAgIGNhc2UgQ3Vz
dG9tQWNjZXNzb3JTZXR0ZXI6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgVHJhbnNp
dGlvbjoKLSAgICAgICAgaWYgKG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9
IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpCi0gICAgICAgICAgICAmJiBzdHJ1Y3R1
cmUoKS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewotICAgICAgICAgICAgaWYgKGNlbGxz
VG9NYXJrKQotICAgICAgICAgICAgICAgIGNlbGxzVG9NYXJrLT5hcHBlbmQobmV3U3RydWN0dXJl
KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0K
LWJvb2wgQWNjZXNzQ2FzZTo6Y291bGRTdGlsbFN1Y2NlZWQoKSBjb25zdAotewotICAgIHJldHVy
biBtX2NvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgpOwotfQotCi1ib29sIEFjY2Vzc0Nhc2U6OmNhbkJlUmVwbGFjZWRC
eU1lZ2Ftb3JwaGljTG9hZCgpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSA9PSBNZWdhbW9ycGhp
Y0xvYWQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIHJldHVybiB0eXBlKCkgPT0g
TG9hZAotICAgICAgICAmJiAhdmlhUHJveHkoKQotICAgICAgICAmJiBjb25kaXRpb25TZXQoKS5p
c0VtcHR5KCkKLSAgICAgICAgJiYgIWFkZGl0aW9uYWxTZXQoKQotICAgICAgICAmJiAhY3VzdG9t
U2xvdEJhc2UoKTsKLX0KLQotYm9vbCBBY2Nlc3NDYXNlOjpjYW5SZXBsYWNlKGNvbnN0IEFjY2Vz
c0Nhc2UmIG90aGVyKSBjb25zdAotewotICAgIC8vIFRoaXMgcHV0cyBpbiBhIGdvb2QgZWZmb3J0
IHRvIHRyeSB0byBmaWd1cmUgb3V0IGlmICdvdGhlcicgaXMgbWFkZSBzdXBlcmZsdW91cyBieSAn
KnRoaXMnLgotICAgIC8vIEl0J3MgZmluZSBmb3IgdGhpcyB0byByZXR1cm4gZmFsc2UgaWYgaXQn
cyBpbiBkb3VidC4KLQotICAgIHN3aXRjaCAodHlwZSgpKSB7Ci0gICAgY2FzZSBNZWdhbW9ycGhp
Y0xvYWQ6Ci0gICAgICAgIHJldHVybiBvdGhlci5jYW5CZVJlcGxhY2VkQnlNZWdhbW9ycGhpY0xv
YWQoKTsKLSAgICBjYXNlIEFycmF5TGVuZ3RoOgotICAgIGNhc2UgU3RyaW5nTGVuZ3RoOgotICAg
IGNhc2UgRGlyZWN0QXJndW1lbnRzTGVuZ3RoOgotICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzTGVu
Z3RoOgotICAgICAgICByZXR1cm4gb3RoZXIudHlwZSgpID09IHR5cGUoKTsKLSAgICBkZWZhdWx0
OgotICAgICAgICBpZiAoIWd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgfHwgIW90aGVyLmd1YXJk
ZWRCeVN0cnVjdHVyZUNoZWNrKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IAotICAgICAgICByZXR1cm4gc3RydWN0dXJlKCkgPT0gb3RoZXIuc3RydWN0dXJlKCk7Ci0gICAg
fQotfQotCi12b2lkIEFjY2Vzc0Nhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsK
LSAgICBvdXQucHJpbnQobV90eXBlLCAiOigiKTsKLQotICAgIENvbW1hUHJpbnRlciBjb21tYTsK
LSAgICAKLSAgICBvdXQucHJpbnQoY29tbWEsIG1fc3RhdGUpOwotCi0gICAgaWYgKG1fdHlwZSA9
PSBUcmFuc2l0aW9uKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJzdHJ1Y3R1cmUgPSAiLCBw
b2ludGVyRHVtcChzdHJ1Y3R1cmUoKSksICIgLT4gIiwgcG9pbnRlckR1bXAobmV3U3RydWN0dXJl
KCkpKTsKLSAgICBlbHNlIGlmIChtX3N0cnVjdHVyZSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAic3RydWN0dXJlID0gIiwgcG9pbnRlckR1bXAobV9zdHJ1Y3R1cmUuZ2V0KCkpKTsKLQotICAg
IGlmIChpc1ZhbGlkT2Zmc2V0KG1fb2Zmc2V0KSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
b2Zmc2V0ID0gIiwgbV9vZmZzZXQpOwotICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgp
KQotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjb25kaXRpb25zID0gIiwgbV9jb25kaXRpb25T
ZXQpOwotCi0gICAgaWYgKFJhcmVEYXRhKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsK
LSAgICAgICAgaWYgKHJhcmVEYXRhLT52aWFQcm94eSkKLSAgICAgICAgICAgIG91dC5wcmludChj
b21tYSwgInZpYVByb3h5ID0gIiwgcmFyZURhdGEtPnZpYVByb3h5KTsKLSAgICAgICAgaWYgKHJh
cmVEYXRhLT5hZGRpdGlvbmFsU2V0KQotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiYWRk
aXRpb25hbFNldCA9ICIsIFJhd1BvaW50ZXIocmFyZURhdGEtPmFkZGl0aW9uYWxTZXQuZ2V0KCkp
KTsKLSAgICAgICAgaWYgKHJhcmVEYXRhLT5jYWxsTGlua0luZm8pCi0gICAgICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJjYWxsTGlua0luZm8gPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5jYWxs
TGlua0luZm8uZ2V0KCkpKTsKLSAgICAgICAgaWYgKHJhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5v
cGFxdWUpCi0gICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjdXN0b21BY2Nlc3NvciA9ICIs
IFJhd1BvaW50ZXIocmFyZURhdGEtPmN1c3RvbUFjY2Vzc29yLm9wYXF1ZSkpOwotICAgICAgICBp
ZiAocmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlKQotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiY3VzdG9tU2xvdEJhc2UgPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5jdXN0b21TbG90QmFz
ZS5nZXQoKSkpOwotICAgIH0KLQotICAgIG91dC5wcmludCgiKSIpOwotfQotCi1ib29sIEFjY2Vz
c0Nhc2U6OnZpc2l0V2VhayhWTSYgdm0pIGNvbnN0Ci17Ci0gICAgaWYgKG1fc3RydWN0dXJlICYm
ICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKG1fcmFyZURhdGEpIHsKLSAgICAgICAgaWYgKG1fcmFyZURhdGEt
PmNhbGxMaW5rSW5mbykKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+dmlz
aXRXZWFrKHZtKTsKLSAgICAgICAgaWYgKG1fcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlICYmICFI
ZWFwOjppc01hcmtlZChtX3JhcmVEYXRhLT5jdXN0b21TbG90QmFzZS5nZXQoKSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChtX3JhcmVEYXRhLT5pbnRyaW5zaWNGdW5j
dGlvbiAmJiAhSGVhcDo6aXNNYXJrZWQobV9yYXJlRGF0YS0+aW50cmluc2ljRnVuY3Rpb24uZ2V0
KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYg
dmlzaXRvcikgY29uc3QKLXsKLSAgICBib29sIHJlc3VsdCA9IHRydWU7Ci0gICAgCi0gICAgaWYg
KG1fc3RydWN0dXJlKQotICAgICAgICByZXN1bHQgJj0gbV9zdHJ1Y3R1cmUtPm1hcmtJZkNoZWFw
KHZpc2l0b3IpOwotICAgIAotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBUcmFuc2l0
aW9uOgotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkobV9zdHJ1Y3R1cmUt
PnByZXZpb3VzSUQoKSkpCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1f
c3RydWN0dXJlLmdldCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gZmFs
c2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRl
V2l0aEd1YXJkKAotICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIENDYWxsSGVscGVy
czo6SnVtcExpc3QmIGZhbGxUaHJvdWdoKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVy
U2FtcGxlclNjb3BlKGZhbHNlKTsKLQotICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUgPT0gQ29t
bWl0dGVkKTsKLSAgICBtX3N0YXRlID0gR2VuZXJhdGVkOwotICAgIAotICAgIENDYWxsSGVscGVy
cyYgaml0ID0gKnN0YXRlLmppdDsKLSAgICBWTSYgdm0gPSAqaml0LnZtKCk7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQgPSAqc3RhdGUuaWRlbnQ7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvID0gKnN0YXRlLnN0dWJJbmZvOwotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9
IHN0YXRlLnZhbHVlUmVnczsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRlLmJhc2VHUFI7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0ZS5zY3JhdGNoR1BSOwotICAgIAotICAgIFVOVVNF
RF9QQVJBTSh2bSk7Ci0KLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgQXJyYXlMZW5n
dGg6IHsKLSAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKLSAgICAgICAgaml0LmxvYWQ4KEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCi0gICAg
ICAgICAgICBqaXQuYnJhbmNoVGVzdDMyKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
WmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsK
LSAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAotICAgICAgICAgICAgaml0LmJyYW5jaFRlc3Qz
MigKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2hHUFIsIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSkpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBjYXNlIFN0cmluZ0xlbmd0aDogewotICAgICAgICBBU1NFUlQoIXZp
YVByb3h5KCkpOwotICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCi0gICAgICAgICAgICBqaXQu
YnJhbmNoOCgKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAotICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihTdHJpbmdUeXBlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAgIGNh
c2UgRGlyZWN0QXJndW1lbnRzTGVuZ3RoOiB7Ci0gICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7
Ci0gICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKLSAgICAgICAgICAgIGppdC5icmFuY2g4KAot
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKERpcmVjdEFy
Z3VtZW50c1R5cGUpKSk7Ci0KLSAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAotICAgICAgICAg
ICAgaml0LmJyYW5jaFRlc3RQdHIoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25a
ZXJvLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBEaXJl
Y3RBcmd1bWVudHM6Om9mZnNldE9mTWFwcGVkQXJndW1lbnRzKCkpKSk7Ci0gICAgICAgIGppdC5s
b2FkMzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgRGlyZWN0
QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSwKLSAgICAgICAgICAgIHZhbHVlUmVncy5wYXls
b2FkR1BSKCkpOwotICAgICAgICBqaXQuYm94SW50MzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwg
dmFsdWVSZWdzKTsKLSAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgICAgICAKLSAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c0xlbmd0aDogewotICAgICAg
ICBBU1NFUlQoIXZpYVByb3h5KCkpOwotICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCi0gICAg
ICAgICAgICBqaXQuYnJhbmNoOCgKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihTY29wZWRBcmd1bWVudHNUeXBlKSkpOwotCi0gICAgICAgIGZhbGxUaHJv
dWdoLmFwcGVuZCgKLSAgICAgICAgICAgIGppdC5icmFuY2hUZXN0OCgKLSAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VHUFIsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5ncygp
KSkpOwotICAgICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VHUFIsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUb3RhbExlbmd0aCgpKSwKLSAg
ICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwotICAgICAgICBqaXQuYm94SW50MzIo
dmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzKTsKLSAgICAgICAgc3RhdGUuc3VjY2Vl
ZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIE1lZ2Ftb3Jw
aGljTG9hZDogewotICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCoga2V5ID0gaWRlbnQuaW1wbCgp
OwotICAgICAgICB1bnNpZ25lZCBoYXNoID0gSWRlbnRpZmllclJlcEhhc2g6Omhhc2goa2V5KTsK
LSAgICAgICAgCi0gICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1
YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7Ci0gICAgICAgIGFsbG9jYXRvci5sb2NrKGJhc2VH
UFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGFsbG9jYXRvci5sb2NrKHN0YXRp
Y19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZVRhZ0dQUikpOwotI2VuZGlmCi0gICAg
ICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7Ci0gICAgICAgIGFsbG9jYXRvci5sb2NrKHNj
cmF0Y2hHUFIpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIGludGVybWVkaWF0ZUdQUiA9IHNj
cmF0Y2hHUFI7Ci0gICAgICAgIEdQUlJlZyBtYXNrR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOwotICAgICAgICBHUFJSZWcgbWFza2VkSGFzaEdQUiA9IGFsbG9jYXRvci5hbGxv
Y2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gYWxsb2NhdG9yLmFs
bG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSID0gYWxsb2NhdG9y
LmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICAKLSAgICAgICAgaWYgKHZlcmJvc2UpIHsK
LSAgICAgICAgICAgIGRhdGFMb2coImJhc2VHUFIgPSAiLCBiYXNlR1BSLCAiXG4iKTsKLSAgICAg
ICAgICAgIGRhdGFMb2coInZhbHVlUmVncyA9ICIsIHZhbHVlUmVncywgIlxuIik7Ci0gICAgICAg
ICAgICBkYXRhTG9nKCJzY3JhdGNoR1BSID0gIiwgc2NyYXRjaEdQUiwgIlxuIik7Ci0gICAgICAg
ICAgICBkYXRhTG9nKCJpbnRlcm1lZGlhdGVHUFIgPSAiLCBpbnRlcm1lZGlhdGVHUFIsICJcbiIp
OwotICAgICAgICAgICAgZGF0YUxvZygibWFza0dQUiA9ICIsIG1hc2tHUFIsICJcbiIpOwotICAg
ICAgICAgICAgZGF0YUxvZygibWFza2VkSGFzaEdQUiA9ICIsIG1hc2tlZEhhc2hHUFIsICJcbiIp
OwotICAgICAgICAgICAgZGF0YUxvZygiaW5kZXhHUFIgPSAiLCBpbmRleEdQUiwgIlxuIik7Ci0g
ICAgICAgICAgICBkYXRhTG9nKCJvZmZzZXRHUFIgPSAiLCBvZmZzZXRHUFIsICJcbiIpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0
ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRS
ZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3Rh
Y2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7Ci0KLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBteUZhaWxBbmRJZ25vcmU7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgbXlGYWxs
VGhyb3VnaDsKLSAgICAgICAgCi0gICAgICAgIGppdC5lbWl0TG9hZFN0cnVjdHVyZShiYXNlR1BS
LCBpbnRlcm1lZGlhdGVHUFIsIG1hc2tHUFIpOwotICAgICAgICBqaXQubG9hZFB0cigKLSAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhpbnRlcm1lZGlhdGVHUFIsIFN0cnVjdHVyZTo6
cHJvcGVydHlUYWJsZVVuc2FmZU9mZnNldCgpKSwKLSAgICAgICAgICAgIGludGVybWVkaWF0ZUdQ
Uik7Ci0gICAgICAgIAotICAgICAgICBteUZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hU
ZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgaW50ZXJtZWRpYXRlR1BSKSk7Ci0gICAgICAgIAot
ICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhpbnRlcm1lZGlhdGVHUFIs
IFByb3BlcnR5VGFibGU6Om9mZnNldE9mSW5kZXhNYXNrKCkpLCBtYXNrR1BSKTsKLSAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGludGVybWVkaWF0ZUdQUiwgUHJvcGVy
dHlUYWJsZTo6b2Zmc2V0T2ZJbmRleCgpKSwgaW5kZXhHUFIpOwotICAgICAgICBqaXQubG9hZDMy
KAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGludGVybWVkaWF0ZUdQUiwgUHJv
cGVydHlUYWJsZTo6b2Zmc2V0T2ZJbmRleFNpemUoKSksCi0gICAgICAgICAgICBpbnRlcm1lZGlh
dGVHUFIpOwotCi0gICAgICAgIGppdC5tb3ZlKG1hc2tHUFIsIG1hc2tlZEhhc2hHUFIpOwotICAg
ICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaGFzaCksIG1hc2tlZEhh
c2hHUFIpOwotICAgICAgICBqaXQubHNoaWZ0MzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
MiksIGludGVybWVkaWF0ZUdQUik7Ci0gICAgICAgIGppdC5hZGRQdHIoaW5kZXhHUFIsIGludGVy
bWVkaWF0ZUdQUik7Ci0gICAgICAgIAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGxvb3Ag
PSBqaXQubGFiZWwoKTsKLSAgICAgICAgCi0gICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJz
OjpCYXNlSW5kZXgoaW5kZXhHUFIsIG1hc2tlZEhhc2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNG
b3VyKSwgb2Zmc2V0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIG15RmFsbFRocm91Z2guYXBwZW5k
KAotICAgICAgICAgICAgaml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6RXF1YWwsCi0gICAgICAgICAgICAgICAgb2Zmc2V0R1BSLAotICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFByb3BlcnR5VGFibGU6OkVtcHR5RW50cnlJbmRleCkp
KTsKLSAgICAgICAgCi0gICAgICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MigxKSwgb2Zmc2V0R1BSKTsKLSAgICAgICAgaml0Lm11bDMyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKHNpemVvZihQcm9wZXJ0eU1hcEVudHJ5KSksIG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsK
LSAgICAgICAgaml0LmFkZFB0cihpbnRlcm1lZGlhdGVHUFIsIG9mZnNldEdQUik7Ci0gICAgICAg
IAotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY29sbGlzaW9uID0gIGppdC5icmFuY2hQdHIo
Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAotICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKG9mZnNldEdQUiwgT0JKRUNUX09GRlNFVE9GKFByb3BlcnR5TWFwRW50
cnksIGtleSkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGtleSkp
OwotICAgICAgICAKLSAgICAgICAgLy8gb2Zmc2V0R1BSIGN1cnJlbnRseSBob2xkcyBhIHBvaW50
ZXIgdG8gdGhlIFByb3BlcnR5TWFwRW50cnksIHdoaWNoIGhhcyB0aGUgb2Zmc2V0IGFuZCBhdHRy
aWJ1dGVzLgotICAgICAgICAvLyBDaGVjayB0aGVtIGFuZCB0aGVuIGF0dGVtcHQgdGhlIGxvYWQu
Ci0gICAgICAgIAotICAgICAgICBteUZhbGxUaHJvdWdoLmFwcGVuZCgKLSAgICAgICAgICAgIGpp
dC5icmFuY2hUZXN0MzIoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLAot
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhvZmZzZXRHUFIsIE9CSkVDVF9P
RkZTRVRPRihQcm9wZXJ0eU1hcEVudHJ5LCBhdHRyaWJ1dGVzKSksCi0gICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3NvcikpKTsK
LSAgICAgICAgCi0gICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9mZnNl
dEdQUiwgT0JKRUNUX09GRlNFVE9GKFByb3BlcnR5TWFwRW50cnksIG9mZnNldCkpLCBvZmZzZXRH
UFIpOwotICAgICAgICAKLSAgICAgICAgaml0LmxvYWRQcm9wZXJ0eShiYXNlR1BSLCBvZmZzZXRH
UFIsIHZhbHVlUmVncyk7Ci0gICAgICAgIAotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNl
ZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICAgICAgc3RhdGUu
c3VjY2VlZCgpOwotICAgICAgICAKLSAgICAgICAgY29sbGlzaW9uLmxpbmsoJmppdCk7Ci0KLSAg
ICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBtYXNrZWRIYXNo
R1BSKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBiZSBzbWFydGVyIGFi
b3V0IHRoaXMuIEN1cnJlbnRseSB3ZSdyZSBidXJuaW5nIGEgR1BSIGZvciB0aGUgbWFzay4gQnV0
IGxvb3BpbmcKLSAgICAgICAgLy8gYXJvdW5kIGlzbid0IHN1cGVyIGNvbW1vbiBzbyB3ZSBjb3Vs
ZCwgZm9yIGV4YW1wbGUsIHJlY29tcHV0ZSB0aGUgbWFzayBmcm9tIHRoZSBkaWZmZXJlbmNlIGJl
dHdlZW4KLSAgICAgICAgLy8gdGhlIHRhYmxlIGFuZCBpbmRleC4gQnV0IGJlZm9yZSB3ZSBkbyB0
aGF0IHdlIHNob3VsZCBwcm9iYWJseSBtYWtlIGl0IGVhc2llciB0byBtdWx0aXBseSBhbmQKLSAg
ICAgICAgLy8gZGl2aWRlIGJ5IHRoZSBzaXplIG9mIFByb3BlcnR5TWFwRW50cnkuIFRoYXQgcHJv
YmFibHkgaW52b2x2ZXMgbWFraW5nIFByb3BlcnR5TWFwRW50cnkgYmUgYXJyYW5nZWQKLSAgICAg
ICAgLy8gdG8gaGF2ZSBhIHBvd2VyLW9mLTIgc2l6ZS4KLSAgICAgICAgaml0LmFuZDMyKG1hc2tH
UFIsIG1hc2tlZEhhc2hHUFIpOwotICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmaml0
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkg
ewotICAgICAgICAgICAgbXlGYWlsQW5kSWdub3JlLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICBh
bGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0
YXRlKTsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5qdW1wKCkp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBteUZhbGxUaHJvdWdoLmxpbmsoJmppdCk7Ci0g
ICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQs
IHByZXNlcnZlZFN0YXRlKTsKLSAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuanVt
cCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUu
YXBwZW5kKG15RmFpbEFuZElnbm9yZSk7Ci0gICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQo
bXlGYWxsVGhyb3VnaCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGRlZmF1bHQ6IHsKLSAgICAgICAgaWYgKHZpYVByb3h5KCkpIHsKLSAgICAgICAgICAgIGZhbGxU
aHJvdWdoLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBqaXQuYnJhbmNoOCgKLSAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQdXJlRm9y
d2FyZGluZ1Byb3h5VHlwZSkpKTsKLQotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7Ci0KLSAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBq
aXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlKCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZhbGxUaHJvdWdo
LmFwcGVuZCgKLSAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlKCkpKTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICB9IH07Ci0KLSAgICBnZW5lcmF0ZUltcGwoc3RhdGUpOwotfQotCi12b2lk
IEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCi17Ci0g
ICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9PSBDb21taXR0ZWQpOwotICAgIG1fc3RhdGUgPSBH
ZW5lcmF0ZWQ7Ci0gICAgCi0gICAgZ2VuZXJhdGVJbXBsKHN0YXRlKTsKLX0KLQotdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKLXsKLSAg
ICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgaWYgKHZl
cmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkdlbmVyYXRpbmcgY29kZSBmb3I6ICIsICp0aGlzLCAi
XG4iKTsKLSAgICAKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBHZW5lcmF0ZWQpOyAvLyBXZSByZWx5
IG9uIHRoZSBjYWxsZXJzIHNldHRpbmcgdGhpcyBmb3IgdXMuCi0gICAgCi0gICAgQ0NhbGxIZWxw
ZXJzJiBqaXQgPSAqc3RhdGUuaml0OwotICAgIFZNJiB2bSA9ICpqaXQudm0oKTsKLSAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8gPSAqc3RhdGUuc3R1YkluZm87Ci0gICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSAqc3RhdGUuaWRlbnQ7Ci0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gc3RhdGUudmFs
dWVSZWdzOwotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGUuYmFzZUdQUjsKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHN0YXRlLnNjcmF0Y2hHUFI7Ci0KLSAgICBBU1NFUlQobV9jb25kaXRpb25T
ZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoKSk7Ci0KLSAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRp
b24gOiBtX2NvbmRpdGlvblNldCkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNv
bmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKCk7Ci0KLSAgICAgICAgaWYgKGNvbmRpdGlvbi5p
c1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAg
ICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3RhdGUuYWRkV2F0Y2hwb2lu
dChjb25kaXRpb24pKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKSkgewotICAgICAgICAgICAgLy8gVGhlIHJlYXNv
biB3aHkgdGhpcyBjYW5ub3QgaGFwcGVuIGlzIHRoYXQgd2UgcmVxdWlyZSB0aGF0IFBvbHltb3Jw
aGljQWNjZXNzIGNhbGxzCi0gICAgICAgICAgICAvLyBBY2Nlc3NDYXNlOjpnZW5lcmF0ZSgpIG9u
bHkgYWZ0ZXIgaXQgaGFzIHZlcmlmaWVkIHRoYXQKLSAgICAgICAgICAgIC8vIEFjY2Vzc0Nhc2U6
OmNvdWxkU3RpbGxTdWNjZWVkKCkgcmV0dXJuZWQgdHJ1ZS4KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgZGF0YUxvZygiVGhpcyBjb25kaXRpb24gaXMgbm8gbG9uZ2VyIG1ldDogIiwgY29uZGl0
aW9uLCAiXG4iKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBXZSB3aWxsIGVtaXQgY29kZSB0aGF0IGhhcyBhIHdlYWsg
cmVmZXJlbmNlIHRoYXQgaXNuJ3Qgb3RoZXJ3aXNlIGxpc3RlZCBhbnl3aGVyZS4KLSAgICAgICAg
c3RhdGUud2Vha1JlZmVyZW5jZXMuYXBwZW5kKFdyaXRlQmFycmllcjxKU0NlbGw+KHZtLCBjb2Rl
QmxvY2ssIHN0cnVjdHVyZSkpOwotICAgICAgICAKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOwotICAg
ICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoCi0gICAgICAgICAgICBqaXQuYnJhbmNo
U3RydWN0dXJlKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlKSk7Ci0gICAgfQot
Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEluSGl0OgotICAgIGNhc2UgSW5NaXNz
OgotICAgICAgICBqaXQuYm94Qm9vbGVhblBheWxvYWQobV90eXBlID09IEluSGl0LCB2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpKTsKLSAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwotICAgICAgICByZXR1
cm47Ci0KLSAgICBjYXNlIE1pc3M6Ci0gICAgICAgIGppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpzVW5k
ZWZpbmVkKCksIHZhbHVlUmVncyk7Ci0gICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgY2FzZSBMb2FkOgotICAgIGNhc2UgR2V0R2V0dGVyOgotICAgIGNhc2Ug
R2V0dGVyOgotICAgIGNhc2UgU2V0dGVyOgotICAgIGNhc2UgQ3VzdG9tVmFsdWVHZXR0ZXI6Ci0g
ICAgY2FzZSBDdXN0b21BY2Nlc3NvckdldHRlcjoKLSAgICBjYXNlIEN1c3RvbVZhbHVlU2V0dGVy
OgotICAgIGNhc2UgQ3VzdG9tQWNjZXNzb3JTZXR0ZXI6IHsKLSAgICAgICAgR1BSUmVnIHZhbHVl
UmVnc1BheWxvYWRHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKGlzVmFsaWRPZmZzZXQobV9vZmZzZXQpKSB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUq
IGN1cnJTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUoKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gbV9jb25kaXRpb25TZXQu
c2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKS0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBj
dXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIG9m
ZnNldCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEdQUlJlZyBiYXNlRm9yR2V0R1BSOwotICAg
ICAgICBpZiAodmlhUHJveHkoKSkgewotICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSAhPSBDdXN0
b21WYWx1ZVNldHRlciB8fCBtX3R5cGUgIT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOyAvLyBCZWNh
dXNlIHNldHRlcnMgbmVlZCB0byBub3QgdHJhc2ggdmFsdWVSZWdzUGF5bG9hZEdQUi4KLSAgICAg
ICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyIHx8IG1fdHlwZSA9PSBTZXR0ZXIpCi0gICAgICAg
ICAgICAgICAgYmFzZUZvckdldEdQUiA9IHNjcmF0Y2hHUFI7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUiA9IHZhbHVlUmVnc1BheWxvYWRHUFI7Ci0KLSAg
ICAgICAgICAgIEFTU0VSVCgobV90eXBlICE9IEdldHRlciAmJiBtX3R5cGUgIT0gU2V0dGVyKSB8
fCBiYXNlRm9yR2V0R1BSICE9IGJhc2VHUFIpOwotICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSAh
PSBTZXR0ZXIgfHwgYmFzZUZvckdldEdQUiAhPSB2YWx1ZVJlZ3NQYXlsb2FkR1BSKTsKLQotICAg
ICAgICAgICAgaml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBi
YXNlRm9yR2V0R1BSKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYXNlRm9yR2V0R1BS
ID0gYmFzZUdQUjsKLQotICAgICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUjsKLSAgICAgICAg
aWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGppdC5tb3ZlKAot
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihhbHRlcm5hdGVCYXNl
KCkpLAotICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgYmFzZUZvckFj
Y2Vzc0dQUiA9IHNjcmF0Y2hHUFI7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFzZUZv
ckFjY2Vzc0dQUiA9IGJhc2VGb3JHZXRHUFI7Ci0KLSAgICAgICAgR1BSUmVnIGxvYWRlZFZhbHVl
R1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgaWYgKG1fdHlwZSAhPSBDdXN0b21WYWx1ZUdl
dHRlciAmJiBtX3R5cGUgIT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgJiYgbV90eXBlICE9IEN1c3Rv
bVZhbHVlU2V0dGVyICYmIG1fdHlwZSAhPSBDdXN0b21BY2Nlc3NvclNldHRlcikgewotICAgICAg
ICAgICAgaWYgKG1fdHlwZSA9PSBMb2FkIHx8IG1fdHlwZSA9PSBHZXRHZXR0ZXIpCi0gICAgICAg
ICAgICAgICAgbG9hZGVkVmFsdWVHUFIgPSB2YWx1ZVJlZ3NQYXlsb2FkR1BSOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0gc2NyYXRjaEdQUjsKLQot
ICAgICAgICAgICAgQVNTRVJUKChtX3R5cGUgIT0gR2V0dGVyICYmIG1fdHlwZSAhPSBTZXR0ZXIp
IHx8IGxvYWRlZFZhbHVlR1BSICE9IGJhc2VHUFIpOwotICAgICAgICAgICAgQVNTRVJUKG1fdHlw
ZSAhPSBTZXR0ZXIgfHwgbG9hZGVkVmFsdWVHUFIgIT0gdmFsdWVSZWdzUGF5bG9hZEdQUik7Ci0K
LSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSOwotICAgICAgICAgICAgaWYgKGlzSW5saW5l
T2Zmc2V0KG1fb2Zmc2V0KSkKLSAgICAgICAgICAgICAgICBzdG9yYWdlR1BSID0gYmFzZUZvckFj
Y2Vzc0dQUjsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGppdC5sb2FkUHRy
KAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUZvckFjY2Vz
c0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAg
bG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBsb2FkZWRWYWx1
ZUdQUjsKLSAgICAgICAgICAgIH0KLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBq
aXQubG9hZDY0KAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShtX29mZnNldCkpLCBsb2FkZWRWYWx1ZUdQUik7Ci0j
ZWxzZQotICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBMb2FkIHx8IG1fdHlwZSA9PSBHZXRHZXR0
ZXIpIHsKLSAgICAgICAgICAgICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UobV9v
ZmZzZXQpICsgVGFnT2Zmc2V0KSwKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLnRhZ0dQ
UigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGppdC5sb2FkMzIoCi0gICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9C
YXNlKG1fb2Zmc2V0KSArIFBheWxvYWRPZmZzZXQpLAotICAgICAgICAgICAgICAgIGxvYWRlZFZh
bHVlR1BSKTsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fdHlwZSA9PSBMb2Fk
IHx8IG1fdHlwZSA9PSBHZXRHZXR0ZXIpIHsKLSAgICAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChPcHRpb25zOjp1
c2VET01KSVQoKSAmJiBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgJiYgbV9yYXJlRGF0
YS0+ZG9tSklUKSB7Ci0gICAgICAgICAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBlbWl0IENoZWNr
RE9NIG9wZXJhdGlvbiBzaW5jZSBzdHJ1Y3R1cmUgY2hlY2sgZW5zdXJlcwotICAgICAgICAgICAg
Ly8gdGhhdCB0aGUgc3RydWN0dXJlIG9mIHRoZSBnaXZlbiBiYXNlIHZhbHVlIGlzIHN0cnVjdHVy
ZSgpISBTbyBhbGwgd2Ugc2hvdWxkCi0gICAgICAgICAgICAvLyBkbyBpcyBwZXJmb3JtaW5nIHRo
ZSBDaGVja0RPTSB0aGluZ3kgaW4gSUMgY29tcGlsaW5nIHRpbWUgaGVyZS4KLSAgICAgICAgICAg
IGlmIChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NPZihtX3JhcmVEYXRhLT5k
b21KSVQtPnRoaXNDbGFzc0luZm8oKSkpIHsKLSAgICAgICAgICAgICAgICBlbWl0RE9NSklUR2V0
dGVyKHN0YXRlLCBiYXNlRm9yR2V0R1BSKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTdHVmZiBmb3IgY3VzdG9tIGdldHRl
cnMvc2V0dGVycy4KLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGw7Ci0K
LSAgICAgICAgLy8gU3R1ZmYgZm9yIEpTIGdldHRlcnMvc2V0dGVycy4KLSAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2s7Ci0gICAgICAg
IENDYWxsSGVscGVyczo6Q2FsbCBmYXN0UGF0aENhbGw7Ci0gICAgICAgIENDYWxsSGVscGVyczo6
Q2FsbCBzbG93UGF0aENhbGw7Ci0KLSAgICAgICAgLy8gVGhpcyBhbHNvIGRvZXMgdGhlIG5lY2Vz
c2FyeSBjYWxjdWxhdGlvbnMgb2Ygd2hldGhlciBvciBub3Qgd2UncmUgYW4KLSAgICAgICAgLy8g
ZXhjZXB0aW9uIGhhbmRsaW5nIGNhbGwgc2l0ZS4KLSAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0
YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNU
b1N0YWNrRm9yQ2FsbCgpOwotCi0gICAgICAgIGF1dG8gcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9t
U3RhY2tGb3JDYWxsID0gWyZdKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSYgc3Bp
bGxTdGF0ZSwgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUpIHsKLSAgICAgICAgICAgIFJlZ2lzdGVy
U2V0IGRvbnRSZXN0b3JlOwotICAgICAgICAgICAgaWYgKGNhbGxIYXNSZXR1cm5WYWx1ZSkgewot
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJlc3VsdCB2YWx1ZS4gV2UgZG9uJ3Qgd2Fu
dCB0byBvdmVyd3JpdGUgdGhlIHJlc3VsdCB3aXRoIHdoYXQgd2Ugc3RvcmVkIHRvIHRoZSBzdGFj
ay4KLSAgICAgICAgICAgICAgICAvLyBXZSBzb21ldGltZXMgaGF2ZSB0byBzdG9yZSBpdCB0byB0
aGUgc3RhY2sganVzdCBpbiBjYXNlIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBhbmQgbmVlZCB0aGUg
b3JpZ2luYWwgdmFsdWUuCi0gICAgICAgICAgICAgICAgZG9udFJlc3RvcmUuc2V0KHZhbHVlUmVn
cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVy
c0Zyb21TdGFja0ZvckNhbGwoc3BpbGxTdGF0ZSwgZG9udFJlc3RvcmUpOwotICAgICAgICB9Owot
Ci0gICAgICAgIGppdC5zdG9yZTMyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgp
LmJpdHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7Ci0KLSAgICAg
ICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgewotICAgICAgICAg
ICAgQVNTRVJUKGJhc2VHUFIgIT0gbG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAgQVNTRVJU
KG1fdHlwZSAhPSBTZXR0ZXIgfHwgKGJhc2VHUFIgIT0gdmFsdWVSZWdzUGF5bG9hZEdQUiAmJiBs
b2FkZWRWYWx1ZUdQUiAhPSB2YWx1ZVJlZ3NQYXlsb2FkR1BSKSk7Ci0KLSAgICAgICAgICAgIC8v
IENyZWF0ZSBhIEpTIGNhbGwgdXNpbmcgYSBKUyBjYWxsIGlubGluZSBjYWNoZS4gQXNzdW1lIHRo
YXQ6Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gLSBTUCBpcyBhbGlnbmVkIGFuZCBy
ZXByZXNlbnRzIHRoZSBleHRlbnQgb2YgdGhlIGNhbGxpbmcgY29tcGlsZXIncyBzdGFjayB1c2Fn
ZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAtIEZQIGlzIHNldCBjb3JyZWN0bHkg
KGkuZS4gaXQgcG9pbnRzIHRvIHRoZSBjYWxsZXIncyBjYWxsIGZyYW1lIGhlYWRlcikuCi0gICAg
ICAgICAgICAvLwotICAgICAgICAgICAgLy8gLSBTUCAtIEZQIGlzIGFuIGFsaWduZWQgZGlmZmVy
ZW5jZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAtIEFueSBieXRlIGJldHdlZW4g
RlAgKGV4Y2x1c2l2ZSkgYW5kIFNQIChpbmNsdXNpdmUpIGNvdWxkIGJlIGxpdmUgaW4gdGhlIGNh
bGxpbmcKLSAgICAgICAgICAgIC8vICAgY29kZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAvLyBUaGVyZWZvcmUsIHdlIHRlbXBvcmFyaWx5IGdyb3cgdGhlIHN0YWNrIGZvciB0aGUgcHVy
cG9zZSBvZiB0aGUgY2FsbCBhbmQgdGhlbgotICAgICAgICAgICAgLy8gc2hyaW5rIGl0IGFmdGVy
LgotCi0gICAgICAgICAgICBzdGF0ZS5zZXRTcGlsbFN0YXRlRm9ySlNHZXR0ZXJTZXR0ZXIoc3Bp
bGxTdGF0ZSk7Ci0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JhcmVEYXRhLT5jYWxs
TGlua0luZm8pOwotICAgICAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvID0gc3RkOjpt
YWtlX3VuaXF1ZTxDYWxsTGlua0luZm8+KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBJZiB3ZSBnZW5lcmF0ZWQgYSBwb2x5bW9ycGhpYyBjYWxsIHN0dWIgdGhhdCBqdW1w
ZWQgYmFjayB0byB0aGUgZ2V0dGVyCi0gICAgICAgICAgICAvLyBzdHViLCB3aGljaCB0aGVuIGp1
bXBlZCBiYWNrIHRvIHRoZSBtYWluIGNvZGUsIHRoZW4gd2UnZCBoYXZlIGEgcmVhY2hhYmlsaXR5
Ci0gICAgICAgICAgICAvLyBzaXR1YXRpb24gdGhhdCB0aGUgR0MgZG9lc24ndCBrbm93IGFib3V0
LiBUaGUgR0Mgd291bGQgZW5zdXJlIHRoYXQgdGhlIHBvbHltb3JwaGljCi0gICAgICAgICAgICAv
LyBjYWxsIHN0dWIgc3RheWVkIGFsaXZlLCBhbmQgaXQgd291bGQgZW5zdXJlIHRoYXQgdGhlIG1h
aW4gY29kZSBzdGF5ZWQgYWxpdmUsIGJ1dAotICAgICAgICAgICAgLy8gaXQgd291bGRuJ3Qga25v
dyB0aGF0IHRoZSBnZXR0ZXIgc3R1YiB3YXMgYWxpdmUuIElkZWFsbHkgSklUIHN0dWIgcm91dGlu
ZXMgd291bGQKLSAgICAgICAgICAgIC8vIGJlIEdDIG9iamVjdHMsIGFuZCB0aGVuIHdlJ2QgYmUg
YWJsZSB0byBzYXkgdGhhdCB0aGUgcG9seW1vcnBoaWMgY2FsbCBzdHViIGhhcyBhCi0gICAgICAg
ICAgICAvLyByZWZlcmVuY2UgdG8gdGhlIGdldHRlciBzdHViLgotICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODkxNAotICAgICAgICAgICAg
bV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLT5kaXNhbGxvd1N0dWJzKCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAotICAgICAg
ICAgICAgICAgIENhbGxMaW5rSW5mbzo6Q2FsbCwgc3R1YkluZm8uY29kZU9yaWdpbiwgbG9hZGVk
VmFsdWVHUFIpOwotCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7Ci0K
LSAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgInRoaXMiIGFyZ3VtZW50LgotICAgICAgICAgICAg
dW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gMTsKLSAgICAgICAgICAgIC8vIC4uLiBhbmQg
YSB2YWx1ZSBhcmd1bWVudCBpZiB3ZSdyZSBjYWxsaW5nIGEgc2V0dGVyLgotICAgICAgICAgICAg
aWYgKG1fdHlwZSA9PSBTZXR0ZXIpCi0gICAgICAgICAgICAgICAgbnVtYmVyT2ZQYXJhbWV0ZXJz
Kys7Ci0KLSAgICAgICAgICAgIC8vIEdldCB0aGUgYWNjZXNzb3I7IGlmIHRoZXJlIGFpbid0IG9u
ZSB0aGVuIHRoZSByZXN1bHQgaXMganNVbmRlZmluZWQoKS4KLSAgICAgICAgICAgIGlmIChtX3R5
cGUgPT0gU2V0dGVyKSB7Ci0gICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoCi0gICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0
dGVyOjpvZmZzZXRPZlNldHRlcigpKSwKLSAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVH
UFIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRlZFZhbHVlR1BS
LCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpLAotICAgICAgICAgICAgICAgICAgICBs
b2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCByZXR1cm5VbmRlZmluZWQgPSBqaXQuYnJhbmNoVGVzdFB0cigKLSAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIGxvYWRlZFZhbHVlR1BSKTsKLQotICAgICAgICAgICAg
dW5zaWduZWQgbnVtYmVyT2ZSZWdzRm9yQ2FsbCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVn
aXN0ZXJzICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZkJ5dGVzRm9yQ2FsbCA9Ci0gICAgICAgICAgICAgICAgbnVtYmVyT2ZSZWdzRm9yQ2FsbCAq
IHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7Ci0KLSAgICAgICAg
ICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9Ci0gICAgICAgICAgICAg
ICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVy
T2ZCeXRlc0ZvckNhbGwpOwotCi0gICAgICAgICAgICBqaXQuc3ViUHRyKAotICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2Fs
bCksCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
Ci0KLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxs
SGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLAotICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwotCi0gICAgICAgICAgICBqaXQuc3RvcmUzMigKLSAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihudW1iZXJPZlBhcmFtZXRl
cnMpLAotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudCAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSk7Ci0K
LSAgICAgICAgICAgIGppdC5zdG9yZUNlbGwoCi0gICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVH
UFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9m
KFJlZ2lzdGVyKSkpOwotCi0gICAgICAgICAgICBqaXQuc3RvcmVDZWxsKAotICAgICAgICAgICAg
ICAgIGJhc2VHUFIsCi0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsK
LQotICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBTZXR0ZXIpIHsKLSAgICAgICAgICAgICAgICBq
aXQuc3RvcmVWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAotICAgICAgICAg
ICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICAg
ICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBz
bG93Q2FzZSA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpOb3RFcXVhbCwgbG9hZGVkVmFsdWVHUFIsIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNo
ZWNrLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSk7Ci0K
LSAgICAgICAgICAgIGZhc3RQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOwotICAgICAgICAgICAg
aWYgKG1fdHlwZSA9PSBHZXR0ZXIpCi0gICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2
YWx1ZVJlZ3MpOwotICAgICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0KLSAgICAg
ICAgICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICBqaXQubW92ZShsb2FkZWRW
YWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAg
ICAgICAvLyBXZSAqYWx3YXlzKiBrbm93IHRoYXQgdGhlIGdldHRlci9zZXR0ZXIsIGlmIG5vbi1u
dWxsLCBpcyBhIGNlbGwuCi0gICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOwotI2VuZGlmCi0gICAg
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9yYXJlRGF0YS0+
Y2FsbExpbmtJbmZvLmdldCgpKSwgR1BSSW5mbzo6cmVnVDIpOwotICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7Ci0gICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRl
cikKLSAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7Ci0gICAgICAg
ICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKLQotICAgICAgICAgICAgcmV0dXJuVW5kZWZp
bmVkLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlcikKLSAgICAg
ICAgICAgICAgICBqaXQubW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3Mp
OwotCi0gICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7Ci0KLSAgICAgICAgICAgIGppdC5hZGRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSAtIHN0YXRlLnByZXNlcnZlZFJldXNlZFJlZ2lzdGVy
U3RhdGUubnVtYmVyT2ZCeXRlc1ByZXNlcnZlZCAtIHNwaWxsU3RhdGUubnVtYmVyT2ZTdGFja0J5
dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uKSwKLSAgICAgICAgICAgICAgICBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
Ci0gICAgICAgICAgICBib29sIGNhbGxIYXNSZXR1cm5WYWx1ZSA9IGlzR2V0dGVyKCk7Ci0gICAg
ICAgICAgICByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoc3BpbGxTdGF0ZSwg
Y2FsbEhhc1JldHVyblZhbHVlKTsKLQotICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAotICAg
ICAgICAgICAgICAgIFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygK
LSAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsKHNsb3dQYXRoQ2FsbCkpLAotICAgICAgICAgICAgICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZlci5sb2NhdGlvbk9mKGFkZHJlc3NPZkxpbmtGdW5j
dGlvbkNoZWNrKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbChmYXN0UGF0aENhbGwpKTsKLQotICAgICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKGxpbmtDYWxs
VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8
fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbVZhbHVl
U2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3NvclNldHRlcik7Ci0KLSAgICAgICAgICAg
IC8vIE5lZWQgdG8gbWFrZSByb29tIGZvciB0aGUgQyBjYWxsIHNvIGFueSBvZiBvdXIgc3RhY2sg
c3BpbGxhZ2UgaXNuJ3Qgb3ZlcndyaXR0ZW4uIEl0J3MKLSAgICAgICAgICAgIC8vIGhhcmQgdG8g
dHJhY2sgaWYgc29tZW9uZSBkaWQgc3BpbGxhZ2Ugb3Igbm90LCBzbyB3ZSBqdXN0IGFzc3VtZSB0
aGF0IHdlIGFsd2F5cyBuZWVkCi0gICAgICAgICAgICAvLyB0byBtYWtlIHNvbWUgc3BhY2UgaGVy
ZS4KLSAgICAgICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKLQotICAgICAg
ICAgICAgLy8gZ2V0dGVyOiBFbmNvZGVkSlNWYWx1ZSAoKkdldFZhbHVlRnVuYykoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAg
Ly8gc2V0dGVyOiB2b2lkICgqUHV0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSk7Ci0gICAgICAgICAgICAvLyBDdXN0
b20gdmFsdWVzIGFyZSBwYXNzZWQgdGhlIHNsb3RCYXNlICh0aGUgcHJvcGVydHkgaG9sZGVyKSwg
Y3VzdG9tIGFjY2Vzc29ycyBhcmUgcGFzc2VkIHRoZSB0aGlzVmF1bGUgKHJlY2lldmVyKS4KLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBkaWZmZXJlbmNlcyBpbiBjdXN0b20gdmFs
dWVzIGFuZCBjdXN0b20gYWNjZXNzb3JzLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODAxNAotICAgICAgICAgICAgR1BSUmVnIGJhc2VG
b3JDdXN0b21WYWx1ZSA9IG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5cGUgPT0g
Q3VzdG9tVmFsdWVTZXR0ZXIgPyBiYXNlRm9yQWNjZXNzR1BSIDogYmFzZUZvckdldEdQUjsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdl
dHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIpIHsKLSAgICAgICAgICAgICAg
ICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAotICAgICAgICAgICAgICAgICAgICBi
YXNlRm9yQ3VzdG9tVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihpZGVudC5pbXBsKCkpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckN1c3RvbVZhbHVl
LCB2YWx1ZVJlZ3MuZ3ByKCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3Vz
dG9tVmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyKSB7Ci0gICAg
ICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKLSAgICAgICAgICAg
ICAgICAgICAgRUFCSV8zMkJJVF9EVU1NWV9BUkcgYmFzZUZvckN1c3RvbVZhbHVlLAotICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlkZW50
LmltcGwoKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBqaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAotICAgICAgICAgICAgICAgICAgICBFQUJJXzMyQklU
X0RVTU1ZX0FSRyBiYXNlRm9yQ3VzdG9tVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAotICAgICAgICAgICAgICAg
ICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwotICAgICAg
ICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsICZ2bS50b3BDYWxsRnJhbWUpOwotCi0gICAgICAgICAgICBvcGVyYXRpb25D
YWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAg
ICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKG1fcmFyZURhdGEt
PmN1c3RvbUFjY2Vzc29yLm9wYXF1ZSkpOwotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAg
ICAgICBpZiAobV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21B
Y2Nlc3NvckdldHRlcikKLSAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVn
cyk7Ci0gICAgICAgICAgICBqaXQucmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7Ci0KLSAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBub0V4Y2VwdGlvbiA9Ci0gICAgICAgICAgICAg
ICAgaml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9u
Q2hlY2spOwotCi0gICAgICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFj
a0ZvckNhbGxXaXRoVGhyb3duRXhjZXB0aW9uKHNwaWxsU3RhdGUpOwotICAgICAgICAgICAgc3Rh
dGUuZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcigpOwotICAgICAgICAKLSAgICAgICAgICAg
IG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICBib29sIGNhbGxIYXNSZXR1cm5W
YWx1ZSA9IGlzR2V0dGVyKCk7Ci0gICAgICAgICAgICByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21T
dGFja0ZvckNhbGwoc3BpbGxTdGF0ZSwgY2FsbEhhc1JldHVyblZhbHVlKTsKLSAgICAgICAgfQot
ICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBj
YXNlIFJlcGxhY2U6IHsKLSAgICAgICAgaWYgKEluZmVycmVkVHlwZSogdHlwZSA9IHN0cnVjdHVy
ZSgpLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQuaW1wbCgpKSkgewotICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNj
cmlwdG9yKCksICJcbiIpOwotICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5k
KAotICAgICAgICAgICAgICAgIGppdC5icmFuY2hJZk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNo
R1BSLCB0eXBlLT5kZXNjcmlwdG9yKCkpKTsKLSAgICAgICAgfSBlbHNlIGlmICh2ZXJib3NlKQot
ICAgICAgICAgICAgZGF0YUxvZygiRG9uJ3QgaGF2ZSB0eXBlLlxuIik7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoaXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKSB7Ci0gICAgICAgICAgICBqaXQuc3Rv
cmVWYWx1ZSgKLSAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCi0gICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAotICAgICAg
ICAgICAgICAgICAgICBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKwotICAgICAg
ICAgICAgICAgICAgICBvZmZzZXRJbklubGluZVN0b3JhZ2UobV9vZmZzZXQpICogc2l6ZW9mKEpT
VmFsdWUpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKLSAgICAgICAgICAgICAg
ICB2YWx1ZVJlZ3MsCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAg
ICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShtX29mZnNldCkg
KiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICAgICAgfQotICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYXNlIFRyYW5zaXRpb246IHsKLSAgICAg
ICAgLy8gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbigpIHNob3VsZCBoYXZlIHJldHVybmVkIG51bGwg
aWYgdGhpcyB3YXNuJ3QgdHJ1ZS4KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnMgPj0gNiB8fCAhc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkg
fHwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCkpOwotCi0gICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHR5cGUgPSBu
ZXdTdHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRm9yKGlkZW50LmltcGwoKSkpIHsKLSAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhdmUgdHlwZTogIiwg
dHlwZS0+ZGVzY3JpcHRvcigpLCAiXG4iKTsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBh
dGNoLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBqaXQuYnJhbmNoSWZOb3RUeXBlKHZhbHVlUmVn
cywgc2NyYXRjaEdQUiwgdHlwZS0+ZGVzY3JpcHRvcigpKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
dmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkRvbid0IGhhdmUgdHlwZS5cbiIpOwotICAg
ICAgICAKLSAgICAgICAgLy8gTk9URTogVGhpcyBsb2dpYyBpcyBkdXBsaWNhdGVkIGluIEFjY2Vz
c0Nhc2U6OmRvZXNDYWxscygpLiBJdCdzIGltcG9ydGFudCB0aGF0IGRvZXNDYWxscygpIGtub3dz
Ci0gICAgICAgIC8vIGV4YWN0bHkgd2hlbiB0aGlzIHdvdWxkIG1ha2UgY2FsbHMuCi0gICAgICAg
IGJvb2wgYWxsb2NhdGluZyA9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9
IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgICAgICBib29sIHJlYWxsb2Nh
dGluZyA9IGFsbG9jYXRpbmcgJiYgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0g
ICAgICAgIGJvb2wgYWxsb2NhdGluZ0lubGluZSA9IGFsbG9jYXRpbmcgJiYgIXN0cnVjdHVyZSgp
LT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpOwotCi0gICAgICAgIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7Ci0gICAgICAg
IGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAg
IGFsbG9jYXRvci5sb2NrKHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZVRh
Z0dQUikpOwotI2VuZGlmCi0gICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7Ci0gICAg
ICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwotCi0gICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSMiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IEludmFs
aWRHUFJSZWc7Ci0gICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICBz
Y3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgICAg
IHNjcmF0Y2hHUFIzID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICB9
Ci0KLSAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVz
ZXJ2ZWRTdGF0ZSA9Ci0gICAgICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3Rl
cnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFj
ZTo6U3BhY2VGb3JDQ2FsbCk7Ci0gICAgICAgIAotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IHNsb3dQYXRoOwotCi0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldh
dGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7Ci0KLSAgICAgICAgaWYgKGFsbG9jYXRp
bmcpIHsKLSAgICAgICAgICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgTWFya2VkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSB2bS5hdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFhbGxvY2F0b3IpIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gWXVjaywgdGhpcyBjYXNlIHdvdWxkIHN1Y2shCi0gICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuanVtcCgpKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGFsbG9jYXRvciksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAg
ICAgICBqaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIs
IHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7Ci0gICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSks
IHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNpemVfdCBv
bGRTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAocmVhbGxvY2F0aW5nKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgcmVhbGxvY2F0aW5nIChp
LmUuIHRoZSBvbGQgc3RydWN0dXJlL2J1dHRlcmZseQotICAgICAgICAgICAgICAgICAgICAvLyBh
bHJlYWR5IGhhZCBvdXQtb2YtbGluZSBwcm9wZXJ0eSBzdG9yYWdlKS4KLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7
Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHNj
cmF0Y2hHUFIgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBvbGQgc3RvcmFnZSwKLSAgICAg
ICAgICAgICAgICAgICAgLy8gc2NyYXRjaEdQUjIgPSBhdmFpbGFibGUKLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6ZTsgb2Zmc2V0ICs9
IHNpemVvZih2b2lkKikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZv
aWQqKSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIyKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cigKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY3JhdGNoR1BSMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gb2xkU2l6ZTsgb2Zmc2V0IDwgbmV3U2l6ZTsg
b2Zmc2V0ICs9IHNpemVvZih2b2lkKikpCi0gICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgKyBzaXplb2YoSlNWYWx1
ZSkgKyBzaXplb2Yodm9pZCopKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIGFsbG9jYXRpbmcgb3V0LW9mLWxp
bmUgdXNpbmcgYW4gb3BlcmF0aW9uLgotICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJh
UmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKLSAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmUuc2V0KGJhc2VHUFIpOwotICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZS5zZXQodmFsdWVSZWdzKTsKLSAgICAgICAgICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGU6OlNwaWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1Rv
U3RhY2tGb3JDYWxsKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2Fs
bFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCi0gICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxS
ZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBqaXQubWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFyZWFsbG9jYXRpbmcpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSKTsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgaml0
LmFkZExpbmtUYXNrKAotICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxsLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblB0cihvcGVyYXRpb25SZWFsbG9jYXRl
QnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRp
bmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1cmUvYnV0dGVyZmx5Ci0gICAgICAgICAgICAgICAgICAg
IC8vIGFscmVhZHkgaGFkIG91dC1vZi1saW5lIHByb3BlcnR5IHN0b3JhZ2UpLgotICAgICAgICAg
ICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgYmFzZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSAv
IHNpemVvZihKU1ZhbHVlKSkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbCgpOwotICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCi0gICAgICAgICAgICAgICAgICAgICAg
ICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbkNhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRy
KG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBqaXQucmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7
Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHNjcmF0
Y2hHUFIpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBub0V4Y2VwdGlvbiA9Ci0gICAgICAgICAgICAgICAgICAgIGppdC5lbWl0RXhjZXB0aW9u
Q2hlY2soQ0NhbGxIZWxwZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFj
a0ZvckNhbGxXaXRoVGhyb3duRXhjZXB0aW9uKHNwaWxsU3RhdGUpOwotICAgICAgICAgICAgICAg
IHN0YXRlLmVtaXRFeHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOwotICAgICAgICAgICAgICAg
IHN0YXRlLnJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRlKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc0lubGluZU9mZnNldCht
X29mZnNldCkpIHsKLSAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAotICAgICAgICAgICAgICAg
IHZhbHVlUmVncywKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAg
ICAgICAgICAgICAgICAgIGJhc2VHUFIsCi0gICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSArCi0gICAgICAgICAgICAgICAgICAgIG9mZnNldEluSW5s
aW5lU3RvcmFnZShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGlmICghYWxsb2NhdGluZykKLSAgICAgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKLSAgICAg
ICAgICAgICAgICB2YWx1ZVJlZ3MsCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVvZihKU1Zh
bHVlKSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGlu
ZSkgewotICAgICAgICAgICAgLy8gV2Ugc2V0IHRoZSBuZXcgYnV0dGVyZmx5IGFuZCB0aGUgc3Ry
dWN0dXJlIGxhc3QuIERvaW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMgdGhhdAotICAgICAgICAgICAg
Ly8gd2hhdGV2ZXIgd2UgaGFkIGRvbmUgdXAgdG8gdGhpcyBwb2ludCBpcyBmb3Jnb3R0ZW4gaWYg
d2UgY2hvb3NlIHRvIGJyYW5jaCB0byBzbG93Ci0gICAgICAgICAgICAvLyBwYXRoLgotICAgICAg
ICAgICAgaml0Lm51a2VTdHJ1Y3R1cmVBbmRTdG9yZUJ1dHRlcmZseShzY3JhdGNoR1BSLCBiYXNl
R1BSKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdWludDMyX3Qgc3RydWN0dXJlQml0
cyA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4obmV3U3RydWN0dXJlKCktPmlkKCkpOwotICAgICAg
ICBqaXQuc3RvcmUzMigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0
cnVjdHVyZUJpdHMpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwotCi0gICAgICAgIGFsbG9jYXRvci5yZXN0
b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwotICAgICAg
ICBzdGF0ZS5zdWNjZWVkKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBXZSB3aWxsIGhhdmUgYSBz
bG93IHBhdGggaWYgd2Ugd2VyZSBhbGxvY2F0aW5nIHdpdGhvdXQgdGhlIGhlbHAgb2YgYW4gb3Bl
cmF0aW9uLgotICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAgICAgaWYg
KGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVycygpKSB7Ci0gICAgICAgICAgICAgICAgc2xvd1Bh
dGgubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJl
Z2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICBz
dGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuanVtcCgpKTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKHNsb3dQYXRoKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93UGF0aC5lbXB0
eSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhc2UgQXJyYXlMZW5ndGg6IHsK
LSAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBqaXQubG9hZDMy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5k
KAotICAgICAgICAgICAgaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6TGVzc1RoYW4sIHNjcmF0
Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgIGppdC5ib3hJ
bnQzMihzY3JhdGNoR1BSLCB2YWx1ZVJlZ3MpOwotICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYXNlIFN0cmluZ0xlbmd0aDogewotICAgICAg
ICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zm
c2V0T2ZMZW5ndGgoKSksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwotICAgICAgICBqaXQuYm94
SW50MzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzKTsKLSAgICAgICAgc3RhdGUu
c3VjY2VlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIElu
dHJpbnNpY0dldHRlcjogewotICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCgpKSk7Ci0KLSAgICAgICAgLy8gV2UgbmVlZCB0byBlbnN1cmUgdGhlIGdldHRlciB2YWx1
ZSBkb2VzIG5vdCBtb3ZlIGZyb20gdW5kZXIgdXMuIE5vdGUgdGhhdCBHZXR0ZXJTZXR0ZXJzCi0g
ICAgICAgIC8vIGFyZSBpbW11dGFibGUgc28gd2UganVzdCBuZWVkIHRvIHdhdGNoIHRoZSBwcm9w
ZXJ0eSBub3QgYW55IHZhbHVlIGluc2lkZSBpdC4KLSAgICAgICAgU3RydWN0dXJlKiBjdXJyU3Ry
dWN0dXJlOwotICAgICAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjdXJyU3RydWN0dXJlID0gbV9jb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vYmpl
Y3QoKS0+c3RydWN0dXJlKCk7Ci0gICAgICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQ
cm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgb2Zmc2V0KCkpOwotCi0gICAgICAgIGVtaXRJbnRy
aW5zaWNHZXR0ZXIoc3RhdGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2FzZSBE
aXJlY3RBcmd1bWVudHNMZW5ndGg6Ci0gICAgY2FzZSBTY29wZWRBcmd1bWVudHNMZW5ndGg6Ci0g
ICAgY2FzZSBNZWdhbW9ycGhpY0xvYWQ6Ci0gICAgICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgaGFu
ZGxlZCBieSBnZW5lcmF0ZVdpdGhHdWFyZCgpLCBzaW5jZSB0aGUgZ3VhcmQgaXMgcGFydCBvZiB0
aGUKLSAgICAgICAgLy8gYWxnb3JpdGhtLiBXZSBjYW4gYmUgc3VyZSB0aGF0IG5vYm9keSB3aWxs
IGNhbGwgZ2VuZXJhdGUoKSBkaXJlY3RseSBmb3IgdGhlc2Ugc2luY2UgdGhleQotICAgICAgICAv
LyBhcmUgbm90IGd1YXJkZWQgYnkgc3RydWN0dXJlIGNoZWNrcy4KLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLX0KLQotdm9pZCBBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0dGVyKEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIEdQUlJlZyBiYXNlRm9yR2V0R1BSKQotewotICAgIEND
YWxsSGVscGVycyYgaml0ID0gKnN0YXRlLmppdDsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8gPSAqc3RhdGUuc3R1YkluZm87Ci0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gc3Rh
dGUudmFsdWVSZWdzOwotICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGUuYmFzZUdQUjsKLSAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHN0YXRlLnNjcmF0Y2hHUFI7Ci0KLSAgICAvLyBXZSBjb25zdHJ1
Y3QgdGhlIGVudmlyb25tZW50IHRoYXQgY2FuIGV4ZWN1dGUgdGhlIERPTUpJVDo6UGF0Y2hwb2lu
dCBoZXJlLgotICAgIFJlZjxET01KSVQ6OkNhbGxET01HZXR0ZXJQYXRjaHBvaW50PiBwYXRjaHBv
aW50ID0gbV9yYXJlRGF0YS0+ZG9tSklULT5jYWxsRE9NR2V0dGVyKCk7Ci0KLSAgICBWZWN0b3I8
R1BSUmVnPiBncFNjcmF0Y2g7Ci0gICAgVmVjdG9yPEZQUlJlZz4gZnBTY3JhdGNoOwotICAgIFZl
Y3RvcjxET01KSVQ6OlZhbHVlPiByZWdzOwotCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
IGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKLSAgICBhbGxvY2F0b3Iu
bG9jayhiYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGFsbG9jYXRvci5sb2Nr
KHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZVRhZ0dQUikpOwotI2VuZGlm
Ci0gICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKLSAgICBhbGxvY2F0b3IubG9jayhzY3Jh
dGNoR1BSKTsKLQotICAgIEdQUlJlZyBwYXJhbUJhc2VHUFIgPSBJbnZhbGlkR1BSUmVnOwotICAg
IEdQUlJlZyBwYXJhbUdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgSlNWYWx1
ZVJlZ3MgcGFyYW1WYWx1ZVJlZ3MgPSB2YWx1ZVJlZ3M7Ci0gICAgR1BSUmVnIHJlbWFpbmluZ1Nj
cmF0Y2hHUFIgPSBJbnZhbGlkR1BSUmVnOwotCi0gICAgLy8gdmFsdWVSZWdzIGFuZCBiYXNlRm9y
R2V0R1BSIG1heSBiZSB0aGUgc2FtZS4gRm9yIGV4YW1wbGUsIGluIEJhc2VsaW5lIEpJVCwgd2Ug
cGFzcyB0aGUgc2FtZSByZWdUMCBmb3IgYmFzZUdQUiBhbmQgdmFsdWVSZWdzLgotICAgIC8vIElu
IEZUTCwgdGhlcmUgaXMgbm8gY29uc3RyYWludCB0aGF0IHRoZSBiYXNlRm9yR2V0R1BSIGludGVy
ZmVyZXMgd2l0aCB0aGUgcmVzdWx0LiBUbyBtYWtlIGltcGxlbWVudGF0aW9uIHNpbXBsZSBpbgot
ICAgIC8vIERPTUpJVDo6UGF0Y2hwb2ludCwgRE9NSklUOjpQYXRjaHBvaW50IGFzc3VtZXMgdGhh
dCByZXN1bHQgcmVnaXN0ZXJzIGFsd2F5cyBlYXJseSBpbnRlcmZlcmUgd2l0aCBpbnB1dCByZWdp
c3RlcnMsIGluIHRoaXMgY2FzZSwKLSAgICAvLyBiYXNlRm9yR2V0R1BSLiBTbyB3ZSBtb3ZlIGJh
c2VGb3JHZXRHUFIgdG8gdGhlIG90aGVyIHJlZ2lzdGVyIGlmIGJhc2VGb3JHZXRHUFIgPT0gdmFs
dWVSZWdzLgotICAgIGlmIChiYXNlRm9yR2V0R1BSICE9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCkp
IHsKLSAgICAgICAgcGFyYW1CYXNlR1BSID0gYmFzZUZvckdldEdQUjsKLSAgICAgICAgaWYgKCFw
YXRjaHBvaW50LT5yZXF1aXJlR2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgcmVtYWluaW5nU2Ny
YXRjaEdQUiA9IHNjcmF0Y2hHUFI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcmFtR2xv
YmFsT2JqZWN0R1BSID0gc2NyYXRjaEdQUjsKLSAgICB9IGVsc2UgewotICAgICAgICBqaXQubW92
ZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgcGFyYW1CYXNl
R1BSID0gc2NyYXRjaEdQUjsKLSAgICAgICAgaWYgKHBhdGNocG9pbnQtPnJlcXVpcmVHbG9iYWxP
YmplY3QpCi0gICAgICAgICAgICBwYXJhbUdsb2JhbE9iamVjdEdQUiA9IGFsbG9jYXRvci5hbGxv
Y2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICB9Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0Rm9yRE9NSklUID0gc3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpOwotCi0gICAgcmVncy5h
cHBlbmQocGFyYW1WYWx1ZVJlZ3MpOwotICAgIHJlZ3MuYXBwZW5kKHBhcmFtQmFzZUdQUik7Ci0g
ICAgaWYgKHBhdGNocG9pbnQtPnJlcXVpcmVHbG9iYWxPYmplY3QpIHsKLSAgICAgICAgQVNTRVJU
KHBhcmFtR2xvYmFsT2JqZWN0R1BSICE9IEludmFsaWRHUFJSZWcpOwotICAgICAgICByZWdzLmFw
cGVuZChET01KSVQ6OlZhbHVlKHBhcmFtR2xvYmFsT2JqZWN0R1BSLCBnbG9iYWxPYmplY3RGb3JE
T01KSVQpKTsKLSAgICB9Ci0KLSAgICBpZiAocGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0
ZXJzKSB7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBpZiAocmVtYWluaW5nU2Ny
YXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICBncFNjcmF0Y2guYXBwZW5k
KHJlbWFpbmluZ1NjcmF0Y2hHUFIpOwotICAgICAgICAgICAgKytpOwotICAgICAgICB9Ci0gICAg
ICAgIGZvciAoOyBpIDwgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyArK2kpCi0g
ICAgICAgICAgICBncFNjcmF0Y2guYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIo
KSk7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhdGNocG9pbnQtPm51
bUZQU2NyYXRjaFJlZ2lzdGVyczsgKytpKQotICAgICAgICBmcFNjcmF0Y2guYXBwZW5kKGFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hGUFIoKSk7Ci0KLSAgICAvLyBMZXQncyBzdG9yZSB0aGUgcmV1
c2VkIHJlZ2lzdGVycyB0byB0aGUgc3RhY2suIEFmdGVyIHRoYXQsIHdlIGNhbiB1c2UgYWxsb2Nh
dGVkIHNjcmF0Y2ggcmVnaXN0ZXJzLgotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJl
c2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGUgPQotICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVS
ZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4
dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7Ci0KLSAgICBpZiAodmVyYm9zZSkgewotICAg
ICAgICBkYXRhTG9nKCJiYXNlR1BSID0gIiwgYmFzZUdQUiwgIlxuIik7Ci0gICAgICAgIGRhdGFM
b2coInZhbHVlUmVncyA9ICIsIHZhbHVlUmVncywgIlxuIik7Ci0gICAgICAgIGRhdGFMb2coInNj
cmF0Y2hHUFIgPSAiLCBzY3JhdGNoR1BSLCAiXG4iKTsKLSAgICAgICAgZGF0YUxvZygicGFyYW1C
YXNlR1BSID0gIiwgcGFyYW1CYXNlR1BSLCAiXG4iKTsKLSAgICAgICAgaWYgKHBhcmFtR2xvYmFs
T2JqZWN0R1BSICE9IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBkYXRhTG9nKCJwYXJhbUds
b2JhbE9iamVjdEdQUiA9ICIsIHBhcmFtR2xvYmFsT2JqZWN0R1BSLCAiXG4iKTsKLSAgICAgICAg
ZGF0YUxvZygicGFyYW1WYWx1ZVJlZ3MgPSAiLCBwYXJhbVZhbHVlUmVncywgIlxuIik7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdp
c3RlcnM7ICsraSkKLSAgICAgICAgICAgIGRhdGFMb2coImdwU2NyYXRjaFsiLCBpLCAiXSA9ICIs
IGdwU2NyYXRjaFtpXSwgIlxuIik7Ci0gICAgfQotCi0gICAgaWYgKHBhdGNocG9pbnQtPnJlcXVp
cmVHbG9iYWxPYmplY3QpCi0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihnbG9iYWxPYmplY3RGb3JET01KSVQpLCBwYXJhbUdsb2JhbE9iamVjdEdQUik7Ci0KLSAg
ICAvLyBXZSBqdXN0IHNwaWxsIHRoZSByZWdpc3RlcnMgdXNlZCBpbiBET01KSVQ6OlBhdGNocG9p
bnQgaGVyZS4gRm9yIG5vdCBzcGlsbGVkIHJlZ2lzdGVycyBoZXJlIGV4cGxpY2l0bHksCi0gICAg
Ly8gdGhleSBtdXN0IGJlIGluIHRoZSB1c2VkIHJlZ2lzdGVyIHNldCBwYXNzZWQgYnkgdGhlIGNh
bGxlcnMgKEJhc2VsaW5lLCBERkcsIGFuZCBGVEwpIGlmIHRoZXkgbmVlZCB0byBiZSBrZXB0Lgot
ICAgIC8vIFNvbWUgcmVnaXN0ZXJzIGNhbiBiZSBsb2NrZWQsIGJ1dCBub3QgaW4gdGhlIHVzZWQg
cmVnaXN0ZXIgc2V0LiBGb3IgZXhhbXBsZSwgdGhlIGNhbGxlciBjb3VsZCBtYWtlIGJhc2VHUFIK
LSAgICAvLyBzYW1lIHRvIHZhbHVlUmVncywgYW5kIG5vdCBpbmNsdWRlIGl0IGluIHRoZSB1c2Vk
IHJlZ2lzdGVycyBzaW5jZSBpdCB3aWxsIGJlIGNoYW5nZWQuCi0gICAgUmVnaXN0ZXJTZXQgcmVn
aXN0ZXJzVG9TcGlsbEZvckNDYWxsOwotICAgIGZvciAoYXV0byYgdmFsdWUgOiByZWdzKSB7Ci0g
ICAgICAgIERPTUpJVDo6UmVnIHJlZyA9IHZhbHVlLnJlZygpOwotICAgICAgICBpZiAocmVnLmlz
SlNWYWx1ZVJlZ3MoKSkKLSAgICAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQo
cmVnLmpzVmFsdWVSZWdzKCkpOwotICAgICAgICBlbHNlIGlmIChyZWcuaXNHUFIoKSkKLSAgICAg
ICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVnLmdwcigpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChyZWcuZnByKCkp
OwotICAgIH0KLSAgICBmb3IgKEdQUlJlZyByZWcgOiBncFNjcmF0Y2gpCi0gICAgICAgIHJlZ2lz
dGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVnKTsKLSAgICBmb3IgKEZQUlJlZyByZWcgOiBmcFNj
cmF0Y2gpCi0gICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVnKTsKLSAgICBy
ZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6cmVnaXN0ZXJzVG9O
b3RTYXZlRm9yQ0NhbGwoKSk7Ci0KLSAgICBET01KSVRBY2Nlc3NDYXNlUGF0Y2hwb2ludFBhcmFt
cyBwYXJhbXMoV1RGTW92ZShyZWdzKSwgV1RGTW92ZShncFNjcmF0Y2gpLCBXVEZNb3ZlKGZwU2Ny
YXRjaCkpOwotICAgIHBhdGNocG9pbnQtPmdlbmVyYXRvcigpLT5ydW4oaml0LCBwYXJhbXMpOwot
ICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2Vy
dmVkU3RhdGUpOwotICAgIHN0YXRlLnN1Y2NlZWQoKTsKLQotICAgIENDYWxsSGVscGVyczo6SnVt
cExpc3QgZXhjZXB0aW9ucyA9IHBhcmFtcy5lbWl0U2xvd1BhdGhDYWxscyhzdGF0ZSwgcmVnaXN0
ZXJzVG9TcGlsbEZvckNDYWxsLCBqaXQpOwotICAgIGlmICghZXhjZXB0aW9ucy5lbXB0eSgpKSB7
Ci0gICAgICAgIGV4Y2VwdGlvbnMubGluaygmaml0KTsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3Rv
cmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7Ci0gICAgICAg
IHN0YXRlLmVtaXRFeHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIoKTsKLSAgICB9Ci19CiAKIFBvbHlt
b3JwaGljQWNjZXNzOjpQb2x5bW9ycGhpY0FjY2VzcygpIHsgfQogUG9seW1vcnBoaWNBY2Nlc3M6
On5Qb2x5bW9ycGhpY0FjY2VzcygpIHsgfQpAQCAtMTc1NiwzMiArMzk4LDYgQEAgQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSgKICAgICBtX2xpc3Qu
cmVzaXplKGRzdEluZGV4KTsKICAgICAKICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxv
ZygiSW4gcmVnZW5lcmF0ZTogY2FzZXM6ICIsIGxpc3REdW1wKGNhc2VzKSwgIlxuIik7Ci0gICAg
Ci0gICAgLy8gTm93IHRoYXQgd2UndmUgcmVtb3ZlZCBvYnZpb3VzbHkgdW5uZWNlc3NhcnkgY2Fz
ZXMsIHdlIGNhbiBjaGVjayBpZiB0aGUgbWVnYW1vcnBoaWMgbG9hZAotICAgIC8vIG9wdGltaXph
dGlvbiBpcyBhcHBsaWNhYmxlLiBOb3RlIHRoYXQgd2UgYmFzaWNhbGx5IHR1bmUgbWVnYW1vcnBo
aWNMb2FkQ29zdCBhY2NvcmRpbmcgdG8gY29kZQotICAgIC8vIHNpemUuIEl0IHdvdWxkIGJlIGZh
c3RlciB0byBqdXN0IGFsbG93IG1vcmUgcmVwYXRjaGluZyB3aXRoIG1hbnkgbG9hZCBjYXNlcywg
YW5kIGF2b2lkIHRoZQotICAgIC8vIG1lZ2Ftb3JwaGljTG9hZCBvcHRpbWl6YXRpb24sIGlmIHdl
IGhhZCBpbmZpbml0ZSBleGVjdXRhYmxlIG1lbW9yeS4KLSAgICBpZiAoY2FzZXMuc2l6ZSgpID49
IE9wdGlvbnM6Om1heEFjY2Vzc1ZhcmlhbnRMaXN0U2l6ZSgpKSB7Ci0gICAgICAgIHVuc2lnbmVk
IG51bVNlbGZMb2FkcyA9IDA7Ci0gICAgICAgIGZvciAoYXV0byYgbmV3Q2FzZSA6IGNhc2VzKSB7
Ci0gICAgICAgICAgICBpZiAobmV3Q2FzZS0+Y2FuQmVSZXBsYWNlZEJ5TWVnYW1vcnBoaWNMb2Fk
KCkpCi0gICAgICAgICAgICAgICAgbnVtU2VsZkxvYWRzKys7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGlmIChudW1TZWxmTG9hZHMgPj0gT3B0aW9uczo6bWVnYW1vcnBoaWNMb2FkQ29z
dCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBtZWdhID0gQWNjZXNzQ2FzZTo6bWVnYW1vcnBo
aWNMb2FkKHZtLCBjb2RlQmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgY2FzZXMucmVtb3ZlQWxs
TWF0Y2hpbmcoCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+JiBuZXdDYXNlKSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBuZXdDYXNlLT5jYW5CZVJlcGxhY2VkQnlNZWdhbW9ycGhpY0xvYWQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZXMuYXBw
ZW5kKFdURk1vdmUobWVnYSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAg
IAotICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJPcHRpbWl6ZWQgY2FzZXM6ICIs
IGxpc3REdW1wKGNhc2VzKSwgIlxuIik7CiAgICAgCiAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSdy
ZSBjb252aW5jZWQgdGhhdCAnY2FzZXMnIGNvbnRhaW5zIHRoZSBjYXNlcyB0aGF0IHdlIHdhbnQg
dG8gSklUIG5vdyBhbmQgd2UKQEAgLTE5NzgsOSArNTk0LDYgQEAgdm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZSkKICAgICBjYXNl
IEFjY2Vzc0Nhc2U6OkxvYWQ6CiAgICAgICAgIG91dC5wcmludCgiTG9hZCIpOwogICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBBY2Nlc3NDYXNlOjpNZWdhbW9ycGhpY0xvYWQ6Ci0gICAgICAgIG91
dC5wcmludCgiTWVnYW1vcnBoaWNMb2FkIik7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEFj
Y2Vzc0Nhc2U6OlRyYW5zaXRpb246CiAgICAgICAgIG91dC5wcmludCgiVHJhbnNpdGlvbiIpOwog
ICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5oCmluZGV4IDZmNzAxYzVmYWY5ZjFjM2MwNzYwYTAzNzNmMzFlNjg3
ZjNlYTEwNmQuLmQxODUyYzdiNTQ1M2QxZTFlNTU0MDlhMmJhMGU0YjhmOGFkOGU4OWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5o
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAiQWNjZXNz
Q2FzZS5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJKSVRTdHViUm91dGlu
ZS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgiCkBAIC00NywyNzcgKzQ4LDYgQEAg
Y2xhc3MgU3RydWN0dXJlU3R1YkluZm87CiBjbGFzcyBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1
YkluZm87CiBjbGFzcyBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I7CiAKLXN0cnVjdCBBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGU7Ci0KLS8vIEFuIEFjY2Vzc0Nhc2UgZGVzY3JpYmVzIG9uZSBvZiB0aGUg
Y2FzZXMgb2YgYSBQb2x5bW9ycGhpY0FjY2Vzcy4gQSBQb2x5bW9ycGhpY0FjY2VzcyByZXByZXNl
bnRzIGEKLS8vIHBsYW5uZWQgKHRvIGdlbmVyYXRlIGluIGZ1dHVyZSkgb3IgZ2VuZXJhdGVkIHN0
dWIgZm9yIHNvbWUgaW5saW5lIGNhY2hlLiBUaGF0IHN0dWIgY29udGFpbnMgZmFzdAotLy8gcGF0
aCBjb2RlIGZvciBzb21lIGZpbml0ZSBudW1iZXIgb2YgZmFzdCBjYXNlcywgZWFjaCBkZXNjcmli
ZWQgYnkgYW4gQWNjZXNzQ2FzZSBvYmplY3QuCi0vLwotLy8gQW4gQWNjZXNzQ2FzZSBvYmplY3Qg
aGFzIGEgbGlmZWN5Y2xlIHRoYXQgcHJvY2VlZHMgdGhyb3VnaCBzZXZlcmFsIHN0YXRlcy4gTm90
ZSB0aGF0IHRoZSBzdGF0ZXMKLS8vIG9mIEFjY2Vzc0Nhc2UgaGF2ZSBhIGxvdCB0byBkbyB3aXRo
IHRoZSBnbG9iYWwgZWZmZWN0IGVwb2NoICh3ZSdsbCBzYXkgZXBvY2ggZm9yIHNob3J0KS4gVGhp
cyBpcwotLy8gYSBzaW1wbGUgd2F5IG9mIHJlYXNvbmluZyBhYm91dCB0aGUgc3RhdGUgb2YgdGhl
IHN5c3RlbSBvdXRzaWRlIHRoaXMgQWNjZXNzQ2FzZS4gQW55IG9ic2VydmFibGUKLS8vIGVmZmVj
dCAtIGxpa2Ugc3RvcmluZyB0byBhIHByb3BlcnR5LCBjaGFuZ2luZyBhbiBvYmplY3QncyBzdHJ1
Y3R1cmUsIGV0Yy4gLSBpbmNyZW1lbnRzIHRoZSBlcG9jaC4KLS8vIFRoZSBzdGF0ZXMgYXJlOgot
Ly8KLS8vIFByaW1vcmRpYWw6ICAgVGhpcyBpcyBhbiBBY2Nlc3NDYXNlIHRoYXQgd2FzIGp1c3Qg
YWxsb2NhdGVkLiBJdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFueSBhY3R1YWwKLS8vICAgICAg
ICAgICAgICAgY29kZSBhbmQgaXQgaXMgbm90IG93bmVkIGJ5IGFueSBQb2x5bW9ycGhpY0FjY2Vz
cy4gSW4gdGhpcyBzdGF0ZSwgdGhlIEFjY2Vzc0Nhc2UKLS8vICAgICAgICAgICAgICAgYXNzdW1l
cyB0aGF0IGl0IGlzIGluIHRoZSBzYW1lIGVwb2NoIGFzIHdoZW4gaXQgd2FzIGNyZWF0ZWQuIFRo
aXMgaXMgaW1wb3J0YW50Ci0vLyAgICAgICAgICAgICAgIGJlY2F1c2UgaXQgbWF5IG1ha2UgY2xh
aW1zIGFib3V0IGl0c2VsZiAoIkkgcmVwcmVzZW50IGEgdmFsaWQgY2FzZSBzbyBsb25nIGFzIHlv
dQotLy8gICAgICAgICAgICAgICByZWdpc3RlciBhIHdhdGNocG9pbnQgb24gdGhpcyBzZXQiKSB0
aGF0IGNvdWxkIGJlIGNvbnRyYWRpY3RlZCBieSBzb21lIG91dHNpZGUKLS8vICAgICAgICAgICAg
ICAgZWZmZWN0cyAobGlrZSBmaXJpbmcgYW5kIGRlbGV0aW5nIHRoZSB3YXRjaHBvaW50IHNldCBp
biBxdWVzdGlvbikuIFRoaXMgaXMgYWxzbyB0aGUKLS8vICAgICAgICAgICAgICAgc3RhdGUgdGhh
dCBhbiBBY2Nlc3NDYXNlIGlzIGluIHdoZW4gaXQgaXMgY2xvbmVkIChBY2Nlc3NDYXNlOjpjbG9u
ZSgpKS4KLS8vCi0vLyBDb21taXR0ZWQ6ICAgIFRoaXMgaGFwcGVucyBhcyBzb29uIGFzIHNvbWUg
UG9seW1vcnBoaWNBY2Nlc3MgdGFrZXMgb3duZXJzaGlwIG9mIHRoaXMgQWNjZXNzQ2FzZS4KLS8v
ICAgICAgICAgICAgICAgSW4gdGhpcyBzdGF0ZSwgdGhlIEFjY2Vzc0Nhc2Ugbm8gbG9uZ2VyIGFz
c3VtZXMgYW55dGhpbmcgYWJvdXQgdGhlIGVwb2NoLiBUbwotLy8gICAgICAgICAgICAgICBhY2Nv
bXBsaXNoIHRoaXMsIFBvbHltb3JwaGljQWNjZXNzIGNhbGxzIEFjY2Vzc0Nhc2U6OmNvbW1pdCgp
LiBUaGlzIG11c3QgYmUgZG9uZQotLy8gICAgICAgICAgICAgICBkdXJpbmcgdGhlIHNhbWUgZXBv
Y2ggd2hlbiB0aGUgQWNjZXNzQ2FzZSB3YXMgY3JlYXRlZCwgZWl0aGVyIGJ5IHRoZSBjbGllbnQg
b3IgYnkKLS8vICAgICAgICAgICAgICAgY2xvbmUoKS4gV2hlbiBjcmVhdGVkIGJ5IHRoZSBjbGll
bnQsIGNvbW1pdHRpbmcgZHVyaW5nIHRoZSBzYW1lIGVwb2NoIHdvcmtzIGJlY2F1c2UKLS8vICAg
ICAgICAgICAgICAgd2UgY2FuIGJlIHN1cmUgdGhhdCB3aGF0ZXZlciB3YXRjaHBvaW50IHNldHMg
dGhleSBzcG9rZSBvZiBhcmUgc3RpbGwgdmFsaWQuIFdoZW4KLS8vICAgICAgICAgICAgICAgY3Jl
YXRlZCBieSBjbG9uZSgpLCB3ZSBjYW4gYmUgc3VyZSB0aGF0IHRoZSBzZXQgaXMgc3RpbGwgdmFs
aWQgYmVjYXVzZSB0aGUgb3JpZ2luYWwKLS8vICAgICAgICAgICAgICAgb2YgdGhlIGNsb25lIHN0
aWxsIGhhcyB3YXRjaHBvaW50cyBvbiBpdC4KLS8vCi0vLyBHZW5lcmF0ZWQ6ICAgIFRoaXMgaXMg
dGhlIHN0YXRlIHdoZW4gdGhlIFBvbHltb3JwaGljQWNjZXNzIGdlbmVyYXRlcyBjb2RlIGZvciB0
aGlzIGNhc2UgYnkKLS8vICAgICAgICAgICAgICAgY2FsbGluZyBBY2Nlc3NDYXNlOjpnZW5lcmF0
ZSgpIG9yIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKCkuIEF0IHRoaXMgcG9pbnQKLS8v
ICAgICAgICAgICAgICAgdGhlIGNhc2Ugb2JqZWN0IHdpbGwgaGF2ZSBzb21lIGV4dHJhIHN0dWZm
IGluIGl0LCBsaWtlIHBvc3NpYmx5IHRoZSBDYWxsTGlua0luZm8KLS8vICAgICAgICAgICAgICAg
b2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5saW5lIGNhY2hlLgotLy8gICAgICAgICAgICAg
ICBGSVhNRTogTW92aW5nIGludG8gdGhlIEdlbmVyYXRlZCBzdGF0ZSBzaG91bGQgbm90IG11dGF0
ZSB0aGUgQWNjZXNzQ2FzZSBvYmplY3Qgb3IKLS8vICAgICAgICAgICAgICAgcHV0IG1vcmUgc3R1
ZmYgaW50byBpdC4gSWYgd2UgZml4IHRoaXMsIHRoZW4gd2UgY2FuIGdldCByaWQgb2YgQWNjZXNz
Q2FzZTo6Y2xvbmUoKS4KLS8vICAgICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1NjQ1NgotLy8KLS8vIEFuIEFjY2Vzc0Nhc2UgbWF5IGJlIGRlc3Ry
b3llZCB3aGlsZSBpbiBhbnkgb2YgdGhlc2Ugc3RhdGVzLgotLy8KLS8vIFdlIHdpbGwgc29tZXRp
bWVzIGJ1ZmZlciBjb21taXR0ZWQgQWNjZXNzQ2FzZXMgaW4gdGhlIFBvbHltb3JwaGljQWNjZXNz
IG9iamVjdCBiZWZvcmUgZ2VuZXJhdGluZwotLy8gY29kZS4gVGhpcyBhbGxvd3MgdXMgdG8gb25s
eSByZWdlbmVyYXRlIG9uY2Ugd2UndmUgYWNjdW11bGF0ZWQgKGhvcGVmdWxseSkgbW9yZSB0aGFu
IG9uZSBuZXcKLS8vIEFjY2Vzc0Nhc2UuCi1jbGFzcyBBY2Nlc3NDYXNlIHsKLSAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShBY2Nlc3NDYXNlKTsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBlbnVtIEFjY2Vzc1R5cGUgOiB1aW50OF90IHsKLSAgICAgICAgTG9hZCwK
LSAgICAgICAgTWVnYW1vcnBoaWNMb2FkLAotICAgICAgICBUcmFuc2l0aW9uLAotICAgICAgICBS
ZXBsYWNlLAotICAgICAgICBNaXNzLAotICAgICAgICBHZXRHZXR0ZXIsCi0gICAgICAgIEdldHRl
ciwKLSAgICAgICAgU2V0dGVyLAotICAgICAgICBDdXN0b21WYWx1ZUdldHRlciwKLSAgICAgICAg
Q3VzdG9tQWNjZXNzb3JHZXR0ZXIsCi0gICAgICAgIEN1c3RvbVZhbHVlU2V0dGVyLAotICAgICAg
ICBDdXN0b21BY2Nlc3NvclNldHRlciwKLSAgICAgICAgSW50cmluc2ljR2V0dGVyLAotICAgICAg
ICBJbkhpdCwKLSAgICAgICAgSW5NaXNzLAotICAgICAgICBBcnJheUxlbmd0aCwKLSAgICAgICAg
U3RyaW5nTGVuZ3RoLAotICAgICAgICBEaXJlY3RBcmd1bWVudHNMZW5ndGgsCi0gICAgICAgIFNj
b3BlZEFyZ3VtZW50c0xlbmd0aAotICAgIH07Ci0gICAgCi0gICAgZW51bSBTdGF0ZSA6IHVpbnQ4
X3QgewotICAgICAgICBQcmltb3JkaWFsLAotICAgICAgICBDb21taXR0ZWQsCi0gICAgICAgIEdl
bmVyYXRlZAotICAgIH07Ci0KLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IHRyeUdldCgKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0
eU9mZnNldCwgU3RydWN0dXJlKiwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKLSAgICAgICAgYm9vbCB2aWFQ
cm94eSA9IGZhbHNlLAotICAgICAgICBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0ID0gbnVs
bHB0cik7Ci0KLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGdldCgKLSAg
ICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNldCwgU3Ry
dWN0dXJlKiwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKLSAgICAgICAgYm9vbCB2aWFQcm94eSA9IGZhbHNl
LAotICAgICAgICBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0ID0gbnVsbHB0ciwKLSAgICAg
ICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgPSBudWxscHRyLAotICAgICAgICBKU09iamVj
dCogY3VzdG9tU2xvdEJhc2UgPSBudWxscHRyLAotICAgICAgICBET01KSVQ6OkdldHRlclNldHRl
ciogPSBudWxscHRyKTsKLSAgICAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IG1lZ2Ftb3JwaGljTG9hZChWTSYsIEpTQ2VsbCogb3duZXIpOwotICAgIAotICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVwbGFjZShWTSYsIEpTQ2VsbCogb3duZXIs
IFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKLQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gdHJhbnNpdGlvbigKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5
T2Zmc2V0LAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKLQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4gc2V0dGVyKAotICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5
cGUsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0LAotICAgICAgICBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYsIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jID0gbnVsbHB0
ciwKLSAgICAgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlID0gbnVsbHB0cik7Ci0KLSAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGluKAotICAgICAgICBWTSYsIEpTQ2Vs
bCogb3duZXIsIEFjY2Vzc1R5cGUsIFN0cnVjdHVyZSosCi0gICAgICAgIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwotCi0g
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBnZXRMZW5ndGgoVk0mLCBKU0Nl
bGwqIG93bmVyLCBBY2Nlc3NUeXBlKTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IGdldEludHJpbnNpYyhWTSYsIEpTQ2VsbCogb3duZXIsIEpTRnVuY3Rpb24qIGludHJp
bnNpYywgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0Jik7Ci0gICAgCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PiBmcm9tU3RydWN0dXJlU3R1YkluZm8oVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwotCi0gICAgfkFjY2Vzc0Nhc2UoKTsKLSAgICAKLSAgICBBY2Nlc3NUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGU7IH0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX29mZnNldDsgfQotICAgIGJvb2wgdmlhUHJveHkoKSBjb25zdCB7IHJldHVybiBtX3JhcmVE
YXRhID8gbV9yYXJlRGF0YS0+dmlhUHJveHkgOiBmYWxzZTsgfQotICAgIAotICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX3R5cGUgPT0gVHJhbnNp
dGlvbikKLSAgICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpOwotICAg
ICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgfQotICAgIGJvb2wgZ3VhcmRlZEJ5
U3RydWN0dXJlQ2hlY2soKSBjb25zdDsKLQotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHJhbnNpdGlvbik7Ci0gICAg
ICAgIHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRp
b25TZXQ7IH0KLSAgICBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbigpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQodHlwZSgpID09IEludHJpbnNpY0dldHRlciAmJiBtX3JhcmVEYXRh
KTsKLSAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPmludHJpbnNpY0Z1bmN0aW9uLmdldCgpOwot
ICAgIH0KLSAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBpbnRyaW5zaWNGdW5jdGlvbigpLT5pbnRyaW5zaWMoKTsKLSAgICB9Ci0KLSAgICBET01K
SVQ6OkdldHRlclNldHRlciogZG9tSklUKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCht
X3JhcmVEYXRhKTsKLSAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPmRvbUpJVDsKLSAgICB9Ci0K
LSAgICBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldC5nZXQoKSA6IG51
bGxwdHI7Ci0gICAgfQotCi0gICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+Y3VzdG9tU2xvdEJh
c2UuZ2V0KCkgOiBudWxscHRyOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNl
KCkgY29uc3Q7Ci0KLSAgICAvLyBJZiB5b3Ugc3VwcGx5IHRoZSBvcHRpb25hbCB2ZWN0b3IsIHRo
aXMgd2lsbCBhcHBlbmQgdGhlIHNldCBvZiBjZWxscyB0aGF0IHRoaXMgd2lsbCBuZWVkIHRvIGtl
ZXAgYWxpdmUKLSAgICAvLyBwYXN0IHRoZSBjYWxsLgotICAgIGJvb2wgZG9lc0NhbGxzKFZlY3Rv
cjxKU0NlbGwqPiogY2VsbHNUb01hcmsgPSBudWxscHRyKSBjb25zdDsKLQotICAgIGJvb2wgaXNH
ZXR0ZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKLSAgICAgICAg
Y2FzZSBHZXR0ZXI6Ci0gICAgICAgIGNhc2UgQ3VzdG9tVmFsdWVHZXR0ZXI6Ci0gICAgICAgIGNh
c2UgQ3VzdG9tQWNjZXNzb3JHZXR0ZXI6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIFRoaXMgY2FuIHJldHVybiBudWxsIGV2ZW4gZm9yIGEgZ2V0dGVyL3NldHRlciwg
aWYgaXQgaGFzbid0IGJlZW4gZ2VuZXJhdGVkIHlldC4gVGhhdCdzCi0gICAgLy8gYWN0dWFsbHkg
c29tZXdoYXQgbGlrZWx5IGJlY2F1c2Ugb2YgaG93IHdlIGRvIGJ1ZmZlcmluZyBvZiBuZXcgY2Fz
ZXMuCi0gICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8oKSBjb25zdAotICAgIHsKLSAgICAg
ICAgaWYgKCFtX3JhcmVEYXRhKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IHJldHVybiBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0KCk7Ci0gICAgfQotICAgIAotICAg
IC8vIElzIGl0IHN0aWxsIHBvc3NpYmxlIGZvciB0aGlzIGNhc2UgdG8gZXZlciBiZSB0YWtlbj8g
IE11c3QgY2FsbCB0aGlzIGFzIGEgcHJlcmVxdWlzaXRlIGZvcgotICAgIC8vIGNhbGxpbmcgZ2Vu
ZXJhdGUoKSBhbmQgZnJpZW5kcy4gIElmIHRoaXMgcmV0dXJucyB0cnVlLCB0aGVuIHlvdSBjYW4g
Y2FsbCBnZW5lcmF0ZSgpLiAgSWYKLSAgICAvLyB0aGlzIHJldHVybnMgZmFsc2UsIHRoZW4gZ2Vu
ZXJhdGUoKSB3aWxsIGNyYXNoLiAgWW91IG11c3QgY2FsbCBnZW5lcmF0ZSgpIGluIHRoZSBzYW1l
IGVwb2NoCi0gICAgLy8gYXMgd2hlbiB5b3UgY2FsbGVkIGNvdWxkU3RpbGxTdWNjZWVkKCkuCi0g
ICAgYm9vbCBjb3VsZFN0aWxsU3VjY2VlZCgpIGNvbnN0OwotICAgIAotICAgIHN0YXRpYyBib29s
IGNhbkVtaXRJbnRyaW5zaWNHZXR0ZXIoSlNGdW5jdGlvbiosIFN0cnVjdHVyZSopOwotCi0gICAg
Ym9vbCBjYW5CZVJlcGxhY2VkQnlNZWdhbW9ycGhpY0xvYWQoKSBjb25zdDsKLQotICAgIC8vIElm
IHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhlbiBpdCdzIGEgZ29vZCBpZGVhIHRvIHJlbW92
ZSAnb3RoZXInIGZyb20gdGhlIGFjY2VzcyBvbmNlICd0aGlzJwotICAgIC8vIGlzIGFkZGVkLiBU
aGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgaW4gY2FzZSBvZiBjb250cmFkaWN0aW9ucywgJ3RoaXMn
IHJlcHJlc2VudHMgYSBuZXdlciwgYW5kIHNvCi0gICAgLy8gbW9yZSB1c2VmdWwsIHRydXRoLiBU
aGlzIG1ldGhvZCBjYW4gYmUgY29uc2VydmF0aXZlOyBpdCB3aWxsIHJldHVybiBmYWxzZSB3aGVu
IGl0IGRvdWJ0LgotICAgIGJvb2wgY2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcikg
Y29uc3Q7Ci0KLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7Ci0gICAgCi1w
cml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgZnJpZW5kIGNsYXNzIFBv
bHltb3JwaGljQWNjZXNzOwotCi0gICAgQWNjZXNzQ2FzZSgpOwotCi0gICAgYm9vbCB2aXNpdFdl
YWsoVk0mKSBjb25zdDsKLSAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9y
JikgY29uc3Q7Ci0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBv
ZiBob3cgQWNjZXNzQ2FzZSBwdXRzIHBvc3QtZ2VuZXJhdGlvbiB0aGluZ3MgaW50byBpdHNlbGYu
Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ1Ngot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjbG9uZSgpIGNvbnN0OwotICAgIAotICAg
IC8vIFBlcmZvcm0gYW55IGFjdGlvbiB0aGF0IG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUg
ZW5kIG9mIHRoZSBlcG9jaCBpbiB3aGljaCB0aGUgY2FzZQotICAgIC8vIHdhcyBjcmVhdGVkLiBS
ZXR1cm5zIGEgc2V0IG9mIHdhdGNocG9pbnQgc2V0cyB0aGF0IHdpbGwgbmVlZCB0byBiZSB3YXRj
aGVkLgotICAgIFZlY3RvcjxXYXRjaHBvaW50U2V0KiwgMj4gY29tbWl0KFZNJiwgY29uc3QgSWRl
bnRpZmllciYpOwotCi0gICAgLy8gRmFsbCB0aHJvdWdoIG9uIHN1Y2Nlc3MuIFR3byBraW5kcyBv
ZiBmYWlsdXJlcyBhcmUgc3VwcG9ydGVkOiBmYWxsLXRocm91Z2gsIHdoaWNoIG1lYW5zIHRoYXQg
d2UKLSAgICAvLyBzaG91bGQgdHJ5IGEgZGlmZmVyZW50IGNhc2U7IGFuZCBmYWlsdXJlLCB3aGlj
aCBtZWFucyB0aGF0IHRoaXMgd2FzIHRoZSByaWdodCBjYXNlIGJ1dCBpdCBuZWVkcwotICAgIC8v
IGhlbHAgZnJvbSB0aGUgc2xvdyBwYXRoLgotICAgIHZvaWQgZ2VuZXJhdGVXaXRoR3VhcmQoQWNj
ZXNzR2VuZXJhdGlvblN0YXRlJiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWxsVGhyb3Vn
aCk7Ci0KLSAgICAvLyBGYWxsIHRocm91Z2ggb24gc3VjY2VzcywgYWRkIGEganVtcCB0byB0aGUg
ZmFpbHVyZSBsaXN0IG9uIGZhaWx1cmUuCi0gICAgdm9pZCBnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0
aW9uU3RhdGUmKTsKLSAgICAKLSAgICB2b2lkIGdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9u
U3RhdGUmKTsKLSAgICB2b2lkIGVtaXRJbnRyaW5zaWNHZXR0ZXIoQWNjZXNzR2VuZXJhdGlvblN0
YXRlJik7Ci0gICAgdm9pZCBlbWl0RE9NSklUR2V0dGVyKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYs
IEdQUlJlZyBiYXNlRm9yR2V0R1BSKTsKLSAgICAKLSAgICBBY2Nlc3NUeXBlIG1fdHlwZSB7IExv
YWQgfTsKLSAgICBTdGF0ZSBtX3N0YXRlIHsgUHJpbW9yZGlhbCB9OwotICAgIFByb3BlcnR5T2Zm
c2V0IG1fb2Zmc2V0IHsgaW52YWxpZE9mZnNldCB9OwotCi0gICAgLy8gVXN1YWxseSB0aGlzIGlz
IHRoZSBzdHJ1Y3R1cmUgdGhhdCB3ZSBleHBlY3QgdGhlIGJhc2Ugb2JqZWN0IHRvIGhhdmUuIEJ1
dCwgdGhpcyBpcyB0aGUgKm5ldyoKLSAgICAvLyBzdHJ1Y3R1cmUgZm9yIGEgdHJhbnNpdGlvbiBh
bmQgd2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGl0IGhhcyBhIHN0cm9uZyByZWZlcmVuY2UgdG8g
dGhlIG9sZAotICAgIC8vIHN0cnVjdHVyZS4gRm9yIHByb3hpZXMsIHRoaXMgaXMgdGhlIHN0cnVj
dHVyZSBvZiB0aGUgb2JqZWN0IGJlaGluZCB0aGUgcHJveHkuCi0gICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7Ci0KLSAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBt
X2NvbmRpdGlvblNldDsKLQotICAgIGNsYXNzIFJhcmVEYXRhIHsKLSAgICAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBSYXJlRGF0YSgpCi0gICAgICAg
ICAgICA6IHZpYVByb3h5KGZhbHNlKQotICAgICAgICAgICAgLCBkb21KSVQobnVsbHB0cikKLSAg
ICAgICAgewotICAgICAgICAgICAgY3VzdG9tQWNjZXNzb3Iub3BhcXVlID0gbnVsbHB0cjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgYm9vbCB2aWFQcm94eTsKLSAgICAgICAgUmVmUHRy
PFdhdGNocG9pbnRTZXQ+IGFkZGl0aW9uYWxTZXQ7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBwcm9iYWJseSBsaXZlIGluIHRoZSBzdHViIHJvdXRpbmUgb2JqZWN0LgotICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NDU2Ci0gICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua0luZm8+IGNhbGxMaW5rSW5mbzsKLSAgICAgICAgdW5p
b24gewotICAgICAgICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyOwotICAg
ICAgICAgICAgUHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgc2V0dGVyOwotICAgICAgICAg
ICAgdm9pZCogb3BhcXVlOwotICAgICAgICB9IGN1c3RvbUFjY2Vzc29yOwotICAgICAgICBXcml0
ZUJhcnJpZXI8SlNPYmplY3Q+IGN1c3RvbVNsb3RCYXNlOwotICAgICAgICBXcml0ZUJhcnJpZXI8
SlNGdW5jdGlvbj4gaW50cmluc2ljRnVuY3Rpb247Ci0gICAgICAgIERPTUpJVDo6R2V0dGVyU2V0
dGVyKiBkb21KSVQ7Ci0gICAgfTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9y
YXJlRGF0YTsKLX07Ci0KIGNsYXNzIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgewogcHVibGljOgog
ICAgIGVudW0gS2luZCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1Byb3h5YWJsZUFjY2Vzc0Nhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NzhiZTIyMjg1NzkzMGE0NTcyN2I0
YWU0NzRkOTJkMWE5Njk1Y2EwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuaApAQCAtMCwwICsxLDU5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQWNjZXNzQ2FzZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgUHJveHlhYmxlQWNjZXNzQ2FzZSA6IHB1YmxpYyBBY2Nlc3NDYXNlIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIEFjY2Vzc0Nhc2UgQmFzZTsKKworICAgIGJvb2wgdmlhUHJv
eHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3ZpYVByb3h5OyB9CisgICAgV2F0Y2hwb2lu
dFNldCogYWRkaXRpb25hbFNldCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYWRkaXRpb25h
bFNldC5nZXQoKTsgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBj
cmVhdGUoVk0mLCBKU0NlbGwqLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJl
KiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQoKSwKKyAgICAgICAgYm9vbCB2aWFQcm94eSA9IGZhbHNlLCBXYXRjaHBvaW50U2V0
KiBhZGRpdGlvbmFsU2V0ID0gbnVsbHB0cik7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3Ry
ZWFtJiwgQ29tbWFQcmludGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB+UHJveHlhYmxlQWNj
ZXNzQ2FzZSgpOworCitwcm90ZWN0ZWQ6CisgICAgUHJveHlhYmxlQWNjZXNzQ2FzZShWTSYsIEpT
Q2VsbCosIEFjY2Vzc1R5cGUsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFk
ZGl0aW9uYWxTZXQpOworCitwcml2YXRlOgorICAgIGJvb2wgbV92aWFQcm94eTsKKyAgICBSZWZQ
dHI8V2F0Y2hwb2ludFNldD4gbV9hZGRpdGlvbmFsU2V0OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCmluZGV4IGZjMGE0NzJkYjJiZTUwODk1OTUwNGNj
YjgxNmRlNmNiZDVmNTE4NDEuLjc5NjVhMjZiZjc2ZDNkMDBjMmFhY2FlMTE4OTdkNmIxN2QwZjkw
YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQ
dXRCeUlkU3RhdHVzLmgiCiAKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgogI2lu
Y2x1ZGUgIkxMSW50RGF0YS5oIgpAQCAtMjI3LDcgKzIyOCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAogICAgICAgICAgICAgICAgIGNhc2UgQ29t
cGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewogICAgICAgICAgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzID0KICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGFjY2Vzcy5jYWxsTGlu
a0luZm8oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8gPSBhY2Nlc3MuYXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8o
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgKmNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBw
cm9maWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKTsKICAgICAgICAg
ICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXggMzhlNWNlZjkyMzdhMDg2YjZiNDYxZmZkZjM5Zjlh
ZDQ0Y2VlN2I2NS4uNzBiNzY3YzU3NzM4NTlkYWMyMDM4YzQ5MTU5YWEwNTM4ZGUyODFmMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uY3BwCkBAIC0yMTYsOCArMjE2LDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQo
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgfQogCiAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7
Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQdXJlOgotICAgICAgICByZXNldEdldEJ5SUQoY29k
ZUJsb2NrLCAqdGhpcywgR2V0QnlJREtpbmQ6OlB1cmUpOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
VHJ5R2V0OgorICAgICAgICByZXNldEdldEJ5SUQoY29kZUJsb2NrLCAqdGhpcywgR2V0QnlJREtp
bmQ6OlRyeSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0OgogICAg
ICAgICByZXNldEdldEJ5SUQoY29kZUJsb2NrLCAqdGhpcywgR2V0QnlJREtpbmQ6Ok5vcm1hbCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oCmluZGV4IGMyMjVjMDUzMDQwYzkxMTYyNDY5MTMwNWU5NmNiYjliM2FiMjhmMmQuLmFkNzFj
MDYyNTRmY2ZjNjk0YjE0M2EyYWU5NTM4ZDViOTk3YTdiNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCkBAIC00Niw3ICs0Niw3
IEBAIGNsYXNzIFBvbHltb3JwaGljQWNjZXNzOwogCiBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBp
bnQ4X3QgewogICAgIEdldCwKLSAgICBHZXRQdXJlLAorICAgIFRyeUdldCwKICAgICBQdXQsCiAg
ICAgSW4KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCmluZGV4IGU1NjUxZjJiNWNkZmVjZjYyODA1M2ZiZjJhMDFkZGFiMjFmMDA2MDUuLjM3
NWE5MjRhMzYyZjA4NDRmMjJkMDk3Y2VjNGNkZGFjYjgxMTk5MjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC00NTMxLDcgKzQ1MzEs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAg
ICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9kZmdDb2Rl
QmxvY2ssCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9zdHViSW5mb3MsIG1f
ZGZnU3R1YkluZm9zLAogICAgICAgICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCksIHVpZCk7
Ci0gICAgICAgICAgICBBY2Nlc3NUeXBlIHR5cGUgPSBvcF90cnlfZ2V0X2J5X2lkID09IG9wY29k
ZUlEID8gQWNjZXNzVHlwZTo6R2V0UHVyZSA6IEFjY2Vzc1R5cGU6OkdldDsKKyAgICAgICAgICAg
IEFjY2Vzc1R5cGUgdHlwZSA9IG9wX3RyeV9nZXRfYnlfaWQgPT0gb3Bjb2RlSUQgPyBBY2Nlc3NU
eXBlOjpUcnlHZXQgOiBBY2Nlc3NUeXBlOjpHZXQ7CiAKICAgICAgICAgICAgIHVuc2lnbmVkIG9w
Y29kZUxlbmd0aCA9IG9wY29kZUlEID09IG9wX3RyeV9nZXRfYnlfaWQgPyBPUENPREVfTEVOR1RI
KG9wX3RyeV9nZXRfYnlfaWQpIDogT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDBk
OGE0ZjA2ZGQwYzA0ZDdjZmY2NWQ5NTE0ZGVkOWM1Y2I0OWZmNTYuLjA5MjE5ZDFkN2JhOWJjZGJl
NTM3MTBhMTM0MjYyYjY4NThmNzM5OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0xMDA2LDcgKzEwMDYsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlVHJ5R2V0QnlJZChOb2RlKiBub2RlKQogCiAgICAgICAgIGJhc2Uu
dXNlKCk7CiAKLSAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGJh
c2VSZWdzLCByZXN1bHRSZWdzLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIEpJVENvbXBpbGVy
OjpKdW1wKCksIE5lZWRUb1NwaWxsLCBBY2Nlc3NUeXBlOjpHZXRQdXJlKTsKKyAgICAgICAgY2Fj
aGVkR2V0QnlJZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGJhc2VSZWdzLCByZXN1bHRSZWdzLCBu
b2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIEpJVENvbXBpbGVyOjpKdW1wKCksIE5lZWRUb1NwaWxs
LCBBY2Nlc3NUeXBlOjpUcnlHZXQpOwogCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVn
cywgbm9kZSwgRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAg
ICAgICBicmVhazsKQEAgLTEwMjMsNyArMTAyMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVUcnlHZXRCeUlkKE5vZGUqIG5vZGUpCiAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlUmVncyk7CiAKLSAgICAgICAgY2Fj
aGVkR2V0QnlJZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGJhc2VSZWdzLCByZXN1bHRSZWdzLCBu
b2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGwsIE5lZWRUb1NwaWxsLCBBY2Nlc3NUeXBl
OjpHZXRQdXJlKTsKKyAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLT5vcmlnaW4uc2VtYW50aWMs
IGJhc2VSZWdzLCByZXN1bHRSZWdzLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGws
IE5lZWRUb1NwaWxsLCBBY2Nlc3NUeXBlOjpUcnlHZXQpOwogCiAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0UmVncywgbm9kZSwgRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxp
Y2l0bHkpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAppbmRleCA4ZjAwZjFjY2NmNGM0ZDNiMTdjYTFjZTMwNWQ1NWFmMDI0
OWIxOTZjLi42NDIwZTY3ZGUyN2RjZjc3Y2E5YmYxZTljZmVmOGJiNWZhZTA1YjhlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC02MjYsNyAr
NjI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNvbXBpbGVQdXRTdHJ1Y3R1cmUoKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRyeUdldEJ5SWQ6Ci0gICAgICAgICAgICBj
b21waWxlR2V0QnlJZChBY2Nlc3NUeXBlOjpHZXRQdXJlKTsKKyAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeUlkKEFjY2Vzc1R5cGU6OlRyeUdldCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBHZXRCeUlkOgogICAgICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKQEAgLTI4MTQsNyArMjgx
NCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0QnlJZChBY2Nlc3NUeXBl
IHR5cGUpCiAgICAgewotICAgICAgICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpHZXQgfHwg
dHlwZSA9PSBBY2Nlc3NUeXBlOjpHZXRQdXJlKTsKKyAgICAgICAgQVNTRVJUKHR5cGUgPT0gQWNj
ZXNzVHlwZTo6R2V0IHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6VHJ5R2V0KTsKICAgICAgICAgc3dp
dGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewogICAgICAgICBjYXNlIENlbGxVc2U6
IHsKICAgICAgICAgICAgIHNldEpTVmFsdWUoZ2V0QnlJZChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpLCB0eXBlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ludHJp
bnNpY0VtaXR0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JbnRyaW5zaWNFbWl0
dGVyLmNwcAppbmRleCBjODJiOGEzZGIyZjJiNjhjMzc0M2I5NTQ3ZmE1Y2Q3M2QzMDhjOWQ4Li40
ZmI3YTU5MDlkZGQ1YWZjMmM1NDFkMmEzYjJlYmFhMmNkNzc3NDc2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0ludHJpbnNpY0VtaXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSW50cmluc2ljRW1pdHRlci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgi
CiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKQEAgLTQ4LDcgKzQ5LDcgQEAgdHlw
ZWRlZiBDQ2FsbEhlbHBlcnM6OkltbVB0ciBJbW1QdHI7CiB0eXBlZGVmIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTY0IFRydXN0ZWRJbW02NDsKIHR5cGVkZWYgQ0NhbGxIZWxwZXJzOjpJbW02NCBJ
bW02NDsKIAotYm9vbCBBY2Nlc3NDYXNlOjpjYW5FbWl0SW50cmluc2ljR2V0dGVyKEpTRnVuY3Rp
b24qIGdldHRlciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitib29sIEludHJpbnNpY0dldHRlckFj
Y2Vzc0Nhc2U6OmNhbkVtaXRJbnRyaW5zaWNHZXR0ZXIoSlNGdW5jdGlvbiogZ2V0dGVyLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKIHsKIAogICAgIHN3aXRjaCAoZ2V0dGVyLT5pbnRyaW5zaWMoKSkg
ewpAQCAtNjgsNyArNjksNyBAQCBib29sIEFjY2Vzc0Nhc2U6OmNhbkVtaXRJbnRyaW5zaWNHZXR0
ZXIoSlNGdW5jdGlvbiogZ2V0dGVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZQogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgQWNjZXNzQ2FzZTo6ZW1pdEludHJpbnNp
Y0dldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQordm9pZCBJbnRyaW5zaWNHZXR0
ZXJBY2Nlc3NDYXNlOjplbWl0SW50cmluc2ljR2V0dGVyKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYg
c3RhdGUpCiB7CiAgICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqc3RhdGUuaml0OwogICAgIEpTVmFs
dWVSZWdzIHZhbHVlUmVncyA9IHN0YXRlLnZhbHVlUmVnczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IGNiOTA2ZGFhMjk3MTFhYTJjMGJiZGQxMGVh
ODBiMDMyZjM1ZDljYjEuLjgxYmI1ZTc0ZDA5MGFkNDM3ZTlhNDM4MDAxMGY0NTI0NDZkODk1ZmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtMjEx
LDcgKzIxMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5R2V0
QnlJZE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBpZiAoc3R1YkluZm8tPmNvbnNp
ZGVyQ2FjaGluZyhiYXNlVmFsdWUuc3RydWN0dXJlT3JOdWxsKCkpICYmICFzbG90LmlzVGFpbnRl
ZEJ5T3BhcXVlT2JqZWN0KCkgJiYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpIHx8IHNsb3QuaXND
YWNoZWFibGVHZXR0ZXIoKSB8fCBzbG90LmlzVW5zZXQoKSkpCi0gICAgICAgIHJlcGF0Y2hHZXRC
eUlEKGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywgR2V0QnlJREtpbmQ6
OlB1cmUpOworICAgICAgICByZXBhdGNoR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBz
bG90LCAqc3R1YkluZm8sIEdldEJ5SURLaW5kOjpUcnkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShzbG90LmdldFB1cmVSZXN1bHQoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IDhkY2Y0OWNlMDExMmJkNDcwMDgy
ODRjYzJlMGIxODI1MGU3NjYxOGYuLmJmZjUzNjA4ZDdhNTQwYzk0ODYxMzZhZTgzZDVlOGMwY2Zh
MTc1ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCkBAIC01NzksNyArNTc5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9p
ZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZz
ZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRQdXJlKTsKKyAgICAg
ICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEFjY2Vzc1R5cGU6OlRyeUdldCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCmluZGV4IDVmMTRlOTA2YmNjMTE5YTk4YjRmMWVjMTRmNjA1ZjgzOWVi
OWM3NGMuLmJjMzRiMzAwMDdlM2YzYmMxMzhlZTc1MGY3MDUyNGE5MTJjMGY3Y2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cApAQCAtNTk0LDcgKzU5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
Z2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwg
Q2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24pLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdzOjpw
YXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEFjY2Vzc1R5cGU6
OkdldFB1cmUpOworICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9u
bHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBBY2Nlc3NUeXBlOjpUcnlHZXQp
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAppbmRleCAyOGVmN2M2NTZiYTc4M2E4NDAwODFkNjZlODFl
M2Y5MmU4MDI4YzUzLi41YmZkODQ1M2M1MzIwYTQ1MGFjNzE1MTFmZjNlNzg0ZDA0YjEzNGM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAog
I2lmIEVOQUJMRShKSVQpCiAKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCiAj
aW5jbHVkZSAiQmluYXJ5U3dpdGNoLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5j
bHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKQEAgLTQxLDYgKzQyLDcgQEAKICNpbmNsdWRlICJH
ZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJJQ1N0YXRzLmgiCiAjaW5jbHVkZSAiSW5saW5lQWNj
ZXNzLmgiCisjaW5jbHVkZSAiSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oIgogI2luY2x1ZGUg
IkpJVC5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CkBAIC0xNzYsMTggKzE3OCwxOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVH
ZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbgogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nh
c2U6OmdldExlbmd0aCh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCk7Cisg
ICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFj
Y2Vzc0Nhc2U6OkFycmF5TGVuZ3RoKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0pTU3RyaW5nKGJh
c2VWYWx1ZSkpCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZt
LCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aCk7CisgICAgICAgICAgICBuZXdD
YXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlN0cmlu
Z0xlbmd0aCk7CiAgICAgICAgIGVsc2UgaWYgKERpcmVjdEFyZ3VtZW50cyogYXJndW1lbnRzID0g
anNEeW5hbWljQ2FzdDxEaXJlY3RBcmd1bWVudHMqPih2bSwgYmFzZVZhbHVlKSkgewogICAgICAg
ICAgICAgLy8gSWYgdGhlcmUgd2VyZSBvdmVycmlkZXMsIHRoZW4gd2UgY2FuIGhhbmRsZSB0aGlz
IGFzIGEgbm9ybWFsIHByb3BlcnR5IGxvYWQhIEd1YXJkaW5nCiAgICAgICAgICAgICAvLyB0aGlz
IHdpdGggc3VjaCBhIGNoZWNrIGVuYWJsZXMgdXMgdG8gYWRkIGFuIElDIGNhc2UgZm9yIHRoYXQg
bG9hZCBpZiBuZWVkZWQuCiAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+b3ZlcnJvZGVUaGlu
Z3MoKSkKLSAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZt
LCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkRpcmVjdEFyZ3VtZW50c0xlbmd0aCk7CisgICAgICAg
ICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nl
c3NDYXNlOjpEaXJlY3RBcmd1bWVudHNMZW5ndGgpOwogICAgICAgICB9IGVsc2UgaWYgKFNjb3Bl
ZEFyZ3VtZW50cyogYXJndW1lbnRzID0ganNEeW5hbWljQ2FzdDxTY29wZWRBcmd1bWVudHMqPih2
bSwgYmFzZVZhbHVlKSkgewogICAgICAgICAgICAgLy8gRGl0dG8uCiAgICAgICAgICAgICBpZiAo
IWFyZ3VtZW50cy0+b3ZlcnJvZGVUaGluZ3MoKSkKLSAgICAgICAgICAgICAgICBuZXdDYXNlID0g
QWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlNjb3BlZEFy
Z3VtZW50c0xlbmd0aCk7CisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNy
ZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTY29wZWRBcmd1bWVudHNMZW5ndGgpOwog
ICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMjY3LDcgKzI2OSw3IEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgY29uCiAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5k
b21KSVQoKSkKICAgICAgICAgICAgIGRvbUpJVCA9IHNsb3QuZG9tSklUKCk7CiAKLSAgICAgICAg
aWYgKGtpbmQgPT0gR2V0QnlJREtpbmQ6OlB1cmUpIHsKKyAgICAgICAgaWYgKGtpbmQgPT0gR2V0
QnlJREtpbmQ6OlRyeSkgewogICAgICAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBl
OwogICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQogICAgICAgICAgICAg
ICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpMb2FkOwpAQCAtMjc4LDI3ICsyODAsMjggQEAgc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgYmFzZVZhbHVlLCBjb24KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNz
Q2FzZTo6dHJ5R2V0KHZtLCBjb2RlQmxvY2ssIHR5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25k
aXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpKTsKLSAg
ICAgICAgfSBlbHNlIGlmICghbG9hZFRhcmdldEZyb21Qcm94eSAmJiBnZXR0ZXIgJiYgQWNjZXNz
Q2FzZTo6Y2FuRW1pdEludHJpbnNpY0dldHRlcihnZXR0ZXIsIHN0cnVjdHVyZSkpCi0gICAgICAg
ICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0SW50cmluc2ljKHZtLCBjb2RlQmxvY2ssIGdl
dHRlciwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQpOworICAg
ICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJs
b2NrLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJv
bVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWxvYWRU
YXJnZXRGcm9tUHJveHkgJiYgZ2V0dGVyICYmIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OmNh
bkVtaXRJbnRyaW5zaWNHZXR0ZXIoZ2V0dGVyLCBzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgbmV3
Q2FzZSA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBz
bG90LmNhY2hlZE9mZnNldCgpLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgZ2V0dGVyKTsKICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7Ci0g
ICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAg
dHlwZSA9IEFjY2Vzc0Nhc2U6OkxvYWQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChzbG90LmlzVW5z
ZXQoKSkKLSAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TWlzczsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICB0
eXBlID0gQWNjZXNzQ2FzZTo6R2V0dGVyOwotICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5hdHRy
aWJ1dGVzKCkgJiBDdXN0b21BY2Nlc3NvcikKLSAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNz
Q2FzZTo6Q3VzdG9tQWNjZXNzb3JHZXR0ZXI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlR2V0dGVyOwotCi0gICAgICAgICAg
ICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0KAotICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxv
Y2ssIHR5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9t
UHJveHksCi0gICAgICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3QuaXNDYWNo
ZWFibGVDdXN0b20oKSA/IHNsb3QuY3VzdG9tR2V0dGVyKCkgOiBudWxscHRyLAotICAgICAgICAg
ICAgICAgIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IHNsb3Quc2xvdEJhc2UoKSA6IG51bGxw
dHIsCi0gICAgICAgICAgICAgICAgZG9tSklUKTsKKyAgICAgICAgICAgIGlmIChzbG90LmlzQ2Fj
aGVhYmxlVmFsdWUoKSB8fCBzbG90LmlzVW5zZXQoKSkgeworICAgICAgICAgICAgICAgIG5ld0Nh
c2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgc2xvdC5pc1Vu
c2V0KCkgPyBBY2Nlc3NDYXNlOjpNaXNzIDogQWNjZXNzQ2FzZTo6TG9hZCwKKyAgICAgICAgICAg
ICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Q
cm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7CisgICAgICAgICAgICAgICAg
aWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9
IEFjY2Vzc0Nhc2U6OkdldHRlcjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90LmF0dHJp
YnV0ZXMoKSAmIEN1c3RvbUFjY2Vzc29yKQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNj
ZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JHZXR0ZXI7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVHZXR0ZXI7CisK
KyAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRl
KAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCB0eXBlLCBvZmZzZXQsIHN0cnVj
dHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAorICAgICAgICAgICAgICAg
ICAgICBzbG90LndhdGNocG9pbnRTZXQoKSwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gc2xv
dC5jdXN0b21HZXR0ZXIoKSA6IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgIHNsb3QuaXND
YWNoZWFibGVDdXN0b20oKSA/IHNsb3Quc2xvdEJhc2UoKSA6IG51bGxwdHIsCisgICAgICAgICAg
ICAgICAgICAgIGRvbUpJVCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTM4Niw3ICszODksNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlE
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cgogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnJl
cGxhY2Uodm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAg
ICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNj
ZXNzQ2FzZTo6UmVwbGFjZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgc3RydWN0dXJlKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0
eVNsb3Q6Ok5ld1Byb3BlcnR5KTsKIApAQCAtNDE5LDcgKzQyMiw3IEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgU3RyCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6dHJhbnNpdGlv
bih2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgb2Zmc2V0LCBjb25kaXRp
b25TZXQpOworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29k
ZUJsb2NrLCBvZmZzZXQsIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQpOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xv
dC5pc0NhY2hlYWJsZVNldHRlcigpKSB7CiAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3Vz
dG9tKCkpIHsKQEAgLTQzMyw3ICs0MzYsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cgogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnNldHRlcigKKyAgICAgICAgICAgIG5l
d0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAg
dm0sIGNvZGVCbG9jaywgc2xvdC5pc0N1c3RvbUFjY2Vzc29yKCkgPyBBY2Nlc3NDYXNlOjpDdXN0
b21BY2Nlc3NvclNldHRlciA6IEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyLCBzdHJ1Y3R1
cmUsIGludmFsaWRPZmZzZXQsIGNvbmRpdGlvblNldCwKICAgICAgICAgICAgICAgICBzbG90LmN1
c3RvbVNldHRlcigpLCBzbG90LmJhc2UoKSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC00NTAsNyAr
NDUzLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHIKICAgICAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAKLSAgICAgICAgICAg
IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpzZXR0ZXIoCisgICAgICAgICAgICBuZXdDYXNlID0gR2V0
dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAogICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxv
Y2ssIEFjY2Vzc0Nhc2U6OlNldHRlciwgc3RydWN0dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNldCk7
CiAgICAgICAgIH0KICAgICB9CkBAIC01MTMsOCArNTE2LDggQEAgc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeVJlcGF0Y2hJbigKIAogICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRBY2Nlc3ND
YXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCkpOwogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjppbigKLSAgICAgICAgdm0sIGNv
ZGVCbG9jaywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlz
cywgc3RydWN0dXJlLCBjb25kaXRpb25TZXQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICB2bSwgY29kZUJsb2Nr
LCB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6OkluSGl0IDogQWNjZXNzQ2FzZTo6SW5NaXNzLCBpbnZh
bGlkT2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCk7CiAKICAgICBBY2Nlc3NHZW5lcmF0
aW9uUmVzdWx0IHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UoY29kZUJsb2NrLCBpZGVu
dCwgV1RGTW92ZShuZXdDYXNlKSk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5o
CmluZGV4IGUxNzY3Njg2OTExMjNkMmFjMWU3NjAzZmJjZTEwMzNmZGVmZTkwODIuLjUyYTA2MGNl
NGQ1ZTVmNzJjMTgzYjVjNzBkMWNhZjFmZjg1MDQ1ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5oCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBlbnVtIGNsYXNz
IEdldEJ5SURLaW5kIHsKICAgICBOb3JtYWwsCi0gICAgUHVyZQorICAgIFRyeQogfTsKIAogdm9p
ZCByZXBhdGNoR2V0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUlES2luZCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKaW5kZXggMThhNzNiNGQwZjI1OTQx
NTAyMDU2OTAwOTNmOGNmNjY1MDFlN2UzOC4uNzA0ZTFiN2ZhNjk5YjRlZjAzYTA1MjEyYWRmYTI3
Nzg0YTE0NGI5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAt
MjI4LDcgKzIyOCw2IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYo
Ym9vbCwgY2xvYmJlckFsbFJlZ3NJbkZUTElDU2xvd1BhdGgsICFBU1NFUlRfRElTQUJMRUQsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlQWNjZXNzSW5saW5pbmcsIHRydWUsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYodW5zaWduZWQsIG1heEFjY2Vzc1ZhcmlhbnRMaXN0U2l6
ZSwgOCwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAgdih1bnNpZ25lZCwgbWVnYW1vcnBoaWNMb2Fk
Q29zdCwgOTk5LCBOb3JtYWwsIG51bGxwdHIpIC8qIFRoaXMgdXNlZCB0byBiZSAxMCwgYnV0IHdl
J3JlIHRlbXBvcmFyaWx5IHRlc3Rpbmcgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIGZlYXR1cmUgaXMg
ZGlzYWJsZWQuICovXAogICAgIHYoYm9vbCwgdXNlUG9seXZhcmlhbnREZXZpcnR1YWxpemF0aW9u
LCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZVBvbHltb3JwaGljQWNj
ZXNzSW5saW5pbmcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlUG9s
eW1vcnBoaWNDYWxsSW5saW5pbmcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301775</attachid>
            <date>2017-02-16 09:28:06 -0800</date>
            <delta_ts>2017-02-16 09:57:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168408-20170216092529.patch</filename>
            <type>text/plain</type>
            <size>178162</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyNDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
YTY4YjUyNDNkZjRlNzQwOTBhNmY0ZDE0ODM3MWEyOTlkYmQwYzA1Li44MDRkMDBjODljZDZkYWEx
NjA4N2IyYTYxZjJjOWNmMTEzZDc3YTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzIgQEAKKzIwMTctMDItMTUgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgQWNjZXNzQ2FzZSB0byBiZSBtb3JlIGxpa2UgQjNW
YWx1ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4
NDA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBtYWtlcyBBY2Nlc3NDYXNlIChhbmQgbmV3IHN1YmNsYXNzZXMpIG1vcmUgbGlrZSBC
M1ZhbHVlLiBJbiB0aGUgbmV3IHN5c3RlbSBlYWNoCisgICAgICAgIHR5cGUgaGFzIGFuIGFzc29j
aWF0ZWQgQWNjZXNzQ2FzZSBzdWJjbGFzcy4gRm9yIGluc3RhbmNlIGFueSBnZXR0ZXIgc2hvdWxk
IHVzZSB0aGUKKyAgICAgICAgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSBzdWJjbGFzcy4gVGhlIG5l
dyBzeXN0ZW0gaXMgZWFzaWVyIHRvIGZvbGxvdyBzaW5jZSB5b3Ugbm8gbG9uZ2VyIG5lZWQKKyAg
ICAgICAgdG8ga25vdyBleGFjdGx5IHdoaWNoIG1lbWJlcnMgYXJlIHVzZWQgYnkgd2hpY2ggdHlw
ZXMuIFRoZSBzdWJjbGFzcyB0byBBY2Nlc3NUeXBlIG1hcHBpbmcgaXM6CisKKyAgICAgICAgR2V0
dGVyU2V0dGVyQWNjZXNzQ2FzZToKKyAgICAgICAgICAgIEdldHRlcgorICAgICAgICAgICAgQ3Vz
dG9tQWNjZXNzb3JHZXR0ZXIKKyAgICAgICAgICAgIEN1c3RvbVZhbHVlR2V0dGVyCisgICAgICAg
ICAgICBTZXR0ZXIKKworICAgICAgICBQcm94eWFibGVBY2Nlc3NDYXNlOgorICAgICAgICAgICAg
TG9hZAorICAgICAgICAgICAgTWlzcworICAgICAgICAgICAgR2V0R2V0dGVyCisKKyAgICAgICAg
SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZToKKyAgICAgICAgICAgIEludHJpbnNpY0dldHRlcgor
CisgICAgICAgIEFjY2Vzc0Nhc2U6CisgICAgICAgICAgICBFdmVyeXRoaW5nIGVsc2UKKworICAg
ICAgICBJdCBhbHNvIGhhcyB0aGUgYWRkaXRpb25hbCBhZHZhbnRhZ2UgdGhhdCBpdCB1c2VzIGxl
c3MgbWVtb3J5IGZvciB0aGUgY2FzZXMgd2hlcmUgd2Ugd291bGQgaGF2ZSBuZWVkZWQKKyAgICAg
ICAgcmFyZSBkYXRhIGluIHRoZSBwYXN0IGJ1dCB0aGF0IGNhc2Ugd291bGQgb25seSB1c2UgYSBz
bWFsbCBiaXQgb2YgaXQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMgbWVnYW1v
cnBoaWMgbG9hZHMgYW5kIHJlbmFtZXMgc29tZSBUcnlHZXRCeUlkIHJlbGF0ZWQgZW51bSB2YWx1
ZXMgZnJvbSBQdXJlIHRvIFRyeS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vz
cy5jcHAuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OkFjY2Vzc0Nhc2UpOgorICAgICAgICAo
SlNDOjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNl
KToKKyAgICAgICAgKEpTQzo6UHJveHlhYmxlQWNjZXNzQ2FzZTo6UHJveHlhYmxlQWNjZXNzQ2Fz
ZSk6CisgICAgICAgIChKU0M6OkdldHRlclNldHRlckFjY2Vzc0Nhc2U6OkdldHRlclNldHRlckFj
Y2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpJbnRy
aW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpQcm94eWFibGVB
Y2Nlc3NDYXNlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp+QWNjZXNzQ2Fz
ZSk6CisgICAgICAgIChKU0M6OkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6On5JbnRyaW5zaWNH
ZXR0ZXJBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6UHJveHlhYmxlQWNjZXNzQ2FzZTo6flBy
b3h5YWJsZUFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
Ojp+R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZy
b21TdHJ1Y3R1cmVTdHViSW5mbyk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNsb25lKToK
KyAgICAgICAgKEpTQzo6SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y2xvbmUpOgorICAgICAg
ICAoSlNDOjpQcm94eWFibGVBY2Nlc3NDYXNlOjpjbG9uZSk6CisgICAgICAgIChKU0M6OkdldHRl
clNldHRlckFjY2Vzc0Nhc2U6OmNsb25lKToKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZTo6YWx0ZXJuYXRlQmFzZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNvbW1p
dCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Omd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKToK
KyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6Y291bGRTdGlsbFN1Y2NlZWQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpj
YW5SZXBsYWNlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmR1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6UHJv
eHlhYmxlQWNjZXNzQ2FzZTo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp2
aXNpdFdlYWspOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAg
ICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNl
OjpnZW5lcmF0ZUltcGwpOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpl
bWl0RE9NSklUR2V0dGVyKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjphcyk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nh
c2U6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnR5cGUpOgorICAgICAgICAo
SlNDOjpBY2Nlc3NDYXNlOjpzdGF0ZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om9mZnNl
dCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OkFjY2Vzc0Nhc2U6Om5ld1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNv
bmRpdGlvblNldCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmFsdGVybmF0ZUJhc2UpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjphZGRpdGlvbmFsU2V0KToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6dmlhUHJveHkpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppc0dldHRl
cik6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmlzQWNjZXNzb3IpOgorICAgICAgICAoSlND
OjpBY2Nlc3NDYXNlOjpkdW1wSW1wbCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnJlc2V0
U3RhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNhbGxMaW5rSW5mbyk6
CisgICAgICAgIChKU0M6OkdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmN1c3RvbVNsb3RCYXNlKToK
KyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZG9tSklUKToKKyAgICAgICAg
KiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2spOgorICAgICAgICAq
IGJ5dGVjb2RlL0ludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OmludHJpbnNpY0Z1bmN0aW9uKToKKyAgICAg
ICAgKEpTQzo6SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6aW50cmluc2ljKToKKyAgICAgICAg
KiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OlBvbHltb3Jw
aGljQWNjZXNzOjpyZWdlbmVyYXRlKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OkFjY2Vzc0Nhc2UpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpBY2Nlc3NDYXNlOjp0cnlHZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjptZWdhbW9ycGhp
Y0xvYWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXBsYWNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dHJhbnNpdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnNldHRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkFjY2Vzc0Nhc2U6OmluKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2V0
TGVuZ3RoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2V0SW50cmluc2lj
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6fkFjY2Vzc0Nhc2UpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjbG9uZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNvbW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6Omd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6QWNjZXNzQ2FzZTo6YWx0ZXJuYXRlQmFzZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmRvZXNDYWxscyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmNvdWxkU3RpbGxTdWNjZWVkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6
Y2FuQmVSZXBsYWNlZEJ5TWVnYW1vcnBoaWNMb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nh
c2U6OmR1bXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp2aXNpdFdlYWsp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9u
cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJk
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0dGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjp0eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6c3RhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpvZmZzZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp2aWFQcm94eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkFjY2Vzc0Nhc2U6OnN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nh
c2U6Om5ld1N0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNv
bmRpdGlvblNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmludHJpbnNp
Y0Z1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6aW50cmluc2lj
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZG9tSklUKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6YWRkaXRpb25hbFNldCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmN1c3RvbVNsb3RCYXNlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6aXNHZXR0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpjYWxsTGlua0luZm8pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNl
OjpSYXJlRGF0YTo6UmFyZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1Byb3h5
YWJsZUFjY2Vzc0Nhc2UuaDogQWRkZWQuCisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6
CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVRyeUdldEJ5SWQpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRCeUlkKToKKyAg
ICAgICAgKiBqaXQvSW50cmluc2ljRW1pdHRlci5jcHA6CisgICAgICAgIChKU0M6OkludHJpbnNp
Y0dldHRlckFjY2Vzc0Nhc2U6OmNhbkVtaXRJbnRyaW5zaWNHZXR0ZXIpOgorICAgICAgICAoSlND
OjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjplbWl0SW50cmluc2ljR2V0dGVyKToKKyAgICAg
ICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2FuRW1pdEludHJpbnNpY0dldHRlcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmVtaXRJbnRyaW5zaWNHZXR0ZXIpOiBEZWxldGVkLgor
ICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZCk6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3Bw
OgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNo
ZVB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlSZXBhdGNoSW4pOgorICAgICAgICAqIGppdC9S
ZXBhdGNoLmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisKIDIwMTctMDItMTYgIFl1
c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ10gVXBk
YXRlIG1vZHVsZSBuYW1lc3BhY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUgbGF0ZXN0IEVDTUEy
NjIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMGZlNGI1ZjA1ZmRhNDkzYzk2MGY3
ZmJmOTdlMjY3M2M4ZGE1NDFjNy4uY2FjZGE4MWEyNjA5OTQ2YTZlMGFkZTRkYmM0MWRmMmE0YjA1
MWQ2MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMDQsNiArMTMwNCwxMSBA
QAogCQk1MzQ5MDI4NTFDNzI3NkI3MDAxMkJDQjggLyogVHlwZWRBcnJheUNUZXN0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNDkwMjgyMUM3MjQy
QzgwMDEyQkNCOCAvKiBUeXBlZEFycmF5Q1Rlc3QuY3BwICovOyB9OwogCQk1MzRDNDU3QzFCQzcy
NDExMDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzRDNDU3QjFCQzcyNDExMDA3NDc2
QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggKi87IH07CiAJCTUzNEM0NTdFMUJD
NzI1NDkwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0QzQ1N0QxQkM3MjU0OTAw
NzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgKi87IH07CisJCTUzNEUw
MzRFMUU0RDRCMTYwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzRFMDM0RDFFNEQ0QjE2MDAyMTNGNjQgLyogQWNj
ZXNzQ2FzZS5oICovOyB9OworCQk1MzRFMDM1MDFFNEQ5NUVEMDAyMTNGNjQgLyogQWNjZXNzQ2Fz
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzRF
MDM0RjFFNEQ5NUVEMDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5jcHAgKi87IH07CisJCTUzNEUwMzU0
MUU1M0JEMjkwMDIxM0Y2NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzRFMDM1MzFFNTNCRDI5MDAy
MTNGNjQgLyogSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oICovOyB9OworCQk1MzRFMDM1NjFF
NTNCRURFMDAyMTNGNjQgLyogUHJveHlhYmxlQWNjZXNzQ2FzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0RTAzNTUxRTUzQkVERTAwMjEzRjY0IC8q
IFByb3h5YWJsZUFjY2Vzc0Nhc2UuaCAqLzsgfTsKKwkJNTM0RTAzNTgxRTUzQkYyRjAwMjEzRjY0
IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzNEUwMzU3MUU1M0JGMkYwMDIxM0Y2NCAvKiBHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlLmggKi87IH07CiAJCTUzNTI5QTRDMUM0NTdCNzUwMDBCNDlDNiAvKiBBUElV
dGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM1
MjlBNEIxQzQ1N0I3NTAwMEI0OUM2IC8qIEFQSVV0aWxzLmggKi87IH07CiAJCTUzNTU1NzE0MUQ5
RDlFQTUwMDZENTgzQiAvKiBXYXNtTWVtb3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzU1NTcxMzFEOUQ5RUE1MDA2RDU4M0IgLyogV2FzbU1lbW9y
eS5oICovOyB9OwogCQk1MzU1NTcxNjFEOURGQTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzU1NTcxNTFE
OURGQTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgKi87IH07CkBAIC0zNzQxLDYgKzM3NDYs
MTEgQEAKIAkJNTM0QzQ1N0ExQkM3MDNEQzAwNzQ3NkE3IC8qIFR5cGVkQXJyYXlDb25zdHJ1Y3Rv
ci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFR5cGVkQXJyYXlD
b25zdHJ1Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0IxQkM3
MjQxMTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0QxQkM3MjU0OTAwNzQ3NkE3IC8qIEpT
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MzRFMDM0RDFFNEQ0QjE2MDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NDYXNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNEUwMzRGMUU0RDk1RUQwMDIxM0Y2NCAvKiBBY2Nlc3ND
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc0Nhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzRFMDM1MzFFNTNCRDI5MDAyMTNG
NjQgLyogSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUzNEUwMzU1MUU1M0JFREUwMDIxM0Y2NCAvKiBQcm94eWFibGVBY2Nlc3ND
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3h5YWJsZUFjY2Vzc0Nh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM0RTAzNTcxRTUzQkYyRjAwMjEz
RjY0IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MzUyOUE0QjFDNDU3Qjc1MDAwQjQ5QzYgLyogQVBJVXRpbHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJVXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTM1NTU3MTMxRDlEOUVBNTAwNkQ1ODNCIC8qIFdhc21NZW1vcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzU1NTcxNTFEOURGQTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtTWVtb3J5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYwMTIsNiArNjAyMiwxOCBAQAogCQkJdGFiV2lk
dGggPSA0OwogCQkJdXNlc1RhYnMgPSAwOwogCQl9OworCQk1MzRFMDM1MjFFNTNCQkE5MDAyMTNG
NjQgLyogYWNjZXNzQ2FzZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4g
PSAoCisJCQkJNTM0RTAzNEYxRTREOTVFRDAwMjEzRjY0IC8qIEFjY2Vzc0Nhc2UuY3BwICovLAor
CQkJCTUzNEUwMzREMUU0RDRCMTYwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmggKi8sCisJCQkJNTM0
RTAzNTMxRTUzQkQyOTAwMjEzRjY0IC8qIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaCAqLywK
KwkJCQk1MzRFMDM1NTFFNTNCRURFMDAyMTNGNjQgLyogUHJveHlhYmxlQWNjZXNzQ2FzZS5oICov
LAorCQkJCTUzNEUwMzU3MUU1M0JGMkYwMDIxM0Y2NCAvKiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
LmggKi8sCisJCQkpOworCQkJbmFtZSA9IGFjY2Vzc0Nhc2U7CisJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOworCQl9OwogCQk2NTBGREY4RDA5RDBGQ0E3MDA3NjlFNTQgLyogRGVyaXZlZCBTb3Vy
Y2VzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTcyOTks
NiArNzMyMSw3IEBACiAJCTk2OUEwNzhGMEVEMUQzQUUwMEYxRjY4MSAvKiBieXRlY29kZSAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNTM0RTAzNTIxRTUz
QkJBOTAwMjEzRjY0IC8qIGFjY2Vzc0Nhc2UgKi8sCiAJCQkJNTM3MEI0RjMxQkYyNUVBMjAwNUM0
MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuY3BwICov
LAogCQkJCTUzNzBCNEY0MUJGMjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggKi8sCiAJCQkJNzlBMjI4MzMxRDM1RDcxRTAwRDhFMDY3
IC8qIEFyaXRoUHJvZmlsZS5jcHAgKi8sCkBAIC03OTgwLDYgKzgwMDMsNyBAQAogCQkJCTBGNkI4
QUU1MUM0RUZFMTcwMDk2OTA1MiAvKiBCM0ZpeFNTQS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3
MjVDQjAxQzUwNkQzQjAwQUQ5NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1MzRFMDM1NjFFNTNCRURFMDAyMTNGNjQgLyogUHJveHlhYmxl
QWNjZXNzQ2FzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTcxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxOTFCREFD
REFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MUEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04NDM1LDYgKzg0NTksNyBAQAogCQkJCTBGRUEwQTEyMTcwNTEzREIwMEJCNzIyQyAv
KiBGVExTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdGQ0MyNkQxN0EwQjZBQTAwNzg2RDFB
IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkUyMTcxNzhFMUMw
MDY5MEM3RiAvKiBGVExUaHVua3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzNEUwMzU0MUU1M0JE
MjkwMDIxM0Y2NCAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVBMEEyMDE3MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkRCMkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUE2Mjg0MTg4Qzk4RDQwMDcyQzlERiAvKiBGVExW
YWx1ZVJhbmdlLmggaW4gSGVhZGVycyAqLywKQEAgLTg0NDksNiArODQ3NCw3IEBACiAJCQkJNTJC
MzEwRkIxOTc0QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkU0QkZGMkMxQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJp
ZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0NjAgLyogRnVu
Y3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzNEUwMzU4MUU1M0JGMkYwMDIx
M0Y2NCAvKiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2MkQy
RDM5MDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkVBMEM0MDMxQ0REN0QxRDAwNDgxOTkxIC8qIEZ1bmN0aW9uV2hpdGVsaXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkyQUFDRTYzRDE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTg3MTYsNiArODc0Miw3IEBACiAJCQkJQTUwM0ZB
MUUxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzAxM0NBOEMxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNMZXhpY2FsRW52
aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzNEUwMzRFMUU0RDRCMTYwMDIxM0Y2NCAv
KiBBY2Nlc3NDYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyMzBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjVENzA5QzE2REU5OUY0MDBGQ0E2
QkMgLyogSlNNYW5hZ2VkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNEJCN0YzMThBNDEx
NzkwMDhBMEZDRCAvKiBKU01hbmFnZWRWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKQEAg
LTEwMzM4LDYgKzEwMzY1LDcgQEAKIAkJCQlBRDJGQ0JFODFEQjU4REFEMDBCM0U3MzYgLyogSlNX
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDJGQ0JFQTFE
QjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk1MzRFMDM1MDFFNEQ5NUVEMDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFw
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NzAxMDdFQzEzNDAwMTNFN0IyIC8qIEpTV3Jh
cHBlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4
NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYxNjhmNTg2MGE4ZTFiNGRl
MDFjYTQ1MWM3ZWY1NTI4MWEzNzg3NmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKQEAgLTAsMCArMSwxMjUwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFjY2Vzc0Nhc2UuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNs
dWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRl
ICJET01KSVRBY2Nlc3NDYXNlUGF0Y2hwb2ludFBhcmFtcy5oIgorI2luY2x1ZGUgIkRPTUpJVENh
bGxET01HZXR0ZXJQYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiRE9NSklUR2V0dGVyU2V0dGVyLmgi
CisjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgi
CisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgorI2luY2x1ZGUgIkhlYXBJbmxp
bmVzLmgiCisjaW5jbHVkZSAiSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oIgorI2luY2x1ZGUg
IkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUg
IlBvbHltb3JwaGljQWNjZXNzLmgiCisjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCisjaW5j
bHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworQWNjZXNzQ2FzZTo6
QWNjZXNzQ2FzZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwg
bV9vZmZzZXQob2Zmc2V0KQoreworICAgIG1fc3RydWN0dXJlLnNldE1heUJlTnVsbCh2bSwgb3du
ZXIsIHN0cnVjdHVyZSk7CisgICAgbV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Cit9CisK
K0ludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UoVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBK
U0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbikKKyAgICA6IEJhc2Uodm0sIG93bmVyLCBJbnRy
aW5zaWNHZXR0ZXIsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQpCit7CisgICAgbV9p
bnRyaW5zaWNGdW5jdGlvbi5zZXQodm0sIG93bmVyLCBpbnRyaW5zaWNGdW5jdGlvbik7Cit9CisK
K1Byb3h5YWJsZUFjY2Vzc0Nhc2U6OlByb3h5YWJsZUFjY2Vzc0Nhc2UoVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25k
aXRpb25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQpCisg
ICAgOiBCYXNlKHZtLCBvd25lciwgYWNjZXNzVHlwZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRp
dGlvblNldCkKKyAgICAsIG1fdmlhUHJveHkodmlhUHJveHkpCisgICAgLCBtX2FkZGl0aW9uYWxT
ZXQoYWRkaXRpb25hbFNldCkKK3sKK30KKworR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6R2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgYWNjZXNz
VHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgYm9vbCB2aWFQcm94eSwg
V2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQor
ICAgIDogQmFzZSh2bSwgb3duZXIsIGFjY2Vzc1R5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25k
aXRpb25TZXQsIHZpYVByb3h5LCBhZGRpdGlvbmFsU2V0KQoreworICAgIG1fY3VzdG9tU2xvdEJh
c2Uuc2V0TWF5QmVOdWxsKHZtLCBvd25lciwgY3VzdG9tU2xvdEJhc2UpOworfQorCitzdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0
KQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW5IaXQ6Cisg
ICAgICAgIGNhc2UgSW5NaXNzOgorICAgICAgICBjYXNlIEFycmF5TGVuZ3RoOgorICAgICAgICBj
YXNlIFN0cmluZ0xlbmd0aDoKKyAgICAgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNMZW5ndGg6Cisg
ICAgICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzTGVuZ3RoOgorICAgICAgICBjYXNlIFJlcGxhY2U6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9OworCisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4obmV3IEFjY2Vzc0Nhc2Uodm0sIG93bmVyLCB0eXBlLCBvZmZzZXQs
IHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KSk7CisgICAgfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgIFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVj
dHVyZSogc3RydWN0dXJlLAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQs
CisgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgY3VzdG9tR2V0dGVyLCBKU09iamVjdCog
Y3VzdG9tU2xvdEJhc2UsIERPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVQpCit7CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBHZXR0ZXI6CisgICAgY2FzZSBDdXN0b21BY2Nlc3Nvckdl
dHRlcjoKKyAgICBjYXNlIEN1c3RvbVZhbHVlR2V0dGVyOgorICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9OworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPCA+IHJlc3VsdChuZXcgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSh2bSwgb3du
ZXIsIHR5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHZpYVByb3h5LCBhZGRp
dGlvbmFsU2V0LCBjdXN0b21TbG90QmFzZSkpOworICAgIHJlc3VsdC0+bV9kb21KSVQgPSBkb21K
SVQ7CisgICAgcmVzdWx0LT5tX2N1c3RvbUFjY2Vzc29yLmdldHRlciA9IGN1c3RvbUdldHRlcjsK
KyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgSlNGdW5jdGlvbiogaW50
cmluc2ljRnVuY3Rpb24pCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PihuZXcgSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZSh2bSwgb3duZXIsIG9mZnNldCwgc3RydWN0
dXJlLCBjb25kaXRpb25TZXQsIGludHJpbnNpY0Z1bmN0aW9uKSk7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQpCit7Cisg
ICAgQVNTRVJUKHR5cGUgPT0gTG9hZCB8fCB0eXBlID09IE1pc3MgfHwgdHlwZSA9PSBHZXRHZXR0
ZXIpOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4obmV3IFByb3h5YWJs
ZUFjY2Vzc0Nhc2Uodm0sIG93bmVyLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9u
U2V0LCB2aWFQcm94eSwgYWRkaXRpb25hbFNldCkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0LAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRp
b25TZXQsIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRlciwKKyAgICBK
U09iamVjdCogY3VzdG9tU2xvdEJhc2UpCit7CisgICAgQVNTRVJUKHR5cGUgPT0gU2V0dGVyIHx8
IHR5cGUgPT0gQ3VzdG9tVmFsdWVTZXR0ZXIgfHwgdHlwZSA9PSBDdXN0b21BY2Nlc3NvclNldHRl
cik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+IHJlc3VsdChu
ZXcgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSh2bSwgb3duZXIsIHR5cGUsIG9mZnNldCwgc3RydWN0
dXJlLCBjb25kaXRpb25TZXQsIGZhbHNlLCBudWxscHRyLCBjdXN0b21TbG90QmFzZSkpOworICAg
IHJlc3VsdC0+bV9jdXN0b21BY2Nlc3Nvci5zZXR0ZXIgPSBjdXN0b21TZXR0ZXI7CisgICAgcmV0
dXJuIFdURk1vdmUocmVzdWx0KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFj
Y2Vzc0Nhc2U6OmNyZWF0ZSgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlLAorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQob2xkU3RydWN0dXJlID09IG5ld1N0cnVjdHVyZS0+cHJl
dmlvdXNJRCgpKTsKKworICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBu
ZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQorICAgIC8vIGVub3VnaCByZWdpc3RlcnMg
dG8gbWFrZSBpdCBoYXBwZW4uCisgICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwg
NgorICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCisgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+KG5ldyBBY2Nlc3NDYXNlKHZtLCBv
d25lciwgVHJhbnNpdGlvbiwgb2Zmc2V0LCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCkpOwor
fQorCitBY2Nlc3NDYXNlOjp+QWNjZXNzQ2FzZSgpCit7Cit9CisKK0ludHJpbnNpY0dldHRlckFj
Y2Vzc0Nhc2U6On5JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlKCkKK3sKK30KKworUHJveHlhYmxl
QWNjZXNzQ2FzZTo6flByb3h5YWJsZUFjY2Vzc0Nhc2UoKQoreworfQorCitHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlOjp+R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSgpCit7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8oCisgICAg
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7Cisg
ICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6R2V0
QnlJZFNlbGY6CisgICAgICAgIHJldHVybiBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0s
IG93bmVyLCBMb2FkLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCwgc3R1YkluZm8udS5ieUlk
U2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKKworICAgIGNhc2UgQ2FjaGVUeXBlOjpQ
dXRCeUlkUmVwbGFjZToKKyAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3du
ZXIsIFJlcGxhY2UsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby51LmJ5SWRT
ZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOworCisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
QWNjZXNzQ2FzZTo6Y2xvbmUoKSBjb25zdAoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKnRoaXMpKTsKKyAgICByZXN1bHQtPnJlc2V0U3Rh
dGUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y2xvbmUoKSBjb25zdAoreworICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEludHJpbnNp
Y0dldHRlckFjY2Vzc0Nhc2UoKnRoaXMpKTsKKyAgICByZXN1bHQtPnJlc2V0U3RhdGUoKTsKKyAg
ICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y2xvbmUoKSBjb25zdAoreworICAgIHN0ZDo6dW5pcXVl
X3B0cjxQcm94eWFibGVBY2Nlc3NDYXNlPiByZXN1bHQobmV3IFByb3h5YWJsZUFjY2Vzc0Nhc2Uo
KnRoaXMpKTsKKyAgICByZXN1bHQtPnJlc2V0U3RhdGUoKTsKKyAgICByZXR1cm4gV1RGTW92ZShy
ZXN1bHQpOworfQorCitHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlKGNvbnN0IEdldHRlclNldHRlckFjY2Vzc0Nhc2UmIG90aGVyKQorICAgIDogQmFzZShvdGhl
cikKKyAgICAsIG1fY3VzdG9tU2xvdEJhc2Uob3RoZXIubV9jdXN0b21TbG90QmFzZSkKK3sKKyAg
ICBtX2N1c3RvbUFjY2Vzc29yLm9wYXF1ZSA9IG90aGVyLm1fY3VzdG9tQWNjZXNzb3Iub3BhcXVl
OworICAgIG1fZG9tSklUID0gb3RoZXIubV9kb21KSVQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjbG9uZSgpIGNvbnN0Cit7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgR2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZSgqdGhpcykpOworICAgIHJlc3VsdC0+cmVzZXRTdGF0ZSgpOworICAg
IHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKK0pTT2JqZWN0KiBHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlOjphbHRlcm5hdGVCYXNlKCkgY29uc3QKK3sKKyAgICBpZiAoY3VzdG9tU2xvdEJhc2Uo
KSkKKyAgICAgICAgcmV0dXJuIGN1c3RvbVNsb3RCYXNlKCk7CisgICAgcmV0dXJuIGNvbmRpdGlv
blNldCgpLnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCk7Cit9CisKK1ZlY3RvcjxXYXRjaHBv
aW50U2V0KiwgMj4gQWNjZXNzQ2FzZTo6Y29tbWl0KFZNJiB2bSwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQpCit7CisgICAgLy8gSXQncyBmaW5lIHRvIGNvbW1pdCBzb21ldGhpbmcgdGhhdCBpcyBh
bHJlYWR5IGNvbW1pdHRlZC4gVGhhdCBhcmlzZXMgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNpbmcKKyAg
ICAvLyBuZXdseSBhbGxvY2F0ZWQgd2F0Y2hwb2ludHMuIFdoZW4gaXQgaGFwcGVucywgaXQncyBu
b3QgZWZmaWNpZW50IC0gYnV0IHdlIHRoaW5rIHRoYXQncyBPSworICAgIC8vIGJlY2F1c2UgbW9z
dCBBY2Nlc3NDYXNlcyBoYXZlIG5vIGV4dHJhIHdhdGNocG9pbnRzIGFueXdheS4KKyAgICBSRUxF
QVNFX0FTU0VSVChtX3N0YXRlID09IFByaW1vcmRpYWwgfHwgbV9zdGF0ZSA9PSBDb21taXR0ZWQp
OworCisgICAgVmVjdG9yPFdhdGNocG9pbnRTZXQqLCAyPiByZXN1bHQ7CisKKyAgICBpZiAoKHN0
cnVjdHVyZSgpICYmIHN0cnVjdHVyZSgpLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkp
CisgICAgICAgIHx8IG1fY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
KSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCh2bS5lbnN1cmVXYXRjaHBvaW50U2V0Rm9ySW1wdXJl
UHJvcGVydHkoaWRlbnQpKTsKKworICAgIGlmIChhZGRpdGlvbmFsU2V0KCkpCisgICAgICAgIHJl
c3VsdC5hcHBlbmQoYWRkaXRpb25hbFNldCgpKTsKKworICAgIG1fc3RhdGUgPSBDb21taXR0ZWQ7
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEFjY2Vzc0Nhc2U6Omd1YXJkZWRCeVN0
cnVjdHVyZUNoZWNrKCkgY29uc3QKK3sKKyAgICBpZiAodmlhUHJveHkoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIEFycmF5TGVuZ3Ro
OgorICAgIGNhc2UgU3RyaW5nTGVuZ3RoOgorICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzTGVuZ3Ro
OgorICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzTGVuZ3RoOgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitib29sIEFj
Y2Vzc0Nhc2U6OmRvZXNDYWxscyhWZWN0b3I8SlNDZWxsKj4qIGNlbGxzVG9NYXJrKSBjb25zdAor
eworICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgY2FzZSBHZXR0ZXI6CisgICAgY2FzZSBTZXR0
ZXI6CisgICAgY2FzZSBDdXN0b21WYWx1ZUdldHRlcjoKKyAgICBjYXNlIEN1c3RvbUFjY2Vzc29y
R2V0dGVyOgorICAgIGNhc2UgQ3VzdG9tVmFsdWVTZXR0ZXI6CisgICAgY2FzZSBDdXN0b21BY2Nl
c3NvclNldHRlcjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBUcmFuc2l0aW9uOgor
ICAgICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkKKyAgICAgICAgICAgICYmIHN0cnVjdHVyZSgpLT5j
b3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CisgICAgICAgICAgICBpZiAoY2VsbHNUb01hcmsp
CisgICAgICAgICAgICAgICAgY2VsbHNUb01hcmstPmFwcGVuZChuZXdTdHJ1Y3R1cmUoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBB
Y2Nlc3NDYXNlOjpjb3VsZFN0aWxsU3VjY2VlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29u
ZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCk7Cit9CisKK2Jvb2wgQWNjZXNzQ2FzZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nl
c3NDYXNlJiBvdGhlcikgY29uc3QKK3sKKyAgICAvLyBUaGlzIHB1dHMgaW4gYSBnb29kIGVmZm9y
dCB0byB0cnkgdG8gZmlndXJlIG91dCBpZiAnb3RoZXInIGlzIG1hZGUgc3VwZXJmbHVvdXMgYnkg
Jyp0aGlzJy4KKyAgICAvLyBJdCdzIGZpbmUgZm9yIHRoaXMgdG8gcmV0dXJuIGZhbHNlIGlmIGl0
J3MgaW4gZG91YnQuCisKKyAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgIGNhc2UgQXJyYXlMZW5n
dGg6CisgICAgY2FzZSBTdHJpbmdMZW5ndGg6CisgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNMZW5n
dGg6CisgICAgY2FzZSBTY29wZWRBcmd1bWVudHNMZW5ndGg6CisgICAgICAgIHJldHVybiBvdGhl
ci50eXBlKCkgPT0gdHlwZSgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmICghZ3VhcmRlZEJ5
U3RydWN0dXJlQ2hlY2soKSB8fCAhb3RoZXIuZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gc3RydWN0dXJlKCkgPT0g
b3RoZXIuc3RydWN0dXJlKCk7CisgICAgfQorfQorCit2b2lkIEFjY2Vzc0Nhc2U6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90eXBlLCAiOigiKTsKKwor
ICAgIENvbW1hUHJpbnRlciBjb21tYTsKKworICAgIG91dC5wcmludChjb21tYSwgbV9zdGF0ZSk7
CisKKyAgICBpZiAobV90eXBlID09IFRyYW5zaXRpb24pCisgICAgICAgIG91dC5wcmludChjb21t
YSwgInN0cnVjdHVyZSA9ICIsIHBvaW50ZXJEdW1wKHN0cnVjdHVyZSgpKSwgIiAtPiAiLCBwb2lu
dGVyRHVtcChuZXdTdHJ1Y3R1cmUoKSkpOworICAgIGVsc2UgaWYgKG1fc3RydWN0dXJlKQorICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJzdHJ1Y3R1cmUgPSAiLCBwb2ludGVyRHVtcChtX3N0cnVj
dHVyZS5nZXQoKSkpOworCisgICAgaWYgKGlzVmFsaWRPZmZzZXQobV9vZmZzZXQpKQorICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJvZmZzZXQgPSAiLCBtX29mZnNldCk7CisgICAgaWYgKCFtX2Nv
bmRpdGlvblNldC5pc0VtcHR5KCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImNvbmRpdGlv
bnMgPSAiLCBtX2NvbmRpdGlvblNldCk7CisKKyAgICBkdW1wSW1wbChvdXQsIGNvbW1hKTsKKyAg
ICBvdXQucHJpbnQoIikiKTsKK30KKwordm9pZCBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpkdW1w
SW1wbChQcmludFN0cmVhbSYgb3V0LCBDb21tYVByaW50ZXImIGNvbW1hKSBjb25zdAoreworICAg
IEJhc2U6OmR1bXBJbXBsKG91dCwgY29tbWEpOworICAgIG91dC5wcmludChjb21tYSwgImN1c3Rv
bVNsb3RCYXNlID0gIiwgUmF3UG9pbnRlcihjdXN0b21TbG90QmFzZSgpKSk7CisgICAgaWYgKGNh
bGxMaW5rSW5mbygpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJjYWxsTGlua0luZm8gPSAi
LCBSYXdQb2ludGVyKGNhbGxMaW5rSW5mbygpKSk7CisgICAgb3V0LnByaW50KGNvbW1hLCAiY3Vz
dG9tQWNjZXNzb3IgPSAiLCBSYXdQb2ludGVyKG1fY3VzdG9tQWNjZXNzb3Iub3BhcXVlKSk7Cit9
CisKK3ZvaWQgUHJveHlhYmxlQWNjZXNzQ2FzZTo6ZHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCwg
Q29tbWFQcmludGVyJiBjb21tYSkgY29uc3QKK3sKKyAgICBCYXNlOjpkdW1wSW1wbChvdXQsIGNv
bW1hKTsKKyAgICBvdXQucHJpbnQoY29tbWEsICJ2aWFQcm94eSA9ICIsIHZpYVByb3h5KCkpOwor
ICAgIG91dC5wcmludChjb21tYSwgImFkZGl0aW9uYWxTZXQgPSAiLCBSYXdQb2ludGVyKGFkZGl0
aW9uYWxTZXQoKSkpOworfQorCitib29sIEFjY2Vzc0Nhc2U6OnZpc2l0V2VhayhWTSYgdm0pIGNv
bnN0Cit7CisgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0cnVjdHVy
ZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0
LmFyZVN0aWxsTGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzQWNjZXNz
b3IoKSkgeworICAgICAgICBhdXRvJiBhY2Nlc3NvciA9IHRoaXMtPmFzPEdldHRlclNldHRlckFj
Y2Vzc0Nhc2U+KCk7CisgICAgICAgIGlmIChhY2Nlc3Nvci5jYWxsTGlua0luZm8oKSkKKyAgICAg
ICAgICAgIGFjY2Vzc29yLmNhbGxMaW5rSW5mbygpLT52aXNpdFdlYWsodm0pOworICAgICAgICBp
ZiAoYWNjZXNzb3IuY3VzdG9tU2xvdEJhc2UoKSAmJiAhSGVhcDo6aXNNYXJrZWQoYWNjZXNzb3Iu
Y3VzdG9tU2xvdEJhc2UoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNl
IGlmICh0eXBlKCkgPT0gSW50cmluc2ljR2V0dGVyKSB7CisgICAgICAgIGF1dG8mIGludHJpbnNp
YyA9IHRoaXMtPmFzPEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U+KCk7CisgICAgICAgIGlmIChp
bnRyaW5zaWMuaW50cmluc2ljRnVuY3Rpb24oKSAmJiAhSGVhcDo6aXNNYXJrZWQoaW50cmluc2lj
LmludHJpbnNpY0Z1bmN0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5z
aXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAoreworICAgIGJvb2wgcmVzdWx0ID0g
dHJ1ZTsKKworICAgIGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAgcmVzdWx0ICY9IG1fc3RydWN0
dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAg
Y2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHko
bV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkKG1fc3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgQWNjZXNzQ2FzZTo6
Z2VuZXJhdGVXaXRoR3VhcmQoCisgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gpCit7CisgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworCisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0
ZSA9PSBDb21taXR0ZWQpOworICAgIG1fc3RhdGUgPSBHZW5lcmF0ZWQ7CisKKyAgICBDQ2FsbEhl
bHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7CisgICAgVk0mIHZtID0gKmppdC52bSgpOworICAgIEpT
VmFsdWVSZWdzIHZhbHVlUmVncyA9IHN0YXRlLnZhbHVlUmVnczsKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHN0YXRlLmJhc2VHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0ZS5zY3JhdGNo
R1BSOworCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKworICAgIHN3aXRjaCAobV90eXBlKSB7Cisg
ICAgY2FzZSBBcnJheUxlbmd0aDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOworICAg
ICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5k
ZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZhbGxUaHJv
dWdoLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2hUZXN0MzIoCisgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihJc0FycmF5KSkpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAg
ICBqaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywg
c2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2sp
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgU3RyaW5nTGVuZ3RoOiB7Cisg
ICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgK
KyAgICAgICAgICAgIGppdC5icmFuY2g4KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzTGVuZ3RoOiB7CisgICAgICAgIEFTU0VSVCghdmlh
UHJveHkoKSk7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5i
cmFuY2g4KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KERpcmVjdEFyZ3VtZW50c1R5cGUpKSk7CisKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAor
ICAgICAgICAgICAgaml0LmJyYW5jaFRlc3RQdHIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpOb25aZXJvLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNl
R1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTWFwcGVkQXJndW1lbnRzKCkpKSk7CisgICAg
ICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQ
UiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSwKKyAgICAgICAgICAgIHZhbHVl
UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBqaXQuYm94SW50MzIodmFsdWVSZWdzLnBheWxv
YWRHUFIoKSwgdmFsdWVSZWdzKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY2FzZSBTY29wZWRBcmd1bWVudHNMZW5ndGg6IHsKKyAgICAg
ICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAorICAg
ICAgICAgICAgaml0LmJyYW5jaDgoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoU2NvcGVkQXJndW1lbnRzVHlwZSkpKTsKKworICAgICAgICBmYWxsVGhy
b3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlR1BSLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVUaGluZ3Mo
KSkpKTsKKyAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlR1BSLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVG90YWxMZW5ndGgoKSksCisg
ICAgICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgaml0LmJveEludDMy
KHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1Y2Nl
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRlZmF1bHQ6IHsKKyAgICAgICAg
aWYgKHZpYVByb3h5KCkpIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAg
ICAgICAgICAgICBqaXQuYnJhbmNoOCgKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkpKTsK
KworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIs
IEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisKKyAgICAgICAgICAgIGZh
bGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAor
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlKCkpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAg
ICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlKCkpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9IH07CisK
KyAgICBnZW5lcmF0ZUltcGwoc3RhdGUpOworfQorCit2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRl
KEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9z
dGF0ZSA9PSBDb21taXR0ZWQpOworICAgIG1fc3RhdGUgPSBHZW5lcmF0ZWQ7CisKKyAgICBnZW5l
cmF0ZUltcGwoc3RhdGUpOworfQorCit2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nl
c3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVy
U2FtcGxlclNjb3BlKGZhbHNlKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygi
XG5cbkdlbmVyYXRpbmcgY29kZSBmb3I6ICIsICp0aGlzLCAiXG4iKTsKKworICAgIEFTU0VSVCht
X3N0YXRlID09IEdlbmVyYXRlZCk7IC8vIFdlIHJlbHkgb24gdGhlIGNhbGxlcnMgc2V0dGluZyB0
aGlzIGZvciB1cy4KKworICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0YXRlLmppdDsKKyAgICBW
TSYgdm0gPSAqaml0LnZtKCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBqaXQuY29kZUJs
b2NrKCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKnN0YXRlLnN0dWJJbmZv
OworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gKnN0YXRlLmlkZW50OworICAgIEpTVmFs
dWVSZWdzIHZhbHVlUmVncyA9IHN0YXRlLnZhbHVlUmVnczsKKyAgICBHUFJSZWcgYmFzZUdQUiA9
IHN0YXRlLmJhc2VHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0ZS5zY3JhdGNoR1BS
OworCisgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOworCisgICAgZm9yIChjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogbV9jb25kaXRpb25TZXQpIHsKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgp
OworCisgICAgICAgIGlmIChjb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25X
YXRjaHBvaW50KHN0YXRlLmFkZFdhdGNocG9pbnQoY29uZGl0aW9uKSk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVu
c3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkp
IHsKKyAgICAgICAgICAgIC8vIFRoZSByZWFzb24gd2h5IHRoaXMgY2Fubm90IGhhcHBlbiBpcyB0
aGF0IHdlIHJlcXVpcmUgdGhhdCBQb2x5bW9ycGhpY0FjY2VzcyBjYWxscworICAgICAgICAgICAg
Ly8gQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoKSBvbmx5IGFmdGVyIGl0IGhhcyB2ZXJpZmllZCB0aGF0
CisgICAgICAgICAgICAvLyBBY2Nlc3NDYXNlOjpjb3VsZFN0aWxsU3VjY2VlZCgpIHJldHVybmVk
IHRydWUuCisKKyAgICAgICAgICAgIGRhdGFMb2coIlRoaXMgY29uZGl0aW9uIGlzIG5vIGxvbmdl
ciBtZXQ6ICIsIGNvbmRpdGlvbiwgIlxuIik7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2Ugd2lsbCBlbWl0IGNvZGUg
dGhhdCBoYXMgYSB3ZWFrIHJlZmVyZW5jZSB0aGF0IGlzbid0IG90aGVyd2lzZSBsaXN0ZWQgYW55
d2hlcmUuCisgICAgICAgIHN0YXRlLndlYWtSZWZlcmVuY2VzLmFwcGVuZChXcml0ZUJhcnJpZXI8
SlNDZWxsPih2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKTsKKworICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29uZGl0aW9uLm9iamVjdCgpKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZCgKKyAgICAgICAgICAgIGpp
dC5icmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUpKTsK
KyAgICB9CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgSW5IaXQ6CisgICAgY2Fz
ZSBJbk1pc3M6CisgICAgICAgIGppdC5ib3hCb29sZWFuUGF5bG9hZChtX3R5cGUgPT0gSW5IaXQs
IHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAg
ICAgIHJldHVybjsKKworICAgIGNhc2UgTWlzczoKKyAgICAgICAgaml0Lm1vdmVUcnVzdGVkVmFs
dWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwor
ICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIExvYWQ6CisgICAgY2FzZSBHZXRHZXR0ZXI6Cisg
ICAgY2FzZSBHZXR0ZXI6CisgICAgY2FzZSBTZXR0ZXI6CisgICAgY2FzZSBDdXN0b21WYWx1ZUdl
dHRlcjoKKyAgICBjYXNlIEN1c3RvbUFjY2Vzc29yR2V0dGVyOgorICAgIGNhc2UgQ3VzdG9tVmFs
dWVTZXR0ZXI6CisgICAgY2FzZSBDdXN0b21BY2Nlc3NvclNldHRlcjogeworICAgICAgICBHUFJS
ZWcgdmFsdWVSZWdzUGF5bG9hZEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisKKyAgICAg
ICAgaWYgKGlzVmFsaWRPZmZzZXQobV9vZmZzZXQpKSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUq
IGN1cnJTdHJ1Y3R1cmU7CisgICAgICAgICAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgp
KQorICAgICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUoKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gbV9jb25kaXRpb25TZXQu
c2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgICAgICAgICBj
dXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIG9m
ZnNldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyBiYXNlRm9yR2V0R1BSOworICAg
ICAgICBpZiAodmlhUHJveHkoKSkgeworICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSAhPSBDdXN0
b21WYWx1ZVNldHRlciB8fCBtX3R5cGUgIT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOyAvLyBCZWNh
dXNlIHNldHRlcnMgbmVlZCB0byBub3QgdHJhc2ggdmFsdWVSZWdzUGF5bG9hZEdQUi4KKyAgICAg
ICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyIHx8IG1fdHlwZSA9PSBTZXR0ZXIpCisgICAgICAg
ICAgICAgICAgYmFzZUZvckdldEdQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUiA9IHZhbHVlUmVnc1BheWxvYWRHUFI7CisKKyAg
ICAgICAgICAgIEFTU0VSVCgobV90eXBlICE9IEdldHRlciAmJiBtX3R5cGUgIT0gU2V0dGVyKSB8
fCBiYXNlRm9yR2V0R1BSICE9IGJhc2VHUFIpOworICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSAh
PSBTZXR0ZXIgfHwgYmFzZUZvckdldEdQUiAhPSB2YWx1ZVJlZ3NQYXlsb2FkR1BSKTsKKworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBi
YXNlRm9yR2V0R1BSKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBiYXNlRm9yR2V0R1BS
ID0gYmFzZUdQUjsKKworICAgICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUjsKKyAgICAgICAg
aWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGppdC5tb3ZlKAor
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihhbHRlcm5hdGVCYXNl
KCkpLAorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYmFzZUZvckFj
Y2Vzc0dQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYmFzZUZv
ckFjY2Vzc0dQUiA9IGJhc2VGb3JHZXRHUFI7CisKKyAgICAgICAgR1BSUmVnIGxvYWRlZFZhbHVl
R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgaWYgKG1fdHlwZSAhPSBDdXN0b21WYWx1ZUdl
dHRlciAmJiBtX3R5cGUgIT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgJiYgbV90eXBlICE9IEN1c3Rv
bVZhbHVlU2V0dGVyICYmIG1fdHlwZSAhPSBDdXN0b21BY2Nlc3NvclNldHRlcikgeworICAgICAg
ICAgICAgaWYgKG1fdHlwZSA9PSBMb2FkIHx8IG1fdHlwZSA9PSBHZXRHZXR0ZXIpCisgICAgICAg
ICAgICAgICAgbG9hZGVkVmFsdWVHUFIgPSB2YWx1ZVJlZ3NQYXlsb2FkR1BSOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0gc2NyYXRjaEdQUjsKKwor
ICAgICAgICAgICAgQVNTRVJUKChtX3R5cGUgIT0gR2V0dGVyICYmIG1fdHlwZSAhPSBTZXR0ZXIp
IHx8IGxvYWRlZFZhbHVlR1BSICE9IGJhc2VHUFIpOworICAgICAgICAgICAgQVNTRVJUKG1fdHlw
ZSAhPSBTZXR0ZXIgfHwgbG9hZGVkVmFsdWVHUFIgIT0gdmFsdWVSZWdzUGF5bG9hZEdQUik7CisK
KyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSOworICAgICAgICAgICAgaWYgKGlzSW5saW5l
T2Zmc2V0KG1fb2Zmc2V0KSkKKyAgICAgICAgICAgICAgICBzdG9yYWdlR1BSID0gYmFzZUZvckFj
Y2Vzc0dQUjsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRy
KAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUZvckFjY2Vz
c0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAg
bG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBsb2FkZWRWYWx1
ZUdQUjsKKyAgICAgICAgICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBq
aXQubG9hZDY0KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShtX29mZnNldCkpLCBsb2FkZWRWYWx1ZUdQUik7Cisj
ZWxzZQorICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBMb2FkIHx8IG1fdHlwZSA9PSBHZXRHZXR0
ZXIpIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UobV9v
ZmZzZXQpICsgVGFnT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLnRhZ0dQ
UigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9C
YXNlKG1fb2Zmc2V0KSArIFBheWxvYWRPZmZzZXQpLAorICAgICAgICAgICAgICAgIGxvYWRlZFZh
bHVlR1BSKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBMb2Fk
IHx8IG1fdHlwZSA9PSBHZXRHZXR0ZXIpIHsKKyAgICAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChPcHRpb25zOjp1
c2VET01KSVQoKSAmJiBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgJiYgdGhpcy0+YXM8
R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5kb21KSVQoKSkgeworICAgICAgICAgICAgYXV0byYg
YWNjZXNzID0gdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKTsKKyAgICAgICAgICAg
IC8vIFdlIGRvIG5vdCBuZWVkIHRvIGVtaXQgQ2hlY2tET00gb3BlcmF0aW9uIHNpbmNlIHN0cnVj
dHVyZSBjaGVjayBlbnN1cmVzCisgICAgICAgICAgICAvLyB0aGF0IHRoZSBzdHJ1Y3R1cmUgb2Yg
dGhlIGdpdmVuIGJhc2UgdmFsdWUgaXMgc3RydWN0dXJlKCkhIFNvIGFsbCB3ZSBzaG91bGQKKyAg
ICAgICAgICAgIC8vIGRvIGlzIHBlcmZvcm1pbmcgdGhlIENoZWNrRE9NIHRoaW5neSBpbiBJQyBj
b21waWxpbmcgdGltZSBoZXJlLgorICAgICAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5jbGFzc0lu
Zm8oKS0+aXNTdWJDbGFzc09mKGFjY2Vzcy5kb21KSVQoKS0+dGhpc0NsYXNzSW5mbygpKSkgewor
ICAgICAgICAgICAgICAgIGFjY2Vzcy5lbWl0RE9NSklUR2V0dGVyKHN0YXRlLCBiYXNlRm9yR2V0
R1BSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICAvLyBTdHVmZiBmb3IgY3VzdG9tIGdldHRlcnMvc2V0dGVycy4KKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGw7CisKKyAgICAgICAgLy8gU3R1ZmYgZm9y
IEpTIGdldHRlcnMvc2V0dGVycy4KKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIg
YWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2s7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBm
YXN0UGF0aENhbGw7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENhbGw7CisK
KyAgICAgICAgLy8gVGhpcyBhbHNvIGRvZXMgdGhlIG5lY2Vzc2FyeSBjYWxjdWxhdGlvbnMgb2Yg
d2hldGhlciBvciBub3Qgd2UncmUgYW4KKyAgICAgICAgLy8gZXhjZXB0aW9uIGhhbmRsaW5nIGNh
bGwgc2l0ZS4KKyAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxs
U3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgpOworCisg
ICAgICAgIGF1dG8gcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsID0gWyZdKEFj
Y2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSYgc3BpbGxTdGF0ZSwgYm9vbCBjYWxsSGFz
UmV0dXJuVmFsdWUpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3JlOworICAg
ICAgICAgICAgaWYgKGNhbGxIYXNSZXR1cm5WYWx1ZSkgeworICAgICAgICAgICAgICAgIC8vIFRo
aXMgaXMgdGhlIHJlc3VsdCB2YWx1ZS4gV2UgZG9uJ3Qgd2FudCB0byBvdmVyd3JpdGUgdGhlIHJl
c3VsdCB3aXRoIHdoYXQgd2Ugc3RvcmVkIHRvIHRoZSBzdGFjay4KKyAgICAgICAgICAgICAgICAv
LyBXZSBzb21ldGltZXMgaGF2ZSB0byBzdG9yZSBpdCB0byB0aGUgc3RhY2sganVzdCBpbiBjYXNl
IHdlIHRocm93IGFuIGV4Y2VwdGlvbiBhbmQgbmVlZCB0aGUgb3JpZ2luYWwgdmFsdWUuCisgICAg
ICAgICAgICAgICAgZG9udFJlc3RvcmUuc2V0KHZhbHVlUmVncyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoc3Bp
bGxTdGF0ZSwgZG9udFJlc3RvcmUpOworICAgICAgICB9OworCisgICAgICAgIGppdC5zdG9yZTMy
KAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUuY2FsbFNpdGVJ
bmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0
ZXIgfHwgbV90eXBlID09IFNldHRlcikgeworICAgICAgICAgICAgYXV0byYgYWNjZXNzID0gdGhp
cy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKTsKKyAgICAgICAgICAgIEFTU0VSVChiYXNl
R1BSICE9IGxvYWRlZFZhbHVlR1BSKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgIT0gU2V0
dGVyIHx8IChiYXNlR1BSICE9IHZhbHVlUmVnc1BheWxvYWRHUFIgJiYgbG9hZGVkVmFsdWVHUFIg
IT0gdmFsdWVSZWdzUGF5bG9hZEdQUikpOworCisgICAgICAgICAgICAvLyBDcmVhdGUgYSBKUyBj
YWxsIHVzaW5nIGEgSlMgY2FsbCBpbmxpbmUgY2FjaGUuIEFzc3VtZSB0aGF0OgorICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIC8vIC0gU1AgaXMgYWxpZ25lZCBhbmQgcmVwcmVzZW50cyB0aGUg
ZXh0ZW50IG9mIHRoZSBjYWxsaW5nIGNvbXBpbGVyJ3Mgc3RhY2sgdXNhZ2UuCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgLy8gLSBGUCBpcyBzZXQgY29ycmVjdGx5IChpLmUuIGl0IHBvaW50
cyB0byB0aGUgY2FsbGVyJ3MgY2FsbCBmcmFtZSBoZWFkZXIpLgorICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vIC0gU1AgLSBGUCBpcyBhbiBhbGlnbmVkIGRpZmZlcmVuY2UuCisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgLy8gLSBBbnkgYnl0ZSBiZXR3ZWVuIEZQIChleGNsdXNpdmUp
IGFuZCBTUCAoaW5jbHVzaXZlKSBjb3VsZCBiZSBsaXZlIGluIHRoZSBjYWxsaW5nCisgICAgICAg
ICAgICAvLyAgIGNvZGUuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlcmVmb3Jl
LCB3ZSB0ZW1wb3JhcmlseSBncm93IHRoZSBzdGFjayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhlIGNh
bGwgYW5kIHRoZW4KKyAgICAgICAgICAgIC8vIHNocmluayBpdCBhZnRlci4KKworICAgICAgICAg
ICAgc3RhdGUuc2V0U3BpbGxTdGF0ZUZvckpTR2V0dGVyU2V0dGVyKHNwaWxsU3RhdGUpOworCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghYWNjZXNzLmNhbGxMaW5rSW5mbygpKTsKKyAgICAg
ICAgICAgIGFjY2Vzcy5tX2NhbGxMaW5rSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtJ
bmZvPigpOworCisgICAgICAgICAgICAvLyBGSVhNRTogSWYgd2UgZ2VuZXJhdGVkIGEgcG9seW1v
cnBoaWMgY2FsbCBzdHViIHRoYXQganVtcGVkIGJhY2sgdG8gdGhlIGdldHRlcgorICAgICAgICAg
ICAgLy8gc3R1Yiwgd2hpY2ggdGhlbiBqdW1wZWQgYmFjayB0byB0aGUgbWFpbiBjb2RlLCB0aGVu
IHdlJ2QgaGF2ZSBhIHJlYWNoYWJpbGl0eQorICAgICAgICAgICAgLy8gc2l0dWF0aW9uIHRoYXQg
dGhlIEdDIGRvZXNuJ3Qga25vdyBhYm91dC4gVGhlIEdDIHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBw
b2x5bW9ycGhpYworICAgICAgICAgICAgLy8gY2FsbCBzdHViIHN0YXllZCBhbGl2ZSwgYW5kIGl0
IHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBtYWluIGNvZGUgc3RheWVkIGFsaXZlLCBidXQKKyAgICAg
ICAgICAgIC8vIGl0IHdvdWxkbid0IGtub3cgdGhhdCB0aGUgZ2V0dGVyIHN0dWIgd2FzIGFsaXZl
LiBJZGVhbGx5IEpJVCBzdHViIHJvdXRpbmVzIHdvdWxkCisgICAgICAgICAgICAvLyBiZSBHQyBv
YmplY3RzLCBhbmQgdGhlbiB3ZSdkIGJlIGFibGUgdG8gc2F5IHRoYXQgdGhlIHBvbHltb3JwaGlj
IGNhbGwgc3R1YiBoYXMgYQorICAgICAgICAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBnZXR0ZXIg
c3R1Yi4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDg5MTQKKyAgICAgICAgICAgIGFjY2Vzcy5jYWxsTGlua0luZm8oKS0+ZGlzYWxsb3dT
dHVicygpOworCisgICAgICAgICAgICBhY2Nlc3MuY2FsbExpbmtJbmZvKCktPnNldFVwQ2FsbCgK
KyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm86OkNhbGwsIHN0dWJJbmZvLmNvZGVPcmlnaW4s
IGxvYWRlZFZhbHVlR1BSKTsKKworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBk
b25lOworCisgICAgICAgICAgICAvLyBUaGVyZSBpcyBhICJ0aGlzIiBhcmd1bWVudC4KKyAgICAg
ICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDE7CisgICAgICAgICAgICAvLyAu
Li4gYW5kIGEgdmFsdWUgYXJndW1lbnQgaWYgd2UncmUgY2FsbGluZyBhIHNldHRlci4KKyAgICAg
ICAgICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKQorICAgICAgICAgICAgICAgIG51bWJlck9mUGFy
YW1ldGVycysrOworCisgICAgICAgICAgICAvLyBHZXQgdGhlIGFjY2Vzc29yOyBpZiB0aGVyZSBh
aW4ndCBvbmUgdGhlbiB0aGUgcmVzdWx0IGlzIGpzVW5kZWZpbmVkKCkuCisgICAgICAgICAgICBp
ZiAobV90eXBlID09IFNldHRlcikgeworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEdl
dHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSksCisgICAgICAgICAgICAgICAgICAgIGxvYWRl
ZFZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaml0Lmxv
YWRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhsb2FkZWRW
YWx1ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZkdldHRlcigpKSwKKyAgICAgICAgICAgICAg
ICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgcmV0dXJuVW5kZWZpbmVkID0gaml0LmJyYW5jaFRlc3RQdHIoCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBsb2FkZWRWYWx1ZUdQUik7CisKKyAgICAg
ICAgICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPSBDYWxsRnJhbWU6OmhlYWRlclNp
emVJblJlZ2lzdGVycyArIG51bWJlck9mUGFyYW1ldGVyczsKKyAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mQnl0ZXNGb3JDYWxsID0gbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdp
c3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisKKyAgICAgICAgICAgIHVuc2lnbmVk
IGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9CisgICAgICAgICAgICBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7
CisKKyAgICAgICAgICAgIGppdC5zdWJQdHIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCisg
ICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSk7CisKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyksCisgICAgICAgICAg
ICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsKKworICAgICAgICAgICAgaml0
LnN0b3JlQ2VsbCgKKyAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiwgY2FsbGVlRnJhbWUu
d2l0aE9mZnNldChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisK
KyAgICAgICAgICAgIGppdC5zdG9yZUNlbGwoCisgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAg
ICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KDApLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCisgICAgICAgICAgICBp
ZiAobV90eXBlID09IFNldHRlcikgeworICAgICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAor
ICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgICAgIGNhbGxl
ZUZyYW1lLndpdGhPZmZzZXQoCisgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dDYXNlID0gaml0LmJy
YW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFs
LCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2ssCisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsKKworICAgICAgICAgICAgZmFz
dFBhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICBpZiAobV90eXBlID09IEdl
dHRlcikKKyAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CisgICAg
ICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICAgICAgc2xvd0Nhc2Uu
bGluaygmaml0KTsKKyAgICAgICAgICAgIGppdC5tb3ZlKGxvYWRlZFZhbHVlR1BSLCBHUFJJbmZv
OjpyZWdUMCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgIC8vIFdlICphbHdh
eXMqIGtub3cgdGhhdCB0aGUgZ2V0dGVyL3NldHRlciwgaWYgbm9uLW51bGwsIGlzIGEgY2VsbC4K
KyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7CisjZW5kaWYKKyAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihhY2Nlc3MuY2FsbExpbmtJbmZvKCkpLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBqaXQubmVhckNhbGwoKTsK
KyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyKQorICAgICAgICAgICAgICAgIGppdC5z
ZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1w
KCkpOworCisgICAgICAgICAgICByZXR1cm5VbmRlZmluZWQubGluaygmaml0KTsKKyAgICAgICAg
ICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyKQorICAgICAgICAgICAgICAgIGppdC5tb3ZlVHJ1c3Rl
ZFZhbHVlKGpzVW5kZWZpbmVkKCksIHZhbHVlUmVncyk7CisKKyAgICAgICAgICAgIGRvbmUubGlu
aygmaml0KTsKKworICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rlcikp
IC0gc3RhdGUucHJlc2VydmVkUmV1c2VkUmVnaXN0ZXJTdGF0ZS5udW1iZXJPZkJ5dGVzUHJlc2Vy
dmVkIC0gc3BpbGxTdGF0ZS5udW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2
YXRpb24pLAorICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGJvb2wgY2FsbEhh
c1JldHVyblZhbHVlID0gaXNHZXR0ZXIoKTsKKyAgICAgICAgICAgIHJlc3RvcmVMaXZlUmVnaXN0
ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRlLCBjYWxsSGFzUmV0dXJuVmFsdWUpOworCisg
ICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigp
LmNhbGxMaW5rSW5mbygpLT5zZXRDYWxsTG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93UGF0aENh
bGwpKSwKKyAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1ZmZlci5s
b2NhdGlvbk9mKGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrKSksCisgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RQYXRoQ2FsbCkpOworCisgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAorICAgICAgICAgICAgICAgICAgICBzbG93UGF0
aENhbGwsCisgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0
dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQ3VzdG9tVmFsdWVH
ZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0
b21WYWx1ZVNldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOworCisgICAg
ICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIEMgY2FsbCBzbyBhbnkgb2Ygb3Vy
IHN0YWNrIHNwaWxsYWdlIGlzbid0IG92ZXJ3cml0dGVuLiBJdCdzCisgICAgICAgICAgICAvLyBo
YXJkIHRvIHRyYWNrIGlmIHNvbWVvbmUgZGlkIHNwaWxsYWdlIG9yIG5vdCwgc28gd2UganVzdCBh
c3N1bWUgdGhhdCB3ZSBhbHdheXMgbmVlZAorICAgICAgICAgICAgLy8gdG8gbWFrZSBzb21lIHNw
YWNlIGhlcmUuCisgICAgICAgICAgICBqaXQubWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CisK
KyAgICAgICAgICAgIC8vIGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgICAgIC8vIHNldHRlcjogdm9pZCAoKlB1dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc09iamVjdCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpOworICAgICAgICAgICAg
Ly8gQ3VzdG9tIHZhbHVlcyBhcmUgcGFzc2VkIHRoZSBzbG90QmFzZSAodGhlIHByb3BlcnR5IGhv
bGRlciksIGN1c3RvbSBhY2Nlc3NvcnMgYXJlIHBhc3NlZCB0aGUgdGhpc1ZhdWxlIChyZWNpZXZl
cikuCisgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgZGlmZmVyZW5jZXMgaW4gY3Vz
dG9tIHZhbHVlcyBhbmQgY3VzdG9tIGFjY2Vzc29ycy4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgwMTQKKyAgICAgICAgICAgIEdQUlJl
ZyBiYXNlRm9yQ3VzdG9tVmFsdWUgPSBtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIgfHwgbV90
eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyID8gYmFzZUZvckFjY2Vzc0dQUiA6IGJhc2VGb3JHZXRH
UFI7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9t
VmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyKSB7CisgICAgICAg
ICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAg
ICAgICAgYmFzZUZvckN1c3RvbVZhbHVlLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoaWRlbnQuaW1wbCgpKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JDdXN0
b21WYWx1ZSwgdmFsdWVSZWdzLmdwcigpKTsKKyNlbHNlCisgICAgICAgICAgICBpZiAobV90eXBl
ID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3NvckdldHRlcikg
eworICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAg
ICAgICAgICAgICAgICAgIEVBQklfMzJCSVRfRFVNTVlfQVJHIGJhc2VGb3JDdXN0b21WYWx1ZSwK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihpZGVudC5pbXBsKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgRUFC
SV8zMkJJVF9EVU1NWV9BUkcgYmFzZUZvckN1c3RvbVZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKKyAgICAgICAg
ICAgICAgICAgICAgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzLnRhZ0dQUigpKTsK
KyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0udG9wQ2FsbEZyYW1lKTsKKworICAgICAgICAgICAgb3Bl
cmF0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vz
c0Nhc2U+KCkubV9jdXN0b21BY2Nlc3Nvci5vcGFxdWUpKTsKKyAgICAgICAgICAgIH0pOworCisg
ICAgICAgICAgICBpZiAobV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBD
dXN0b21BY2Nlc3NvckdldHRlcikKKyAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZh
bHVlUmVncyk7CisgICAgICAgICAgICBqaXQucmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7
CisKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBub0V4Y2VwdGlvbiA9CisgICAgICAg
ICAgICBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRp
b25DaGVjayk7CisKKyAgICAgICAgICAgIHN0YXRlLnJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0
YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNlcHRpb24oc3BpbGxTdGF0ZSk7CisgICAgICAgICAgICBz
dGF0ZS5lbWl0RXhwbGljaXRFeGNlcHRpb25IYW5kbGVyKCk7CisKKyAgICAgICAgICAgIG5vRXhj
ZXB0aW9uLmxpbmsoJmppdCk7CisgICAgICAgICAgICBib29sIGNhbGxIYXNSZXR1cm5WYWx1ZSA9
IGlzR2V0dGVyKCk7CisgICAgICAgICAgICByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0Zv
ckNhbGwoc3BpbGxTdGF0ZSwgY2FsbEhhc1JldHVyblZhbHVlKTsKKyAgICAgICAgfQorICAgICAg
ICBzdGF0ZS5zdWNjZWVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIFJl
cGxhY2U6IHsKKyAgICAgICAgaWYgKEluZmVycmVkVHlwZSogdHlwZSA9IHN0cnVjdHVyZSgpLT5p
bmZlcnJlZFR5cGVGb3IoaWRlbnQuaW1wbCgpKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICAgICAgZGF0YUxvZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNjcmlwdG9y
KCksICJcbiIpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAorICAg
ICAgICAgICAgICAgIGppdC5icmFuY2hJZk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0
eXBlLT5kZXNjcmlwdG9yKCkpKTsKKyAgICAgICAgfSBlbHNlIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgZGF0YUxvZygiRG9uJ3QgaGF2ZSB0eXBlLlxuIik7CisKKyAgICAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KG1fb2Zmc2V0KSkgeworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAg
ICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcygKKyAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAg
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsKKyAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAor
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAg
ICAgc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFs
dWUpKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgY2FzZSBUcmFuc2l0aW9uOiB7CisgICAgICAgIC8vIEFjY2Vzc0Nh
c2U6OnRyYW5zaXRpb24oKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBudWxsIGlmIHRoaXMgd2Fzbid0
IHRydWUuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
ID49IDYgfHwgIXN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpIHx8IHN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKTsKKworICAgICAgICBpZiAoSW5mZXJyZWRUeXBlKiB0eXBlID0gbmV3U3RydWN0dXJlKCkt
PmluZmVycmVkVHlwZUZvcihpZGVudC5pbXBsKCkpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYXZlIHR5cGU6ICIsIHR5cGUtPmRlc2NyaXB0
b3IoKSwgIlxuIik7CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoCisg
ICAgICAgICAgICAgICAgaml0LmJyYW5jaElmTm90VHlwZSh2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIs
IHR5cGUtPmRlc2NyaXB0b3IoKSkpOworICAgICAgICB9IGVsc2UgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKCJEb24ndCBoYXZlIHR5cGUuXG4iKTsKKworICAgICAgICAvLyBOT1RF
OiBUaGlzIGxvZ2ljIGlzIGR1cGxpY2F0ZWQgaW4gQWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKCkuIEl0
J3MgaW1wb3J0YW50IHRoYXQgZG9lc0NhbGxzKCkga25vd3MKKyAgICAgICAgLy8gZXhhY3RseSB3
aGVuIHRoaXMgd291bGQgbWFrZSBjYWxscy4KKyAgICAgICAgYm9vbCBhbGxvY2F0aW5nID0gbmV3
U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCk7CisgICAgICAgIGJvb2wgcmVhbGxvY2F0aW5nID0gYWxsb2NhdGluZyAmJiBz
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAgICAgYm9vbCBhbGxvY2F0aW5n
SW5saW5lID0gYWxsb2NhdGluZyAmJiAhc3RydWN0dXJlKCktPmNvdWxkSGF2ZUluZGV4aW5nSGVh
ZGVyKCk7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHVi
SW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQ
Uik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlVGFnR1BSKSk7CisjZW5kaWYKKyAgICAg
ICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2soc2Ny
YXRjaEdQUik7CisKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZzsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgaWYg
KGFsbG9jYXRpbmdJbmxpbmUpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9y
LmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICAgICAgc2NyYXRjaEdQUjMgPSBhbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIH0KKworICAgICAgICBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0KKyAgICAgICAg
YWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOworCisgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAgQVNTRVJUKHN0
cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsK
KworICAgICAgICBpZiAoYWxsb2NhdGluZykgeworICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUg
PSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsK
KworICAgICAgICAgICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUpIHsKKyAgICAgICAgICAgICAgICBN
YXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtLmF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZv
cihuZXdTaXplKTsKKworICAgICAgICAgICAgICAgIGlmICghYWxsb2NhdG9yKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIFl1Y2ssIHRoaXMgY2FzZSB3b3VsZCBzdWNrIQorICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGFs
bG9jYXRvciksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICBqaXQuZW1pdEFsbG9jYXRl
KHNjcmF0Y2hHUFIsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0
aCk7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihuZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworCisgICAg
ICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+
IG9sZFNpemUpOworCisgICAgICAgICAgICAgICAgaWYgKHJlYWxsb2NhdGluZykgeworICAgICAg
ICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIHJlYWxsb2NhdGlu
ZyAoaS5lLiB0aGUgb2xkIHN0cnVjdHVyZS9idXR0ZXJmbHkKKyAgICAgICAgICAgICAgICAgICAg
Ly8gYWxyZWFkeSBoYWQgb3V0LW9mLWxpbmUgcHJvcGVydHkgc3RvcmFnZSkuCisKKyAgICAgICAg
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKKworICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjMg
PSBvbGQgc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgLy8gc2NyYXRjaEdQUjIgPSBhdmFp
bGFibGUKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0
IDwgb2xkU2l6ZTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQ
UjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsgc2l6ZW9m
KEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cigKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1z
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2
b2lkKikpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSBvbGRTaXplOyBvZmZzZXQgPCBuZXdT
aXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0
b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihK
U1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgYWxsb2NhdGluZyBvdXQt
b2YtbGluZSB1c2luZyBhbiBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQg
ZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlOworICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJz
VG9QcmVzZXJ2ZS5zZXQoYmFzZUdQUik7CisgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNU
b1ByZXNlcnZlLnNldCh2YWx1ZVJlZ3MpOworICAgICAgICAgICAgICAgIEFjY2Vzc0dlbmVyYXRp
b25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0
ZXJzVG9TdGFja0ZvckNhbGwoZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIXJlYWxsb2NhdGluZykgewor
ICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VH
UFIpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAgICAgICAg
ICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3BlcmF0aW9uQ2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlv
blB0cihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0
aEluaXRpYWxDYXBhY2l0eSkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hl
cmUgd2UgYXJlIHJlYWxsb2NhdGluZyAoaS5lLiB0aGUgb2xkIHN0cnVjdHVyZS9idXR0ZXJmbHkK
KyAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBoYWQgb3V0LW9mLWxpbmUgcHJvcGVydHkg
c3RvcmFnZSkuCisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2Fs
bCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxsLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblJlYWxsb2Nh
dGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UpKTsKKyAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGppdC5yZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKKyAgICAgICAgICAgICAgICBqaXQu
bW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vRXhjZXB0aW9uID0gaml0
LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2sp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0YXRlLnJlc3RvcmVMaXZlUmVn
aXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNlcHRpb24oc3BpbGxTdGF0ZSk7Cisg
ICAgICAgICAgICAgICAgc3RhdGUuZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcigpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAgICAgc3RhdGUucmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxs
KHNwaWxsU3RhdGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKSB7CisgICAgICAgICAgICBqaXQuc3RvcmVW
YWx1ZSgKKyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAorICAgICAgICAg
ICAgICAgICAgICBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKworICAgICAgICAg
ICAgICAgICAgICBvZmZzZXRJbklubGluZVN0b3JhZ2UobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFs
dWUpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIWFsbG9jYXRpbmcpCisg
ICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
aml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseSht
X29mZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUpIHsKKyAgICAgICAgICAgIC8vIFdlIHNldCB0aGUgbmV3
IGJ1dHRlcmZseSBhbmQgdGhlIHN0cnVjdHVyZSBsYXN0LiBEb2luZyBpdCB0aGlzIHdheSBlbnN1
cmVzIHRoYXQKKyAgICAgICAgICAgIC8vIHdoYXRldmVyIHdlIGhhZCBkb25lIHVwIHRvIHRoaXMg
cG9pbnQgaXMgZm9yZ290dGVuIGlmIHdlIGNob29zZSB0byBicmFuY2ggdG8gc2xvdworICAgICAg
ICAgICAgLy8gcGF0aC4KKyAgICAgICAgICAgIGppdC5udWtlU3RydWN0dXJlQW5kU3RvcmVCdXR0
ZXJmbHkoc2NyYXRjaEdQUiwgYmFzZUdQUik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHVpbnQzMl90IHN0cnVjdHVyZUJpdHMgPSBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KG5ld1N0cnVj
dHVyZSgpLT5pZCgpKTsKKyAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihzdHJ1Y3R1cmVCaXRzKSwKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAg
ICAgICAgCisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5n
KGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAgICAg
IAorICAgICAgICAvLyBXZSB3aWxsIGhhdmUgYSBzbG93IHBhdGggaWYgd2Ugd2VyZSBhbGxvY2F0
aW5nIHdpdGhvdXQgdGhlIGhlbHAgb2YgYW4gb3BlcmF0aW9uLgorICAgICAgICBpZiAoYWxsb2Nh
dGluZ0lubGluZSkgeworICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJlZ2lzdGVy
cygpKSB7CisgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICAgICAgICAg
ICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNl
cnZlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChq
aXQuanVtcCgpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHN0YXRlLmZh
aWxBbmRJZ25vcmUuYXBwZW5kKHNsb3dQYXRoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzbG93UGF0aC5lbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheUxlbmd0aDogeworICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoCisgICAgICAgICAgICBqaXQu
YnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgaml0LmJveEludDMyKHNjcmF0Y2hHUFIsIHZh
bHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAgICAgCisgICAgY2FzZSBTdHJpbmdMZW5ndGg6IHsKKyAgICAgICAgaml0LmxvYWQz
MihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3Ro
KCkpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgaml0LmJveEludDMyKHZhbHVl
UmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBJbnRyaW5zaWNHZXR0
ZXI6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQoKSkpOwor
ICAgICAgICAKKyAgICAgICAgLy8gV2UgbmVlZCB0byBlbnN1cmUgdGhlIGdldHRlciB2YWx1ZSBk
b2VzIG5vdCBtb3ZlIGZyb20gdW5kZXIgdXMuIE5vdGUgdGhhdCBHZXR0ZXJTZXR0ZXJzCisgICAg
ICAgIC8vIGFyZSBpbW11dGFibGUgc28gd2UganVzdCBuZWVkIHRvIHdhdGNoIHRoZSBwcm9wZXJ0
eSBub3QgYW55IHZhbHVlIGluc2lkZSBpdC4KKyAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0
dXJlOworICAgICAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAg
Y3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBj
dXJyU3RydWN0dXJlID0gbV9jb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3Qo
KS0+c3RydWN0dXJlKCk7CisgICAgICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9w
ZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgb2Zmc2V0KCkpOworICAgICAgICAKKyAgICAgICAgdGhp
cy0+YXM8SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZT4oKS5lbWl0SW50cmluc2ljR2V0dGVyKHN0
YXRlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBEaXJlY3RB
cmd1bWVudHNMZW5ndGg6CisgICAgY2FzZSBTY29wZWRBcmd1bWVudHNMZW5ndGg6CisgICAgICAg
IC8vIFRoZXNlIG5lZWQgdG8gYmUgaGFuZGxlZCBieSBnZW5lcmF0ZVdpdGhHdWFyZCgpLCBzaW5j
ZSB0aGUgZ3VhcmQgaXMgcGFydCBvZiB0aGUKKyAgICAgICAgLy8gYWxnb3JpdGhtLiBXZSBjYW4g
YmUgc3VyZSB0aGF0IG5vYm9keSB3aWxsIGNhbGwgZ2VuZXJhdGUoKSBkaXJlY3RseSBmb3IgdGhl
c2Ugc2luY2UgdGhleQorICAgICAgICAvLyBhcmUgbm90IGd1YXJkZWQgYnkgc3RydWN0dXJlIGNo
ZWNrcy4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAg
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0dGVyKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3Rh
dGUsIEdQUlJlZyBiYXNlRm9yR2V0R1BSKQoreworICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0
YXRlLmppdDsKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSAqc3RhdGUuc3R1Yklu
Zm87CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gc3RhdGUudmFsdWVSZWdzOworICAgIEdQ
UlJlZyBiYXNlR1BSID0gc3RhdGUuYmFzZUdQUjsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHN0
YXRlLnNjcmF0Y2hHUFI7CisgICAgCisgICAgLy8gV2UgY29uc3RydWN0IHRoZSBlbnZpcm9ubWVu
dCB0aGF0IGNhbiBleGVjdXRlIHRoZSBET01KSVQ6OlBhdGNocG9pbnQgaGVyZS4KKyAgICBSZWY8
RE9NSklUOjpDYWxsRE9NR2V0dGVyUGF0Y2hwb2ludD4gcGF0Y2hwb2ludCA9IGRvbUpJVCgpLT5j
YWxsRE9NR2V0dGVyKCk7CisgICAgCisgICAgVmVjdG9yPEdQUlJlZz4gZ3BTY3JhdGNoOworICAg
IFZlY3RvcjxGUFJSZWc+IGZwU2NyYXRjaDsKKyAgICBWZWN0b3I8RE9NSklUOjpWYWx1ZT4gcmVn
czsKKyAgICAKKyAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZv
LnBhdGNoLnVzZWRSZWdpc3RlcnMpOworICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOworI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgYWxsb2NhdG9yLmxvY2soc3RhdGljX2Nhc3Q8R1BSUmVn
PihzdHViSW5mby5wYXRjaC5iYXNlVGFnR1BSKSk7CisjZW5kaWYKKyAgICBhbGxvY2F0b3IubG9j
ayh2YWx1ZVJlZ3MpOworICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOworICAgIAorICAg
IEdQUlJlZyBwYXJhbUJhc2VHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIEdQUlJlZyBwYXJhbUds
b2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgSlNWYWx1ZVJlZ3MgcGFyYW1WYWx1
ZVJlZ3MgPSB2YWx1ZVJlZ3M7CisgICAgR1BSUmVnIHJlbWFpbmluZ1NjcmF0Y2hHUFIgPSBJbnZh
bGlkR1BSUmVnOworICAgIAorICAgIC8vIHZhbHVlUmVncyBhbmQgYmFzZUZvckdldEdQUiBtYXkg
YmUgdGhlIHNhbWUuIEZvciBleGFtcGxlLCBpbiBCYXNlbGluZSBKSVQsIHdlIHBhc3MgdGhlIHNh
bWUgcmVnVDAgZm9yIGJhc2VHUFIgYW5kIHZhbHVlUmVncy4KKyAgICAvLyBJbiBGVEwsIHRoZXJl
IGlzIG5vIGNvbnN0cmFpbnQgdGhhdCB0aGUgYmFzZUZvckdldEdQUiBpbnRlcmZlcmVzIHdpdGgg
dGhlIHJlc3VsdC4gVG8gbWFrZSBpbXBsZW1lbnRhdGlvbiBzaW1wbGUgaW4KKyAgICAvLyBET01K
SVQ6OlBhdGNocG9pbnQsIERPTUpJVDo6UGF0Y2hwb2ludCBhc3N1bWVzIHRoYXQgcmVzdWx0IHJl
Z2lzdGVycyBhbHdheXMgZWFybHkgaW50ZXJmZXJlIHdpdGggaW5wdXQgcmVnaXN0ZXJzLCBpbiB0
aGlzIGNhc2UsCisgICAgLy8gYmFzZUZvckdldEdQUi4gU28gd2UgbW92ZSBiYXNlRm9yR2V0R1BS
IHRvIHRoZSBvdGhlciByZWdpc3RlciBpZiBiYXNlRm9yR2V0R1BSID09IHZhbHVlUmVncy4KKyAg
ICBpZiAoYmFzZUZvckdldEdQUiAhPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSB7CisgICAgICAg
IHBhcmFtQmFzZUdQUiA9IGJhc2VGb3JHZXRHUFI7CisgICAgICAgIGlmICghcGF0Y2hwb2ludC0+
cmVxdWlyZUdsb2JhbE9iamVjdCkKKyAgICAgICAgICAgIHJlbWFpbmluZ1NjcmF0Y2hHUFIgPSBz
Y3JhdGNoR1BSOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXJhbUdsb2JhbE9iamVjdEdQ
UiA9IHNjcmF0Y2hHUFI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaml0Lm1vdmUodmFsdWVSZWdz
LnBheWxvYWRHUFIoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHBhcmFtQmFzZUdQUiA9IHNjcmF0
Y2hHUFI7CisgICAgICAgIGlmIChwYXRjaHBvaW50LT5yZXF1aXJlR2xvYmFsT2JqZWN0KQorICAg
ICAgICAgICAgcGFyYW1HbG9iYWxPYmplY3RHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7CisgICAgfQorICAgIAorICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3RGb3JE
T01KSVQgPSBzdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgCisgICAgcmVncy5hcHBl
bmQocGFyYW1WYWx1ZVJlZ3MpOworICAgIHJlZ3MuYXBwZW5kKHBhcmFtQmFzZUdQUik7CisgICAg
aWYgKHBhdGNocG9pbnQtPnJlcXVpcmVHbG9iYWxPYmplY3QpIHsKKyAgICAgICAgQVNTRVJUKHBh
cmFtR2xvYmFsT2JqZWN0R1BSICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICByZWdzLmFwcGVu
ZChET01KSVQ6OlZhbHVlKHBhcmFtR2xvYmFsT2JqZWN0R1BSLCBnbG9iYWxPYmplY3RGb3JET01K
SVQpKTsKKyAgICB9CisgICAgCisgICAgaWYgKHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lz
dGVycykgeworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgaWYgKHJlbWFpbmluZ1Nj
cmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgZ3BTY3JhdGNoLmFwcGVu
ZChyZW1haW5pbmdTY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgfQorICAg
ICAgICBmb3IgKDsgaSA8IHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVyczsgKytpKQor
ICAgICAgICAgICAgZ3BTY3JhdGNoLmFwcGVuZChhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCkpOworICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGF0Y2hwb2lu
dC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzOyArK2kpCisgICAgICAgIGZwU2NyYXRjaC5hcHBlbmQo
YWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEZQUigpKTsKKyAgICAKKyAgICAvLyBMZXQncyBzdG9y
ZSB0aGUgcmV1c2VkIHJlZ2lzdGVycyB0byB0aGUgc3RhY2suIEFmdGVyIHRoYXQsIHdlIGNhbiB1
c2UgYWxsb2NhdGVkIHNjcmF0Y2ggcmVnaXN0ZXJzLgorICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcjo6UHJlc2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGUgPQorICAgIGFsbG9jYXRvci5wcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKKyAgICAKKyAgICBpZiAodmVyYm9z
ZSkgeworICAgICAgICBkYXRhTG9nKCJiYXNlR1BSID0gIiwgYmFzZUdQUiwgIlxuIik7CisgICAg
ICAgIGRhdGFMb2coInZhbHVlUmVncyA9ICIsIHZhbHVlUmVncywgIlxuIik7CisgICAgICAgIGRh
dGFMb2coInNjcmF0Y2hHUFIgPSAiLCBzY3JhdGNoR1BSLCAiXG4iKTsKKyAgICAgICAgZGF0YUxv
ZygicGFyYW1CYXNlR1BSID0gIiwgcGFyYW1CYXNlR1BSLCAiXG4iKTsKKyAgICAgICAgaWYgKHBh
cmFtR2xvYmFsT2JqZWN0R1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBkYXRhTG9n
KCJwYXJhbUdsb2JhbE9iamVjdEdQUiA9ICIsIHBhcmFtR2xvYmFsT2JqZWN0R1BSLCAiXG4iKTsK
KyAgICAgICAgZGF0YUxvZygicGFyYW1WYWx1ZVJlZ3MgPSAiLCBwYXJhbVZhbHVlUmVncywgIlxu
Iik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXRjaHBvaW50LT5udW1HUFNj
cmF0Y2hSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgICAgIGRhdGFMb2coImdwU2NyYXRjaFsiLCBp
LCAiXSA9ICIsIGdwU2NyYXRjaFtpXSwgIlxuIik7CisgICAgfQorICAgIAorICAgIGlmIChwYXRj
aHBvaW50LT5yZXF1aXJlR2xvYmFsT2JqZWN0KQorICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0Rm9yRE9NSklUKSwgcGFyYW1HbG9iYWxPYmpl
Y3RHUFIpOworICAgIAorICAgIC8vIFdlIGp1c3Qgc3BpbGwgdGhlIHJlZ2lzdGVycyB1c2VkIGlu
IERPTUpJVDo6UGF0Y2hwb2ludCBoZXJlLiBGb3Igbm90IHNwaWxsZWQgcmVnaXN0ZXJzIGhlcmUg
ZXhwbGljaXRseSwKKyAgICAvLyB0aGV5IG11c3QgYmUgaW4gdGhlIHVzZWQgcmVnaXN0ZXIgc2V0
IHBhc3NlZCBieSB0aGUgY2FsbGVycyAoQmFzZWxpbmUsIERGRywgYW5kIEZUTCkgaWYgdGhleSBu
ZWVkIHRvIGJlIGtlcHQuCisgICAgLy8gU29tZSByZWdpc3RlcnMgY2FuIGJlIGxvY2tlZCwgYnV0
IG5vdCBpbiB0aGUgdXNlZCByZWdpc3RlciBzZXQuIEZvciBleGFtcGxlLCB0aGUgY2FsbGVyIGNv
dWxkIG1ha2UgYmFzZUdQUgorICAgIC8vIHNhbWUgdG8gdmFsdWVSZWdzLCBhbmQgbm90IGluY2x1
ZGUgaXQgaW4gdGhlIHVzZWQgcmVnaXN0ZXJzIHNpbmNlIGl0IHdpbGwgYmUgY2hhbmdlZC4KKyAg
ICBSZWdpc3RlclNldCByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGw7CisgICAgZm9yIChhdXRvJiB2
YWx1ZSA6IHJlZ3MpIHsKKyAgICAgICAgRE9NSklUOjpSZWcgcmVnID0gdmFsdWUucmVnKCk7Cisg
ICAgICAgIGlmIChyZWcuaXNKU1ZhbHVlUmVncygpKQorICAgICAgICAgICAgcmVnaXN0ZXJzVG9T
cGlsbEZvckNDYWxsLnNldChyZWcuanNWYWx1ZVJlZ3MoKSk7CisgICAgICAgIGVsc2UgaWYgKHJl
Zy5pc0dQUigpKQorICAgICAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChyZWcu
Z3ByKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0Nh
bGwuc2V0KHJlZy5mcHIoKSk7CisgICAgfQorICAgIGZvciAoR1BSUmVnIHJlZyA6IGdwU2NyYXRj
aCkKKyAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChyZWcpOworICAgIGZvciAo
RlBSUmVnIHJlZyA6IGZwU2NyYXRjaCkKKyAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxs
LnNldChyZWcpOworICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5leGNsdWRlKFJlZ2lzdGVy
U2V0OjpyZWdpc3RlcnNUb05vdFNhdmVGb3JDQ2FsbCgpKTsKKyAgICAKKyAgICBET01KSVRBY2Nl
c3NDYXNlUGF0Y2hwb2ludFBhcmFtcyBwYXJhbXMoV1RGTW92ZShyZWdzKSwgV1RGTW92ZShncFNj
cmF0Y2gpLCBXVEZNb3ZlKGZwU2NyYXRjaCkpOworICAgIHBhdGNocG9pbnQtPmdlbmVyYXRvcigp
LT5ydW4oaml0LCBwYXJhbXMpOworICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJz
QnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAg
ICAKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbnMgPSBwYXJhbXMuZW1pdFNs
b3dQYXRoQ2FsbHMoc3RhdGUsIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbCwgaml0KTsKKyAgICBp
ZiAoIWV4Y2VwdGlvbnMuZW1wdHkoKSkgeworICAgICAgICBleGNlcHRpb25zLmxpbmsoJmppdCk7
CisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwg
cHJlc2VydmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5lbWl0RXhwbGljaXRFeGNlcHRpb25IYW5k
bGVyKCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOWUxYWRm
OTc1MjRjNTMxNzY2N2EwODAzNmNiZTU3NjRlNzMyZDBiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaApAQCAtMCwwICsxLDIzMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgi
CisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3N0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU7CisKKy8vIEFuIEFjY2Vzc0Nhc2Ug
ZGVzY3JpYmVzIG9uZSBvZiB0aGUgY2FzZXMgb2YgYSBQb2x5bW9ycGhpY0FjY2Vzcy4gQSBQb2x5
bW9ycGhpY0FjY2VzcyByZXByZXNlbnRzIGEKKy8vIHBsYW5uZWQgKHRvIGdlbmVyYXRlIGluIGZ1
dHVyZSkgb3IgZ2VuZXJhdGVkIHN0dWIgZm9yIHNvbWUgaW5saW5lIGNhY2hlLiBUaGF0IHN0dWIg
Y29udGFpbnMgZmFzdAorLy8gcGF0aCBjb2RlIGZvciBzb21lIGZpbml0ZSBudW1iZXIgb2YgZmFz
dCBjYXNlcywgZWFjaCBkZXNjcmliZWQgYnkgYW4gQWNjZXNzQ2FzZSBvYmplY3QuCisvLworLy8g
QW4gQWNjZXNzQ2FzZSBvYmplY3QgaGFzIGEgbGlmZWN5Y2xlIHRoYXQgcHJvY2VlZHMgdGhyb3Vn
aCBzZXZlcmFsIHN0YXRlcy4gTm90ZSB0aGF0IHRoZSBzdGF0ZXMKKy8vIG9mIEFjY2Vzc0Nhc2Ug
aGF2ZSBhIGxvdCB0byBkbyB3aXRoIHRoZSBnbG9iYWwgZWZmZWN0IGVwb2NoICh3ZSdsbCBzYXkg
ZXBvY2ggZm9yIHNob3J0KS4gVGhpcyBpcworLy8gYSBzaW1wbGUgd2F5IG9mIHJlYXNvbmluZyBh
Ym91dCB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbSBvdXRzaWRlIHRoaXMgQWNjZXNzQ2FzZS4gQW55
IG9ic2VydmFibGUKKy8vIGVmZmVjdCAtIGxpa2Ugc3RvcmluZyB0byBhIHByb3BlcnR5LCBjaGFu
Z2luZyBhbiBvYmplY3QncyBzdHJ1Y3R1cmUsIGV0Yy4gLSBpbmNyZW1lbnRzIHRoZSBlcG9jaC4K
Ky8vIFRoZSBzdGF0ZXMgYXJlOgorLy8KKy8vIFByaW1vcmRpYWw6ICAgVGhpcyBpcyBhbiBBY2Nl
c3NDYXNlIHRoYXQgd2FzIGp1c3QgYWxsb2NhdGVkLiBJdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRv
IGFueSBhY3R1YWwKKy8vICAgICAgICAgICAgICAgY29kZSBhbmQgaXQgaXMgbm90IG93bmVkIGJ5
IGFueSBQb2x5bW9ycGhpY0FjY2Vzcy4gSW4gdGhpcyBzdGF0ZSwgdGhlIEFjY2Vzc0Nhc2UKKy8v
ICAgICAgICAgICAgICAgYXNzdW1lcyB0aGF0IGl0IGlzIGluIHRoZSBzYW1lIGVwb2NoIGFzIHdo
ZW4gaXQgd2FzIGNyZWF0ZWQuIFRoaXMgaXMgaW1wb3J0YW50CisvLyAgICAgICAgICAgICAgIGJl
Y2F1c2UgaXQgbWF5IG1ha2UgY2xhaW1zIGFib3V0IGl0c2VsZiAoIkkgcmVwcmVzZW50IGEgdmFs
aWQgY2FzZSBzbyBsb25nIGFzIHlvdQorLy8gICAgICAgICAgICAgICByZWdpc3RlciBhIHdhdGNo
cG9pbnQgb24gdGhpcyBzZXQiKSB0aGF0IGNvdWxkIGJlIGNvbnRyYWRpY3RlZCBieSBzb21lIG91
dHNpZGUKKy8vICAgICAgICAgICAgICAgZWZmZWN0cyAobGlrZSBmaXJpbmcgYW5kIGRlbGV0aW5n
IHRoZSB3YXRjaHBvaW50IHNldCBpbiBxdWVzdGlvbikuIFRoaXMgaXMgYWxzbyB0aGUKKy8vICAg
ICAgICAgICAgICAgc3RhdGUgdGhhdCBhbiBBY2Nlc3NDYXNlIGlzIGluIHdoZW4gaXQgaXMgY2xv
bmVkIChBY2Nlc3NDYXNlOjpjbG9uZSgpKS4KKy8vCisvLyBDb21taXR0ZWQ6ICAgIFRoaXMgaGFw
cGVucyBhcyBzb29uIGFzIHNvbWUgUG9seW1vcnBoaWNBY2Nlc3MgdGFrZXMgb3duZXJzaGlwIG9m
IHRoaXMgQWNjZXNzQ2FzZS4KKy8vICAgICAgICAgICAgICAgSW4gdGhpcyBzdGF0ZSwgdGhlIEFj
Y2Vzc0Nhc2Ugbm8gbG9uZ2VyIGFzc3VtZXMgYW55dGhpbmcgYWJvdXQgdGhlIGVwb2NoLiBUbwor
Ly8gICAgICAgICAgICAgICBhY2NvbXBsaXNoIHRoaXMsIFBvbHltb3JwaGljQWNjZXNzIGNhbGxz
IEFjY2Vzc0Nhc2U6OmNvbW1pdCgpLiBUaGlzIG11c3QgYmUgZG9uZQorLy8gICAgICAgICAgICAg
ICBkdXJpbmcgdGhlIHNhbWUgZXBvY2ggd2hlbiB0aGUgQWNjZXNzQ2FzZSB3YXMgY3JlYXRlZCwg
ZWl0aGVyIGJ5IHRoZSBjbGllbnQgb3IgYnkKKy8vICAgICAgICAgICAgICAgY2xvbmUoKS4gV2hl
biBjcmVhdGVkIGJ5IHRoZSBjbGllbnQsIGNvbW1pdHRpbmcgZHVyaW5nIHRoZSBzYW1lIGVwb2No
IHdvcmtzIGJlY2F1c2UKKy8vICAgICAgICAgICAgICAgd2UgY2FuIGJlIHN1cmUgdGhhdCB3aGF0
ZXZlciB3YXRjaHBvaW50IHNldHMgdGhleSBzcG9rZSBvZiBhcmUgc3RpbGwgdmFsaWQuIFdoZW4K
Ky8vICAgICAgICAgICAgICAgY3JlYXRlZCBieSBjbG9uZSgpLCB3ZSBjYW4gYmUgc3VyZSB0aGF0
IHRoZSBzZXQgaXMgc3RpbGwgdmFsaWQgYmVjYXVzZSB0aGUgb3JpZ2luYWwKKy8vICAgICAgICAg
ICAgICAgb2YgdGhlIGNsb25lIHN0aWxsIGhhcyB3YXRjaHBvaW50cyBvbiBpdC4KKy8vCisvLyBH
ZW5lcmF0ZWQ6ICAgIFRoaXMgaXMgdGhlIHN0YXRlIHdoZW4gdGhlIFBvbHltb3JwaGljQWNjZXNz
IGdlbmVyYXRlcyBjb2RlIGZvciB0aGlzIGNhc2UgYnkKKy8vICAgICAgICAgICAgICAgY2FsbGlu
ZyBBY2Nlc3NDYXNlOjpnZW5lcmF0ZSgpIG9yIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJk
KCkuIEF0IHRoaXMgcG9pbnQKKy8vICAgICAgICAgICAgICAgdGhlIGNhc2Ugb2JqZWN0IHdpbGwg
aGF2ZSBzb21lIGV4dHJhIHN0dWZmIGluIGl0LCBsaWtlIHBvc3NpYmx5IHRoZSBDYWxsTGlua0lu
Zm8KKy8vICAgICAgICAgICAgICAgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5saW5lIGNh
Y2hlLgorLy8gICAgICAgICAgICAgICBGSVhNRTogTW92aW5nIGludG8gdGhlIEdlbmVyYXRlZCBz
dGF0ZSBzaG91bGQgbm90IG11dGF0ZSB0aGUgQWNjZXNzQ2FzZSBvYmplY3Qgb3IKKy8vICAgICAg
ICAgICAgICAgcHV0IG1vcmUgc3R1ZmYgaW50byBpdC4gSWYgd2UgZml4IHRoaXMsIHRoZW4gd2Ug
Y2FuIGdldCByaWQgb2YgQWNjZXNzQ2FzZTo6Y2xvbmUoKS4KKy8vICAgICAgICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ1NgorLy8KKy8vIEFuIEFj
Y2Vzc0Nhc2UgbWF5IGJlIGRlc3Ryb3llZCB3aGlsZSBpbiBhbnkgb2YgdGhlc2Ugc3RhdGVzLgor
Ly8KKy8vIFdlIHdpbGwgc29tZXRpbWVzIGJ1ZmZlciBjb21taXR0ZWQgQWNjZXNzQ2FzZXMgaW4g
dGhlIFBvbHltb3JwaGljQWNjZXNzIG9iamVjdCBiZWZvcmUgZ2VuZXJhdGluZworLy8gY29kZS4g
VGhpcyBhbGxvd3MgdXMgdG8gb25seSByZWdlbmVyYXRlIG9uY2Ugd2UndmUgYWNjdW11bGF0ZWQg
KGhvcGVmdWxseSkgbW9yZSB0aGFuIG9uZSBuZXcKKy8vIEFjY2Vzc0Nhc2UuCitjbGFzcyBBY2Nl
c3NDYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVt
IEFjY2Vzc1R5cGUgOiB1aW50OF90IHsKKyAgICAgICAgTG9hZCwKKyAgICAgICAgVHJhbnNpdGlv
biwKKyAgICAgICAgUmVwbGFjZSwKKyAgICAgICAgTWlzcywKKyAgICAgICAgR2V0R2V0dGVyLAor
ICAgICAgICBHZXR0ZXIsCisgICAgICAgIFNldHRlciwKKyAgICAgICAgQ3VzdG9tVmFsdWVHZXR0
ZXIsCisgICAgICAgIEN1c3RvbUFjY2Vzc29yR2V0dGVyLAorICAgICAgICBDdXN0b21WYWx1ZVNl
dHRlciwKKyAgICAgICAgQ3VzdG9tQWNjZXNzb3JTZXR0ZXIsCisgICAgICAgIEludHJpbnNpY0dl
dHRlciwKKyAgICAgICAgSW5IaXQsCisgICAgICAgIEluTWlzcywKKyAgICAgICAgQXJyYXlMZW5n
dGgsCisgICAgICAgIFN0cmluZ0xlbmd0aCwKKyAgICAgICAgRGlyZWN0QXJndW1lbnRzTGVuZ3Ro
LAorICAgICAgICBTY29wZWRBcmd1bWVudHNMZW5ndGgKKyAgICB9OworCisgICAgZW51bSBTdGF0
ZSA6IHVpbnQ4X3QgeworICAgICAgICBQcmltb3JkaWFsLAorICAgICAgICBDb21taXR0ZWQsCisg
ICAgICAgIEdlbmVyYXRlZAorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IFQmIGFzKCkgeyByZXR1cm4gKnN0YXRpY19jYXN0PFQqPih0aGlzKTsgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICBjb25zdCBUJiBhcygpIGNvbnN0IHsgcmV0dXJuICpzdGF0aWNf
Y2FzdDxjb25zdCBUKj4odGhpcyk7IH0KKworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQWNjZXNz
Q2FzZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2VUeXBlPiBjcmVhdGUoQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZVR5cGU+KG5ldyBBY2Nl
c3NDYXNlVHlwZShhcmd1bWVudHMuLi4pKTsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUs
IFByb3BlcnR5T2Zmc2V0ID0gaW52YWxpZE9mZnNldCwKKyAgICAgICAgU3RydWN0dXJlKiA9IG51
bGxwdHIsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0KCkpOworCisgICAgLy8gVGhpcyBjcmVhdGUgbWV0aG9kIHNob3VsZCBiZSB1
c2VkIGZvciB0cmFuc2l0aW9ucy4KKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCogb3duZXIsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZSwKKyAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkp
OworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBmcm9tU3RydWN0dXJl
U3R1YkluZm8oVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOworCisgICAg
QWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgU3RhdGUgc3Rh
dGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKworICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3R5cGUgPT0gVHJhbnNpdGlvbikKKyAgICAg
ICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpOworICAgICAgICByZXR1cm4g
bV9zdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorICAgIGJvb2wgZ3VhcmRlZEJ5U3RydWN0dXJlQ2hl
Y2soKSBjb25zdDsKKworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHJhbnNpdGlvbik7CisgICAgICAgIHJldHVybiBt
X3N0cnVjdHVyZS5nZXQoKTsKKyAgICB9CisKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorCisgICAg
dmlydHVhbCBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlv
blNldCgpLnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCk7IH0KKyAgICB2aXJ0dWFsIFdhdGNo
cG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAg
dmlydHVhbCBib29sIHZpYVByb3h5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIC8v
IElmIHlvdSBzdXBwbHkgdGhlIG9wdGlvbmFsIHZlY3RvciwgdGhpcyB3aWxsIGFwcGVuZCB0aGUg
c2V0IG9mIGNlbGxzIHRoYXQgdGhpcyB3aWxsIG5lZWQgdG8ga2VlcCBhbGl2ZQorICAgIC8vIHBh
c3QgdGhlIGNhbGwuCisgICAgYm9vbCBkb2VzQ2FsbHMoVmVjdG9yPEpTQ2VsbCo+KiBjZWxsc1Rv
TWFyayA9IG51bGxwdHIpIGNvbnN0OworCisgICAgYm9vbCBpc0dldHRlcigpIGNvbnN0CisgICAg
eworICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgICAgICBjYXNlIEdldHRlcjoKKyAgICAg
ICAgY2FzZSBDdXN0b21WYWx1ZUdldHRlcjoKKyAgICAgICAgY2FzZSBDdXN0b21BY2Nlc3Nvckdl
dHRlcjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBpc0FjY2Vz
c29yKCkgY29uc3QgeyByZXR1cm4gaXNHZXR0ZXIoKSB8fCB0eXBlKCkgPT0gU2V0dGVyOyB9CisK
KyAgICAvLyBJcyBpdCBzdGlsbCBwb3NzaWJsZSBmb3IgdGhpcyBjYXNlIHRvIGV2ZXIgYmUgdGFr
ZW4/IE11c3QgY2FsbCB0aGlzIGFzIGEgcHJlcmVxdWlzaXRlIGZvcgorICAgIC8vIGNhbGxpbmcg
Z2VuZXJhdGUoKSBhbmQgZnJpZW5kcy4gSWYgdGhpcyByZXR1cm5zIHRydWUsIHRoZW4geW91IGNh
biBjYWxsIGdlbmVyYXRlKCkuIElmCisgICAgLy8gdGhpcyByZXR1cm5zIGZhbHNlLCB0aGVuIGdl
bmVyYXRlKCkgd2lsbCBjcmFzaC4gWW91IG11c3QgY2FsbCBnZW5lcmF0ZSgpIGluIHRoZSBzYW1l
IGVwb2NoCisgICAgLy8gYXMgd2hlbiB5b3UgY2FsbGVkIGNvdWxkU3RpbGxTdWNjZWVkKCkuCisg
ICAgYm9vbCBjb3VsZFN0aWxsU3VjY2VlZCgpIGNvbnN0OworCisgICAgLy8gSWYgdGhpcyBtZXRo
b2QgcmV0dXJucyB0cnVlLCB0aGVuIGl0J3MgYSBnb29kIGlkZWEgdG8gcmVtb3ZlICdvdGhlcicg
ZnJvbSB0aGUgYWNjZXNzIG9uY2UgJ3RoaXMnCisgICAgLy8gaXMgYWRkZWQuIFRoaXMgbWV0aG9k
IGFzc3VtZXMgdGhhdCBpbiBjYXNlIG9mIGNvbnRyYWRpY3Rpb25zLCAndGhpcycgcmVwcmVzZW50
cyBhIG5ld2VyLCBhbmQgc28KKyAgICAvLyBtb3JlIHVzZWZ1bCwgdHJ1dGguIFRoaXMgbWV0aG9k
IGNhbiBiZSBjb25zZXJ2YXRpdmU7IGl0IHdpbGwgcmV0dXJuIGZhbHNlIHdoZW4gaXQgZG91YnQu
CisgICAgYm9vbCBjYW5SZXBsYWNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKSBjb25zdDsKKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHVtcEltcGwoUHJpbnRTdHJlYW0mLCBDb21tYVByaW50ZXImKSBjb25zdCB7IH0KKworICAgIHZp
cnR1YWwgfkFjY2Vzc0Nhc2UoKTsKKworcHJvdGVjdGVkOgorICAgIEFjY2Vzc0Nhc2UoVk0mLCBK
U0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmKTsKKyAgICBBY2Nlc3NDYXNlKGNvbnN0IEFj
Y2Vzc0Nhc2UmKSA9IGRlZmF1bHQ7CisgICAgQWNjZXNzQ2FzZSYgb3BlcmF0b3I9KGNvbnN0IEFj
Y2Vzc0Nhc2UmKSA9IGRlbGV0ZTsKKyAgICB2b2lkIHJlc2V0U3RhdGUoKSB7IG1fc3RhdGUgPSBQ
cmltb3JkaWFsOyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAg
ICBmcmllbmQgY2xhc3MgUG9seW1vcnBoaWNBY2Nlc3M7CisKKyAgICBib29sIHZpc2l0V2VhayhW
TSYpIGNvbnN0OworICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNpdGlvbnMoU2xvdFZpc2l0b3ImKSBj
b25zdDsKKworICAgIC8vIEZJWE1FOiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2Ugb2YgaG93IEFj
Y2Vzc0Nhc2UgcHV0cyBwb3N0LWdlbmVyYXRpb24gdGhpbmdzIGludG8gaXRzZWxmLgorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY0NTYKKyAgICB2aXJ0
dWFsIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjbG9uZSgpIGNvbnN0OworCisgICAgLy8g
UGVyZm9ybSBhbnkgYWN0aW9uIHRoYXQgbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBlbmQg
b2YgdGhlIGVwb2NoIGluIHdoaWNoIHRoZSBjYXNlCisgICAgLy8gd2FzIGNyZWF0ZWQuIFJldHVy
bnMgYSBzZXQgb2Ygd2F0Y2hwb2ludCBzZXRzIHRoYXQgd2lsbCBuZWVkIHRvIGJlIHdhdGNoZWQu
CisgICAgVmVjdG9yPFdhdGNocG9pbnRTZXQqLCAyPiBjb21taXQoVk0mLCBjb25zdCBJZGVudGlm
aWVyJik7CisKKyAgICAvLyBGYWxsIHRocm91Z2ggb24gc3VjY2Vzcy4gVHdvIGtpbmRzIG9mIGZh
aWx1cmVzIGFyZSBzdXBwb3J0ZWQ6IGZhbGwtdGhyb3VnaCwgd2hpY2ggbWVhbnMgdGhhdCB3ZQor
ICAgIC8vIHNob3VsZCB0cnkgYSBkaWZmZXJlbnQgY2FzZTsgYW5kIGZhaWx1cmUsIHdoaWNoIG1l
YW5zIHRoYXQgdGhpcyB3YXMgdGhlIHJpZ2h0IGNhc2UgYnV0IGl0IG5lZWRzCisgICAgLy8gaGVs
cCBmcm9tIHRoZSBzbG93IHBhdGguCisgICAgdm9pZCBnZW5lcmF0ZVdpdGhHdWFyZChBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGUmLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGZhbGxUaHJvdWdoKTsK
KworICAgIC8vIEZhbGwgdGhyb3VnaCBvbiBzdWNjZXNzLCBhZGQgYSBqdW1wIHRvIHRoZSBmYWls
dXJlIGxpc3Qgb24gZmFpbHVyZS4KKyAgICB2b2lkIGdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpb25T
dGF0ZSYpOworCisgICAgdm9pZCBnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJik7
CisKKyAgICBBY2Nlc3NUeXBlIG1fdHlwZTsKKyAgICBTdGF0ZSBtX3N0YXRlIHsgUHJpbW9yZGlh
bCB9OworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworCisgICAgLy8gVXN1YWxseSB0aGlz
IGlzIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3ZSBleHBlY3QgdGhlIGJhc2Ugb2JqZWN0IHRvIGhhdmUu
IEJ1dCwgdGhpcyBpcyB0aGUgKm5ldyoKKyAgICAvLyBzdHJ1Y3R1cmUgZm9yIGEgdHJhbnNpdGlv
biBhbmQgd2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGl0IGhhcyBhIHN0cm9uZyByZWZlcmVuY2Ug
dG8gdGhlIG9sZAorICAgIC8vIHN0cnVjdHVyZS4gRm9yIHByb3hpZXMsIHRoaXMgaXMgdGhlIHN0
cnVjdHVyZSBvZiB0aGUgb2JqZWN0IGJlaGluZCB0aGUgcHJveHkuCisgICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBtX2NvbmRpdGlvblNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAppbmRl
eCBhNmM0NThjYjczYmU1NzUyZDk4ZDI1NWIzN2M5OWQ1YWViNDIzMzdkLi5lYjU3MWZmOTlmNzEz
Mzk0ZmUxNzQ2NDc1OTg3MTI3NjZjMmUyMThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgiCisjaW5jbHVk
ZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgorI2luY2x1ZGUgIkludHJpbnNpY0dldHRlckFj
Y2Vzc0Nhc2UuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNTY29wZS5o
IgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgpAQCAtMjMxLDE5ICsyMzMsMTkgQEAgR2V0QnlJZFN0
YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVk
YmFjaygKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW50cmluc2ljR2V0dGVyOiB7Ci0gICAgICAg
ICAgICAgICAgICAgIGludHJpbnNpY0Z1bmN0aW9uID0gYWNjZXNzLmludHJpbnNpY0Z1bmN0aW9u
KCk7CisgICAgICAgICAgICAgICAgICAgIGludHJpbnNpY0Z1bmN0aW9uID0gYWNjZXNzLmFzPElu
dHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U+KCkuaW50cmluc2ljRnVuY3Rpb24oKTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNh
c2UgQWNjZXNzQ2FzZTo6R2V0dGVyOiB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rU3Rh
dHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gYWNjZXNzLmNhbGxMaW5rSW5m
bygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
byA9IGFjY2Vzcy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAqY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1
czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2Zp
bGVkQmxvY2ssICpjYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yR2V0dGVyOiB7
Ci0gICAgICAgICAgICAgICAgICAgIGRvbUpJVCA9IGFjY2Vzcy5kb21KSVQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgZG9tSklUID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCku
ZG9tSklUKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZG9tSklUKQogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7CiAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gQ3VzdG9tOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDYxOTJkYWMyNDJhZmY1MjMwY2UzZjZiNTUzNDFkMjMzZDRmN2U4YwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEpJVCkKKwor
I2luY2x1ZGUgIlByb3h5YWJsZUFjY2Vzc0Nhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEdldHRlclNldHRlckFjY2Vzc0Nhc2UgOiBwdWJsaWMgUHJveHlhYmxlQWNjZXNzQ2FzZSB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBQcm94eWFibGVBY2Nlc3NDYXNlIEJhc2U7CisgICAgZnJp
ZW5kIGNsYXNzIEFjY2Vzc0Nhc2U7CisKKyAgICAvLyBUaGlzIGNhbiByZXR1cm4gbnVsbCBpZiBp
dCBoYXNuJ3QgYmVlbiBnZW5lcmF0ZWQgeWV0LiBUaGF0J3MKKyAgICAvLyBhY3R1YWxseSBzb21l
d2hhdCBsaWtlbHkgYmVjYXVzZSBvZiBob3cgd2UgZG8gYnVmZmVyaW5nIG9mIG5ldyBjYXNlcy4K
KyAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbExp
bmtJbmZvLmdldCgpOyB9CisgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXN0b21TbG90QmFzZS5nZXQoKTsgfQorICAgIERPTUpJVDo6R2V0dGVyU2V0dGVy
KiBkb21KSVQoKSBjb25zdCB7IHJldHVybiBtX2RvbUpJVDsgfQorCisgICAgSlNPYmplY3QqIGFs
dGVybmF0ZUJhc2UoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgZW1pdERPTUpJVEdldHRl
cihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmLCBHUFJSZWcgYmFzZUZvckdldEdQUik7CisKKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZSgKKyAgICAgICAgVk0mLCBK
U0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwKKyAg
ICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQoKSwKKyAgICAgICAgYm9vbCB2aWFQcm94eSA9IGZhbHNlLAorICAgICAgICBX
YXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0ID0gbnVsbHB0ciwKKyAgICAgICAgUHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmMgPSBudWxscHRyLAorICAgICAgICBKU09iamVjdCogY3VzdG9tU2xv
dEJhc2UgPSBudWxscHRyLAorICAgICAgICBET01KSVQ6OkdldHRlclNldHRlciogPSBudWxscHRy
KTsKKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQsCisg
ICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmMgPSBudWxscHRyLAorICAgICAgICBKU09iamVjdCogY3VzdG9tU2xvdEJh
c2UgPSBudWxscHRyKTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mLCBDb21tYVBy
aW50ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
Y2xvbmUoKSBjb25zdCBvdmVycmlkZTsKKworICAgIH5HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKCk7
CisKK3ByaXZhdGU6CisgICAgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZShWTSYsIEpTQ2VsbCosIEFj
Y2Vzc1R5cGUsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxT
ZXQsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSk7CisKKyAgICBHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlKGNvbnN0IEdldHRlclNldHRlckFjY2Vzc0Nhc2UmKTsKKworICAgIFdyaXRlQmFycmllcjxK
U09iamVjdD4gbV9jdXN0b21TbG90QmFzZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJ
bmZvPiBtX2NhbGxMaW5rSW5mbzsKKyAgICB1bmlvbiB7CisgICAgICAgIFB1dFByb3BlcnR5U2xv
dDo6UHV0VmFsdWVGdW5jIHNldHRlcjsKKyAgICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmMgZ2V0dGVyOworICAgICAgICB2b2lkKiBvcGFxdWU7CisgICAgfSBtX2N1c3RvbUFjY2Vzc29y
OworICAgIERPTUpJVDo6R2V0dGVyU2V0dGVyKiBtX2RvbUpJVDsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjEwMjFjMThlNmRiMGYxZGI1ZjJiM2QxNGYyYTRkZjU3MDU5YTZkZmUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50cmluc2ljR2V0dGVy
QWNjZXNzQ2FzZS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShKSVQpCisKKyNp
bmNsdWRlICJBY2Nlc3NDYXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBJbnRyaW5z
aWNHZXR0ZXJBY2Nlc3NDYXNlIDogcHVibGljIEFjY2Vzc0Nhc2UgeworcHVibGljOgorICAgIHR5
cGVkZWYgQWNjZXNzQ2FzZSBCYXNlOworICAgIGZyaWVuZCBjbGFzcyBBY2Nlc3NDYXNlOworCisg
ICAgSlNGdW5jdGlvbiogaW50cmluc2ljRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2ludHJp
bnNpY0Z1bmN0aW9uLmdldCgpOyB9CisgICAgSW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0IHsg
cmV0dXJuIG1faW50cmluc2ljRnVuY3Rpb24tPmludHJpbnNpYygpOyB9CisKKyAgICBzdGF0aWMg
Ym9vbCBjYW5FbWl0SW50cmluc2ljR2V0dGVyKEpTRnVuY3Rpb24qLCBTdHJ1Y3R1cmUqKTsKKyAg
ICB2b2lkIGVtaXRJbnRyaW5zaWNHZXR0ZXIoQWNjZXNzR2VuZXJhdGlvblN0YXRlJik7CisKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCos
IFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYsIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uKTsKKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgfkludHJpbnNp
Y0dldHRlckFjY2Vzc0Nhc2UoKTsKKworcHJpdmF0ZToKKyAgICBJbnRyaW5zaWNHZXR0ZXJBY2Nl
c3NDYXNlKFZNJiwgSlNDZWxsKiwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgSlNGdW5jdGlvbiogaW50cmluc2ljRnVuY3Rpb24p
OworCisgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IG1faW50cmluc2ljRnVuY3Rpb247Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcApp
bmRleCAzY2QxOTg0ZjhkZDY3ZmU3N2RhMjdiOGU3ZmM4ODcxYmZiYzQ0ZmY4Li4wY2VjMDI2Mjcw
N2Y5NGU4MWZlNTcwNTljOGMwZmNlNmVlZTlkODkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTMxLDE2ICszMSwx
MCBAQAogI2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkRPTUpJVEFjY2Vzc0Nhc2VQYXRj
aHBvaW50UGFyYW1zLmgiCi0jaW5jbHVkZSAiRE9NSklUQ2FsbERPTUdldHRlclBhdGNocG9pbnQu
aCIKLSNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIu
aCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0jaW5jbHVkZSAiU2Nv
cGVkQXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAj
aW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgpAQCAtMjEw
LDEzNTggKzIwNCw2IEBAIHZvaWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjplbWl0RXhwbGljaXRF
eGNlcHRpb25IYW5kbGVyKCkKICAgICB9CiB9CiAKLUFjY2Vzc0Nhc2U6OkFjY2Vzc0Nhc2UoKQot
ewotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6dHJ5R2V0KAot
ICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQq
IGFkZGl0aW9uYWxTZXQpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3Vs
dChuZXcgQWNjZXNzQ2FzZSgpKTsKLQotICAgIHJlc3VsdC0+bV90eXBlID0gdHlwZTsKLSAgICBy
ZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0KHZt
LCBvd25lciwgc3RydWN0dXJlKTsKLSAgICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gY29uZGl0
aW9uU2V0OwotCi0gICAgaWYgKHZpYVByb3h5IHx8IGFkZGl0aW9uYWxTZXQpIHsKLSAgICAgICAg
cmVzdWx0LT5tX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKLSAgICAg
ICAgcmVzdWx0LT5tX3JhcmVEYXRhLT52aWFQcm94eSA9IHZpYVByb3h5OwotICAgICAgICByZXN1
bHQtPm1fcmFyZURhdGEtPmFkZGl0aW9uYWxTZXQgPSBhZGRpdGlvbmFsU2V0OwotICAgIH0KLQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nl
c3NDYXNlOjpnZXQoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgYm9vbCB2aWFQcm94eSwg
V2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwKLSAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYyBjdXN0b21HZXR0ZXIsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSwgRE9NSklUOjpHZXR0
ZXJTZXR0ZXIqIGRvbUpJVCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVz
dWx0KG5ldyBBY2Nlc3NDYXNlKCkpOwotCi0gICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAg
IHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQo
dm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25k
aXRpb25TZXQ7Ci0KLSAgICBpZiAodmlhUHJveHkgfHwgYWRkaXRpb25hbFNldCB8fCByZXN1bHQt
PmRvZXNDYWxscygpIHx8IGN1c3RvbUdldHRlciB8fCBjdXN0b21TbG90QmFzZSB8fCBkb21KSVQp
IHsKLSAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0
YT4oKTsKLSAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT52aWFQcm94eSA9IHZpYVByb3h5Owot
ICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmFkZGl0aW9uYWxTZXQgPSBhZGRpdGlvbmFsU2V0
OwotICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbUFjY2Vzc29yLmdldHRlciA9IGN1
c3RvbUdldHRlcjsKLSAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0b21TbG90QmFzZS5z
ZXRNYXlCZU51bGwodm0sIG93bmVyLCBjdXN0b21TbG90QmFzZSk7Ci0gICAgICAgIHJlc3VsdC0+
bV9yYXJlRGF0YS0+ZG9tSklUID0gZG9tSklUOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjptZWdhbW9ycGhp
Y0xvYWQoVk0mIHZtLCBKU0NlbGwqIG93bmVyKQotewotICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKLSAgICAKLSAgICBpZiAoR1BSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnMgPCA5KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOwotICAgIAotICAg
IHJlc3VsdC0+bV90eXBlID0gTWVnYW1vcnBoaWNMb2FkOwotICAgIAotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpyZXBsYWNl
KAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVz
dWx0KG5ldyBBY2Nlc3NDYXNlKCkpOwotCi0gICAgcmVzdWx0LT5tX3R5cGUgPSBSZXBsYWNlOwot
ICAgIHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5z
ZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24oCi0gICAgVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQotewotICAgIFJFTEVBU0VfQVNTRVJUKG9s
ZFN0cnVjdHVyZSA9PSBuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSk7Ci0KLSAgICAvLyBTa2lw
IG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0
IGhhdmUKLSAgICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgotICAgIGlm
IChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA8IDYKLSAgICAgICAgJiYgb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KQotICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKLQotICAgIHJlc3VsdC0+bV90eXBlID0gVHJh
bnNpdGlvbjsKLSAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJlc3VsdC0+bV9z
dHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgbmV3U3RydWN0dXJlKTsKLSAgICByZXN1bHQtPm1fY29u
ZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3Rk
Ojp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnNldHRlcigKLSAgICBWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgY29uZGl0aW9uU2V0LCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0
ZXIsCi0gICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQotewotICAgIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7Ci0KLSAgICByZXN1bHQtPm1f
dHlwZSA9IHR5cGU7Ci0gICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKLSAgICByZXN1bHQt
Pm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0LT5tX2Nv
bmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLSAgICByZXN1bHQtPm1fcmFyZURhdGEgPSBzdGQ6
Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOwotICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9t
QWNjZXNzb3Iuc2V0dGVyID0gY3VzdG9tU2V0dGVyOwotICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+
Y3VzdG9tU2xvdEJhc2Uuc2V0TWF5QmVOdWxsKHZtLCBvd25lciwgY3VzdG9tU2xvdEJhc2UpOwot
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFj
Y2Vzc0Nhc2U6OmluKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBl
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0KQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBy
ZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7Ci0KLSAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7Ci0g
ICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgIHJl
c3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3Ro
KFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSB0eXBlKQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7Ci0KLSAgICByZXN1bHQtPm1fdHlw
ZSA9IHR5cGU7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Z2V0SW50cmluc2ljKAotICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgSlNGdW5jdGlvbiogZ2V0dGVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25k
aXRpb25TZXQpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcg
QWNjZXNzQ2FzZSgpKTsKLQotICAgIHJlc3VsdC0+bV90eXBlID0gSW50cmluc2ljR2V0dGVyOwot
ICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICBy
ZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotICAgIHJlc3VsdC0+bV9vZmZz
ZXQgPSBvZmZzZXQ7Ci0KLSAgICByZXN1bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVl
PFJhcmVEYXRhPigpOwotICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+aW50cmluc2ljRnVuY3Rpb24u
c2V0KHZtLCBvd25lciwgZ2V0dGVyKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUFjY2Vz
c0Nhc2U6On5BY2Nlc3NDYXNlKCkKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbygKLSAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBzd2l0Y2ggKHN0dWJJ
bmZvLmNhY2hlVHlwZSkgewotICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKLSAgICAg
ICAgcmV0dXJuIGdldCgKLSAgICAgICAgICAgIHZtLCBvd25lciwgTG9hZCwgc3R1YkluZm8udS5i
eUlkU2VsZi5vZmZzZXQsCi0gICAgICAgICAgICBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCkpOwotCi0gICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNl
OgotICAgICAgICByZXR1cm4gcmVwbGFjZSgKLSAgICAgICAgICAgIHZtLCBvd25lciwgc3R1Yklu
Zm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby51LmJ5SWRT
ZWxmLm9mZnNldCk7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjbG9uZSgp
IGNvbnN0Ci17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNj
ZXNzQ2FzZSgpKTsKLSAgICByZXN1bHQtPm1fdHlwZSA9IG1fdHlwZTsKLSAgICByZXN1bHQtPm1f
b2Zmc2V0ID0gbV9vZmZzZXQ7Ci0gICAgcmVzdWx0LT5tX3N0cnVjdHVyZSA9IG1fc3RydWN0dXJl
OwotICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldDsKLSAgICBpZiAo
UmFyZURhdGEqIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkgewotICAgICAgICByZXN1bHQt
Pm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOwotICAgICAgICByZXN1
bHQtPm1fcmFyZURhdGEtPnZpYVByb3h5ID0gcmFyZURhdGEtPnZpYVByb3h5OwotICAgICAgICBy
ZXN1bHQtPm1fcmFyZURhdGEtPmFkZGl0aW9uYWxTZXQgPSByYXJlRGF0YS0+YWRkaXRpb25hbFNl
dDsKLSAgICAgICAgLy8gTk9URTogV2UgZG9uJ3QgY29weSB0aGUgY2FsbExpbmtJbmZvLCBzaW5j
ZSB0aGF0J3MgY3JlYXRlZCBkdXJpbmcgY29kZSBnZW5lcmF0aW9uLgotICAgICAgICByZXN1bHQt
Pm1fcmFyZURhdGEtPmN1c3RvbUFjY2Vzc29yLm9wYXF1ZSA9IHJhcmVEYXRhLT5jdXN0b21BY2Nl
c3Nvci5vcGFxdWU7Ci0gICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9tU2xvdEJhc2Ug
PSByYXJlRGF0YS0+Y3VzdG9tU2xvdEJhc2U7Ci0gICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+
aW50cmluc2ljRnVuY3Rpb24gPSByYXJlRGF0YS0+aW50cmluc2ljRnVuY3Rpb247Ci0gICAgICAg
IHJlc3VsdC0+bV9yYXJlRGF0YS0+ZG9tSklUID0gcmFyZURhdGEtPmRvbUpJVDsKLSAgICB9Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotVmVjdG9yPFdhdGNocG9pbnRTZXQqLCAyPiBBY2Nlc3ND
YXNlOjpjb21taXQoVk0mIHZtLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKLXsKLSAgICAvLyBJ
dCdzIGZpbmUgdG8gY29tbWl0IHNvbWV0aGluZyB0aGF0IGlzIGFscmVhZHkgY29tbWl0dGVkLiBU
aGF0IGFyaXNlcyB3aGVuIHdlIHN3aXRjaCB0byB1c2luZwotICAgIC8vIG5ld2x5IGFsbG9jYXRl
ZCB3YXRjaHBvaW50cy4gV2hlbiBpdCBoYXBwZW5zLCBpdCdzIG5vdCBlZmZpY2llbnQgLSBidXQg
d2UgdGhpbmsgdGhhdCdzIE9LCi0gICAgLy8gYmVjYXVzZSBtb3N0IEFjY2Vzc0Nhc2VzIGhhdmUg
bm8gZXh0cmEgd2F0Y2hwb2ludHMgYW55d2F5LgotICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUg
PT0gUHJpbW9yZGlhbCB8fCBtX3N0YXRlID09IENvbW1pdHRlZCk7Ci0gICAgCi0gICAgVmVjdG9y
PFdhdGNocG9pbnRTZXQqLCAyPiByZXN1bHQ7Ci0gICAgCi0gICAgaWYgKChzdHJ1Y3R1cmUoKSAm
JiBzdHJ1Y3R1cmUoKS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQotICAgICAgICB8
fCBtX2NvbmRpdGlvblNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCi0gICAgICAg
IHJlc3VsdC5hcHBlbmQodm0uZW5zdXJlV2F0Y2hwb2ludFNldEZvckltcHVyZVByb3BlcnR5KGlk
ZW50KSk7Ci0KLSAgICBpZiAoYWRkaXRpb25hbFNldCgpKQotICAgICAgICByZXN1bHQuYXBwZW5k
KGFkZGl0aW9uYWxTZXQoKSk7Ci0gICAgCi0gICAgbV9zdGF0ZSA9IENvbW1pdHRlZDsKLSAgICAK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIEFjY2Vzc0Nhc2U6Omd1YXJkZWRCeVN0cnVj
dHVyZUNoZWNrKCkgY29uc3QKLXsKLSAgICBpZiAodmlhUHJveHkoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIE1lZ2Ftb3JwaGljTG9h
ZDoKLSAgICBjYXNlIEFycmF5TGVuZ3RoOgotICAgIGNhc2UgU3RyaW5nTGVuZ3RoOgotICAgIGNh
c2UgRGlyZWN0QXJndW1lbnRzTGVuZ3RoOgotICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzTGVuZ3Ro
OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotfQotCi1KU09iamVjdCogQWNjZXNzQ2FzZTo6YWx0ZXJuYXRlQmFzZSgpIGNv
bnN0Ci17Ci0gICAgaWYgKGN1c3RvbVNsb3RCYXNlKCkpCi0gICAgICAgIHJldHVybiBjdXN0b21T
bG90QmFzZSgpOwotICAgIHJldHVybiBjb25kaXRpb25TZXQoKS5zbG90QmFzZUNvbmRpdGlvbigp
Lm9iamVjdCgpOwotfQotCi1ib29sIEFjY2Vzc0Nhc2U6OmRvZXNDYWxscyhWZWN0b3I8SlNDZWxs
Kj4qIGNlbGxzVG9NYXJrKSBjb25zdAotewotICAgIHN3aXRjaCAodHlwZSgpKSB7Ci0gICAgY2Fz
ZSBHZXR0ZXI6Ci0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgY2FzZSBDdXN0b21WYWx1ZUdldHRlcjoK
LSAgICBjYXNlIEN1c3RvbUFjY2Vzc29yR2V0dGVyOgotICAgIGNhc2UgQ3VzdG9tVmFsdWVTZXR0
ZXI6Ci0gICAgY2FzZSBDdXN0b21BY2Nlc3NvclNldHRlcjoKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBpZiAobmV3U3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAg
ICAgICAgICYmIHN0cnVjdHVyZSgpLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7Ci0gICAg
ICAgICAgICBpZiAoY2VsbHNUb01hcmspCi0gICAgICAgICAgICAgICAgY2VsbHNUb01hcmstPmFw
cGVuZChuZXdTdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLX0KLQotYm9vbCBBY2Nlc3NDYXNlOjpjb3VsZFN0aWxsU3VjY2VlZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0
eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCk7Ci19Ci0KLWJvb2wgQWNjZXNzQ2Fz
ZTo6Y2FuQmVSZXBsYWNlZEJ5TWVnYW1vcnBoaWNMb2FkKCkgY29uc3QKLXsKLSAgICBpZiAodHlw
ZSgpID09IE1lZ2Ftb3JwaGljTG9hZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAg
cmV0dXJuIHR5cGUoKSA9PSBMb2FkCi0gICAgICAgICYmICF2aWFQcm94eSgpCi0gICAgICAgICYm
IGNvbmRpdGlvblNldCgpLmlzRW1wdHkoKQotICAgICAgICAmJiAhYWRkaXRpb25hbFNldCgpCi0g
ICAgICAgICYmICFjdXN0b21TbG90QmFzZSgpOwotfQotCi1ib29sIEFjY2Vzc0Nhc2U6OmNhblJl
cGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBwdXRz
IGluIGEgZ29vZCBlZmZvcnQgdG8gdHJ5IHRvIGZpZ3VyZSBvdXQgaWYgJ290aGVyJyBpcyBtYWRl
IHN1cGVyZmx1b3VzIGJ5ICcqdGhpcycuCi0gICAgLy8gSXQncyBmaW5lIGZvciB0aGlzIHRvIHJl
dHVybiBmYWxzZSBpZiBpdCdzIGluIGRvdWJ0LgotCi0gICAgc3dpdGNoICh0eXBlKCkpIHsKLSAg
ICBjYXNlIE1lZ2Ftb3JwaGljTG9hZDoKLSAgICAgICAgcmV0dXJuIG90aGVyLmNhbkJlUmVwbGFj
ZWRCeU1lZ2Ftb3JwaGljTG9hZCgpOwotICAgIGNhc2UgQXJyYXlMZW5ndGg6Ci0gICAgY2FzZSBT
dHJpbmdMZW5ndGg6Ci0gICAgY2FzZSBEaXJlY3RBcmd1bWVudHNMZW5ndGg6Ci0gICAgY2FzZSBT
Y29wZWRBcmd1bWVudHNMZW5ndGg6Ci0gICAgICAgIHJldHVybiBvdGhlci50eXBlKCkgPT0gdHlw
ZSgpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICghZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2so
KSB8fCAhb3RoZXIuZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2soKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmUoKSA9PSBvdGhlci5z
dHJ1Y3R1cmUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgQWNjZXNzQ2FzZTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAotewotICAgIG91dC5wcmludChtX3R5cGUsICI6KCIpOwotCi0gICAgQ29t
bWFQcmludGVyIGNvbW1hOwotICAgIAotICAgIG91dC5wcmludChjb21tYSwgbV9zdGF0ZSk7Ci0K
LSAgICBpZiAobV90eXBlID09IFRyYW5zaXRpb24pCi0gICAgICAgIG91dC5wcmludChjb21tYSwg
InN0cnVjdHVyZSA9ICIsIHBvaW50ZXJEdW1wKHN0cnVjdHVyZSgpKSwgIiAtPiAiLCBwb2ludGVy
RHVtcChuZXdTdHJ1Y3R1cmUoKSkpOwotICAgIGVsc2UgaWYgKG1fc3RydWN0dXJlKQotICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJzdHJ1Y3R1cmUgPSAiLCBwb2ludGVyRHVtcChtX3N0cnVjdHVy
ZS5nZXQoKSkpOwotCi0gICAgaWYgKGlzVmFsaWRPZmZzZXQobV9vZmZzZXQpKQotICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJvZmZzZXQgPSAiLCBtX29mZnNldCk7Ci0gICAgaWYgKCFtX2NvbmRp
dGlvblNldC5pc0VtcHR5KCkpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgImNvbmRpdGlvbnMg
PSAiLCBtX2NvbmRpdGlvblNldCk7Ci0KLSAgICBpZiAoUmFyZURhdGEqIHJhcmVEYXRhID0gbV9y
YXJlRGF0YS5nZXQoKSkgewotICAgICAgICBpZiAocmFyZURhdGEtPnZpYVByb3h5KQotICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAidmlhUHJveHkgPSAiLCByYXJlRGF0YS0+dmlhUHJveHkp
OwotICAgICAgICBpZiAocmFyZURhdGEtPmFkZGl0aW9uYWxTZXQpCi0gICAgICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJhZGRpdGlvbmFsU2V0ID0gIiwgUmF3UG9pbnRlcihyYXJlRGF0YS0+YWRk
aXRpb25hbFNldC5nZXQoKSkpOwotICAgICAgICBpZiAocmFyZURhdGEtPmNhbGxMaW5rSW5mbykK
LSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxMaW5rSW5mbyA9ICIsIFJhd1BvaW50
ZXIocmFyZURhdGEtPmNhbGxMaW5rSW5mby5nZXQoKSkpOwotICAgICAgICBpZiAocmFyZURhdGEt
PmN1c3RvbUFjY2Vzc29yLm9wYXF1ZSkKLSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImN1
c3RvbUFjY2Vzc29yID0gIiwgUmF3UG9pbnRlcihyYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iub3Bh
cXVlKSk7Ci0gICAgICAgIGlmIChyYXJlRGF0YS0+Y3VzdG9tU2xvdEJhc2UpCi0gICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJjdXN0b21TbG90QmFzZSA9ICIsIFJhd1BvaW50ZXIocmFyZURh
dGEtPmN1c3RvbVNsb3RCYXNlLmdldCgpKSk7Ci0gICAgfQotCi0gICAgb3V0LnByaW50KCIpIik7
Ci19Ci0KLWJvb2wgQWNjZXNzQ2FzZTo6dmlzaXRXZWFrKFZNJiB2bSkgY29uc3QKLXsKLSAgICBp
ZiAobV9zdHJ1Y3R1cmUgJiYgIUhlYXA6OmlzTWFya2VkKG1fc3RydWN0dXJlLmdldCgpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbV9jb25kaXRpb25TZXQuYXJlU3RpbGxMaXZl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9yYXJlRGF0YSkgewotICAgICAg
ICBpZiAobV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvKQotICAgICAgICAgICAgbV9yYXJlRGF0YS0+
Y2FsbExpbmtJbmZvLT52aXNpdFdlYWsodm0pOwotICAgICAgICBpZiAobV9yYXJlRGF0YS0+Y3Vz
dG9tU2xvdEJhc2UgJiYgIUhlYXA6OmlzTWFya2VkKG1fcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNl
LmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1fcmFyZURh
dGEtPmludHJpbnNpY0Z1bmN0aW9uICYmICFIZWFwOjppc01hcmtlZChtX3JhcmVEYXRhLT5pbnRy
aW5zaWNGdW5jdGlvbi5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRp
b25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotewotICAgIGJvb2wgcmVzdWx0ID0gdHJ1
ZTsKLSAgICAKLSAgICBpZiAobV9zdHJ1Y3R1cmUpCi0gICAgICAgIHJlc3VsdCAmPSBtX3N0cnVj
dHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7Ci0gICAgCi0gICAgc3dpdGNoIChtX3R5cGUpIHsK
LSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZENvbmN1cnJl
bnRseShtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSkKLSAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgQWNj
ZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCi0gICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBz
dGF0ZSwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gpCi17Ci0gICAgU3VwZXJT
YW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotCi0gICAgUkVMRUFTRV9BU1NF
UlQobV9zdGF0ZSA9PSBDb21taXR0ZWQpOwotICAgIG1fc3RhdGUgPSBHZW5lcmF0ZWQ7Ci0gICAg
Ci0gICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqc3RhdGUuaml0OwotICAgIFZNJiB2bSA9ICpqaXQu
dm0oKTsKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9ICpzdGF0ZS5pZGVudDsKLSAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSAqc3RhdGUuc3R1YkluZm87Ci0gICAgSlNWYWx1
ZVJlZ3MgdmFsdWVSZWdzID0gc3RhdGUudmFsdWVSZWdzOwotICAgIEdQUlJlZyBiYXNlR1BSID0g
c3RhdGUuYmFzZUdQUjsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHN0YXRlLnNjcmF0Y2hHUFI7
Ci0gICAgCi0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLQotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0g
ICAgY2FzZSBBcnJheUxlbmd0aDogewotICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwotICAg
ICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5k
ZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIGZhbGxUaHJv
dWdoLmFwcGVuZCgKLSAgICAgICAgICAgIGppdC5icmFuY2hUZXN0MzIoCi0gICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihJc0FycmF5KSkpOwotICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCi0gICAgICAgICAg
ICBqaXQuYnJhbmNoVGVzdDMyKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywg
c2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2sp
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgU3RyaW5nTGVuZ3RoOiB7Ci0g
ICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7Ci0gICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgK
LSAgICAgICAgICAgIGppdC5icmFuY2g4KAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Tm90RXF1YWwsCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICAgICAgCi0gICAgY2FzZSBEaXJlY3RBcmd1bWVudHNMZW5ndGg6IHsKLSAgICAgICAgQVNT
RVJUKCF2aWFQcm94eSgpKTsKLSAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAotICAgICAgICAg
ICAgaml0LmJyYW5jaDgoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwK
LSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoRGlyZWN0QXJndW1lbnRzVHlwZSkpKTsKLQotICAgICAgICBmYWxsVGhyb3VnaC5h
cHBlbmQoCi0gICAgICAgICAgICBqaXQuYnJhbmNoVGVzdFB0cigKLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Ok5vblplcm8sCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZNYXBwZWRBcmd1bWVudHMoKSkp
KTsKLSAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpLAotICAgICAgICAg
ICAgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgICAgIGppdC5ib3hJbnQzMih2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MpOwotICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgU2NvcGVkQXJndW1lbnRz
TGVuZ3RoOiB7Ci0gICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7Ci0gICAgICAgIGZhbGxUaHJv
dWdoLmFwcGVuZCgKLSAgICAgICAgICAgIGppdC5icmFuY2g4KAotICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAotICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFNjb3BlZEFyZ3VtZW50c1R5cGUpKSk7Ci0K
LSAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAotICAgICAgICAgICAgaml0LmJyYW5jaFRlc3Q4
KAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm9uWmVybywKLSAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRP
Zk92ZXJyb2RlVGhpbmdzKCkpKSk7Ci0gICAgICAgIGppdC5sb2FkMzIoCi0gICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRv
dGFsTGVuZ3RoKCkpLAotICAgICAgICAgICAgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAg
ICAgIGppdC5ib3hJbnQzMih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MpOwotICAg
ICAgICBzdGF0ZS5zdWNjZWVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAgIAot
ICAgIGNhc2UgTWVnYW1vcnBoaWNMb2FkOiB7Ci0gICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBr
ZXkgPSBpZGVudC5pbXBsKCk7Ci0gICAgICAgIHVuc2lnbmVkIGhhc2ggPSBJZGVudGlmaWVyUmVw
SGFzaDo6aGFzaChrZXkpOwotICAgICAgICAKLSAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKLSAgICAgICAgYWxs
b2NhdG9yLmxvY2soYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgYWxs
b2NhdG9yLmxvY2soc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlVGFnR1BS
KSk7Ci0jZW5kaWYKLSAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKLSAgICAgICAg
YWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgaW50
ZXJtZWRpYXRlR1BSID0gc2NyYXRjaEdQUjsKLSAgICAgICAgR1BSUmVnIG1hc2tHUFIgPSBhbGxv
Y2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgICAgIEdQUlJlZyBtYXNrZWRIYXNoR1BS
ID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICBHUFJSZWcgaW5kZXhH
UFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgICAgIEdQUlJlZyBvZmZz
ZXRHUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAodmVyYm9zZSkgewotICAgICAgICAgICAgZGF0YUxvZygiYmFzZUdQUiA9ICIsIGJhc2VH
UFIsICJcbiIpOwotICAgICAgICAgICAgZGF0YUxvZygidmFsdWVSZWdzID0gIiwgdmFsdWVSZWdz
LCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coInNjcmF0Y2hHUFIgPSAiLCBzY3JhdGNoR1BS
LCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coImludGVybWVkaWF0ZUdQUiA9ICIsIGludGVy
bWVkaWF0ZUdQUiwgIlxuIik7Ci0gICAgICAgICAgICBkYXRhTG9nKCJtYXNrR1BSID0gIiwgbWFz
a0dQUiwgIlxuIik7Ci0gICAgICAgICAgICBkYXRhTG9nKCJtYXNrZWRIYXNoR1BSID0gIiwgbWFz
a2VkSGFzaEdQUiwgIlxuIik7Ci0gICAgICAgICAgICBkYXRhTG9nKCJpbmRleEdQUiA9ICIsIGlu
ZGV4R1BSLCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coIm9mZnNldEdQUiA9ICIsIG9mZnNl
dEdQUiwgIlxuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0KLSAgICAgICAgICAgIGFsbG9jYXRv
ci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKLQotICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IG15RmFpbEFuZElnbm9yZTsKLSAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBteUZhbGxUaHJvdWdoOwotICAgICAgICAKLSAgICAgICAgaml0LmVtaXRMb2Fk
U3RydWN0dXJlKGJhc2VHUFIsIGludGVybWVkaWF0ZUdQUiwgbWFza0dQUik7Ci0gICAgICAgIGpp
dC5sb2FkUHRyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGludGVybWVkaWF0
ZUdQUiwgU3RydWN0dXJlOjpwcm9wZXJ0eVRhYmxlVW5zYWZlT2Zmc2V0KCkpLAotICAgICAgICAg
ICAgaW50ZXJtZWRpYXRlR1BSKTsKLSAgICAgICAgCi0gICAgICAgIG15RmFpbEFuZElnbm9yZS5h
cHBlbmQoaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBpbnRlcm1lZGlhdGVH
UFIpKTsKLSAgICAgICAgCi0gICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGludGVybWVkaWF0ZUdQUiwgUHJvcGVydHlUYWJsZTo6b2Zmc2V0T2ZJbmRleE1hc2soKSksIG1h
c2tHUFIpOwotICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoaW50ZXJt
ZWRpYXRlR1BSLCBQcm9wZXJ0eVRhYmxlOjpvZmZzZXRPZkluZGV4KCkpLCBpbmRleEdQUik7Ci0g
ICAgICAgIGppdC5sb2FkMzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoaW50
ZXJtZWRpYXRlR1BSLCBQcm9wZXJ0eVRhYmxlOjpvZmZzZXRPZkluZGV4U2l6ZSgpKSwKLSAgICAg
ICAgICAgIGludGVybWVkaWF0ZUdQUik7Ci0KLSAgICAgICAgaml0Lm1vdmUobWFza0dQUiwgbWFz
a2VkSGFzaEdQUik7Ci0gICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihoYXNoKSwgbWFza2VkSGFzaEdQUik7Ci0gICAgICAgIGppdC5sc2hpZnQzMihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigyKSwgaW50ZXJtZWRpYXRlR1BSKTsKLSAgICAgICAgaml0LmFkZFB0
cihpbmRleEdQUiwgaW50ZXJtZWRpYXRlR1BSKTsKLSAgICAgICAgCi0gICAgICAgIENDYWxsSGVs
cGVyczo6TGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOwotICAgICAgICAKLSAgICAgICAgaml0Lmxv
YWQzMihDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChpbmRleEdQUiwgbWFza2VkSGFzaEdQUiwgQ0Nh
bGxIZWxwZXJzOjpUaW1lc0ZvdXIpLCBvZmZzZXRHUFIpOwotICAgICAgICAKLSAgICAgICAgbXlG
YWxsVGhyb3VnaC5hcHBlbmQoCi0gICAgICAgICAgICBqaXQuYnJhbmNoMzIoCi0gICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpFcXVhbCwKLSAgICAgICAgICAgICAgICBvZmZzZXRHUFIsCi0g
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoUHJvcGVydHlUYWJsZTo6
RW1wdHlFbnRyeUluZGV4KSkpOwotICAgICAgICAKLSAgICAgICAgaml0LnN1YjMyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKDEpLCBvZmZzZXRHUFIpOwotICAgICAgICBqaXQubXVsMzIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFByb3BlcnR5TWFwRW50cnkpKSwgb2Zmc2V0
R1BSLCBvZmZzZXRHUFIpOwotICAgICAgICBqaXQuYWRkUHRyKGludGVybWVkaWF0ZUdQUiwgb2Zm
c2V0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBjb2xsaXNpb24g
PSAgaml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob2Zmc2V0R1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoUHJvcGVydHlNYXBFbnRyeSwga2V5KSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoa2V5KSk7Ci0gICAgICAgIAotICAgICAgICAvLyBvZmZzZXRHUFIgY3VycmVu
dGx5IGhvbGRzIGEgcG9pbnRlciB0byB0aGUgUHJvcGVydHlNYXBFbnRyeSwgd2hpY2ggaGFzIHRo
ZSBvZmZzZXQgYW5kIGF0dHJpYnV0ZXMuCi0gICAgICAgIC8vIENoZWNrIHRoZW0gYW5kIHRoZW4g
YXR0ZW1wdCB0aGUgbG9hZC4KLSAgICAgICAgCi0gICAgICAgIG15RmFsbFRocm91Z2guYXBwZW5k
KAotICAgICAgICAgICAgaml0LmJyYW5jaFRlc3QzMigKLSAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Ok5vblplcm8sCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9m
ZnNldEdQUiwgT0JKRUNUX09GRlNFVE9GKFByb3BlcnR5TWFwRW50cnksIGF0dHJpYnV0ZXMpKSwK
LSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihBY2Nlc3NvciB8IEN1
c3RvbUFjY2Vzc29yKSkpOwotICAgICAgICAKLSAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Mob2Zmc2V0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoUHJvcGVydHlNYXBFbnRyeSwg
b2Zmc2V0KSksIG9mZnNldEdQUik7Ci0gICAgICAgIAotICAgICAgICBqaXQubG9hZFByb3BlcnR5
KGJhc2VHUFIsIG9mZnNldEdQUiwgdmFsdWVSZWdzKTsKLSAgICAgICAgCi0gICAgICAgIGFsbG9j
YXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUp
OwotICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7Ci0gICAgICAgIAotICAgICAgICBjb2xsaXNpb24u
bGluaygmaml0KTsKLQotICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMSksIG1hc2tlZEhhc2hHUFIpOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFdlIGNv
dWxkIGJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4gQ3VycmVudGx5IHdlJ3JlIGJ1cm5pbmcgYSBHUFIg
Zm9yIHRoZSBtYXNrLiBCdXQgbG9vcGluZwotICAgICAgICAvLyBhcm91bmQgaXNuJ3Qgc3VwZXIg
Y29tbW9uIHNvIHdlIGNvdWxkLCBmb3IgZXhhbXBsZSwgcmVjb21wdXRlIHRoZSBtYXNrIGZyb20g
dGhlIGRpZmZlcmVuY2UgYmV0d2VlbgotICAgICAgICAvLyB0aGUgdGFibGUgYW5kIGluZGV4LiBC
dXQgYmVmb3JlIHdlIGRvIHRoYXQgd2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgaXQgZWFzaWVyIHRv
IG11bHRpcGx5IGFuZAotICAgICAgICAvLyBkaXZpZGUgYnkgdGhlIHNpemUgb2YgUHJvcGVydHlN
YXBFbnRyeS4gVGhhdCBwcm9iYWJseSBpbnZvbHZlcyBtYWtpbmcgUHJvcGVydHlNYXBFbnRyeSBi
ZSBhcnJhbmdlZAotICAgICAgICAvLyB0byBoYXZlIGEgcG93ZXItb2YtMiBzaXplLgotICAgICAg
ICBqaXQuYW5kMzIobWFza0dQUiwgbWFza2VkSGFzaEdQUik7Ci0gICAgICAgIGppdC5qdW1wKCku
bGlua1RvKGxvb3AsICZqaXQpOwotICAgICAgICAKLSAgICAgICAgaWYgKGFsbG9jYXRvci5kaWRS
ZXVzZVJlZ2lzdGVycygpKSB7Ci0gICAgICAgICAgICBteUZhaWxBbmRJZ25vcmUubGluaygmaml0
KTsKLSAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5n
KGppdCwgcHJlc2VydmVkU3RhdGUpOwotICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5h
cHBlbmQoaml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG15RmFsbFRocm91
Z2gubGluaygmaml0KTsKLSAgICAgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0
ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwotICAgICAgICAgICAgZmFsbFRocm91
Z2guYXBwZW5kKGppdC5qdW1wKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3Rh
dGUuZmFpbEFuZElnbm9yZS5hcHBlbmQobXlGYWlsQW5kSWdub3JlKTsKLSAgICAgICAgICAgIGZh
bGxUaHJvdWdoLmFwcGVuZChteUZhbGxUaHJvdWdoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgZGVmYXVsdDogewotICAgICAgICBpZiAodmlhUHJveHkoKSkgewot
ICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAotICAgICAgICAgICAgICAgIGppdC5icmFu
Y2g4KAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAotICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSkpOwotCi0gICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKLQotICAgICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAot
ICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAotICAgICAgICAgICAgICAgIGppdC5icmFuY2hTdHJ1
Y3R1cmUoCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUoKSkpOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0gfTsKLQotICAgIGdlbmVyYXRlSW1wbChz
dGF0ZSk7Ci19Ci0KLXZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGlvblN0
YXRlJiBzdGF0ZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09IENvbW1pdHRlZCk7
Ci0gICAgbV9zdGF0ZSA9IEdlbmVyYXRlZDsKLSAgICAKLSAgICBnZW5lcmF0ZUltcGwoc3RhdGUp
OwotfQotCi12b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGUmIHN0YXRlKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZh
bHNlKTsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiR2VuZXJhdGluZyBjb2Rl
IGZvcjogIiwgKnRoaXMsICJcbiIpOwotICAgIAotICAgIEFTU0VSVChtX3N0YXRlID09IEdlbmVy
YXRlZCk7IC8vIFdlIHJlbHkgb24gdGhlIGNhbGxlcnMgc2V0dGluZyB0aGlzIGZvciB1cy4KLSAg
ICAKLSAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7Ci0gICAgVk0mIHZtID0gKmpp
dC52bSgpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOwotICAg
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICpzdGF0ZS5zdHViSW5mbzsKLSAgICBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCA9ICpzdGF0ZS5pZGVudDsKLSAgICBKU1ZhbHVlUmVncyB2YWx1
ZVJlZ3MgPSBzdGF0ZS52YWx1ZVJlZ3M7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0ZS5iYXNl
R1BSOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGUuc2NyYXRjaEdQUjsKLQotICAgIEFT
U0VSVChtX2NvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpKTsKLQotICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGNvbmRpdGlvbiA6IG1fY29uZGl0aW9uU2V0KSB7Ci0gICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gY29uZGl0aW9uLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKLQotICAgICAg
ICBpZiAoY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoKSkgewotICAgICAgICAgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChz
dGF0ZS5hZGRXYXRjaHBvaW50KGNvbmRpdGlvbikpOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRp
dHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpKSB7Ci0gICAgICAg
ICAgICAvLyBUaGUgcmVhc29uIHdoeSB0aGlzIGNhbm5vdCBoYXBwZW4gaXMgdGhhdCB3ZSByZXF1
aXJlIHRoYXQgUG9seW1vcnBoaWNBY2Nlc3MgY2FsbHMKLSAgICAgICAgICAgIC8vIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlKCkgb25seSBhZnRlciBpdCBoYXMgdmVyaWZpZWQgdGhhdAotICAgICAgICAg
ICAgLy8gQWNjZXNzQ2FzZTo6Y291bGRTdGlsbFN1Y2NlZWQoKSByZXR1cm5lZCB0cnVlLgotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBkYXRhTG9nKCJUaGlzIGNvbmRpdGlvbiBpcyBubyBsb25n
ZXIgbWV0OiAiLCBjb25kaXRpb24sICJcbiIpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIHdpbGwgZW1pdCBjb2Rl
IHRoYXQgaGFzIGEgd2VhayByZWZlcmVuY2UgdGhhdCBpc24ndCBvdGhlcndpc2UgbGlzdGVkIGFu
eXdoZXJlLgotICAgICAgICBzdGF0ZS53ZWFrUmVmZXJlbmNlcy5hcHBlbmQoV3JpdGVCYXJyaWVy
PEpTQ2VsbD4odm0sIGNvZGVCbG9jaywgc3RydWN0dXJlKSk7Ci0gICAgICAgIAotICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29uZGl0aW9uLm9iamVjdCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZCgKLSAgICAg
ICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpOb3RFcXVhbCwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUpKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgSW5IaXQ6
Ci0gICAgY2FzZSBJbk1pc3M6Ci0gICAgICAgIGppdC5ib3hCb29sZWFuUGF5bG9hZChtX3R5cGUg
PT0gSW5IaXQsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwotICAgICAgICBzdGF0ZS5zdWNjZWVk
KCk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgTWlzczoKLSAgICAgICAgaml0Lm1vdmVU
cnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKLSAgICAgICAgc3RhdGUuc3Vj
Y2VlZCgpOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIExvYWQ6Ci0gICAgY2FzZSBHZXRH
ZXR0ZXI6Ci0gICAgY2FzZSBHZXR0ZXI6Ci0gICAgY2FzZSBTZXR0ZXI6Ci0gICAgY2FzZSBDdXN0
b21WYWx1ZUdldHRlcjoKLSAgICBjYXNlIEN1c3RvbUFjY2Vzc29yR2V0dGVyOgotICAgIGNhc2Ug
Q3VzdG9tVmFsdWVTZXR0ZXI6Ci0gICAgY2FzZSBDdXN0b21BY2Nlc3NvclNldHRlcjogewotICAg
ICAgICBHUFJSZWcgdmFsdWVSZWdzUGF5bG9hZEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7
Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChtX29mZnNldCkpIHsKLSAgICAg
ICAgICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZTsKLSAgICAgICAgICAgIGlmIChtX2NvbmRp
dGlvblNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVj
dHVyZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUg
PSBtX2NvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUo
KTsKLSAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJl
cGxhY2VtZW50cyh2bSwgb2Zmc2V0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgR1BSUmVnIGJh
c2VGb3JHZXRHUFI7Ci0gICAgICAgIGlmICh2aWFQcm94eSgpKSB7Ci0gICAgICAgICAgICBBU1NF
UlQobV90eXBlICE9IEN1c3RvbVZhbHVlU2V0dGVyIHx8IG1fdHlwZSAhPSBDdXN0b21BY2Nlc3Nv
clNldHRlcik7IC8vIEJlY2F1c2Ugc2V0dGVycyBuZWVkIHRvIG5vdCB0cmFzaCB2YWx1ZVJlZ3NQ
YXlsb2FkR1BSLgotICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBHZXR0ZXIgfHwgbV90eXBlID09
IFNldHRlcikKLSAgICAgICAgICAgICAgICBiYXNlRm9yR2V0R1BSID0gc2NyYXRjaEdQUjsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBiYXNlRm9yR2V0R1BSID0gdmFsdWVSZWdz
UGF5bG9hZEdQUjsKLQotICAgICAgICAgICAgQVNTRVJUKChtX3R5cGUgIT0gR2V0dGVyICYmIG1f
dHlwZSAhPSBTZXR0ZXIpIHx8IGJhc2VGb3JHZXRHUFIgIT0gYmFzZUdQUik7Ci0gICAgICAgICAg
ICBBU1NFUlQobV90eXBlICE9IFNldHRlciB8fCBiYXNlRm9yR2V0R1BSICE9IHZhbHVlUmVnc1Bh
eWxvYWRHUFIpOwotCi0gICAgICAgICAgICBqaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkpLAot
ICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGJhc2VGb3JHZXRHUFIgPSBiYXNlR1BSOwotCi0gICAgICAgIEdQUlJlZyBiYXNlRm9yQWNj
ZXNzR1BSOwotICAgICAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgaml0Lm1vdmUoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGFsdGVybmF0ZUJhc2UoKSksCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gYmFzZUZvckdldEdQUjsKLQotICAgICAgICBH
UFJSZWcgbG9hZGVkVmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVnOwotICAgICAgICBpZiAobV90eXBl
ICE9IEN1c3RvbVZhbHVlR2V0dGVyICYmIG1fdHlwZSAhPSBDdXN0b21BY2Nlc3NvckdldHRlciAm
JiBtX3R5cGUgIT0gQ3VzdG9tVmFsdWVTZXR0ZXIgJiYgbV90eXBlICE9IEN1c3RvbUFjY2Vzc29y
U2V0dGVyKSB7Ci0gICAgICAgICAgICBpZiAobV90eXBlID09IExvYWQgfHwgbV90eXBlID09IEdl
dEdldHRlcikKLSAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9IHZhbHVlUmVnc1BheWxv
YWRHUFI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIg
PSBzY3JhdGNoR1BSOwotCi0gICAgICAgICAgICBBU1NFUlQoKG1fdHlwZSAhPSBHZXR0ZXIgJiYg
bV90eXBlICE9IFNldHRlcikgfHwgbG9hZGVkVmFsdWVHUFIgIT0gYmFzZUdQUik7Ci0gICAgICAg
ICAgICBBU1NFUlQobV90eXBlICE9IFNldHRlciB8fCBsb2FkZWRWYWx1ZUdQUiAhPSB2YWx1ZVJl
Z3NQYXlsb2FkR1BSKTsKLQotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7Ci0gICAgICAg
ICAgICBpZiAoaXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKQotICAgICAgICAgICAgICAgIHN0b3Jh
Z2VHUFIgPSBiYXNlRm9yQWNjZXNzR1BSOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgaml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlRm9yQWNjZXNzR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAotICAg
ICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICAgICAgc3RvcmFn
ZUdQUiA9IGxvYWRlZFZhbHVlR1BSOwotICAgICAgICAgICAgfQotCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgICAgIGppdC5sb2FkNjQoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG1fb2Zmc2V0KSksIGxv
YWRlZFZhbHVlR1BSKTsKLSNlbHNlCi0gICAgICAgICAgICBpZiAobV90eXBlID09IExvYWQgfHwg
bV90eXBlID09IEdldEdldHRlcikgewotICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoCi0gICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRS
ZWxhdGl2ZVRvQmFzZShtX29mZnNldCkgKyBUYWdPZmZzZXQpLAotICAgICAgICAgICAgICAgICAg
ICB2YWx1ZVJlZ3MudGFnR1BSKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaml0Lmxv
YWQzMigKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2UobV9vZmZzZXQpICsgUGF5bG9hZE9mZnNldCksCi0gICAgICAg
ICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobV90eXBlID09IExvYWQgfHwgbV90eXBlID09IEdldEdldHRlcikgewotICAgICAgICAgICAg
c3RhdGUuc3VjY2VlZCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKE9wdGlvbnM6OnVzZURPTUpJVCgpICYmIG1fdHlwZSA9PSBDdXN0b21BY2Nlc3Nvckdl
dHRlciAmJiBtX3JhcmVEYXRhLT5kb21KSVQpIHsKLSAgICAgICAgICAgIC8vIFdlIGRvIG5vdCBu
ZWVkIHRvIGVtaXQgQ2hlY2tET00gb3BlcmF0aW9uIHNpbmNlIHN0cnVjdHVyZSBjaGVjayBlbnN1
cmVzCi0gICAgICAgICAgICAvLyB0aGF0IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGdpdmVuIGJhc2Ug
dmFsdWUgaXMgc3RydWN0dXJlKCkhIFNvIGFsbCB3ZSBzaG91bGQKLSAgICAgICAgICAgIC8vIGRv
IGlzIHBlcmZvcm1pbmcgdGhlIENoZWNrRE9NIHRoaW5neSBpbiBJQyBjb21waWxpbmcgdGltZSBo
ZXJlLgotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKS0+aXNTdWJDbGFz
c09mKG1fcmFyZURhdGEtPmRvbUpJVC0+dGhpc0NsYXNzSW5mbygpKSkgewotICAgICAgICAgICAg
ICAgIGVtaXRET01KSVRHZXR0ZXIoc3RhdGUsIGJhc2VGb3JHZXRHUFIpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFN0dWZm
IGZvciBjdXN0b20gZ2V0dGVycy9zZXR0ZXJzLgotICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
b3BlcmF0aW9uQ2FsbDsKLQotICAgICAgICAvLyBTdHVmZiBmb3IgSlMgZ2V0dGVycy9zZXR0ZXJz
LgotICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rRnVuY3Rp
b25DaGVjazsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RQYXRoQ2FsbDsKLSAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbDsKLQotICAgICAgICAvLyBUaGlzIGFs
c28gZG9lcyB0aGUgbmVjZXNzYXJ5IGNhbGN1bGF0aW9ucyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdy
ZSBhbgotICAgICAgICAvLyBleGNlcHRpb24gaGFuZGxpbmcgY2FsbCBzaXRlLgotICAgICAgICBB
Y2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNl
cnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCk7Ci0KLSAgICAgICAgYXV0byByZXN0b3Jl
TGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwgPSBbJl0oQWNjZXNzR2VuZXJhdGlvblN0YXRl
OjpTcGlsbFN0YXRlJiBzcGlsbFN0YXRlLCBib29sIGNhbGxIYXNSZXR1cm5WYWx1ZSkgewotICAg
ICAgICAgICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmU7Ci0gICAgICAgICAgICBpZiAoY2FsbEhh
c1JldHVyblZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmVzdWx0IHZh
bHVlLiBXZSBkb24ndCB3YW50IHRvIG92ZXJ3cml0ZSB0aGUgcmVzdWx0IHdpdGggd2hhdCB3ZSBz
dG9yZWQgdG8gdGhlIHN0YWNrLgotICAgICAgICAgICAgICAgIC8vIFdlIHNvbWV0aW1lcyBoYXZl
IHRvIHN0b3JlIGl0IHRvIHRoZSBzdGFjayBqdXN0IGluIGNhc2Ugd2UgdGhyb3cgYW4gZXhjZXB0
aW9uIGFuZCBuZWVkIHRoZSBvcmlnaW5hbCB2YWx1ZS4KLSAgICAgICAgICAgICAgICBkb250UmVz
dG9yZS5zZXQodmFsdWVSZWdzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRlLnJl
c3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRlLCBkb250UmVzdG9y
ZSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFu
ZGxpbmdPck9yaWdpbmFsKCkuYml0cygpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFn
Rm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCkpKTsKLQotICAgICAgICBpZiAobV90eXBlID09IEdldHRlciB8fCBtX3R5cGUgPT0gU2V0
dGVyKSB7Ci0gICAgICAgICAgICBBU1NFUlQoYmFzZUdQUiAhPSBsb2FkZWRWYWx1ZUdQUik7Ci0g
ICAgICAgICAgICBBU1NFUlQobV90eXBlICE9IFNldHRlciB8fCAoYmFzZUdQUiAhPSB2YWx1ZVJl
Z3NQYXlsb2FkR1BSICYmIGxvYWRlZFZhbHVlR1BSICE9IHZhbHVlUmVnc1BheWxvYWRHUFIpKTsK
LQotICAgICAgICAgICAgLy8gQ3JlYXRlIGEgSlMgY2FsbCB1c2luZyBhIEpTIGNhbGwgaW5saW5l
IGNhY2hlLiBBc3N1bWUgdGhhdDoKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAtIFNQ
IGlzIGFsaWduZWQgYW5kIHJlcHJlc2VudHMgdGhlIGV4dGVudCBvZiB0aGUgY2FsbGluZyBjb21w
aWxlcidzIHN0YWNrIHVzYWdlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gRlAg
aXMgc2V0IGNvcnJlY3RseSAoaS5lLiBpdCBwb2ludHMgdG8gdGhlIGNhbGxlcidzIGNhbGwgZnJh
bWUgaGVhZGVyKS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAtIFNQIC0gRlAgaXMg
YW4gYWxpZ25lZCBkaWZmZXJlbmNlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0g
QW55IGJ5dGUgYmV0d2VlbiBGUCAoZXhjbHVzaXZlKSBhbmQgU1AgKGluY2x1c2l2ZSkgY291bGQg
YmUgbGl2ZSBpbiB0aGUgY2FsbGluZwotICAgICAgICAgICAgLy8gICBjb2RlLgotICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2UgdGVtcG9yYXJpbHkgZ3JvdyB0aGUg
c3RhY2sgZm9yIHRoZSBwdXJwb3NlIG9mIHRoZSBjYWxsIGFuZCB0aGVuCi0gICAgICAgICAgICAv
LyBzaHJpbmsgaXQgYWZ0ZXIuCi0KLSAgICAgICAgICAgIHN0YXRlLnNldFNwaWxsU3RhdGVGb3JK
U0dldHRlclNldHRlcihzcGlsbFN0YXRlKTsKLQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IW1fcmFyZURhdGEtPmNhbGxMaW5rSW5mbyk7Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5jYWxs
TGlua0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rSW5mbz4oKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgLy8gRklYTUU6IElmIHdlIGdlbmVyYXRlZCBhIHBvbHltb3JwaGljIGNh
bGwgc3R1YiB0aGF0IGp1bXBlZCBiYWNrIHRvIHRoZSBnZXR0ZXIKLSAgICAgICAgICAgIC8vIHN0
dWIsIHdoaWNoIHRoZW4ganVtcGVkIGJhY2sgdG8gdGhlIG1haW4gY29kZSwgdGhlbiB3ZSdkIGhh
dmUgYSByZWFjaGFiaWxpdHkKLSAgICAgICAgICAgIC8vIHNpdHVhdGlvbiB0aGF0IHRoZSBHQyBk
b2Vzbid0IGtub3cgYWJvdXQuIFRoZSBHQyB3b3VsZCBlbnN1cmUgdGhhdCB0aGUgcG9seW1vcnBo
aWMKLSAgICAgICAgICAgIC8vIGNhbGwgc3R1YiBzdGF5ZWQgYWxpdmUsIGFuZCBpdCB3b3VsZCBl
bnN1cmUgdGhhdCB0aGUgbWFpbiBjb2RlIHN0YXllZCBhbGl2ZSwgYnV0Ci0gICAgICAgICAgICAv
LyBpdCB3b3VsZG4ndCBrbm93IHRoYXQgdGhlIGdldHRlciBzdHViIHdhcyBhbGl2ZS4gSWRlYWxs
eSBKSVQgc3R1YiByb3V0aW5lcyB3b3VsZAotICAgICAgICAgICAgLy8gYmUgR0Mgb2JqZWN0cywg
YW5kIHRoZW4gd2UnZCBiZSBhYmxlIHRvIHNheSB0aGF0IHRoZSBwb2x5bW9ycGhpYyBjYWxsIHN0
dWIgaGFzIGEKLSAgICAgICAgICAgIC8vIHJlZmVyZW5jZSB0byB0aGUgZ2V0dGVyIHN0dWIuCi0g
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4
OTE0Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8tPmRpc2FsbG93U3R1YnMo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLT5z
ZXRVcENhbGwoCi0gICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvOjpDYWxsLCBzdHViSW5mby5j
b2RlT3JpZ2luLCBsb2FkZWRWYWx1ZUdQUik7Ci0KLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3QgZG9uZTsKLQotICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSAidGhpcyIgYXJndW1l
bnQuCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlBhcmFtZXRlcnMgPSAxOwotICAgICAg
ICAgICAgLy8gLi4uIGFuZCBhIHZhbHVlIGFyZ3VtZW50IGlmIHdlJ3JlIGNhbGxpbmcgYSBzZXR0
ZXIuCi0gICAgICAgICAgICBpZiAobV90eXBlID09IFNldHRlcikKLSAgICAgICAgICAgICAgICBu
dW1iZXJPZlBhcmFtZXRlcnMrKzsKLQotICAgICAgICAgICAgLy8gR2V0IHRoZSBhY2Nlc3Nvcjsg
aWYgdGhlcmUgYWluJ3Qgb25lIHRoZW4gdGhlIHJlc3VsdCBpcyBqc1VuZGVmaW5lZCgpLgotICAg
ICAgICAgICAgaWYgKG1fdHlwZSA9PSBTZXR0ZXIpIHsKLSAgICAgICAgICAgICAgICBqaXQubG9h
ZFB0cigKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRlZFZh
bHVlR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0dGVyKCkpLAotICAgICAgICAgICAgICAg
ICAgICBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MobG9hZGVkVmFsdWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIoKSksCi0gICAg
ICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHJldHVyblVuZGVmaW5lZCA9IGppdC5icmFuY2hUZXN0
UHRyKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywgbG9hZGVkVmFsdWVHUFIp
OwotCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlJlZ3NGb3JDYWxsID0gQ2FsbEZyYW1l
OjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBudW1iZXJPZlBhcmFtZXRlcnM7Ci0KLSAgICAgICAg
ICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0KLSAgICAgICAgICAgICAgICBudW1i
ZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKTsKLQotICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxs
ID0KLSAgICAgICAgICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1l
bnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7Ci0KLSAgICAgICAgICAgIGppdC5zdWJQ
dHIoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51
bWJlck9mQnl0ZXNGb3JDYWxsKSwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKLQotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNh
bGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCi0gICAgICAgICAgICAgICAgLXN0YXRpY19j
YXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7Ci0KLSAgICAgICAgICAg
IGppdC5zdG9yZTMyKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KG51bWJlck9mUGFyYW1ldGVycyksCi0gICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9m
ZnNldChDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBh
eWxvYWRPZmZzZXQpKTsKLQotICAgICAgICAgICAgaml0LnN0b3JlQ2VsbCgKLSAgICAgICAgICAg
ICAgICBsb2FkZWRWYWx1ZUdQUiwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90
OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0KLSAgICAgICAgICAgIGppdC5zdG9yZUNl
bGwoCi0gICAgICAgICAgICAgICAgYmFzZUdQUiwKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFt
ZS53aXRoT2Zmc2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApLm9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSkpOwotCi0gICAgICAgICAgICBpZiAobV90eXBlID09IFNldHRlcikgewot
ICAgICAgICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAotICAgICAgICAgICAgICAgICAgICB2YWx1
ZVJlZ3MsCi0gICAgICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoCi0gICAg
ICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQo
KSAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIHNsb3dDYXNlID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKLSAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVz
c09mTGlua0Z1bmN0aW9uQ2hlY2ssCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKDApKTsKLQotICAgICAgICAgICAgZmFzdFBhdGhDYWxsID0gaml0Lm5lYXJDYWxs
KCk7Ci0gICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlcikKLSAgICAgICAgICAgICAgICBq
aXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7Ci0gICAgICAgICAgICBkb25lLmFwcGVuZChqaXQu
anVtcCgpKTsKLQotICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKLSAgICAgICAgICAg
IGppdC5tb3ZlKGxvYWRlZFZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7Ci0jaWYgVVNFKEpTVkFM
VUUzMl82NCkKLSAgICAgICAgICAgIC8vIFdlICphbHdheXMqIGtub3cgdGhhdCB0aGUgZ2V0dGVy
L3NldHRlciwgaWYgbm9uLW51bGwsIGlzIGEgY2VsbC4KLSAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdU
MSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0KCkpLCBHUFJJbmZvOjpyZWdUMik7Ci0g
ICAgICAgICAgICBzbG93UGF0aENhbGwgPSBqaXQubmVhckNhbGwoKTsKLSAgICAgICAgICAgIGlm
IChtX3R5cGUgPT0gR2V0dGVyKQotICAgICAgICAgICAgICAgIGppdC5zZXR1cFJlc3VsdHModmFs
dWVSZWdzKTsKLSAgICAgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOwotCi0gICAgICAg
ICAgICByZXR1cm5VbmRlZmluZWQubGluaygmaml0KTsKLSAgICAgICAgICAgIGlmIChtX3R5cGUg
PT0gR2V0dGVyKQotICAgICAgICAgICAgICAgIGppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpzVW5kZWZp
bmVkKCksIHZhbHVlUmVncyk7Ci0KLSAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKLQotICAg
ICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigoY29kZUJsb2Nr
LT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpIC0gc3RhdGUucHJlc2Vy
dmVkUmV1c2VkUmVnaXN0ZXJTdGF0ZS5udW1iZXJPZkJ5dGVzUHJlc2VydmVkIC0gc3BpbGxTdGF0
ZS5udW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24pLAotICAgICAg
ICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlID0g
aXNHZXR0ZXIoKTsKLSAgICAgICAgICAgIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9y
Q2FsbChzcGlsbFN0YXRlLCBjYWxsSGFzUmV0dXJuVmFsdWUpOwotCi0gICAgICAgICAgICBqaXQu
YWRkTGlua1Rhc2soCi0gICAgICAgICAgICAgICAgWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLT5z
ZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwobGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd1BhdGhDYWxsKSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
YWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2spKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RQYXRoQ2FsbCkpOwotCi0gICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dQ
YXRoQ2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdl
dENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQobV90eXBlID09IEN1
c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3NvckdldHRlciB8fCBtX3R5
cGUgPT0gQ3VzdG9tVmFsdWVTZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yU2V0dGVy
KTsKLQotICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHJvb20gZm9yIHRoZSBDIGNhbGwgc28g
YW55IG9mIG91ciBzdGFjayBzcGlsbGFnZSBpc24ndCBvdmVyd3JpdHRlbi4gSXQncwotICAgICAg
ICAgICAgLy8gaGFyZCB0byB0cmFjayBpZiBzb21lb25lIGRpZCBzcGlsbGFnZSBvciBub3QsIHNv
IHdlIGp1c3QgYXNzdW1lIHRoYXQgd2UgYWx3YXlzIG5lZWQKLSAgICAgICAgICAgIC8vIHRvIG1h
a2Ugc29tZSBzcGFjZSBoZXJlLgotICAgICAgICAgICAgaml0Lm1ha2VTcGFjZU9uU3RhY2tGb3JD
Q2FsbCgpOwotCi0gICAgICAgICAgICAvLyBnZXR0ZXI6IEVuY29kZWRKU1ZhbHVlICgqR2V0VmFs
dWVGdW5jKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSk7Ci0gICAgICAgICAgICAvLyBzZXR0ZXI6IHZvaWQgKCpQdXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKLSAg
ICAgICAgICAgIC8vIEN1c3RvbSB2YWx1ZXMgYXJlIHBhc3NlZCB0aGUgc2xvdEJhc2UgKHRoZSBw
cm9wZXJ0eSBob2xkZXIpLCBjdXN0b20gYWNjZXNzb3JzIGFyZSBwYXNzZWQgdGhlIHRoaXNWYXVs
ZSAocmVjaWV2ZXIpLgotICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGRpZmZlcmVu
Y2VzIGluIGN1c3RvbSB2YWx1ZXMgYW5kIGN1c3RvbSBhY2Nlc3NvcnMuCi0gICAgICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4MDE0Ci0gICAgICAg
ICAgICBHUFJSZWcgYmFzZUZvckN1c3RvbVZhbHVlID0gbV90eXBlID09IEN1c3RvbVZhbHVlR2V0
dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21WYWx1ZVNldHRlciA/IGJhc2VGb3JBY2Nlc3NHUFIgOiBi
YXNlRm9yR2V0R1BSOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBpZiAobV90eXBl
ID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3NvckdldHRlcikg
ewotICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCi0gICAg
ICAgICAgICAgICAgICAgIGJhc2VGb3JDdXN0b21WYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwoKSkpOwotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShi
YXNlRm9yQ3VzdG9tVmFsdWUsIHZhbHVlUmVncy5ncHIoKSk7Ci0jZWxzZQotICAgICAgICAgICAg
aWYgKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNz
b3JHZXR0ZXIpIHsKLSAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKAotICAgICAgICAgICAgICAgICAgICBFQUJJXzMyQklUX0RVTU1ZX0FSRyBiYXNlRm9yQ3Vz
dG9tVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoaWRlbnQuaW1wbCgpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCi0gICAgICAgICAgICAg
ICAgICAgIEVBQklfMzJCSVRfRFVNTVlfQVJHIGJhc2VGb3JDdXN0b21WYWx1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyks
Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50
YWdHUFIoKSk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgIGppdC5zdG9yZVB0
cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLnRvcENhbGxGcmFtZSk7Ci0KLSAgICAg
ICAgICAgIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICAgICAgaml0LmFkZExp
bmtUYXNrKAotICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rp
b25QdHIobV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iub3BhcXVlKSk7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0KLSAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIgfHwg
bV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyKQotICAgICAgICAgICAgICAgIGppdC5zZXR1
cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAgICAgICAgIGppdC5yZWNsYWltU3BhY2VPblN0YWNr
Rm9yQ0NhbGwoKTsKLQotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vRXhjZXB0aW9u
ID0KLSAgICAgICAgICAgICAgICBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6
SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7Ci0KLSAgICAgICAgICAgIHN0YXRlLnJlc3RvcmVMaXZl
UmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNlcHRpb24oc3BpbGxTdGF0ZSk7
Ci0gICAgICAgICAgICBzdGF0ZS5lbWl0RXhwbGljaXRFeGNlcHRpb25IYW5kbGVyKCk7Ci0gICAg
ICAgIAotICAgICAgICAgICAgbm9FeGNlcHRpb24ubGluaygmaml0KTsKLSAgICAgICAgICAgIGJv
b2wgY2FsbEhhc1JldHVyblZhbHVlID0gaXNHZXR0ZXIoKTsKLSAgICAgICAgICAgIHJlc3RvcmVM
aXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRlLCBjYWxsSGFzUmV0dXJuVmFs
dWUpOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGNhc2UgUmVwbGFjZTogewotICAgICAgICBpZiAoSW5mZXJyZWRUeXBl
KiB0eXBlID0gc3RydWN0dXJlKCktPmluZmVycmVkVHlwZUZvcihpZGVudC5pbXBsKCkpKSB7Ci0g
ICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYXZlIHR5
cGU6ICIsIHR5cGUtPmRlc2NyaXB0b3IoKSwgIlxuIik7Ci0gICAgICAgICAgICBzdGF0ZS5mYWls
QW5kUmVwYXRjaC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgaml0LmJyYW5jaElmTm90VHlwZSh2
YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOwotICAgICAgICB9IGVs
c2UgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJEb24ndCBoYXZlIHR5cGUuXG4i
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpIHsKLSAg
ICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAotICAgICAgICAgICAgICAgIHZhbHVlUmVncywKLSAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAg
IGJhc2VHUFIsCi0gICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSArCi0gICAgICAgICAgICAgICAgICAgIG9mZnNldEluSW5saW5lU3RvcmFnZShtX29m
ZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGppdC5zdG9yZVZhbHVl
KAotICAgICAgICAgICAgICAgIHZhbHVlUmVncywKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0
dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgICAgICB9Ci0gICAgICAg
IHN0YXRlLnN1Y2NlZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhc2UgVHJh
bnNpdGlvbjogewotICAgICAgICAvLyBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKCkgc2hvdWxkIGhh
dmUgcmV0dXJuZWQgbnVsbCBpZiB0aGlzIHdhc24ndCB0cnVlLgotICAgICAgICBSRUxFQVNFX0FT
U0VSVChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA2IHx8ICFzdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSB8fCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBu
ZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0KLSAgICAgICAgaWYgKEluZmVy
cmVkVHlwZSogdHlwZSA9IG5ld1N0cnVjdHVyZSgpLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQuaW1w
bCgpKSkgewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxv
ZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNjcmlwdG9yKCksICJcbiIpOwotICAgICAgICAgICAg
c3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAotICAgICAgICAgICAgICAgIGppdC5icmFuY2hJ
Zk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5kZXNjcmlwdG9yKCkpKTsKLSAg
ICAgICAgfSBlbHNlIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiRG9uJ3QgaGF2
ZSB0eXBlLlxuIik7Ci0gICAgICAgIAotICAgICAgICAvLyBOT1RFOiBUaGlzIGxvZ2ljIGlzIGR1
cGxpY2F0ZWQgaW4gQWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKCkuIEl0J3MgaW1wb3J0YW50IHRoYXQg
ZG9lc0NhbGxzKCkga25vd3MKLSAgICAgICAgLy8gZXhhY3RseSB3aGVuIHRoaXMgd291bGQgbWFr
ZSBjYWxscy4KLSAgICAgICAgYm9vbCBhbGxvY2F0aW5nID0gbmV3U3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAg
ICAgIGJvb2wgcmVhbGxvY2F0aW5nID0gYWxsb2NhdGluZyAmJiBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKTsKLSAgICAgICAgYm9vbCBhbGxvY2F0aW5nSW5saW5lID0gYWxsb2NhdGlu
ZyAmJiAhc3RydWN0dXJlKCktPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCk7Ci0KLSAgICAgICAg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVn
aXN0ZXJzKTsKLSAgICAgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFM
VUUzMl82NCkKLSAgICAgICAgYWxsb2NhdG9yLmxvY2soc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5wYXRjaC5iYXNlVGFnR1BSKSk7Ci0jZW5kaWYKLSAgICAgICAgYWxsb2NhdG9yLmxvY2so
dmFsdWVSZWdzKTsKLSAgICAgICAgYWxsb2NhdG9yLmxvY2soc2NyYXRjaEdQUik7Ci0KLSAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIzID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUp
IHsKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOwotICAgICAgICAgICAgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlBy
ZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0KLSAgICAgICAgICAgIGFsbG9jYXRvci5wcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKLSAgICAgICAgCi0gICAgICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0KLSAgICAgICAgQVNTRVJUKHN0cnVjdHVy
ZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKLQotICAg
ICAgICBpZiAoYWxsb2NhdGluZykgewotICAgICAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBuZXdT
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUpIHsKLSAgICAgICAgICAg
ICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtLmF1eGlsaWFyeVNwYWNlLmFsbG9j
YXRvckZvcihuZXdTaXplKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAo
IWFsbG9jYXRvcikgewotICAgICAgICAgICAgICAgICAgICAvLyBZdWNrLCB0aGlzIGNhc2Ugd291
bGQgc3VjayEKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5qdW1wKCkp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQ
UjIpOwotICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUiwgYWxsb2Nh
dG9yLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKLSAgICAgICAgICAgICAg
ICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUgKyBzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9s
ZFNpemUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChyZWFsbG9jYXRp
bmcpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGFy
ZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1cmUvYnV0dGVyZmx5Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFkIG91dC1vZi1saW5lIHByb3BlcnR5IHN0b3JhZ2Up
LgotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2hHUFIzKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIC8vIFdlIGhhdmUgc2NyYXRjaEdQUiA9IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BSMyA9IG9s
ZCBzdG9yYWdlLAotICAgICAgICAgICAgICAgICAgICAvLyBzY3JhdGNoR1BSMiA9IGF2YWlsYWJs
ZQotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBv
bGRTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKyBzaXplb2YoSlNW
YWx1ZSkgKyBzaXplb2Yodm9pZCopKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Ny
YXRjaEdQUjIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2NyYXRjaEdQUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQq
KSkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSBvbGRTaXplOyBv
ZmZzZXQgPCBuZXdTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkKLSAgICAgICAgICAgICAg
ICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNl
dCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgYWxs
b2NhdGluZyBvdXQtb2YtbGluZSB1c2luZyBhbiBvcGVyYXRpb24uCi0gICAgICAgICAgICAgICAg
UmVnaXN0ZXJTZXQgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlOwotICAgICAgICAgICAgICAgIGV4
dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoYmFzZUdQUik7Ci0gICAgICAgICAgICAgICAgZXh0
cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldCh2YWx1ZVJlZ3MpOwotICAgICAgICAgICAgICAgIEFj
Y2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2Vy
dmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKLSAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFs
KCkuYml0cygpKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3Rh
dGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNr
Rm9yQ0NhbGwoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIXJlYWxs
b2NhdGluZykgewotICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGJhc2VHUFIpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAg
ICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCi0gICAgICAgICAgICAgICAgICAgICAgICBb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbkNhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyKG9w
ZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlh
bENhcGFjaXR5KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUg
d2UgYXJlIHJlYWxsb2NhdGluZyAoaS5lLiB0aGUgb2xkIHN0cnVjdHVyZS9idXR0ZXJmbHkKLSAg
ICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBoYWQgb3V0LW9mLWxpbmUgcHJvcGVydHkgc3Rv
cmFnZSkuCi0gICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbCA9
IGppdC5jYWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRnVuY3Rpb25QdHIob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3Bl
cnR5U3RvcmFnZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGppdC5yZWNsYWltU3BhY2VP
blN0YWNrRm9yQ0NhbGwoKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vRXhjZXB0aW9uID0KLSAgICAgICAgICAgICAgICAgICAg
aml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hl
Y2spOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN0YXRlLnJlc3RvcmVMaXZl
UmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNlcHRpb24oc3BpbGxTdGF0ZSk7
Ci0gICAgICAgICAgICAgICAgc3RhdGUuZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcigpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7
Ci0gICAgICAgICAgICAgICAgc3RhdGUucmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JD
YWxsKHNwaWxsU3RhdGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgewotICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUo
Ci0gICAgICAgICAgICAgICAgdmFsdWVSZWdzLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwKLSAgICAgICAgICAgICAg
ICAgICAgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsKLSAgICAgICAgICAgICAg
ICAgICAgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFhbGxvY2F0aW5nKQotICAgICAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGppdC5z
dG9yZVZhbHVlKAotICAgICAgICAgICAgICAgIHZhbHVlUmVncywKLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZz
ZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
IChhbGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAvLyBXZSBzZXQgdGhlIG5ldyBidXR0
ZXJmbHkgYW5kIHRoZSBzdHJ1Y3R1cmUgbGFzdC4gRG9pbmcgaXQgdGhpcyB3YXkgZW5zdXJlcyB0
aGF0Ci0gICAgICAgICAgICAvLyB3aGF0ZXZlciB3ZSBoYWQgZG9uZSB1cCB0byB0aGlzIHBvaW50
IGlzIGZvcmdvdHRlbiBpZiB3ZSBjaG9vc2UgdG8gYnJhbmNoIHRvIHNsb3cKLSAgICAgICAgICAg
IC8vIHBhdGguCi0gICAgICAgICAgICBqaXQubnVrZVN0cnVjdHVyZUFuZFN0b3JlQnV0dGVyZmx5
KHNjcmF0Y2hHUFIsIGJhc2VHUFIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1aW50
MzJfdCBzdHJ1Y3R1cmVCaXRzID0gYml0d2lzZV9jYXN0PHVpbnQzMl90PihuZXdTdHJ1Y3R1cmUo
KS0+aWQoKSk7Ci0gICAgICAgIGppdC5zdG9yZTMyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoc3RydWN0dXJlQml0cyksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7Ci0KLSAgICAg
ICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2
ZWRTdGF0ZSk7Ci0gICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKLSAgICAgICAgCi0gICAgICAgIC8v
IFdlIHdpbGwgaGF2ZSBhIHNsb3cgcGF0aCBpZiB3ZSB3ZXJlIGFsbG9jYXRpbmcgd2l0aG91dCB0
aGUgaGVscCBvZiBhbiBvcGVyYXRpb24uCi0gICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7
Ci0gICAgICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJldXNlUmVnaXN0ZXJzKCkpIHsKLSAgICAg
ICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotICAgICAgICAgICAgICAgIGFsbG9jYXRv
ci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwot
ICAgICAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5qdW1wKCkpOwot
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5h
cHBlbmQoc2xvd1BhdGgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHNsb3dQYXRoLmVtcHR5KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2Fz
ZSBBcnJheUxlbmd0aDogewotICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5
U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3RhdGUuZmFp
bEFuZElnbm9yZS5hcHBlbmQoCi0gICAgICAgICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJz
OjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsK
LSAgICAgICAgaml0LmJveEludDMyKHNjcmF0Y2hHUFIsIHZhbHVlUmVncyk7Ci0gICAgICAgIHN0
YXRlLnN1Y2NlZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhc2UgU3RyaW5n
TGVuZ3RoOiB7Ci0gICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VH
UFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7
Ci0gICAgICAgIGppdC5ib3hJbnQzMih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3Mp
OwotICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
ICAgIAotICAgIGNhc2UgSW50cmluc2ljR2V0dGVyOiB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KGlzVmFsaWRPZmZzZXQob2Zmc2V0KCkpKTsKLQotICAgICAgICAvLyBXZSBuZWVkIHRvIGVuc3Vy
ZSB0aGUgZ2V0dGVyIHZhbHVlIGRvZXMgbm90IG1vdmUgZnJvbSB1bmRlciB1cy4gTm90ZSB0aGF0
IEdldHRlclNldHRlcnMKLSAgICAgICAgLy8gYXJlIGltbXV0YWJsZSBzbyB3ZSBqdXN0IG5lZWQg
dG8gd2F0Y2ggdGhlIHByb3BlcnR5IG5vdCBhbnkgdmFsdWUgaW5zaWRlIGl0LgotICAgICAgICBT
dHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7Ci0gICAgICAgIGlmIChtX2NvbmRpdGlvblNldC5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlKCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBtX2NvbmRpdGlvblNldC5zbG90QmFz
ZUNvbmRpdGlvbigpLm9iamVjdCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgY3VyclN0cnVjdHVy
ZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBvZmZzZXQoKSk7Ci0K
LSAgICAgICAgZW1pdEludHJpbnNpY0dldHRlcihzdGF0ZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBjYXNlIERpcmVjdEFyZ3VtZW50c0xlbmd0aDoKLSAgICBjYXNlIFNjb3BlZEFy
Z3VtZW50c0xlbmd0aDoKLSAgICBjYXNlIE1lZ2Ftb3JwaGljTG9hZDoKLSAgICAgICAgLy8gVGhl
c2UgbmVlZCB0byBiZSBoYW5kbGVkIGJ5IGdlbmVyYXRlV2l0aEd1YXJkKCksIHNpbmNlIHRoZSBn
dWFyZCBpcyBwYXJ0IG9mIHRoZQotICAgICAgICAvLyBhbGdvcml0aG0uIFdlIGNhbiBiZSBzdXJl
IHRoYXQgbm9ib2R5IHdpbGwgY2FsbCBnZW5lcmF0ZSgpIGRpcmVjdGx5IGZvciB0aGVzZSBzaW5j
ZSB0aGV5Ci0gICAgICAgIC8vIGFyZSBub3QgZ3VhcmRlZCBieSBzdHJ1Y3R1cmUgY2hlY2tzLgot
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAKLSAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEFjY2Vzc0Nhc2U6OmVtaXRE
T01KSVRHZXR0ZXIoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgR1BSUmVnIGJhc2VGb3JH
ZXRHUFIpCi17Ci0gICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqc3RhdGUuaml0OwotICAgIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICpzdGF0ZS5zdHViSW5mbzsKLSAgICBKU1ZhbHVlUmVn
cyB2YWx1ZVJlZ3MgPSBzdGF0ZS52YWx1ZVJlZ3M7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSBzdGF0
ZS5iYXNlR1BSOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGUuc2NyYXRjaEdQUjsKLQot
ICAgIC8vIFdlIGNvbnN0cnVjdCB0aGUgZW52aXJvbm1lbnQgdGhhdCBjYW4gZXhlY3V0ZSB0aGUg
RE9NSklUOjpQYXRjaHBvaW50IGhlcmUuCi0gICAgUmVmPERPTUpJVDo6Q2FsbERPTUdldHRlclBh
dGNocG9pbnQ+IHBhdGNocG9pbnQgPSBtX3JhcmVEYXRhLT5kb21KSVQtPmNhbGxET01HZXR0ZXIo
KTsKLQotICAgIFZlY3RvcjxHUFJSZWc+IGdwU2NyYXRjaDsKLSAgICBWZWN0b3I8RlBSUmVnPiBm
cFNjcmF0Y2g7Ci0gICAgVmVjdG9yPERPTUpJVDo6VmFsdWU+IHJlZ3M7Ci0KLSAgICBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMp
OwotICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgYWxsb2NhdG9yLmxvY2soc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNl
VGFnR1BSKSk7Ci0jZW5kaWYKLSAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOwotICAgIGFs
bG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwotCi0gICAgR1BSUmVnIHBhcmFtQmFzZUdQUiA9IElu
dmFsaWRHUFJSZWc7Ci0gICAgR1BSUmVnIHBhcmFtR2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQ
UlJlZzsKLSAgICBKU1ZhbHVlUmVncyBwYXJhbVZhbHVlUmVncyA9IHZhbHVlUmVnczsKLSAgICBH
UFJSZWcgcmVtYWluaW5nU2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWc7Ci0KLSAgICAvLyB2YWx1
ZVJlZ3MgYW5kIGJhc2VGb3JHZXRHUFIgbWF5IGJlIHRoZSBzYW1lLiBGb3IgZXhhbXBsZSwgaW4g
QmFzZWxpbmUgSklULCB3ZSBwYXNzIHRoZSBzYW1lIHJlZ1QwIGZvciBiYXNlR1BSIGFuZCB2YWx1
ZVJlZ3MuCi0gICAgLy8gSW4gRlRMLCB0aGVyZSBpcyBubyBjb25zdHJhaW50IHRoYXQgdGhlIGJh
c2VGb3JHZXRHUFIgaW50ZXJmZXJlcyB3aXRoIHRoZSByZXN1bHQuIFRvIG1ha2UgaW1wbGVtZW50
YXRpb24gc2ltcGxlIGluCi0gICAgLy8gRE9NSklUOjpQYXRjaHBvaW50LCBET01KSVQ6OlBhdGNo
cG9pbnQgYXNzdW1lcyB0aGF0IHJlc3VsdCByZWdpc3RlcnMgYWx3YXlzIGVhcmx5IGludGVyZmVy
ZSB3aXRoIGlucHV0IHJlZ2lzdGVycywgaW4gdGhpcyBjYXNlLAotICAgIC8vIGJhc2VGb3JHZXRH
UFIuIFNvIHdlIG1vdmUgYmFzZUZvckdldEdQUiB0byB0aGUgb3RoZXIgcmVnaXN0ZXIgaWYgYmFz
ZUZvckdldEdQUiA9PSB2YWx1ZVJlZ3MuCi0gICAgaWYgKGJhc2VGb3JHZXRHUFIgIT0gdmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSkgewotICAgICAgICBwYXJhbUJhc2VHUFIgPSBiYXNlRm9yR2V0R1BS
OwotICAgICAgICBpZiAoIXBhdGNocG9pbnQtPnJlcXVpcmVHbG9iYWxPYmplY3QpCi0gICAgICAg
ICAgICByZW1haW5pbmdTY3JhdGNoR1BSID0gc2NyYXRjaEdQUjsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcGFyYW1HbG9iYWxPYmplY3RHUFIgPSBzY3JhdGNoR1BSOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGppdC5tb3ZlKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHNjcmF0Y2hHUFIpOwot
ICAgICAgICBwYXJhbUJhc2VHUFIgPSBzY3JhdGNoR1BSOwotICAgICAgICBpZiAocGF0Y2hwb2lu
dC0+cmVxdWlyZUdsb2JhbE9iamVjdCkKLSAgICAgICAgICAgIHBhcmFtR2xvYmFsT2JqZWN0R1BS
ID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgIH0KLQotICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3RGb3JET01KSVQgPSBzdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0
KCk7Ci0KLSAgICByZWdzLmFwcGVuZChwYXJhbVZhbHVlUmVncyk7Ci0gICAgcmVncy5hcHBlbmQo
cGFyYW1CYXNlR1BSKTsKLSAgICBpZiAocGF0Y2hwb2ludC0+cmVxdWlyZUdsb2JhbE9iamVjdCkg
ewotICAgICAgICBBU1NFUlQocGFyYW1HbG9iYWxPYmplY3RHUFIgIT0gSW52YWxpZEdQUlJlZyk7
Ci0gICAgICAgIHJlZ3MuYXBwZW5kKERPTUpJVDo6VmFsdWUocGFyYW1HbG9iYWxPYmplY3RHUFIs
IGdsb2JhbE9iamVjdEZvckRPTUpJVCkpOwotICAgIH0KLQotICAgIGlmIChwYXRjaHBvaW50LT5u
dW1HUFNjcmF0Y2hSZWdpc3RlcnMpIHsKLSAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAg
IGlmIChyZW1haW5pbmdTY3JhdGNoR1BSICE9IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgICAg
IGdwU2NyYXRjaC5hcHBlbmQocmVtYWluaW5nU2NyYXRjaEdQUik7Ci0gICAgICAgICAgICArK2k7
Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICg7IGkgPCBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hS
ZWdpc3RlcnM7ICsraSkKLSAgICAgICAgICAgIGdwU2NyYXRjaC5hcHBlbmQoYWxsb2NhdG9yLmFs
bG9jYXRlU2NyYXRjaEdQUigpKTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzOyArK2kpCi0gICAgICAgIGZwU2Ny
YXRjaC5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEZQUigpKTsKLQotICAgIC8vIExl
dCdzIHN0b3JlIHRoZSByZXVzZWQgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjay4gQWZ0ZXIgdGhhdCwg
d2UgY2FuIHVzZSBhbGxvY2F0ZWQgc2NyYXRjaCByZWdpc3RlcnMuCi0gICAgU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgICAgIGFs
bG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKLQotICAgIGlm
ICh2ZXJib3NlKSB7Ci0gICAgICAgIGRhdGFMb2coImJhc2VHUFIgPSAiLCBiYXNlR1BSLCAiXG4i
KTsKLSAgICAgICAgZGF0YUxvZygidmFsdWVSZWdzID0gIiwgdmFsdWVSZWdzLCAiXG4iKTsKLSAg
ICAgICAgZGF0YUxvZygic2NyYXRjaEdQUiA9ICIsIHNjcmF0Y2hHUFIsICJcbiIpOwotICAgICAg
ICBkYXRhTG9nKCJwYXJhbUJhc2VHUFIgPSAiLCBwYXJhbUJhc2VHUFIsICJcbiIpOwotICAgICAg
ICBpZiAocGFyYW1HbG9iYWxPYmplY3RHUFIgIT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAg
IGRhdGFMb2coInBhcmFtR2xvYmFsT2JqZWN0R1BSID0gIiwgcGFyYW1HbG9iYWxPYmplY3RHUFIs
ICJcbiIpOwotICAgICAgICBkYXRhTG9nKCJwYXJhbVZhbHVlUmVncyA9ICIsIHBhcmFtVmFsdWVS
ZWdzLCAiXG4iKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhdGNocG9pbnQt
Pm51bUdQU2NyYXRjaFJlZ2lzdGVyczsgKytpKQotICAgICAgICAgICAgZGF0YUxvZygiZ3BTY3Jh
dGNoWyIsIGksICJdID0gIiwgZ3BTY3JhdGNoW2ldLCAiXG4iKTsKLSAgICB9Ci0KLSAgICBpZiAo
cGF0Y2hwb2ludC0+cmVxdWlyZUdsb2JhbE9iamVjdCkKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdEZvckRPTUpJVCksIHBhcmFtR2xvYmFs
T2JqZWN0R1BSKTsKLQotICAgIC8vIFdlIGp1c3Qgc3BpbGwgdGhlIHJlZ2lzdGVycyB1c2VkIGlu
IERPTUpJVDo6UGF0Y2hwb2ludCBoZXJlLiBGb3Igbm90IHNwaWxsZWQgcmVnaXN0ZXJzIGhlcmUg
ZXhwbGljaXRseSwKLSAgICAvLyB0aGV5IG11c3QgYmUgaW4gdGhlIHVzZWQgcmVnaXN0ZXIgc2V0
IHBhc3NlZCBieSB0aGUgY2FsbGVycyAoQmFzZWxpbmUsIERGRywgYW5kIEZUTCkgaWYgdGhleSBu
ZWVkIHRvIGJlIGtlcHQuCi0gICAgLy8gU29tZSByZWdpc3RlcnMgY2FuIGJlIGxvY2tlZCwgYnV0
IG5vdCBpbiB0aGUgdXNlZCByZWdpc3RlciBzZXQuIEZvciBleGFtcGxlLCB0aGUgY2FsbGVyIGNv
dWxkIG1ha2UgYmFzZUdQUgotICAgIC8vIHNhbWUgdG8gdmFsdWVSZWdzLCBhbmQgbm90IGluY2x1
ZGUgaXQgaW4gdGhlIHVzZWQgcmVnaXN0ZXJzIHNpbmNlIGl0IHdpbGwgYmUgY2hhbmdlZC4KLSAg
ICBSZWdpc3RlclNldCByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGw7Ci0gICAgZm9yIChhdXRvJiB2
YWx1ZSA6IHJlZ3MpIHsKLSAgICAgICAgRE9NSklUOjpSZWcgcmVnID0gdmFsdWUucmVnKCk7Ci0g
ICAgICAgIGlmIChyZWcuaXNKU1ZhbHVlUmVncygpKQotICAgICAgICAgICAgcmVnaXN0ZXJzVG9T
cGlsbEZvckNDYWxsLnNldChyZWcuanNWYWx1ZVJlZ3MoKSk7Ci0gICAgICAgIGVsc2UgaWYgKHJl
Zy5pc0dQUigpKQotICAgICAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChyZWcu
Z3ByKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0Nh
bGwuc2V0KHJlZy5mcHIoKSk7Ci0gICAgfQotICAgIGZvciAoR1BSUmVnIHJlZyA6IGdwU2NyYXRj
aCkKLSAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChyZWcpOwotICAgIGZvciAo
RlBSUmVnIHJlZyA6IGZwU2NyYXRjaCkKLSAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxs
LnNldChyZWcpOwotICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5leGNsdWRlKFJlZ2lzdGVy
U2V0OjpyZWdpc3RlcnNUb05vdFNhdmVGb3JDQ2FsbCgpKTsKLQotICAgIERPTUpJVEFjY2Vzc0Nh
c2VQYXRjaHBvaW50UGFyYW1zIHBhcmFtcyhXVEZNb3ZlKHJlZ3MpLCBXVEZNb3ZlKGdwU2NyYXRj
aCksIFdURk1vdmUoZnBTY3JhdGNoKSk7Ci0gICAgcGF0Y2hwb2ludC0+Z2VuZXJhdG9yKCktPnJ1
bihqaXQsIHBhcmFtcyk7Ci0gICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBv
cHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7Ci0gICAgc3RhdGUuc3VjY2VlZCgpOwotCi0gICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRpb25zID0gcGFyYW1zLmVtaXRTbG93UGF0aENh
bGxzKHN0YXRlLCByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwsIGppdCk7Ci0gICAgaWYgKCFleGNl
cHRpb25zLmVtcHR5KCkpIHsKLSAgICAgICAgZXhjZXB0aW9ucy5saW5rKCZqaXQpOwotICAgICAg
ICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZl
ZFN0YXRlKTsKLSAgICAgICAgc3RhdGUuZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcigpOwot
ICAgIH0KLX0KIAogUG9seW1vcnBoaWNBY2Nlc3M6OlBvbHltb3JwaGljQWNjZXNzKCkgeyB9CiBQ
b2x5bW9ycGhpY0FjY2Vzczo6flBvbHltb3JwaGljQWNjZXNzKCkgeyB9CkBAIC0xNzU2LDMyICsz
OTgsNiBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVy
YXRlKAogICAgIG1fbGlzdC5yZXNpemUoZHN0SW5kZXgpOwogICAgIAogICAgIGlmICh2ZXJib3Nl
KQotICAgICAgICBkYXRhTG9nKCJJbiByZWdlbmVyYXRlOiBjYXNlczogIiwgbGlzdER1bXAoY2Fz
ZXMpLCAiXG4iKTsKLSAgICAKLSAgICAvLyBOb3cgdGhhdCB3ZSd2ZSByZW1vdmVkIG9idmlvdXNs
eSB1bm5lY2Vzc2FyeSBjYXNlcywgd2UgY2FuIGNoZWNrIGlmIHRoZSBtZWdhbW9ycGhpYyBsb2Fk
Ci0gICAgLy8gb3B0aW1pemF0aW9uIGlzIGFwcGxpY2FibGUuIE5vdGUgdGhhdCB3ZSBiYXNpY2Fs
bHkgdHVuZSBtZWdhbW9ycGhpY0xvYWRDb3N0IGFjY29yZGluZyB0byBjb2RlCi0gICAgLy8gc2l6
ZS4gSXQgd291bGQgYmUgZmFzdGVyIHRvIGp1c3QgYWxsb3cgbW9yZSByZXBhdGNoaW5nIHdpdGgg
bWFueSBsb2FkIGNhc2VzLCBhbmQgYXZvaWQgdGhlCi0gICAgLy8gbWVnYW1vcnBoaWNMb2FkIG9w
dGltaXphdGlvbiwgaWYgd2UgaGFkIGluZmluaXRlIGV4ZWN1dGFibGUgbWVtb3J5LgotICAgIGlm
IChjYXNlcy5zaXplKCkgPj0gT3B0aW9uczo6bWF4QWNjZXNzVmFyaWFudExpc3RTaXplKCkpIHsK
LSAgICAgICAgdW5zaWduZWQgbnVtU2VsZkxvYWRzID0gMDsKLSAgICAgICAgZm9yIChhdXRvJiBu
ZXdDYXNlIDogY2FzZXMpIHsKLSAgICAgICAgICAgIGlmIChuZXdDYXNlLT5jYW5CZVJlcGxhY2Vk
QnlNZWdhbW9ycGhpY0xvYWQoKSkKLSAgICAgICAgICAgICAgICBudW1TZWxmTG9hZHMrKzsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG51bVNlbGZMb2FkcyA+PSBPcHRpb25zOjpt
ZWdhbW9ycGhpY0xvYWRDb3N0KCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIG1lZ2EgPSBBY2Nl
c3NDYXNlOjptZWdhbW9ycGhpY0xvYWQodm0sIGNvZGVCbG9jaykpIHsKLSAgICAgICAgICAgICAg
ICBjYXNlcy5yZW1vdmVBbGxNYXRjaGluZygKLSAgICAgICAgICAgICAgICAgICAgWyZdIChzdGQ6
OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4mIG5ld0Nhc2UpIC0+IGJvb2wgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5ld0Nhc2UtPmNhbkJlUmVwbGFjZWRCeU1lZ2Ftb3JwaGljTG9h
ZCgpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBjYXNlcy5hcHBlbmQoV1RGTW92ZShtZWdhKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIk9w
dGltaXplZCBjYXNlczogIiwgbGlzdER1bXAoY2FzZXMpLCAiXG4iKTsKICAgICAKICAgICAvLyBB
dCB0aGlzIHBvaW50IHdlJ3JlIGNvbnZpbmNlZCB0aGF0ICdjYXNlcycgY29udGFpbnMgdGhlIGNh
c2VzIHRoYXQgd2Ugd2FudCB0byBKSVQgbm93IGFuZCB3ZQpAQCAtMTk3OCw5ICs1OTQsNiBAQCB2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQWNjZXNzQ2FzZTo6QWNjZXNzVHlw
ZSB0eXBlKQogICAgIGNhc2UgQWNjZXNzQ2FzZTo6TG9hZDoKICAgICAgICAgb3V0LnByaW50KCJM
b2FkIik7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEFjY2Vzc0Nhc2U6Ok1lZ2Ftb3JwaGlj
TG9hZDoKLSAgICAgICAgb3V0LnByaW50KCJNZWdhbW9ycGhpY0xvYWQiKTsKLSAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQWNjZXNzQ2FzZTo6VHJhbnNpdGlvbjoKICAgICAgICAgb3V0LnByaW50
KCJUcmFuc2l0aW9uIik7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKaW5kZXggNmY3MDFjNWZhZjlmMWMz
YzA3NjBhMDM3M2YzMWU2ODdmM2VhMTA2ZC4uZDE4NTJjN2I1NDUzZDFlMWU1NTQwOWEyYmEwZTRi
OGY4YWQ4ZTg5ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShKSVQpCiAK
KyNpbmNsdWRlICJBY2Nlc3NDYXNlLmgiCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1
ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKQEAg
LTQ3LDI3NyArNDgsNiBAQCBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKIGNsYXNzIFdhdGNocG9p
bnRzT25TdHJ1Y3R1cmVTdHViSW5mbzsKIGNsYXNzIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjsK
IAotc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTsKLQotLy8gQW4gQWNjZXNzQ2FzZSBkZXNj
cmliZXMgb25lIG9mIHRoZSBjYXNlcyBvZiBhIFBvbHltb3JwaGljQWNjZXNzLiBBIFBvbHltb3Jw
aGljQWNjZXNzIHJlcHJlc2VudHMgYQotLy8gcGxhbm5lZCAodG8gZ2VuZXJhdGUgaW4gZnV0dXJl
KSBvciBnZW5lcmF0ZWQgc3R1YiBmb3Igc29tZSBpbmxpbmUgY2FjaGUuIFRoYXQgc3R1YiBjb250
YWlucyBmYXN0Ci0vLyBwYXRoIGNvZGUgZm9yIHNvbWUgZmluaXRlIG51bWJlciBvZiBmYXN0IGNh
c2VzLCBlYWNoIGRlc2NyaWJlZCBieSBhbiBBY2Nlc3NDYXNlIG9iamVjdC4KLS8vCi0vLyBBbiBB
Y2Nlc3NDYXNlIG9iamVjdCBoYXMgYSBsaWZlY3ljbGUgdGhhdCBwcm9jZWVkcyB0aHJvdWdoIHNl
dmVyYWwgc3RhdGVzLiBOb3RlIHRoYXQgdGhlIHN0YXRlcwotLy8gb2YgQWNjZXNzQ2FzZSBoYXZl
IGEgbG90IHRvIGRvIHdpdGggdGhlIGdsb2JhbCBlZmZlY3QgZXBvY2ggKHdlJ2xsIHNheSBlcG9j
aCBmb3Igc2hvcnQpLiBUaGlzIGlzCi0vLyBhIHNpbXBsZSB3YXkgb2YgcmVhc29uaW5nIGFib3V0
IHRoZSBzdGF0ZSBvZiB0aGUgc3lzdGVtIG91dHNpZGUgdGhpcyBBY2Nlc3NDYXNlLiBBbnkgb2Jz
ZXJ2YWJsZQotLy8gZWZmZWN0IC0gbGlrZSBzdG9yaW5nIHRvIGEgcHJvcGVydHksIGNoYW5naW5n
IGFuIG9iamVjdCdzIHN0cnVjdHVyZSwgZXRjLiAtIGluY3JlbWVudHMgdGhlIGVwb2NoLgotLy8g
VGhlIHN0YXRlcyBhcmU6Ci0vLwotLy8gUHJpbW9yZGlhbDogICBUaGlzIGlzIGFuIEFjY2Vzc0Nh
c2UgdGhhdCB3YXMganVzdCBhbGxvY2F0ZWQuIEl0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYW55
IGFjdHVhbAotLy8gICAgICAgICAgICAgICBjb2RlIGFuZCBpdCBpcyBub3Qgb3duZWQgYnkgYW55
IFBvbHltb3JwaGljQWNjZXNzLiBJbiB0aGlzIHN0YXRlLCB0aGUgQWNjZXNzQ2FzZQotLy8gICAg
ICAgICAgICAgICBhc3N1bWVzIHRoYXQgaXQgaXMgaW4gdGhlIHNhbWUgZXBvY2ggYXMgd2hlbiBp
dCB3YXMgY3JlYXRlZC4gVGhpcyBpcyBpbXBvcnRhbnQKLS8vICAgICAgICAgICAgICAgYmVjYXVz
ZSBpdCBtYXkgbWFrZSBjbGFpbXMgYWJvdXQgaXRzZWxmICgiSSByZXByZXNlbnQgYSB2YWxpZCBj
YXNlIHNvIGxvbmcgYXMgeW91Ci0vLyAgICAgICAgICAgICAgIHJlZ2lzdGVyIGEgd2F0Y2hwb2lu
dCBvbiB0aGlzIHNldCIpIHRoYXQgY291bGQgYmUgY29udHJhZGljdGVkIGJ5IHNvbWUgb3V0c2lk
ZQotLy8gICAgICAgICAgICAgICBlZmZlY3RzIChsaWtlIGZpcmluZyBhbmQgZGVsZXRpbmcgdGhl
IHdhdGNocG9pbnQgc2V0IGluIHF1ZXN0aW9uKS4gVGhpcyBpcyBhbHNvIHRoZQotLy8gICAgICAg
ICAgICAgICBzdGF0ZSB0aGF0IGFuIEFjY2Vzc0Nhc2UgaXMgaW4gd2hlbiBpdCBpcyBjbG9uZWQg
KEFjY2Vzc0Nhc2U6OmNsb25lKCkpLgotLy8KLS8vIENvbW1pdHRlZDogICAgVGhpcyBoYXBwZW5z
IGFzIHNvb24gYXMgc29tZSBQb2x5bW9ycGhpY0FjY2VzcyB0YWtlcyBvd25lcnNoaXAgb2YgdGhp
cyBBY2Nlc3NDYXNlLgotLy8gICAgICAgICAgICAgICBJbiB0aGlzIHN0YXRlLCB0aGUgQWNjZXNz
Q2FzZSBubyBsb25nZXIgYXNzdW1lcyBhbnl0aGluZyBhYm91dCB0aGUgZXBvY2guIFRvCi0vLyAg
ICAgICAgICAgICAgIGFjY29tcGxpc2ggdGhpcywgUG9seW1vcnBoaWNBY2Nlc3MgY2FsbHMgQWNj
ZXNzQ2FzZTo6Y29tbWl0KCkuIFRoaXMgbXVzdCBiZSBkb25lCi0vLyAgICAgICAgICAgICAgIGR1
cmluZyB0aGUgc2FtZSBlcG9jaCB3aGVuIHRoZSBBY2Nlc3NDYXNlIHdhcyBjcmVhdGVkLCBlaXRo
ZXIgYnkgdGhlIGNsaWVudCBvciBieQotLy8gICAgICAgICAgICAgICBjbG9uZSgpLiBXaGVuIGNy
ZWF0ZWQgYnkgdGhlIGNsaWVudCwgY29tbWl0dGluZyBkdXJpbmcgdGhlIHNhbWUgZXBvY2ggd29y
a3MgYmVjYXVzZQotLy8gICAgICAgICAgICAgICB3ZSBjYW4gYmUgc3VyZSB0aGF0IHdoYXRldmVy
IHdhdGNocG9pbnQgc2V0cyB0aGV5IHNwb2tlIG9mIGFyZSBzdGlsbCB2YWxpZC4gV2hlbgotLy8g
ICAgICAgICAgICAgICBjcmVhdGVkIGJ5IGNsb25lKCksIHdlIGNhbiBiZSBzdXJlIHRoYXQgdGhl
IHNldCBpcyBzdGlsbCB2YWxpZCBiZWNhdXNlIHRoZSBvcmlnaW5hbAotLy8gICAgICAgICAgICAg
ICBvZiB0aGUgY2xvbmUgc3RpbGwgaGFzIHdhdGNocG9pbnRzIG9uIGl0LgotLy8KLS8vIEdlbmVy
YXRlZDogICAgVGhpcyBpcyB0aGUgc3RhdGUgd2hlbiB0aGUgUG9seW1vcnBoaWNBY2Nlc3MgZ2Vu
ZXJhdGVzIGNvZGUgZm9yIHRoaXMgY2FzZSBieQotLy8gICAgICAgICAgICAgICBjYWxsaW5nIEFj
Y2Vzc0Nhc2U6OmdlbmVyYXRlKCkgb3IgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoKS4g
QXQgdGhpcyBwb2ludAotLy8gICAgICAgICAgICAgICB0aGUgY2FzZSBvYmplY3Qgd2lsbCBoYXZl
IHNvbWUgZXh0cmEgc3R1ZmYgaW4gaXQsIGxpa2UgcG9zc2libHkgdGhlIENhbGxMaW5rSW5mbwot
Ly8gICAgICAgICAgICAgICBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmxpbmUgY2FjaGUu
Ci0vLyAgICAgICAgICAgICAgIEZJWE1FOiBNb3ZpbmcgaW50byB0aGUgR2VuZXJhdGVkIHN0YXRl
IHNob3VsZCBub3QgbXV0YXRlIHRoZSBBY2Nlc3NDYXNlIG9iamVjdCBvcgotLy8gICAgICAgICAg
ICAgICBwdXQgbW9yZSBzdHVmZiBpbnRvIGl0LiBJZiB3ZSBmaXggdGhpcywgdGhlbiB3ZSBjYW4g
Z2V0IHJpZCBvZiBBY2Nlc3NDYXNlOjpjbG9uZSgpLgotLy8gICAgICAgICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NDU2Ci0vLwotLy8gQW4gQWNjZXNz
Q2FzZSBtYXkgYmUgZGVzdHJveWVkIHdoaWxlIGluIGFueSBvZiB0aGVzZSBzdGF0ZXMuCi0vLwot
Ly8gV2Ugd2lsbCBzb21ldGltZXMgYnVmZmVyIGNvbW1pdHRlZCBBY2Nlc3NDYXNlcyBpbiB0aGUg
UG9seW1vcnBoaWNBY2Nlc3Mgb2JqZWN0IGJlZm9yZSBnZW5lcmF0aW5nCi0vLyBjb2RlLiBUaGlz
IGFsbG93cyB1cyB0byBvbmx5IHJlZ2VuZXJhdGUgb25jZSB3ZSd2ZSBhY2N1bXVsYXRlZCAoaG9w
ZWZ1bGx5KSBtb3JlIHRoYW4gb25lIG5ldwotLy8gQWNjZXNzQ2FzZS4KLWNsYXNzIEFjY2Vzc0Nh
c2UgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFjY2Vzc0Nhc2UpOwotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGVudW0gQWNjZXNzVHlwZSA6IHVpbnQ4X3Qg
ewotICAgICAgICBMb2FkLAotICAgICAgICBNZWdhbW9ycGhpY0xvYWQsCi0gICAgICAgIFRyYW5z
aXRpb24sCi0gICAgICAgIFJlcGxhY2UsCi0gICAgICAgIE1pc3MsCi0gICAgICAgIEdldEdldHRl
ciwKLSAgICAgICAgR2V0dGVyLAotICAgICAgICBTZXR0ZXIsCi0gICAgICAgIEN1c3RvbVZhbHVl
R2V0dGVyLAotICAgICAgICBDdXN0b21BY2Nlc3NvckdldHRlciwKLSAgICAgICAgQ3VzdG9tVmFs
dWVTZXR0ZXIsCi0gICAgICAgIEN1c3RvbUFjY2Vzc29yU2V0dGVyLAotICAgICAgICBJbnRyaW5z
aWNHZXR0ZXIsCi0gICAgICAgIEluSGl0LAotICAgICAgICBJbk1pc3MsCi0gICAgICAgIEFycmF5
TGVuZ3RoLAotICAgICAgICBTdHJpbmdMZW5ndGgsCi0gICAgICAgIERpcmVjdEFyZ3VtZW50c0xl
bmd0aCwKLSAgICAgICAgU2NvcGVkQXJndW1lbnRzTGVuZ3RoCi0gICAgfTsKLSAgICAKLSAgICBl
bnVtIFN0YXRlIDogdWludDhfdCB7Ci0gICAgICAgIFByaW1vcmRpYWwsCi0gICAgICAgIENvbW1p
dHRlZCwKLSAgICAgICAgR2VuZXJhdGVkCi0gICAgfTsKLQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gdHJ5R2V0KAotICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFj
Y2Vzc1R5cGUsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLAotICAgICAgICBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAot
ICAgICAgICBib29sIHZpYVByb3h5ID0gZmFsc2UsCi0gICAgICAgIFdhdGNocG9pbnRTZXQqIGFk
ZGl0aW9uYWxTZXQgPSBudWxscHRyKTsKLQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4gZ2V0KAotICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFBy
b3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAotICAgICAgICBib29s
IHZpYVByb3h5ID0gZmFsc2UsCi0gICAgICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQg
PSBudWxscHRyLAotICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyA9IG51bGxwdHIs
Ci0gICAgICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSA9IG51bGxwdHIsCi0gICAgICAgIERP
TUpJVDo6R2V0dGVyU2V0dGVyKiA9IG51bGxwdHIpOwotICAgIAotICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbWVnYW1vcnBoaWNMb2FkKFZNJiwgSlNDZWxsKiBvd25lcik7
Ci0gICAgCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXBsYWNlKFZN
JiwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwotCi0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiB0cmFuc2l0aW9uKAotICAgICAgICBWTSYs
IEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQsCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwotCi0gICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBzZXR0ZXIoCi0gICAgICAgIFZNJiwgSlNDZWxs
KiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQsCi0gICAgICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgUHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmMgPSBudWxscHRyLAotICAgICAgICBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UgPSBu
dWxscHRyKTsKLQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gaW4oCi0g
ICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgU3RydWN0dXJlKiwKLSAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQoKSk7Ci0KLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGdl
dExlbmd0aChWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUpOwotICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gZ2V0SW50cmluc2ljKFZNJiwgSlNDZWxsKiBvd25lciwg
SlNGdW5jdGlvbiogaW50cmluc2ljLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmKTsKLSAgICAKLSAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhWTSYsIEpTQ2VsbCogb3du
ZXIsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0KLSAgICB+QWNjZXNzQ2FzZSgpOwotICAgIAotICAg
IEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIFN0YXRlIHN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgYm9vbCB2aWFQcm94eSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT52aWFQcm94eSA6IGZhbHNlOyB9Ci0g
ICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYg
KG1fdHlwZSA9PSBUcmFuc2l0aW9uKQotICAgICAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLT5w
cmV2aW91c0lEKCk7Ci0gICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS5nZXQoKTsKLSAgICB9Ci0g
ICAgYm9vbCBndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpIGNvbnN0OwotCi0gICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBU
cmFuc2l0aW9uKTsKLSAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOwotICAgIH0KLSAg
ICAKLSAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQoKSBjb25zdCB7
IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQotICAgIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0
aW9uKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh0eXBlKCkgPT0gSW50cmluc2ljR2V0
dGVyICYmIG1fcmFyZURhdGEpOwotICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+aW50cmluc2lj
RnVuY3Rpb24uZ2V0KCk7Ci0gICAgfQotICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGludHJpbnNpY0Z1bmN0aW9uKCktPmludHJpbnNpYygpOwot
ICAgIH0KLQotICAgIERPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fcmFyZURhdGEpOwotICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+
ZG9tSklUOwotICAgIH0KLQotICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5hZGRpdGlv
bmFsU2V0LmdldCgpIDogbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBKU09iamVjdCogY3VzdG9tU2xv
dEJhc2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVE
YXRhLT5jdXN0b21TbG90QmFzZS5nZXQoKSA6IG51bGxwdHI7Ci0gICAgfQotCi0gICAgSlNPYmpl
Y3QqIGFsdGVybmF0ZUJhc2UoKSBjb25zdDsKLQotICAgIC8vIElmIHlvdSBzdXBwbHkgdGhlIG9w
dGlvbmFsIHZlY3RvciwgdGhpcyB3aWxsIGFwcGVuZCB0aGUgc2V0IG9mIGNlbGxzIHRoYXQgdGhp
cyB3aWxsIG5lZWQgdG8ga2VlcCBhbGl2ZQotICAgIC8vIHBhc3QgdGhlIGNhbGwuCi0gICAgYm9v
bCBkb2VzQ2FsbHMoVmVjdG9yPEpTQ2VsbCo+KiBjZWxsc1RvTWFyayA9IG51bGxwdHIpIGNvbnN0
OwotCi0gICAgYm9vbCBpc0dldHRlcigpIGNvbnN0Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHR5
cGUoKSkgewotICAgICAgICBjYXNlIEdldHRlcjoKLSAgICAgICAgY2FzZSBDdXN0b21WYWx1ZUdl
dHRlcjoKLSAgICAgICAgY2FzZSBDdXN0b21BY2Nlc3NvckdldHRlcjoKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhpcyBjYW4gcmV0dXJuIG51bGwgZXZlbiBmb3Ig
YSBnZXR0ZXIvc2V0dGVyLCBpZiBpdCBoYXNuJ3QgYmVlbiBnZW5lcmF0ZWQgeWV0LiBUaGF0J3MK
LSAgICAvLyBhY3R1YWxseSBzb21ld2hhdCBsaWtlbHkgYmVjYXVzZSBvZiBob3cgd2UgZG8gYnVm
ZmVyaW5nIG9mIG5ldyBjYXNlcy4KLSAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbygpIGNv
bnN0Ci0gICAgewotICAgICAgICBpZiAoIW1fcmFyZURhdGEpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby5nZXQoKTsK
LSAgICB9Ci0gICAgCi0gICAgLy8gSXMgaXQgc3RpbGwgcG9zc2libGUgZm9yIHRoaXMgY2FzZSB0
byBldmVyIGJlIHRha2VuPyAgTXVzdCBjYWxsIHRoaXMgYXMgYSBwcmVyZXF1aXNpdGUgZm9yCi0g
ICAgLy8gY2FsbGluZyBnZW5lcmF0ZSgpIGFuZCBmcmllbmRzLiAgSWYgdGhpcyByZXR1cm5zIHRy
dWUsIHRoZW4geW91IGNhbiBjYWxsIGdlbmVyYXRlKCkuICBJZgotICAgIC8vIHRoaXMgcmV0dXJu
cyBmYWxzZSwgdGhlbiBnZW5lcmF0ZSgpIHdpbGwgY3Jhc2guICBZb3UgbXVzdCBjYWxsIGdlbmVy
YXRlKCkgaW4gdGhlIHNhbWUgZXBvY2gKLSAgICAvLyBhcyB3aGVuIHlvdSBjYWxsZWQgY291bGRT
dGlsbFN1Y2NlZWQoKS4KLSAgICBib29sIGNvdWxkU3RpbGxTdWNjZWVkKCkgY29uc3Q7Ci0gICAg
Ci0gICAgc3RhdGljIGJvb2wgY2FuRW1pdEludHJpbnNpY0dldHRlcihKU0Z1bmN0aW9uKiwgU3Ry
dWN0dXJlKik7Ci0KLSAgICBib29sIGNhbkJlUmVwbGFjZWRCeU1lZ2Ftb3JwaGljTG9hZCgpIGNv
bnN0OwotCi0gICAgLy8gSWYgdGhpcyBtZXRob2QgcmV0dXJucyB0cnVlLCB0aGVuIGl0J3MgYSBn
b29kIGlkZWEgdG8gcmVtb3ZlICdvdGhlcicgZnJvbSB0aGUgYWNjZXNzIG9uY2UgJ3RoaXMnCi0g
ICAgLy8gaXMgYWRkZWQuIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCBpbiBjYXNlIG9mIGNvbnRy
YWRpY3Rpb25zLCAndGhpcycgcmVwcmVzZW50cyBhIG5ld2VyLCBhbmQgc28KLSAgICAvLyBtb3Jl
IHVzZWZ1bCwgdHJ1dGguIFRoaXMgbWV0aG9kIGNhbiBiZSBjb25zZXJ2YXRpdmU7IGl0IHdpbGwg
cmV0dXJuIGZhbHNlIHdoZW4gaXQgZG91YnQuCi0gICAgYm9vbCBjYW5SZXBsYWNlKGNvbnN0IEFj
Y2Vzc0Nhc2UmIG90aGVyKSBjb25zdDsKLQotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAg
ICBmcmllbmQgY2xhc3MgUG9seW1vcnBoaWNBY2Nlc3M7Ci0KLSAgICBBY2Nlc3NDYXNlKCk7Ci0K
LSAgICBib29sIHZpc2l0V2VhayhWTSYpIGNvbnN0OwotICAgIGJvb2wgcHJvcGFnYXRlVHJhbnNp
dGlvbnMoU2xvdFZpc2l0b3ImKSBjb25zdDsKLSAgICAKLSAgICAvLyBGSVhNRTogVGhpcyBvbmx5
IGV4aXN0cyBiZWNhdXNlIG9mIGhvdyBBY2Nlc3NDYXNlIHB1dHMgcG9zdC1nZW5lcmF0aW9uIHRo
aW5ncyBpbnRvIGl0c2VsZi4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU2NDU2Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGNsb25lKCkg
Y29uc3Q7Ci0gICAgCi0gICAgLy8gUGVyZm9ybSBhbnkgYWN0aW9uIHRoYXQgbXVzdCBiZSBwZXJm
b3JtZWQgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIGVwb2NoIGluIHdoaWNoIHRoZSBjYXNlCi0gICAg
Ly8gd2FzIGNyZWF0ZWQuIFJldHVybnMgYSBzZXQgb2Ygd2F0Y2hwb2ludCBzZXRzIHRoYXQgd2ls
bCBuZWVkIHRvIGJlIHdhdGNoZWQuCi0gICAgVmVjdG9yPFdhdGNocG9pbnRTZXQqLCAyPiBjb21t
aXQoVk0mLCBjb25zdCBJZGVudGlmaWVyJik7Ci0KLSAgICAvLyBGYWxsIHRocm91Z2ggb24gc3Vj
Y2Vzcy4gVHdvIGtpbmRzIG9mIGZhaWx1cmVzIGFyZSBzdXBwb3J0ZWQ6IGZhbGwtdGhyb3VnaCwg
d2hpY2ggbWVhbnMgdGhhdCB3ZQotICAgIC8vIHNob3VsZCB0cnkgYSBkaWZmZXJlbnQgY2FzZTsg
YW5kIGZhaWx1cmUsIHdoaWNoIG1lYW5zIHRoYXQgdGhpcyB3YXMgdGhlIHJpZ2h0IGNhc2UgYnV0
IGl0IG5lZWRzCi0gICAgLy8gaGVscCBmcm9tIHRoZSBzbG93IHBhdGguCi0gICAgdm9pZCBnZW5l
cmF0ZVdpdGhHdWFyZChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QmIGZhbGxUaHJvdWdoKTsKLQotICAgIC8vIEZhbGwgdGhyb3VnaCBvbiBzdWNjZXNzLCBh
ZGQgYSBqdW1wIHRvIHRoZSBmYWlsdXJlIGxpc3Qgb24gZmFpbHVyZS4KLSAgICB2b2lkIGdlbmVy
YXRlKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYpOwotICAgIAotICAgIHZvaWQgZ2VuZXJhdGVJbXBs
KEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYpOwotICAgIHZvaWQgZW1pdEludHJpbnNpY0dldHRlcihB
Y2Nlc3NHZW5lcmF0aW9uU3RhdGUmKTsKLSAgICB2b2lkIGVtaXRET01KSVRHZXR0ZXIoQWNjZXNz
R2VuZXJhdGlvblN0YXRlJiwgR1BSUmVnIGJhc2VGb3JHZXRHUFIpOwotICAgIAotICAgIEFjY2Vz
c1R5cGUgbV90eXBlIHsgTG9hZCB9OwotICAgIFN0YXRlIG1fc3RhdGUgeyBQcmltb3JkaWFsIH07
Ci0gICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQgeyBpbnZhbGlkT2Zmc2V0IH07Ci0KLSAgICAv
LyBVc3VhbGx5IHRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IHdlIGV4cGVjdCB0aGUgYmFzZSBv
YmplY3QgdG8gaGF2ZS4gQnV0LCB0aGlzIGlzIHRoZSAqbmV3KgotICAgIC8vIHN0cnVjdHVyZSBm
b3IgYSB0cmFuc2l0aW9uIGFuZCB3ZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgaXQgaGFzIGEgc3Ry
b25nIHJlZmVyZW5jZSB0byB0aGUgb2xkCi0gICAgLy8gc3RydWN0dXJlLiBGb3IgcHJveGllcywg
dGhpcyBpcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBvYmplY3QgYmVoaW5kIHRoZSBwcm94eS4KLSAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKLQotICAgIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwotCi0gICAgY2xhc3MgUmFyZURhdGEgewot
ICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFJh
cmVEYXRhKCkKLSAgICAgICAgICAgIDogdmlhUHJveHkoZmFsc2UpCi0gICAgICAgICAgICAsIGRv
bUpJVChudWxscHRyKQotICAgICAgICB7Ci0gICAgICAgICAgICBjdXN0b21BY2Nlc3Nvci5vcGFx
dWUgPSBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sIHZpYVByb3h5
OwotICAgICAgICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gYWRkaXRpb25hbFNldDsKLSAgICAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGxpdmUgaW4gdGhlIHN0dWIgcm91dGluZSBv
YmplY3QuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTY0NTYKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rSW5mbz4gY2FsbExpbmtJ
bmZvOwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYyBnZXR0ZXI7Ci0gICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBz
ZXR0ZXI7Ci0gICAgICAgICAgICB2b2lkKiBvcGFxdWU7Ci0gICAgICAgIH0gY3VzdG9tQWNjZXNz
b3I7Ci0gICAgICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gY3VzdG9tU2xvdEJhc2U7Ci0gICAg
ICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBpbnRyaW5zaWNGdW5jdGlvbjsKLSAgICAgICAg
RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVDsKLSAgICB9OwotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFJhcmVEYXRhPiBtX3JhcmVEYXRhOwotfTsKLQogY2xhc3MgQWNjZXNzR2VuZXJhdGlvblJl
c3VsdCB7CiBwdWJsaWM6CiAgICAgZW51bSBLaW5kIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qcm94eWFibGVBY2Nlc3NDYXNlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3OGJl
MjIyODU3OTMwYTQ1NzI3YjRhZTQ3NGQ5MmQxYTk2OTVjYTAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5oCkBAIC0w
LDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJBY2Nlc3NDYXNl
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBQcm94eWFibGVBY2Nlc3NDYXNlIDogcHVi
bGljIEFjY2Vzc0Nhc2UgeworcHVibGljOgorICAgIHR5cGVkZWYgQWNjZXNzQ2FzZSBCYXNlOwor
CisgICAgYm9vbCB2aWFQcm94eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdmlhUHJveHk7
IH0KKyAgICBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9hZGRpdGlvbmFsU2V0LmdldCgpOyB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IGNyZWF0ZShWTSYsIEpTQ2VsbCosIEFjY2Vzc1R5cGUsIFByb3BlcnR5
T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAorICAgICAgICBib29sIHZpYVByb3h5ID0gZmFs
c2UsIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQgPSBudWxscHRyKTsKKworICAgIHZvaWQg
ZHVtcEltcGwoUHJpbnRTdHJlYW0mLCBDb21tYVByaW50ZXImKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIH5Qcm94eWFibGVBY2Nlc3NDYXNlKCk7CisKK3Byb3RlY3RlZDoKKyAgICBQcm94eWFibGVB
Y2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVj
dHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgYm9vbCB2aWFQcm94eSwg
V2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX3Zp
YVByb3h5OworICAgIFJlZlB0cjxXYXRjaHBvaW50U2V0PiBtX2FkZGl0aW9uYWxTZXQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKaW5kZXggZmMwYTQ3
MmRiMmJlNTA4OTU5NTA0Y2NiODE2ZGU2Y2JkNWY1MTg0MS4uZmRhZGY3MDIyYWQzZGNlMzVhNjNj
NzkxZjY5MjczMjAxYTU1MzQ3NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkU3RhdHVzLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgorI2luY2x1ZGUgIkdldHRl
clNldHRlckFjY2Vzc0Nhc2UuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJM
b3dMZXZlbEludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtMjI3LDcg
KzIyOCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZv
KAogICAgICAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewog
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxM
aW5rU3RhdHVzID0KICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8Q2Fs
bExpbmtTdGF0dXM+KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbyA9IGFjY2Vzcy5jYWxsTGlua0luZm8oKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBhY2Nlc3MuYXM8R2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
KmNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBj
YWxsRXhpdFNpdGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXggMzhl
NWNlZjkyMzdhMDg2YjZiNDYxZmZkZjM5ZjlhZDQ0Y2VlN2I2NS4uNzBiNzY3YzU3NzM4NTlkYWMy
MDM4YzQ5MTU5YWEwNTM4ZGUyODFmMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCkBAIC0yMTYsOCArMjE2LDggQEAgdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgfQog
CiAgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQdXJl
OgotICAgICAgICByZXNldEdldEJ5SUQoY29kZUJsb2NrLCAqdGhpcywgR2V0QnlJREtpbmQ6OlB1
cmUpOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0OgorICAgICAgICByZXNldEdldEJ5SUQo
Y29kZUJsb2NrLCAqdGhpcywgR2V0QnlJREtpbmQ6OlRyeSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQWNjZXNzVHlwZTo6R2V0OgogICAgICAgICByZXNldEdldEJ5SUQoY29kZUJsb2NrLCAq
dGhpcywgR2V0QnlJREtpbmQ6Ok5vcm1hbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCmluZGV4IDM5YjcyMWYxNGIwZTA3NDQzYzBj
ZTIwNmJmYjgxNzcxODlhMzYwNjQuLmIwOTFlMjE1N2E2NDMxMjZjYWIwZjdkZWM0ZWM4OTFmNjBl
YzE3MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIFBvbHltb3JwaGljQWNjZXNzOwog
CiBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3QgewogICAgIEdldCwKLSAgICBHZXRQdXJl
LAorICAgIFRyeUdldCwKICAgICBQdXQsCiAgICAgSW4KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDc2NWMzYjQ4OGRjMjI3NDEy
YjUzMTJhMDUzNWZlYjZjMTI3ZDZhMjMuLjg4MmM5ZTAxZmU0N2E5NzU2NGY4NDE5NDQ5ZjQ0MDhj
Yjg4NzRiZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCkBAIC00NTMxLDcgKzQ1MzEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jaywgbV9kZmdDb2RlQmxvY2ssCiAgICAgICAgICAgICAgICAgbV9pbmxp
bmVTdGFja1RvcC0+bV9zdHViSW5mb3MsIG1fZGZnU3R1YkluZm9zLAogICAgICAgICAgICAgICAg
IGN1cnJlbnRDb2RlT3JpZ2luKCksIHVpZCk7Ci0gICAgICAgICAgICBBY2Nlc3NUeXBlIHR5cGUg
PSBvcF90cnlfZ2V0X2J5X2lkID09IG9wY29kZUlEID8gQWNjZXNzVHlwZTo6R2V0UHVyZSA6IEFj
Y2Vzc1R5cGU6OkdldDsKKyAgICAgICAgICAgIEFjY2Vzc1R5cGUgdHlwZSA9IG9wX3RyeV9nZXRf
YnlfaWQgPT0gb3Bjb2RlSUQgPyBBY2Nlc3NUeXBlOjpUcnlHZXQgOiBBY2Nlc3NUeXBlOjpHZXQ7
CiAKICAgICAgICAgICAgIHVuc2lnbmVkIG9wY29kZUxlbmd0aCA9IG9wY29kZUlEID09IG9wX3Ry
eV9nZXRfYnlfaWQgPyBPUENPREVfTEVOR1RIKG9wX3RyeV9nZXRfYnlfaWQpIDogT1BDT0RFX0xF
TkdUSChvcF9nZXRfYnlfaWQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDBkOGE0ZjA2ZGQwYzA0ZDdjZmY2NWQ5NTE0ZGVkOWM1
Y2I0OWZmNTYuLjA5MjE5ZDFkN2JhOWJjZGJlNTM3MTBhMTM0MjYyYjY4NThmNzM5OGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0x
MDA2LDcgKzEwMDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVHJ5R2V0QnlJZChO
b2RlKiBub2RlKQogCiAgICAgICAgIGJhc2UudXNlKCk7CiAKLSAgICAgICAgY2FjaGVkR2V0QnlJ
ZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGJhc2VSZWdzLCByZXN1bHRSZWdzLCBub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCksIEpJVENvbXBpbGVyOjpKdW1wKCksIE5lZWRUb1NwaWxsLCBBY2Nlc3NU
eXBlOjpHZXRQdXJlKTsKKyAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLT5vcmlnaW4uc2VtYW50
aWMsIGJhc2VSZWdzLCByZXN1bHRSZWdzLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIEpJVENv
bXBpbGVyOjpKdW1wKCksIE5lZWRUb1NwaWxsLCBBY2Nlc3NUeXBlOjpUcnlHZXQpOwogCiAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSwgRGF0YUZvcm1hdEpTLCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICBicmVhazsKQEAgLTEwMjMsNyArMTAyMyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUcnlHZXRCeUlkKE5vZGUqIG5vZGUpCiAK
ICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2Vs
bChiYXNlUmVncyk7CiAKLSAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLT5vcmlnaW4uc2VtYW50
aWMsIGJhc2VSZWdzLCByZXN1bHRSZWdzLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENl
bGwsIE5lZWRUb1NwaWxsLCBBY2Nlc3NUeXBlOjpHZXRQdXJlKTsKKyAgICAgICAgY2FjaGVkR2V0
QnlJZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGJhc2VSZWdzLCByZXN1bHRSZWdzLCBub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGwsIE5lZWRUb1NwaWxsLCBBY2Nlc3NUeXBlOjpUcnlH
ZXQpOwogCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSwgRGF0YUZvcm1h
dEpTLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgICAgICBicmVhazsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCA4ZjAwZjFj
Y2NmNGM0ZDNiMTdjYTFjZTMwNWQ1NWFmMDI0OWIxOTZjLi42NDIwZTY3ZGUyN2RjZjc3Y2E5YmYx
ZTljZmVmOGJiNWZhZTA1YjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCkBAIC02MjYsNyArNjI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGNvbXBpbGVQdXRTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFRyeUdldEJ5SWQ6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlJZChBY2Nlc3NUeXBlOjpHZXRQ
dXJlKTsKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeUlkKEFjY2Vzc1R5cGU6OlRyeUdldCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAgICBjYXNlIEdl
dEJ5SWRGbHVzaDoKQEAgLTI4MTQsNyArMjgxNCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlR2V0QnlJZChBY2Nlc3NUeXBlIHR5cGUpCiAgICAgewotICAgICAgICBBU1NFUlQo
dHlwZSA9PSBBY2Nlc3NUeXBlOjpHZXQgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpHZXRQdXJlKTsK
KyAgICAgICAgQVNTRVJUKHR5cGUgPT0gQWNjZXNzVHlwZTo6R2V0IHx8IHR5cGUgPT0gQWNjZXNz
VHlwZTo6VHJ5R2V0KTsKICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSkgewogICAgICAgICBjYXNlIENlbGxVc2U6IHsKICAgICAgICAgICAgIHNldEpTVmFsdWUoZ2V0
QnlJZChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCB0eXBlKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0ludHJpbnNpY0VtaXR0ZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9JbnRyaW5zaWNFbWl0dGVyLmNwcAppbmRleCBjODJiOGEzZGIyZjJiNjhj
Mzc0M2I5NTQ3ZmE1Y2Q3M2QzMDhjOWQ4Li40ZmI3YTU5MDlkZGQ1YWZjMmM1NDFkMmEzYjJlYmFh
MmNkNzc3NDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ludHJpbnNp
Y0VtaXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSW50cmluc2ljRW1p
dHRlci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNp
bmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJJ
bnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcu
aCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGlu
ZXMuaCIKQEAgLTQ4LDcgKzQ5LDcgQEAgdHlwZWRlZiBDQ2FsbEhlbHBlcnM6OkltbVB0ciBJbW1Q
dHI7CiB0eXBlZGVmIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0IFRydXN0ZWRJbW02NDsKIHR5
cGVkZWYgQ0NhbGxIZWxwZXJzOjpJbW02NCBJbW02NDsKIAotYm9vbCBBY2Nlc3NDYXNlOjpjYW5F
bWl0SW50cmluc2ljR2V0dGVyKEpTRnVuY3Rpb24qIGdldHRlciwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCitib29sIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OmNhbkVtaXRJbnRyaW5zaWNHZXR0
ZXIoSlNGdW5jdGlvbiogZ2V0dGVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKIAogICAgIHN3
aXRjaCAoZ2V0dGVyLT5pbnRyaW5zaWMoKSkgewpAQCAtNjgsNyArNjksNyBAQCBib29sIEFjY2Vz
c0Nhc2U6OmNhbkVtaXRJbnRyaW5zaWNHZXR0ZXIoSlNGdW5jdGlvbiogZ2V0dGVyLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZv
aWQgQWNjZXNzQ2FzZTo6ZW1pdEludHJpbnNpY0dldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUm
IHN0YXRlKQordm9pZCBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjplbWl0SW50cmluc2ljR2V0
dGVyKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiB7CiAgICAgQ0NhbGxIZWxwZXJzJiBq
aXQgPSAqc3RhdGUuaml0OwogICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHN0YXRlLnZhbHVl
UmVnczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4
IGE5YjI0ZTgxMTc4ZWZmY2RjMWI4M2Q0YjAxYzZlODM5OWY3NWFlNTguLmExZDRlNzM1MWIyNjIy
ZmZkMDBjMWRkY2E0NjQwNmUyOGE0YTA2ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcApAQCAtMjExLDcgKzIxMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAKICAgICBpZiAoc3R1YkluZm8tPmNvbnNpZGVyQ2FjaGluZyhleGVjLT5jb2RlQmxvY2soKSwg
YmFzZVZhbHVlLnN0cnVjdHVyZU9yTnVsbCgpKSAmJiAhc2xvdC5pc1RhaW50ZWRCeU9wYXF1ZU9i
amVjdCgpICYmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSB8fCBzbG90LmlzQ2FjaGVhYmxlR2V0
dGVyKCkgfHwgc2xvdC5pc1Vuc2V0KCkpKQotICAgICAgICByZXBhdGNoR2V0QnlJRChleGVjLCBi
YXNlVmFsdWUsIGlkZW50LCBzbG90LCAqc3R1YkluZm8sIEdldEJ5SURLaW5kOjpQdXJlKTsKKyAg
ICAgICAgcmVwYXRjaEdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xvdCwgKnN0dWJJ
bmZvLCBHZXRCeUlES2luZDo6VHJ5KTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2xv
dC5nZXRQdXJlUmVzdWx0KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCA4ZGNmNDljZTAxMTJiZDQ3MDA4Mjg0Y2MyZTBiMTgy
NTBlNzY2MThmLi5iZmY1MzYwOGQ3YTU0MGM5NDg2MTM2YWU4M2Q1ZThjMGNmYTE3NWRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAt
NTc5LDcgKzU3OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAog
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0UHVyZSk7CisgICAgICAgIGlkZW50LT5p
bXBsKCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBl
OjpUcnlHZXQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAppbmRleCA1ZjE0ZTkwNmJjYzExOWE5OGI0ZjFlYzE0ZjYwNWY4MzllYjljNzRjLi5iYzM0
YjMwMDA3ZTNmM2JjMTM4ZWU3NTBmNzA1MjRhOTEyYzBmN2NlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKQEAgLTU5NCw3
ICs1OTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5k
ZXgoY3VycmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHko
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRQdXJlKTsK
KyAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQWNjZXNzVHlwZTo6VHJ5R2V0KTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAKaW5kZXggMjhlZjdjNjU2YmE3ODNhODQwMDgxZDY2ZTgxZTNmOTJlODAyOGM1
My4uZDJmYjYwNDNiNzlmNWNkYzFiMWNkOGU3YjhlNTMwZTk5MTA0N2EyYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCkBAIC0zOSw4ICszOSwxMCBAQAogI2luY2x1ZGUgIkZ1
bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCiAj
aW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2Fz
ZS5oIgogI2luY2x1ZGUgIklDU3RhdHMuaCIKICNpbmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIKKyNp
bmNsdWRlICJJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgiCiAjaW5jbHVkZSAiSklULmgiCiAj
aW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKQEAgLTE3Niwx
OCArMTc4LDE4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0TGVu
Z3RoKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoKTsKKyAgICAgICAgICAg
IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6
QXJyYXlMZW5ndGgpOwogICAgICAgICB9IGVsc2UgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSkK
LSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRMZW5ndGgodm0sIGNvZGVCbG9j
aywgQWNjZXNzQ2FzZTo6U3RyaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nl
c3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U3RyaW5nTGVuZ3RoKTsK
ICAgICAgICAgZWxzZSBpZiAoRGlyZWN0QXJndW1lbnRzKiBhcmd1bWVudHMgPSBqc0R5bmFtaWND
YXN0PERpcmVjdEFyZ3VtZW50cyo+KHZtLCBiYXNlVmFsdWUpKSB7CiAgICAgICAgICAgICAvLyBJ
ZiB0aGVyZSB3ZXJlIG92ZXJyaWRlcywgdGhlbiB3ZSBjYW4gaGFuZGxlIHRoaXMgYXMgYSBub3Jt
YWwgcHJvcGVydHkgbG9hZCEgR3VhcmRpbmcKICAgICAgICAgICAgIC8vIHRoaXMgd2l0aCBzdWNo
IGEgY2hlY2sgZW5hYmxlcyB1cyB0byBhZGQgYW4gSUMgY2FzZSBmb3IgdGhhdCBsb2FkIGlmIG5l
ZWRlZC4KICAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5vdmVycm9kZVRoaW5ncygpKQotICAg
ICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRMZW5ndGgodm0sIGNvZGVCbG9j
aywgQWNjZXNzQ2FzZTo6RGlyZWN0QXJndW1lbnRzTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBu
ZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkRp
cmVjdEFyZ3VtZW50c0xlbmd0aCk7CiAgICAgICAgIH0gZWxzZSBpZiAoU2NvcGVkQXJndW1lbnRz
KiBhcmd1bWVudHMgPSBqc0R5bmFtaWNDYXN0PFNjb3BlZEFyZ3VtZW50cyo+KHZtLCBiYXNlVmFs
dWUpKSB7CiAgICAgICAgICAgICAvLyBEaXR0by4KICAgICAgICAgICAgIGlmICghYXJndW1lbnRz
LT5vdmVycm9kZVRoaW5ncygpKQotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNl
OjpnZXRMZW5ndGgodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2NvcGVkQXJndW1lbnRzTGVu
Z3RoKTsKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBj
b2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlNjb3BlZEFyZ3VtZW50c0xlbmd0aCk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCkBAIC0yNjcsNyArMjY5LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb24K
ICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiBzbG90LmRvbUpJVCgpKQog
ICAgICAgICAgICAgZG9tSklUID0gc2xvdC5kb21KSVQoKTsKIAotICAgICAgICBpZiAoa2luZCA9
PSBHZXRCeUlES2luZDo6UHVyZSkgeworICAgICAgICBpZiAoa2luZCA9PSBHZXRCeUlES2luZDo6
VHJ5KSB7CiAgICAgICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7CiAgICAgICAg
ICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCiAgICAgICAgICAgICAgICAgdHlwZSA9
IEFjY2Vzc0Nhc2U6OkxvYWQ7CkBAIC0yNzgsMjcgKzI4MCwyOCBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFs
dWUsIGNvbgogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAKLSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjp0cnlH
ZXQodm0sIGNvZGVCbG9jaywgdHlwZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwg
bG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCkpOwotICAgICAgICB9IGVs
c2UgaWYgKCFsb2FkVGFyZ2V0RnJvbVByb3h5ICYmIGdldHRlciAmJiBBY2Nlc3NDYXNlOjpjYW5F
bWl0SW50cmluc2ljR2V0dGVyKGdldHRlciwgc3RydWN0dXJlKSkKLSAgICAgICAgICAgIG5ld0Nh
c2UgPSBBY2Nlc3NDYXNlOjpnZXRJbnRyaW5zaWModm0sIGNvZGVCbG9jaywgZ2V0dGVyLCBzbG90
LmNhY2hlZE9mZnNldCgpLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCk7CisgICAgICAgICAgICBu
ZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHR5cGUs
IG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNs
b3Qud2F0Y2hwb2ludFNldCgpKTsKKyAgICAgICAgfSBlbHNlIGlmICghbG9hZFRhcmdldEZyb21Q
cm94eSAmJiBnZXR0ZXIgJiYgSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y2FuRW1pdEludHJp
bnNpY0dldHRlcihnZXR0ZXIsIHN0cnVjdHVyZSkpCisgICAgICAgICAgICBuZXdDYXNlID0gSW50
cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHNsb3QuY2FjaGVk
T2Zmc2V0KCksIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBnZXR0ZXIpOwogICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsKLSAgICAgICAgICAg
IGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAgICAgICAgICB0eXBlID0gQWNj
ZXNzQ2FzZTo6TG9hZDsKLSAgICAgICAgICAgIGVsc2UgaWYgKHNsb3QuaXNVbnNldCgpKQotICAg
ICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpNaXNzOwotICAgICAgICAgICAgZWxzZSBp
ZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQotICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nl
c3NDYXNlOjpHZXR0ZXI7Ci0gICAgICAgICAgICBlbHNlIGlmIChzbG90LmF0dHJpYnV0ZXMoKSAm
IEN1c3RvbUFjY2Vzc29yKQotICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpDdXN0
b21BY2Nlc3NvckdldHRlcjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0eXBl
ID0gQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVHZXR0ZXI7Ci0KLSAgICAgICAgICAgIG5ld0Nhc2Ug
PSBBY2Nlc3NDYXNlOjpnZXQoCi0gICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgdHlwZSwg
b2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwKLSAg
ICAgICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQoKSwgc2xvdC5pc0NhY2hlYWJsZUN1c3Rv
bSgpID8gc2xvdC5jdXN0b21HZXR0ZXIoKSA6IG51bGxwdHIsCi0gICAgICAgICAgICAgICAgc2xv
dC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gc2xvdC5zbG90QmFzZSgpIDogbnVsbHB0ciwKLSAgICAg
ICAgICAgICAgICBkb21KSVQpOworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1
ZSgpIHx8IHNsb3QuaXNVbnNldCgpKSB7CisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5
YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBzbG90LmlzVW5zZXQoKSA/IEFj
Y2Vzc0Nhc2U6Ok1pc3MgOiBBY2Nlc3NDYXNlOjpMb2FkLAorICAgICAgICAgICAgICAgICAgICBv
ZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90
LndhdGNocG9pbnRTZXQoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsKKyAgICAgICAgICAgICAgICBpZiAoc2xvdC5p
c0NhY2hlYWJsZUdldHRlcigpKQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2Fz
ZTo6R2V0dGVyOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNsb3QuYXR0cmlidXRlcygpICYg
Q3VzdG9tQWNjZXNzb3IpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpD
dXN0b21BY2Nlc3NvckdldHRlcjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1ZUdldHRlcjsKKworICAgICAgICAg
ICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCisgICAgICAg
ICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHR5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25k
aXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksCisgICAgICAgICAgICAgICAgICAgIHNsb3Qu
d2F0Y2hwb2ludFNldCgpLCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBzbG90LmN1c3RvbUdl
dHRlcigpIDogbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZUN1
c3RvbSgpID8gc2xvdC5zbG90QmFzZSgpIDogbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAg
ZG9tSklUKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMzg2LDcgKzM4
OSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RyCiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6cmVwbGFjZSh2bSwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAg
bmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpS
ZXBsYWNlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBzdHJ1Y3R1cmUpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgQVNTRVJUKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3
UHJvcGVydHkpOwogCkBAIC00MTksNyArNDIyLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHIK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKHZtLCBjb2Rl
QmxvY2ssIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNldCk7Cisg
ICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIG9m
ZnNldCwgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBzbG90LmlzQ2FjaGVh
YmxlU2V0dGVyKCkpIHsKICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewpA
QCAtNDMzLDcgKzQzNiw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5
SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RyCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6c2V0dGVyKAorICAgICAgICAgICAgbmV3Q2FzZSA9IEdl
dHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICB2bSwgY29kZUJs
b2NrLCBzbG90LmlzQ3VzdG9tQWNjZXNzb3IoKSA/IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29y
U2V0dGVyIDogQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0ZXIsIHN0cnVjdHVyZSwgaW52YWxp
ZE9mZnNldCwgY29uZGl0aW9uU2V0LAogICAgICAgICAgICAgICAgIHNsb3QuY3VzdG9tU2V0dGVy
KCksIHNsb3QuYmFzZSgpKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQ1MCw3ICs0NTMsNyBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBiYXNlVmFsdWUsIFN0cgogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAg
ICAgb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKIAotICAgICAgICAgICAgbmV3Q2FzZSA9
IEFjY2Vzc0Nhc2U6OnNldHRlcigKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlOjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNz
Q2FzZTo6U2V0dGVyLCBzdHJ1Y3R1cmUsIG9mZnNldCwgY29uZGl0aW9uU2V0KTsKICAgICAgICAg
fQogICAgIH0KQEAgLTUxMyw4ICs1MTYsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
UmVwYXRjaEluKAogCiAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkFkZEFjY2Vzc0Nhc2UsIHN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmluKAotICAgICAgICB2bSwgY29kZUJsb2NrLCB3
YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6OkluSGl0IDogQWNjZXNzQ2FzZTo6SW5NaXNzLCBzdHJ1Y3R1
cmUsIGNvbmRpdGlvblNldCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nh
c2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUoCisgICAgICAgIHZtLCBjb2RlQmxvY2ssIHdhc0ZvdW5k
ID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIGludmFsaWRPZmZzZXQs
IHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KTsKIAogICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQg
cmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShjb2RlQmxvY2ssIGlkZW50LCBXVEZNb3Zl
KG5ld0Nhc2UpKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKaW5kZXggZTE3
Njc2ODY5MTEyM2QyYWMxZTc2MDNmYmNlMTAzM2ZkZWZlOTA4Mi4uNTJhMDYwY2U0ZDVlNWY3MmMx
ODNiNWM3MGQxY2FmMWZmODUwNDVlNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgK
QEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGVudW0gY2xhc3MgR2V0QnlJREtp
bmQgewogICAgIE5vcm1hbCwKLSAgICBQdXJlCisgICAgVHJ5CiB9OwogCiB2b2lkIHJlcGF0Y2hH
ZXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEdldEJ5SURLaW5kKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAppbmRleCA1ODMxODg4MzQ1MzQwMjNlNzNkN2MwYmQz
MGUxYmI5NzE4OWQ5OWZlLi5iYmQ3MDk2MmFhZWI3OTQ1YTM3OTU4NmY3MTA0YWQ4N2JjNDdlNTQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCkBAIC0yMjgsNyArMjI4
LDYgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCBjbG9i
YmVyQWxsUmVnc0luRlRMSUNTbG93UGF0aCwgIUFTU0VSVF9ESVNBQkxFRCwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihib29sLCB1c2VBY2Nlc3NJbmxpbmluZywgdHJ1ZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdih1bnNpZ25lZCwgbWF4QWNjZXNzVmFyaWFudExpc3RTaXplLCA4LCBOb3Jt
YWwsIG51bGxwdHIpIFwKLSAgICB2KHVuc2lnbmVkLCBtZWdhbW9ycGhpY0xvYWRDb3N0LCA5OTks
IE5vcm1hbCwgbnVsbHB0cikgLyogVGhpcyB1c2VkIHRvIGJlIDEwLCBidXQgd2UncmUgdGVtcG9y
YXJpbHkgdGVzdGluZyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZC4g
Ki9cCiAgICAgdihib29sLCB1c2VQb2x5dmFyaWFudERldmlydHVhbGl6YXRpb24sIHRydWUsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlUG9seW1vcnBoaWNBY2Nlc3NJbmxpbmlu
ZywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB1c2VQb2x5bW9ycGhpY0Nh
bGxJbmxpbmluZywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301776</attachid>
            <date>2017-02-16 09:57:47 -0800</date>
            <delta_ts>2017-02-16 10:19:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168408-20170216095510.patch</filename>
            <type>text/plain</type>
            <size>190371</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyNDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
YTY4YjUyNDNkZjRlNzQwOTBhNmY0ZDE0ODM3MWEyOTlkYmQwYzA1Li44OGJlNjRkNWM5NDMwMjk5
ZWZiOTM0ODEyMTViZTUzMTFlOGM5YTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzYgQEAKKzIwMTctMDItMTYgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgQWNjZXNzQ2FzZSB0byBiZSBtb3JlIGxpa2UgQjNW
YWx1ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4
NDA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBtYWtlcyBBY2Nlc3NDYXNlIChhbmQgbmV3IHN1YmNsYXNzZXMpIG1vcmUgbGlrZSBC
M1ZhbHVlLiBJbiB0aGUgbmV3IHN5c3RlbSBlYWNoCisgICAgICAgIHR5cGUgaGFzIGFuIGFzc29j
aWF0ZWQgQWNjZXNzQ2FzZSBzdWJjbGFzcy4gRm9yIGluc3RhbmNlIGFueSBnZXR0ZXIgc2hvdWxk
IHVzZSB0aGUKKyAgICAgICAgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSBzdWJjbGFzcy4gVGhlIG5l
dyBzeXN0ZW0gaXMgZWFzaWVyIHRvIGZvbGxvdyBzaW5jZSB5b3Ugbm8gbG9uZ2VyIG5lZWQKKyAg
ICAgICAgdG8ga25vdyBleGFjdGx5IHdoaWNoIG1lbWJlcnMgYXJlIHVzZWQgYnkgd2hpY2ggdHlw
ZXMuIFRoZSBzdWJjbGFzcyB0byBBY2Nlc3NUeXBlIG1hcHBpbmcgaXM6CisKKyAgICAgICAgR2V0
dGVyU2V0dGVyQWNjZXNzQ2FzZToKKyAgICAgICAgICAgIEdldHRlcgorICAgICAgICAgICAgQ3Vz
dG9tQWNjZXNzb3JHZXR0ZXIKKyAgICAgICAgICAgIEN1c3RvbVZhbHVlR2V0dGVyCisgICAgICAg
ICAgICBTZXR0ZXIKKworICAgICAgICBQcm94eWFibGVBY2Nlc3NDYXNlOgorICAgICAgICAgICAg
TG9hZAorICAgICAgICAgICAgTWlzcworICAgICAgICAgICAgR2V0R2V0dGVyCisKKyAgICAgICAg
SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZToKKyAgICAgICAgICAgIEludHJpbnNpY0dldHRlcgor
CisgICAgICAgIEFjY2Vzc0Nhc2U6CisgICAgICAgICAgICBFdmVyeXRoaW5nIGVsc2UKKworICAg
ICAgICBJdCBhbHNvIGhhcyB0aGUgYWRkaXRpb25hbCBhZHZhbnRhZ2UgdGhhdCBpdCB1c2VzIGxl
c3MgbWVtb3J5IGZvciB0aGUgY2FzZXMgd2hlcmUgd2Ugd291bGQgaGF2ZSBuZWVkZWQKKyAgICAg
ICAgcmFyZSBkYXRhIGluIHRoZSBwYXN0IGJ1dCB0aGF0IGNhc2Ugd291bGQgb25seSB1c2UgYSBz
bWFsbCBiaXQgb2YgaXQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMgbWVnYW1v
cnBoaWMgbG9hZHMgYW5kIHJlbmFtZXMgc29tZSBUcnlHZXRCeUlkIHJlbGF0ZWQgZW51bSB2YWx1
ZXMgZnJvbSBQdXJlIHRvIFRyeS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNl
OjpBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6QWNjZXNzQ2FzZTo6fkFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpj
bG9uZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNvbW1pdCk6CisgICAgICAgIChKU0M6
OkFjY2Vzc0Nhc2U6Omd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZG9lc0NhbGxzKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y291bGRTdGls
bFN1Y2NlZWQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjYW5SZXBsYWNlKToKKyAgICAg
ICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnZp
c2l0V2Vhayk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQpOgorICAgICAg
ICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6YXMpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNl
OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp0eXBlKToKKyAgICAgICAgKEpT
Qzo6QWNjZXNzQ2FzZTo6c3RhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpvZmZzZXQp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpzdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjb25k
aXRpb25TZXQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjphbHRlcm5hdGVCYXNlKToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6YWRkaXRpb25hbFNldCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OnZpYVByb3h5KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6aXNHZXR0ZXIp
OgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppc0FjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXNldFN0
YXRlKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJh
Y2spOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6R2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZSk6CisgICAgICAgIChKU0M6OkdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSk6
CisgICAgICAgIChKU0M6OkdldHRlclNldHRlckFjY2Vzc0Nhc2U6On5HZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlKToKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y2xvbmUpOgor
ICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjphbHRlcm5hdGVCYXNlKToKKyAg
ICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZHVtcEltcGwpOgorICAgICAgICAo
SlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0dGVyKToKKyAgICAgICAg
KiBieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjYWxsTGlua0luZm8pOgorICAgICAgICAoSlNDOjpH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjdXN0b21TbG90QmFzZSk6CisgICAgICAgIChKU0M6Okdl
dHRlclNldHRlckFjY2Vzc0Nhc2U6OmRvbUpJVCk6CisgICAgICAgICogYnl0ZWNvZGUvSW50cmlu
c2ljR2V0dGVyQWNjZXNzQ2FzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpJbnRyaW5zaWNH
ZXR0ZXJBY2Nlc3NDYXNlOjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpT
Qzo6SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SW50
cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6fkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UpOgorICAg
ICAgICAoSlNDOjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjbG9uZSk6CisgICAgICAgICog
Ynl0ZWNvZGUvSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6aW50cmluc2ljRnVuY3Rpb24pOgorICAgICAg
ICAoSlNDOjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjppbnRyaW5zaWMpOgorICAgICAgICAq
IGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6UG9seW1vcnBo
aWNBY2Nlc3M6OnJlZ2VuZXJhdGUpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6QWNjZXNzQ2FzZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6OnRyeUdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nh
c2U6OmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om1lZ2Ftb3JwaGlj
TG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnJlcGxhY2UpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6c2V0dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6aW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZXRM
ZW5ndGgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZXRJbnRyaW5zaWMp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp+QWNjZXNzQ2FzZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNsb25lKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y29tbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpBY2Nlc3NDYXNlOjphbHRlcm5hdGVCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZG9lc0NhbGxzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6
Y291bGRTdGlsbFN1Y2NlZWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpj
YW5CZVJlcGxhY2VkQnlNZWdhbW9ycGhpY0xvYWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjpjYW5SZXBsYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2Fz
ZTo6ZHVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnZpc2l0V2Vhayk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmVtaXRET01KSVRHZXR0ZXIpOiBEZWxldGVkLgorICAgICAg
ICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmg6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nh
c2U6OnR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpzdGF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om9mZnNldCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnZpYVByb3h5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6c3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2Fz
ZTo6bmV3U3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y29u
ZGl0aW9uU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6aW50cmluc2lj
RnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppbnRyaW5zaWMp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpkb21KSVQpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjphZGRpdGlvbmFsU2V0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y3VzdG9tU2xvdEJhc2UpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpBY2Nlc3NDYXNlOjppc0dldHRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNhbGxMaW5rSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OlJhcmVEYXRhOjpSYXJlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUHJveHlh
YmxlQWNjZXNzQ2FzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpQcm94eWFibGVBY2Nlc3ND
YXNlOjpQcm94eWFibGVBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6UHJveHlhYmxlQWNjZXNz
Q2FzZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6UHJveHlhYmxlQWNjZXNzQ2FzZTo6flByb3h5
YWJsZUFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpQcm94eWFibGVBY2Nlc3NDYXNlOjpjbG9u
ZSk6CisgICAgICAgIChKU0M6OlByb3h5YWJsZUFjY2Vzc0Nhc2U6OmR1bXBJbXBsKToKKyAgICAg
ICAgKiBieXRlY29kZS9Qcm94eWFibGVBY2Nlc3NDYXNlLmg6IEFkZGVkLgorICAgICAgICAqIGJ5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJlc2V0KToKKyAgICAgICAg
KiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2spOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUcnlHZXRCeUlkKToKKyAgICAgICAgKiBmdGwv
RlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlR2V0QnlJZCk6CisgICAgICAgICogaml0L0ludHJpbnNpY0VtaXR0ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjYW5FbWl0SW50cmluc2ljR2V0
dGVyKToKKyAgICAgICAgKEpTQzo6SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdEludHJp
bnNpY0dldHRlcik6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNhbkVtaXRJbnRyaW5zaWNH
ZXR0ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjplbWl0SW50cmluc2lj
R2V0dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAg
ICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAg
ICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6dHJ5UmVwYXRjaElu
KToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5oOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5o
OgorCiAyMDE3LTAyLTE2ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgog
CiAgICAgICAgIFtKU0NdIFVwZGF0ZSBtb2R1bGUgbmFtZXNwYWNlIG9iamVjdCBhY2NvcmRpbmcg
dG8gdGhlIGxhdGVzdCBFQ01BMjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5k
ZXggMjUyNmY4MzU5Y2E0MGM5NTM2ZGE4MTg4NjcxYzVhNjQzODU1YTVmYi4uNGUwZDc5ZmE1OTk1
Y2FmZDg0ZWU3MmVmOGRiZDEyNDI0MzhmZjgyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dApAQCAtMTg1LDYgKzE4NSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAg
ICAgYnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVzLmNwcAogICAgIGJ1aWx0aW5zL0J1aWx0aW5F
eGVjdXRhYmxlQ3JlYXRvci5jcHAKIAorICAgIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCiAgICAg
Ynl0ZWNvZGUvQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAK
ICAgICBieXRlY29kZS9Bcml0aFByb2ZpbGUuY3BwCiAgICAgYnl0ZWNvZGUvQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZS5jcHAKQEAgLTIxOCw5ICsyMTksMTEgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NP
VVJDRVMKICAgICBieXRlY29kZS9GdW5jdGlvbkNvZGVCbG9jay5jcHAKICAgICBieXRlY29kZS9H
ZXRCeUlkU3RhdHVzLmNwcAogICAgIGJ5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAorICAgIGJ5
dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCiAgICAgYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmNwcAogICAgIGJ5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAKICAgICBieXRlY29kZS9J
bmxpbmVDYWxsRnJhbWVTZXQuY3BwCisgICAgYnl0ZWNvZGUvSW50cmluc2ljR2V0dGVyQWNjZXNz
Q2FzZS5jcHAKICAgICBieXRlY29kZS9KdW1wVGFibGUuY3BwCiAgICAgYnl0ZWNvZGUvTExJbnRQ
cm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAogICAgIGJ5dGVjb2Rl
L0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcApAQCAtMjMzLDYgKzIzNiw3IEBAIHNldChKYXZh
U2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcAog
ICAgIGJ5dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suY3BwCiAgICAgYnl0ZWNvZGUvUHJvcGVydHlD
b25kaXRpb24uY3BwCisgICAgYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAKICAgICBi
eXRlY29kZS9QdXRCeUlkRmxhZ3MuY3BwCiAgICAgYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAK
ICAgICBieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggMGZlNGI1ZjA1ZmRhNDkzYzk2MGY3ZmJmOTdlMjY3M2M4ZGE1NDFjNy4uNTQyNWI5
ZTZiMTgxN2QyZDAxODUyZTU0MDdkNjFjZTcwZDM4OTdkOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTEzMDQsNiArMTMwNCwxMSBAQAogCQk1MzQ5MDI4NTFDNzI3NkI3MDAxMkJD
QjggLyogVHlwZWRBcnJheUNUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzNDkwMjgyMUM3MjQyQzgwMDEyQkNCOCAvKiBUeXBlZEFycmF5Q1Rl
c3QuY3BwICovOyB9OwogCQk1MzRDNDU3QzFCQzcyNDExMDA3NDc2QTcgLyogSlNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzRDNDU3QjFCQzcyNDExMDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yLmggKi87IH07CiAJCTUzNEM0NTdFMUJDNzI1NDkwMDc0NzZBNyAvKiBKU1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTM0QzQ1N0QxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3Rvci5jcHAgKi87IH07CisJCTUzNEUwMzRFMUU0RDRCMTYwMDIxM0Y2NCAvKiBBY2Nl
c3NDYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzRFMDM0RDFFNEQ0QjE2MDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5oICovOyB9OworCQk1MzRFMDM1
MDFFNEQ5NUVEMDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzRFMDM0RjFFNEQ5NUVEMDAyMTNGNjQgLyogQWNj
ZXNzQ2FzZS5jcHAgKi87IH07CisJCTUzNEUwMzU0MUU1M0JEMjkwMDIxM0Y2NCAvKiBJbnRyaW5z
aWNHZXR0ZXJBY2Nlc3NDYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzRFMDM1MzFFNTNCRDI5MDAyMTNGNjQgLyogSW50cmluc2ljR2V0dGVyQWNj
ZXNzQ2FzZS5oICovOyB9OworCQk1MzRFMDM1NjFFNTNCRURFMDAyMTNGNjQgLyogUHJveHlhYmxl
QWNjZXNzQ2FzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTM0RTAzNTUxRTUzQkVERTAwMjEzRjY0IC8qIFByb3h5YWJsZUFjY2Vzc0Nhc2UuaCAqLzsg
fTsKKwkJNTM0RTAzNTgxRTUzQkYyRjAwMjEzRjY0IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNEUwMzU3
MUU1M0JGMkYwMDIxM0Y2NCAvKiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmggKi87IH07CiAJCTUz
NTI5QTRDMUM0NTdCNzUwMDBCNDlDNiAvKiBBUElVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM1MjlBNEIxQzQ1N0I3NTAwMEI0OUM2IC8qIEFQ
SVV0aWxzLmggKi87IH07CiAJCTUzNTU1NzE0MUQ5RDlFQTUwMDZENTgzQiAvKiBXYXNtTWVtb3J5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzU1NTcx
MzFEOUQ5RUE1MDA2RDU4M0IgLyogV2FzbU1lbW9yeS5oICovOyB9OwogCQk1MzU1NTcxNjFEOURG
QTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzU1NTcxNTFEOURGQTMyMDA2RDU4M0IgLyogV2FzbU1lbW9y
eS5jcHAgKi87IH07CkBAIC0xMzExLDYgKzEzMTYsOSBAQAogCQk1MzcwQjRGNjFCRjI2MjA1MDA1
QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM3MEI0RjQxQkYy
NUVBMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJh
c2UuaCAqLzsgfTsKIAkJNTM5MTdFN0IxQjc5MDZGQTAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzkxN0U3QTFCNzkwNkU0MDAwRUJEMzMgLyogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCAqLzsgfTsKIAkJNTM5RkI4QkExQzk5
REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlGQjhCOTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJh
eUlubGluZXMuaCAqLzsgfTsKKwkJNTNCMEJFMzQxRTU2MUFDOTAwQThGQzI5IC8qIEdldHRlclNl
dHRlckFjY2Vzc0Nhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTNCMEJFMzMxRTU2MUFDOTAwQThGQzI5IC8qIEdldHRlclNldHRlckFjY2Vzc0Nh
c2UuY3BwICovOyB9OworCQk1M0IwQkUzNjFFNTYxQjA5MDBBOEZDMjkgLyogUHJveHlhYmxlQWNj
ZXNzQ2FzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1M0IwQkUzNTFFNTYxQjA5MDBBOEZDMjkgLyogUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAgKi87
IH07CisJCTUzQjBCRTM4MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3ND
YXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
QjBCRTM3MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcCAq
LzsgfTsKIAkJNTNENDQ0REMxREFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNENDQ0REIx
REFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oICovOyB9OwogCQk1M0Q0NDRE
RTFEQUYwOUEwMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRDQ0NEREMURBRjA5QTAwMEI5Mjc4
NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuY3BwICovOyB9OwogCQk1M0Y0MEU4NTFENThGOTc3MDA5
OUExQjYgLyogV2FzbVNlY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmgg
Ki87IH07CkBAIC0zNzQxLDYgKzM3NDksMTEgQEAKIAkJNTM0QzQ1N0ExQkM3MDNEQzAwNzQ3NkE3
IC8qIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNj
cmlwdDsgcGF0aCA9IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTM0QzQ1N0IxQkM3MjQxMTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1
N0QxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzRFMDM0RDFFNEQ0QjE2
MDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBY2Nlc3NDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNEUwMzRGMUU0
RDk1RUQwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MzRFMDM1MzFFNTNCRDI5MDAyMTNGNjQgLyogSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3ND
YXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNEUwMzU1MUU1M0JFREUwMDIx
M0Y2NCAvKiBQcm94eWFibGVBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFByb3h5YWJsZUFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTM0RTAzNTcxRTUzQkYyRjAwMjEzRjY0IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzUyOUE0QjFDNDU3Qjc1MDAwQjQ5QzYg
LyogQVBJVXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJVXRpbHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM1NTU3MTMxRDlEOUVBNTAwNkQ1ODNC
IC8qIFdhc21NZW1vcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1l
bW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzU1NTcxNTFEOURGQTMyMDA2
RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXYXNtTWVtb3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3NTEs
NiArMzc2NCw5IEBACiAJCTUzOTE3RTgzMUI3OTFDQjgwMDBFQkQzMyAvKiBUeXBlZEFycmF5UHJv
dG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gVHlwZWRB
cnJheVByb3RvdHlwZS5qczsgcGF0aCA9IGJ1aWx0aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUuanM7
IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJNTM5RUIwNzExRDU1M0RGODAwQzgyRUY3
IC8qIHRlc3RXYXNtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHRl
c3RXYXNtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5RkI4QjkxQzk5REE3
QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUz
QjBCRTMzMUU1NjFBQzkwMEE4RkMyOSAvKiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0IwQkUzNTFFNTYxQjA5MDBBOEZD
MjkgLyogUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQcm94eWFibGVBY2Nlc3NDYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTNCMEJFMzcxRTU2MUIyNDAwQThGQzI5IC8qIEludHJpbnNpY0dldHRlckFjY2Vz
c0Nhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50cmluc2lj
R2V0dGVyQWNjZXNzQ2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRDQ0
NERCMURBRjA4QUIwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQWRkcmVzc1ZhbHVlLmg7IHBhdGggPSBiMy9CM1dh
c21BZGRyZXNzVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNENDQ0REQx
REFGMDlBMDAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dhc21BZGRyZXNzVmFsdWUuY3BwOyBwYXRoID0gYjMv
QjNXYXNtQWRkcmVzc1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNG
MjU2RTExQjg3RTI4MDAwQjRCNzY4IC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MDEyLDYgKzYwMjgsMjEg
QEAKIAkJCXRhYldpZHRoID0gNDsKIAkJCXVzZXNUYWJzID0gMDsKIAkJfTsKKwkJNTM0RTAzNTIx
RTUzQkJBOTAwMjEzRjY0IC8qIGFjY2Vzc0Nhc2UgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTUzNEUwMzRGMUU0RDk1RUQwMDIxM0Y2NCAvKiBBY2Nlc3ND
YXNlLmNwcCAqLywKKwkJCQk1MzRFMDM0RDFFNEQ0QjE2MDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5o
ICovLAorCQkJCTUzQjBCRTM3MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nl
c3NDYXNlLmNwcCAqLywKKwkJCQk1MzRFMDM1MzFFNTNCRDI5MDAyMTNGNjQgLyogSW50cmluc2lj
R2V0dGVyQWNjZXNzQ2FzZS5oICovLAorCQkJCTUzQjBCRTM1MUU1NjFCMDkwMEE4RkMyOSAvKiBQ
cm94eWFibGVBY2Nlc3NDYXNlLmNwcCAqLywKKwkJCQk1MzRFMDM1NTFFNTNCRURFMDAyMTNGNjQg
LyogUHJveHlhYmxlQWNjZXNzQ2FzZS5oICovLAorCQkJCTUzQjBCRTMzMUU1NjFBQzkwMEE4RkMy
OSAvKiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcCAqLywKKwkJCQk1MzRFMDM1NzFFNTNCRjJG
MDAyMTNGNjQgLyogR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oICovLAorCQkJKTsKKwkJCW5hbWUg
PSBhY2Nlc3NDYXNlOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJNjUwRkRG
OEQwOUQwRkNBNzAwNzY5RTU0IC8qIERlcml2ZWQgU291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC03Mjk5LDYgKzczMzAsNyBAQAogCQk5NjlBMDc4
RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCTUzNEUwMzUyMUU1M0JCQTkwMDIxM0Y2NCAvKiBhY2Nlc3ND
YXNlICovLAogCQkJCTUzNzBCNEYzMUJGMjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcCAqLywKIAkJCQk1MzcwQjRGNDFCRjI1RUEy
MDA1QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5o
ICovLAogCQkJCTc5QTIyODMzMUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuY3BwICov
LApAQCAtNzk4MCw2ICs4MDEyLDcgQEAKIAkJCQkwRjZCOEFFNTFDNEVGRTE3MDA5NjkwNTIgLyog
QjNGaXhTU0EuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzI1Q0IwMUM1MDZEM0IwMEFEOTQzQSAv
KiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxNjFCREFD
REFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTM0
RTAzNTYxRTUzQkVERTAwMjEzRjY0IC8qIFByb3h5YWJsZUFjY2Vzc0Nhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRUM4NTE3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTFBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dl
bmVyaWNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLApAQCAtODQzNSw2ICs4NDY4LDcg
QEAKIAkJCQkwRkVBMEExMjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMU3RhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3RkNDMjZEMTdBMEI2QUEwMDc4NkQxQSAvKiBGVExTd2l0Y2hDYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjIzNUJFMjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1MzRFMDM1NDFFNTNCRDI5MDAyMTNGNjQgLyogSW50cmluc2lj
R2V0dGVyQWNjZXNzQ2FzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMjAxNzA4QjAwNzAw
QkI3MjJDIC8qIEZUTFR5cGVkUG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQ0Ex
NzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04NDQ5LDYgKzg0ODMsNyBAQAogCQkJCTUyQjMxMEZCMTk3NEFFNjEwMDgwODU3QyAv
KiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNEJGRjJD
MUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MDUwRTE2RjVDRDAwQjM0NDYwIC8qIEZ1bmN0aW9uUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MzRFMDM1ODFFNTNCRjJGMDAyMTNGNjQgLyogR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8q
IEZ1bmN0aW9uUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQTBDNDAzMUNERDdEMUQw
MDQ4MTk5MSAvKiBGdW5jdGlvbldoaXRlbGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQ0U2
M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8s
CkBAIC04NzE2LDYgKzg3NTEsNyBAQAogCQkJCUE1MDNGQTFFMTg4RTBGQjAwMDExMEYxNCAvKiBK
U0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwMTND
QThDMUI0OTFBOTQwMENBRTYxMyAvKiBKU0pvYi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
MTYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MzRFMDM0RTFFNEQ0QjE2MDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9jay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyQTRCQjdGMzE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2Vk
VmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDExOCw2ICsxMDE1NCw3IEBACiAJ
CQkJMEYyMzVCRTExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjVBNjI4MzE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkyQTgzNjM4OTE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZp
dHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0IwQkUzODFFNTYxQjI0MDBBOEZD
MjkgLyogSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NEFEOTExQjFEQ0E5N0ZEMDAxNEY5RkUgLyogRnVuY3Rpb25Db2RlQmxvY2suY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ3RjM5Q0IxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uQ29uc3RydWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3MzQxRTMxREMyQ0U5NjAwQUEyOUJBIC8qIEZ1
bmN0aW9uRXhlY3V0YWJsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMzE5LDYgKzEwMzU2LDcg
QEAKIAkJCQk1MzQ4NkJCQjFDMThFODQ1MDBGNkYzQUYgLyogSlNUeXBlZEFycmF5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkI2NkZBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlD
b25zdHJ1Y3RvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2RkMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTNC
MEJFMzYxRTU2MUIwOTAwQThGQzI5IC8qIFByb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYyQjY2RkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTM0QzQ1N0UxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUE3RTI0NDFCQkM2
NzcyMDBENzg0NDAgLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTEwMzM4LDYgKzEwMzc2LDcgQEAKIAkJCQlBRDJGQ0JFODFEQjU4REFEMDBCM0U3MzYg
LyogSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDJG
Q0JFQTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVRhYmxlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1MzRFMDM1MDFFNEQ5NUVEMDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFw
cGVyTWFwLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NzAxMDdFQzEzNDAwMTNFN0IyIC8q
IEpTV3JhcHBlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0ZEOEM5MjBFRUIyRUU3
MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTA1NzgsNiArMTA2
MTcsNyBAQAogCQkJCTFBQ0Y3Mzc3MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0RTg0RjlFMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTRGNzI1NjUxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVP
d25lci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0IwQkUzNDFFNTYxQUM5MDBBOEZDMjkgLyog
R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0NBM0FFMzE3
REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3Q0EzQUVCMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwRGF0YS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0NBM0FFNTE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNmExYTUzY2IyNzRlNmZlZjMwNThiODZkODQ3ZmVhMzE2
ZmMyZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0FjY2Vzc0Nhc2UuY3BwCkBAIC0wLDAgKzEsMTAwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
Y2Nlc3NDYXNlLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJz
LmgiCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiRE9NSklUR2V0dGVyU2V0
dGVyLmgiCisjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0
dGVyLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgorI2luY2x1ZGUgIkhl
YXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oIgorI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2lu
Y2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCisjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgi
CisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU2xvdFZp
c2l0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworQWNjZXNz
Q2FzZTo6QWNjZXNzQ2FzZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKKyAgICA6IG1fdHlwZSh0eXBlKQor
ICAgICwgbV9vZmZzZXQob2Zmc2V0KQoreworICAgIG1fc3RydWN0dXJlLnNldE1heUJlTnVsbCh2
bSwgb3duZXIsIHN0cnVjdHVyZSk7CisgICAgbV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7
Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjcmVhdGUoVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBJbkhpdDoK
KyAgICBjYXNlIEluTWlzczoKKyAgICBjYXNlIEFycmF5TGVuZ3RoOgorICAgIGNhc2UgU3RyaW5n
TGVuZ3RoOgorICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzTGVuZ3RoOgorICAgIGNhc2UgU2NvcGVk
QXJndW1lbnRzTGVuZ3RoOgorICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfTsKKworICAgIHJl
dHVybiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4obmV3IEFjY2Vzc0Nhc2Uodm0sIG93bmVy
LCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KSk7Cit9CisKK3N0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjcmVhdGUoCisgICAgVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
LCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG9sZFN0cnVjdHVy
ZSA9PSBuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSk7CisKKyAgICAvLyBTa2lwIG9wdGltaXpp
bmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKKyAg
ICAvLyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgorICAgIGlmIChHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVycyA8IDYKKyAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQorICAgICAg
ICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNl
PihuZXcgQWNjZXNzQ2FzZSh2bSwgb3duZXIsIFRyYW5zaXRpb24sIG9mZnNldCwgbmV3U3RydWN0
dXJlLCBjb25kaXRpb25TZXQpKTsKK30KKworQWNjZXNzQ2FzZTo6fkFjY2Vzc0Nhc2UoKQorewor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVy
ZVN0dWJJbmZvKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQoreworICAgIHN3aXRjaCAoc3R1YkluZm8uY2FjaGVUeXBlKSB7CisgICAgY2Fz
ZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgorICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNz
Q2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgTG9hZCwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQs
IHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSk7CisKKyAgICBj
YXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNl
OjpjcmVhdGUodm0sIG93bmVyLCBSZXBsYWNlLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCwg
c3R1YkluZm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKKworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmNsb25lKCkgY29uc3QKK3sKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCp0aGlzKSk7CisgICAg
cmVzdWx0LT5yZXNldFN0YXRlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVmVjdG9yPFdh
dGNocG9pbnRTZXQqLCAyPiBBY2Nlc3NDYXNlOjpjb21taXQoVk0mIHZtLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCkKK3sKKyAgICAvLyBJdCdzIGZpbmUgdG8gY29tbWl0IHNvbWV0aGluZyB0aGF0
IGlzIGFscmVhZHkgY29tbWl0dGVkLiBUaGF0IGFyaXNlcyB3aGVuIHdlIHN3aXRjaCB0byB1c2lu
ZworICAgIC8vIG5ld2x5IGFsbG9jYXRlZCB3YXRjaHBvaW50cy4gV2hlbiBpdCBoYXBwZW5zLCBp
dCdzIG5vdCBlZmZpY2llbnQgLSBidXQgd2UgdGhpbmsgdGhhdCdzIE9LCisgICAgLy8gYmVjYXVz
ZSBtb3N0IEFjY2Vzc0Nhc2VzIGhhdmUgbm8gZXh0cmEgd2F0Y2hwb2ludHMgYW55d2F5LgorICAg
IFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUgPT0gUHJpbW9yZGlhbCB8fCBtX3N0YXRlID09IENvbW1p
dHRlZCk7CisKKyAgICBWZWN0b3I8V2F0Y2hwb2ludFNldCosIDI+IHJlc3VsdDsKKworICAgIGlm
ICgoc3RydWN0dXJlKCkgJiYgc3RydWN0dXJlKCktPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoKSkKKyAgICAgICAgfHwgbV9jb25kaXRpb25TZXQubmVlZEltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgpKQorICAgICAgICByZXN1bHQuYXBwZW5kKHZtLmVuc3VyZVdhdGNocG9pbnRTZXRGb3JJ
bXB1cmVQcm9wZXJ0eShpZGVudCkpOworCisgICAgaWYgKGFkZGl0aW9uYWxTZXQoKSkKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChhZGRpdGlvbmFsU2V0KCkpOworCisgICAgbV9zdGF0ZSA9IENvbW1p
dHRlZDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgQWNjZXNzQ2FzZTo6Z3VhcmRl
ZEJ5U3RydWN0dXJlQ2hlY2soKSBjb25zdAoreworICAgIGlmICh2aWFQcm94eSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQXJyYXlM
ZW5ndGg6CisgICAgY2FzZSBTdHJpbmdMZW5ndGg6CisgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNM
ZW5ndGg6CisgICAgY2FzZSBTY29wZWRBcmd1bWVudHNMZW5ndGg6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jv
b2wgQWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKFZlY3RvcjxKU0NlbGwqPiogY2VsbHNUb01hcmspIGNv
bnN0Cit7CisgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICBjYXNlIEdldHRlcjoKKyAgICBjYXNl
IFNldHRlcjoKKyAgICBjYXNlIEN1c3RvbVZhbHVlR2V0dGVyOgorICAgIGNhc2UgQ3VzdG9tQWNj
ZXNzb3JHZXR0ZXI6CisgICAgY2FzZSBDdXN0b21WYWx1ZVNldHRlcjoKKyAgICBjYXNlIEN1c3Rv
bUFjY2Vzc29yU2V0dGVyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFRyYW5zaXRp
b246CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBz
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQorICAgICAgICAgICAgJiYgc3RydWN0dXJl
KCktPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKKyAgICAgICAgICAgIGlmIChjZWxsc1Rv
TWFyaykKKyAgICAgICAgICAgICAgICBjZWxsc1RvTWFyay0+YXBwZW5kKG5ld1N0cnVjdHVyZSgp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiti
b29sIEFjY2Vzc0Nhc2U6OmNvdWxkU3RpbGxTdWNjZWVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9jb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKTsKK30KKworYm9vbCBBY2Nlc3NDYXNlOjpjYW5SZXBsYWNlKGNvbnN0
IEFjY2Vzc0Nhc2UmIG90aGVyKSBjb25zdAoreworICAgIC8vIFRoaXMgcHV0cyBpbiBhIGdvb2Qg
ZWZmb3J0IHRvIHRyeSB0byBmaWd1cmUgb3V0IGlmICdvdGhlcicgaXMgbWFkZSBzdXBlcmZsdW91
cyBieSAnKnRoaXMnLgorICAgIC8vIEl0J3MgZmluZSBmb3IgdGhpcyB0byByZXR1cm4gZmFsc2Ug
aWYgaXQncyBpbiBkb3VidC4KKworICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgY2FzZSBBcnJh
eUxlbmd0aDoKKyAgICBjYXNlIFN0cmluZ0xlbmd0aDoKKyAgICBjYXNlIERpcmVjdEFyZ3VtZW50
c0xlbmd0aDoKKyAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c0xlbmd0aDoKKyAgICAgICAgcmV0dXJu
IG90aGVyLnR5cGUoKSA9PSB0eXBlKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKCFndWFy
ZGVkQnlTdHJ1Y3R1cmVDaGVjaygpIHx8ICFvdGhlci5ndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUo
KSA9PSBvdGhlci5zdHJ1Y3R1cmUoKTsKKyAgICB9Cit9CisKK3ZvaWQgQWNjZXNzQ2FzZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3R5cGUsICI6KCIp
OworCisgICAgQ29tbWFQcmludGVyIGNvbW1hOworCisgICAgb3V0LnByaW50KGNvbW1hLCBtX3N0
YXRlKTsKKworICAgIGlmIChtX3R5cGUgPT0gVHJhbnNpdGlvbikKKyAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAic3RydWN0dXJlID0gIiwgcG9pbnRlckR1bXAoc3RydWN0dXJlKCkpLCAiIC0+ICIs
IHBvaW50ZXJEdW1wKG5ld1N0cnVjdHVyZSgpKSk7CisgICAgZWxzZSBpZiAobV9zdHJ1Y3R1cmUp
CisgICAgICAgIG91dC5wcmludChjb21tYSwgInN0cnVjdHVyZSA9ICIsIHBvaW50ZXJEdW1wKG1f
c3RydWN0dXJlLmdldCgpKSk7CisKKyAgICBpZiAoaXNWYWxpZE9mZnNldChtX29mZnNldCkpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgIm9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKKyAgICBpZiAo
IW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY29u
ZGl0aW9ucyA9ICIsIG1fY29uZGl0aW9uU2V0KTsKKworICAgIGR1bXBJbXBsKG91dCwgY29tbWEp
OworICAgIG91dC5wcmludCgiKSIpOworfQorCitib29sIEFjY2Vzc0Nhc2U6OnZpc2l0V2VhayhW
TSYgdm0pIGNvbnN0Cit7CisgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZCht
X3N0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29u
ZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KGlzQWNjZXNzb3IoKSkgeworICAgICAgICBhdXRvJiBhY2Nlc3NvciA9IHRoaXMtPmFzPEdldHRl
clNldHRlckFjY2Vzc0Nhc2U+KCk7CisgICAgICAgIGlmIChhY2Nlc3Nvci5jYWxsTGlua0luZm8o
KSkKKyAgICAgICAgICAgIGFjY2Vzc29yLmNhbGxMaW5rSW5mbygpLT52aXNpdFdlYWsodm0pOwor
ICAgICAgICBpZiAoYWNjZXNzb3IuY3VzdG9tU2xvdEJhc2UoKSAmJiAhSGVhcDo6aXNNYXJrZWQo
YWNjZXNzb3IuY3VzdG9tU2xvdEJhc2UoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfSBlbHNlIGlmICh0eXBlKCkgPT0gSW50cmluc2ljR2V0dGVyKSB7CisgICAgICAgIGF1dG8m
IGludHJpbnNpYyA9IHRoaXMtPmFzPEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U+KCk7CisgICAg
ICAgIGlmIChpbnRyaW5zaWMuaW50cmluc2ljRnVuY3Rpb24oKSAmJiAhSGVhcDo6aXNNYXJrZWQo
aW50cmluc2ljLmludHJpbnNpY0Z1bmN0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFjY2Vzc0Nhc2U6OnByb3Bh
Z2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAoreworICAgIGJvb2wg
cmVzdWx0ID0gdHJ1ZTsKKworICAgIGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAgcmVzdWx0ICY9
IG1fc3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKworICAgIHN3aXRjaCAobV90eXBl
KSB7CisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25j
dXJyZW50bHkobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgQWNj
ZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCisgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBz
dGF0ZSwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gpCit7CisgICAgU3VwZXJT
YW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworCisgICAgUkVMRUFTRV9BU1NF
UlQobV9zdGF0ZSA9PSBDb21taXR0ZWQpOworICAgIG1fc3RhdGUgPSBHZW5lcmF0ZWQ7CisKKyAg
ICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7CisgICAgVk0mIHZtID0gKmppdC52bSgp
OworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHN0YXRlLnZhbHVlUmVnczsKKyAgICBHUFJS
ZWcgYmFzZUdQUiA9IHN0YXRlLmJhc2VHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0
ZS5zY3JhdGNoR1BSOworCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKworICAgIHN3aXRjaCAobV90
eXBlKSB7CisgICAgY2FzZSBBcnJheUxlbmd0aDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5
KCkpOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
IGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2hUZXN0MzIoCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisg
ICAgICAgICAgICBqaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6WmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdT
aGFwZU1hc2spKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgU3RyaW5nTGVu
Z3RoOiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CisgICAgICAgIGZhbGxUaHJvdWdo
LmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2g4KAorICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzTGVuZ3RoOiB7CisgICAgICAgIEFT
U0VSVCghdmlhUHJveHkoKSk7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAg
ICAgIGppdC5icmFuY2g4KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWws
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKERpcmVjdEFyZ3VtZW50c1R5cGUpKSk7CisKKyAgICAgICAgZmFsbFRocm91Z2gu
YXBwZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaFRlc3RQdHIoCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpOb25aZXJvLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlR1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTWFwcGVkQXJndW1lbnRzKCkp
KSk7CisgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZUdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSwKKyAgICAgICAg
ICAgIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBqaXQuYm94SW50MzIodmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBTY29wZWRBcmd1bWVudHNMZW5ndGg6
IHsKKyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBw
ZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaDgoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoU2NvcGVkQXJndW1lbnRzVHlwZSkpKTsKKworICAgICAg
ICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoVGVzdDgoCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLAorICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJv
ZGVUaGluZ3MoKSkpKTsKKyAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVG90YWxMZW5n
dGgoKSksCisgICAgICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgaml0
LmJveEludDMyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncyk7CisgICAgICAgIHN0
YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRlZmF1bHQ6IHsK
KyAgICAgICAgaWYgKHZpYVByb3h5KCkpIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVu
ZCgKKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoOCgKKyAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQdXJlRm9yd2FyZGluZ1Byb3h5
VHlwZSkpKTsKKworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisKKyAgICAg
ICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3Ry
dWN0dXJlKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlKCkp
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAg
ICAgICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAg
ICAgICAgICAgICAgc3RydWN0dXJlKCkpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICB9IH07CisKKyAgICBnZW5lcmF0ZUltcGwoc3RhdGUpOworfQorCit2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQobV9zdGF0ZSA9PSBDb21taXR0ZWQpOworICAgIG1fc3RhdGUgPSBHZW5lcmF0ZWQ7CisK
KyAgICBnZW5lcmF0ZUltcGwoc3RhdGUpOworfQorCit2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRl
SW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQoreworICAgIFN1cGVyU2FtcGxlclNj
b3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ZGF0YUxvZygiXG5cbkdlbmVyYXRpbmcgY29kZSBmb3I6ICIsICp0aGlzLCAiXG4iKTsKKworICAg
IEFTU0VSVChtX3N0YXRlID09IEdlbmVyYXRlZCk7IC8vIFdlIHJlbHkgb24gdGhlIGNhbGxlcnMg
c2V0dGluZyB0aGlzIGZvciB1cy4KKworICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0YXRlLmpp
dDsKKyAgICBWTSYgdm0gPSAqaml0LnZtKCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBq
aXQuY29kZUJsb2NrKCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKnN0YXRl
LnN0dWJJbmZvOworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gKnN0YXRlLmlkZW50Owor
ICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHN0YXRlLnZhbHVlUmVnczsKKyAgICBHUFJSZWcg
YmFzZUdQUiA9IHN0YXRlLmJhc2VHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0ZS5z
Y3JhdGNoR1BSOworCisgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVW
YWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOworCisgICAgZm9yIChj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogbV9jb25kaXRpb25TZXQp
IHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0
cnVjdHVyZSgpOworCisgICAgICAgIGlmIChjb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPmFkZFRy
YW5zaXRpb25XYXRjaHBvaW50KHN0YXRlLmFkZFdhdGNocG9pbnQoY29uZGl0aW9uKSk7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghY29uZGl0aW9uLnN0
cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0
cnVjdHVyZSkpIHsKKyAgICAgICAgICAgIC8vIFRoZSByZWFzb24gd2h5IHRoaXMgY2Fubm90IGhh
cHBlbiBpcyB0aGF0IHdlIHJlcXVpcmUgdGhhdCBQb2x5bW9ycGhpY0FjY2VzcyBjYWxscworICAg
ICAgICAgICAgLy8gQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoKSBvbmx5IGFmdGVyIGl0IGhhcyB2ZXJp
ZmllZCB0aGF0CisgICAgICAgICAgICAvLyBBY2Nlc3NDYXNlOjpjb3VsZFN0aWxsU3VjY2VlZCgp
IHJldHVybmVkIHRydWUuCisKKyAgICAgICAgICAgIGRhdGFMb2coIlRoaXMgY29uZGl0aW9uIGlz
IG5vIGxvbmdlciBtZXQ6ICIsIGNvbmRpdGlvbiwgIlxuIik7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2Ugd2lsbCBl
bWl0IGNvZGUgdGhhdCBoYXMgYSB3ZWFrIHJlZmVyZW5jZSB0aGF0IGlzbid0IG90aGVyd2lzZSBs
aXN0ZWQgYW55d2hlcmUuCisgICAgICAgIHN0YXRlLndlYWtSZWZlcmVuY2VzLmFwcGVuZChXcml0
ZUJhcnJpZXI8SlNDZWxsPih2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKTsKKworICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29uZGl0aW9uLm9iamVjdCgpKSwg
c2NyYXRjaEdQUik7CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZCgKKyAgICAg
ICAgICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUpKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgSW5IaXQ6
CisgICAgY2FzZSBJbk1pc3M6CisgICAgICAgIGppdC5ib3hCb29sZWFuUGF5bG9hZChtX3R5cGUg
PT0gSW5IaXQsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBzdGF0ZS5zdWNjZWVk
KCk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgTWlzczoKKyAgICAgICAgaml0Lm1vdmVU
cnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKKyAgICAgICAgc3RhdGUuc3Vj
Y2VlZCgpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIExvYWQ6CisgICAgY2FzZSBHZXRH
ZXR0ZXI6CisgICAgY2FzZSBHZXR0ZXI6CisgICAgY2FzZSBTZXR0ZXI6CisgICAgY2FzZSBDdXN0
b21WYWx1ZUdldHRlcjoKKyAgICBjYXNlIEN1c3RvbUFjY2Vzc29yR2V0dGVyOgorICAgIGNhc2Ug
Q3VzdG9tVmFsdWVTZXR0ZXI6CisgICAgY2FzZSBDdXN0b21BY2Nlc3NvclNldHRlcjogeworICAg
ICAgICBHUFJSZWcgdmFsdWVSZWdzUGF5bG9hZEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7
CisKKyAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQobV9vZmZzZXQpKSB7CisgICAgICAgICAgICBT
dHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7CisgICAgICAgICAgICBpZiAobV9jb25kaXRpb25TZXQu
aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUoKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gbV9jb25k
aXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAg
ICAgICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVu
dHModm0sIG9mZnNldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyBiYXNlRm9yR2V0
R1BSOworICAgICAgICBpZiAodmlhUHJveHkoKSkgeworICAgICAgICAgICAgQVNTRVJUKG1fdHlw
ZSAhPSBDdXN0b21WYWx1ZVNldHRlciB8fCBtX3R5cGUgIT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIp
OyAvLyBCZWNhdXNlIHNldHRlcnMgbmVlZCB0byBub3QgdHJhc2ggdmFsdWVSZWdzUGF5bG9hZEdQ
Ui4KKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyIHx8IG1fdHlwZSA9PSBTZXR0ZXIp
CisgICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUiA9IHZhbHVlUmVnc1BheWxvYWRH
UFI7CisKKyAgICAgICAgICAgIEFTU0VSVCgobV90eXBlICE9IEdldHRlciAmJiBtX3R5cGUgIT0g
U2V0dGVyKSB8fCBiYXNlRm9yR2V0R1BSICE9IGJhc2VHUFIpOworICAgICAgICAgICAgQVNTRVJU
KG1fdHlwZSAhPSBTZXR0ZXIgfHwgYmFzZUZvckdldEdQUiAhPSB2YWx1ZVJlZ3NQYXlsb2FkR1BS
KTsKKworICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwKKyAgICAgICAg
ICAgICAgICBiYXNlRm9yR2V0R1BSKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBiYXNl
Rm9yR2V0R1BSID0gYmFzZUdQUjsKKworICAgICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUjsK
KyAgICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGpp
dC5tb3ZlKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihhbHRl
cm5hdGVCYXNlKCkpLAorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
YmFzZUZvckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgYmFzZUZvckFjY2Vzc0dQUiA9IGJhc2VGb3JHZXRHUFI7CisKKyAgICAgICAgR1BSUmVnIGxv
YWRlZFZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgaWYgKG1fdHlwZSAhPSBDdXN0
b21WYWx1ZUdldHRlciAmJiBtX3R5cGUgIT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgJiYgbV90eXBl
ICE9IEN1c3RvbVZhbHVlU2V0dGVyICYmIG1fdHlwZSAhPSBDdXN0b21BY2Nlc3NvclNldHRlcikg
eworICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBMb2FkIHx8IG1fdHlwZSA9PSBHZXRHZXR0ZXIp
CisgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIgPSB2YWx1ZVJlZ3NQYXlsb2FkR1BSOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0gc2NyYXRj
aEdQUjsKKworICAgICAgICAgICAgQVNTRVJUKChtX3R5cGUgIT0gR2V0dGVyICYmIG1fdHlwZSAh
PSBTZXR0ZXIpIHx8IGxvYWRlZFZhbHVlR1BSICE9IGJhc2VHUFIpOworICAgICAgICAgICAgQVNT
RVJUKG1fdHlwZSAhPSBTZXR0ZXIgfHwgbG9hZGVkVmFsdWVHUFIgIT0gdmFsdWVSZWdzUGF5bG9h
ZEdQUik7CisKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSOworICAgICAgICAgICAgaWYg
KGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkKKyAgICAgICAgICAgICAgICBzdG9yYWdlR1BSID0g
YmFzZUZvckFjY2Vzc0dQUjsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGpp
dC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZUZvckFjY2Vzc0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwKKyAgICAgICAgICAg
ICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBs
b2FkZWRWYWx1ZUdQUjsKKyAgICAgICAgICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
ICAgICAgICBqaXQubG9hZDY0KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShtX29mZnNldCkpLCBsb2FkZWRWYWx1
ZUdQUik7CisjZWxzZQorICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBMb2FkIHx8IG1fdHlwZSA9
PSBHZXRHZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVU
b0Jhc2UobV9vZmZzZXQpICsgVGFnT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVS
ZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGppdC5sb2FkMzIoCisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJl
bGF0aXZlVG9CYXNlKG1fb2Zmc2V0KSArIFBheWxvYWRPZmZzZXQpLAorICAgICAgICAgICAgICAg
IGxvYWRlZFZhbHVlR1BSKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fdHlw
ZSA9PSBMb2FkIHx8IG1fdHlwZSA9PSBHZXRHZXR0ZXIpIHsKKyAgICAgICAgICAgIHN0YXRlLnN1
Y2NlZWQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChP
cHRpb25zOjp1c2VET01KSVQoKSAmJiBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgJiYg
dGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5kb21KSVQoKSkgeworICAgICAgICAg
ICAgYXV0byYgYWNjZXNzID0gdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKTsKKyAg
ICAgICAgICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIGVtaXQgQ2hlY2tET00gb3BlcmF0aW9uIHNp
bmNlIHN0cnVjdHVyZSBjaGVjayBlbnN1cmVzCisgICAgICAgICAgICAvLyB0aGF0IHRoZSBzdHJ1
Y3R1cmUgb2YgdGhlIGdpdmVuIGJhc2UgdmFsdWUgaXMgc3RydWN0dXJlKCkhIFNvIGFsbCB3ZSBz
aG91bGQKKyAgICAgICAgICAgIC8vIGRvIGlzIHBlcmZvcm1pbmcgdGhlIENoZWNrRE9NIHRoaW5n
eSBpbiBJQyBjb21waWxpbmcgdGltZSBoZXJlLgorICAgICAgICAgICAgaWYgKHN0cnVjdHVyZSgp
LT5jbGFzc0luZm8oKS0+aXNTdWJDbGFzc09mKGFjY2Vzcy5kb21KSVQoKS0+dGhpc0NsYXNzSW5m
bygpKSkgeworICAgICAgICAgICAgICAgIGFjY2Vzcy5lbWl0RE9NSklUR2V0dGVyKHN0YXRlLCBi
YXNlRm9yR2V0R1BSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBTdHVmZiBmb3IgY3VzdG9tIGdldHRlcnMvc2V0dGVycy4K
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGw7CisKKyAgICAgICAgLy8g
U3R1ZmYgZm9yIEpTIGdldHRlcnMvc2V0dGVycy4KKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRh
TGFiZWxQdHIgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2s7CisgICAgICAgIENDYWxsSGVscGVy
czo6Q2FsbCBmYXN0UGF0aENhbGw7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0
aENhbGw7CisKKyAgICAgICAgLy8gVGhpcyBhbHNvIGRvZXMgdGhlIG5lY2Vzc2FyeSBjYWxjdWxh
dGlvbnMgb2Ygd2hldGhlciBvciBub3Qgd2UncmUgYW4KKyAgICAgICAgLy8gZXhjZXB0aW9uIGhh
bmRsaW5nIGNhbGwgc2l0ZS4KKyAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0
YXRlIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2Fs
bCgpOworCisgICAgICAgIGF1dG8gcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxs
ID0gWyZdKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSYgc3BpbGxTdGF0ZSwgYm9v
bCBjYWxsSGFzUmV0dXJuVmFsdWUpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0
b3JlOworICAgICAgICAgICAgaWYgKGNhbGxIYXNSZXR1cm5WYWx1ZSkgeworICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIHJlc3VsdCB2YWx1ZS4gV2UgZG9uJ3Qgd2FudCB0byBvdmVyd3Jp
dGUgdGhlIHJlc3VsdCB3aXRoIHdoYXQgd2Ugc3RvcmVkIHRvIHRoZSBzdGFjay4KKyAgICAgICAg
ICAgICAgICAvLyBXZSBzb21ldGltZXMgaGF2ZSB0byBzdG9yZSBpdCB0byB0aGUgc3RhY2sganVz
dCBpbiBjYXNlIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBhbmQgbmVlZCB0aGUgb3JpZ2luYWwgdmFs
dWUuCisgICAgICAgICAgICAgICAgZG9udFJlc3RvcmUuc2V0KHZhbHVlUmVncyk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0Zv
ckNhbGwoc3BpbGxTdGF0ZSwgZG9udFJlc3RvcmUpOworICAgICAgICB9OworCisgICAgICAgIGpp
dC5zdG9yZTMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUu
Y2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCisg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisKKyAgICAgICAgaWYgKG1fdHlw
ZSA9PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgeworICAgICAgICAgICAgYXV0byYgYWNj
ZXNzID0gdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKTsKKyAgICAgICAgICAgIEFT
U0VSVChiYXNlR1BSICE9IGxvYWRlZFZhbHVlR1BSKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5
cGUgIT0gU2V0dGVyIHx8IChiYXNlR1BSICE9IHZhbHVlUmVnc1BheWxvYWRHUFIgJiYgbG9hZGVk
VmFsdWVHUFIgIT0gdmFsdWVSZWdzUGF5bG9hZEdQUikpOworCisgICAgICAgICAgICAvLyBDcmVh
dGUgYSBKUyBjYWxsIHVzaW5nIGEgSlMgY2FsbCBpbmxpbmUgY2FjaGUuIEFzc3VtZSB0aGF0Ogor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIC0gU1AgaXMgYWxpZ25lZCBhbmQgcmVwcmVz
ZW50cyB0aGUgZXh0ZW50IG9mIHRoZSBjYWxsaW5nIGNvbXBpbGVyJ3Mgc3RhY2sgdXNhZ2UuCisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gLSBGUCBpcyBzZXQgY29ycmVjdGx5IChpLmUu
IGl0IHBvaW50cyB0byB0aGUgY2FsbGVyJ3MgY2FsbCBmcmFtZSBoZWFkZXIpLgorICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIC8vIC0gU1AgLSBGUCBpcyBhbiBhbGlnbmVkIGRpZmZlcmVuY2Uu
CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gLSBBbnkgYnl0ZSBiZXR3ZWVuIEZQIChl
eGNsdXNpdmUpIGFuZCBTUCAoaW5jbHVzaXZlKSBjb3VsZCBiZSBsaXZlIGluIHRoZSBjYWxsaW5n
CisgICAgICAgICAgICAvLyAgIGNvZGUuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8g
VGhlcmVmb3JlLCB3ZSB0ZW1wb3JhcmlseSBncm93IHRoZSBzdGFjayBmb3IgdGhlIHB1cnBvc2Ug
b2YgdGhlIGNhbGwgYW5kIHRoZW4KKyAgICAgICAgICAgIC8vIHNocmluayBpdCBhZnRlci4KKwor
ICAgICAgICAgICAgc3RhdGUuc2V0U3BpbGxTdGF0ZUZvckpTR2V0dGVyU2V0dGVyKHNwaWxsU3Rh
dGUpOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghYWNjZXNzLmNhbGxMaW5rSW5mbygp
KTsKKyAgICAgICAgICAgIGFjY2Vzcy5tX2NhbGxMaW5rSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8
Q2FsbExpbmtJbmZvPigpOworCisgICAgICAgICAgICAvLyBGSVhNRTogSWYgd2UgZ2VuZXJhdGVk
IGEgcG9seW1vcnBoaWMgY2FsbCBzdHViIHRoYXQganVtcGVkIGJhY2sgdG8gdGhlIGdldHRlcgor
ICAgICAgICAgICAgLy8gc3R1Yiwgd2hpY2ggdGhlbiBqdW1wZWQgYmFjayB0byB0aGUgbWFpbiBj
b2RlLCB0aGVuIHdlJ2QgaGF2ZSBhIHJlYWNoYWJpbGl0eQorICAgICAgICAgICAgLy8gc2l0dWF0
aW9uIHRoYXQgdGhlIEdDIGRvZXNuJ3Qga25vdyBhYm91dC4gVGhlIEdDIHdvdWxkIGVuc3VyZSB0
aGF0IHRoZSBwb2x5bW9ycGhpYworICAgICAgICAgICAgLy8gY2FsbCBzdHViIHN0YXllZCBhbGl2
ZSwgYW5kIGl0IHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBtYWluIGNvZGUgc3RheWVkIGFsaXZlLCBi
dXQKKyAgICAgICAgICAgIC8vIGl0IHdvdWxkbid0IGtub3cgdGhhdCB0aGUgZ2V0dGVyIHN0dWIg
d2FzIGFsaXZlLiBJZGVhbGx5IEpJVCBzdHViIHJvdXRpbmVzIHdvdWxkCisgICAgICAgICAgICAv
LyBiZSBHQyBvYmplY3RzLCBhbmQgdGhlbiB3ZSdkIGJlIGFibGUgdG8gc2F5IHRoYXQgdGhlIHBv
bHltb3JwaGljIGNhbGwgc3R1YiBoYXMgYQorICAgICAgICAgICAgLy8gcmVmZXJlbmNlIHRvIHRo
ZSBnZXR0ZXIgc3R1Yi4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDg5MTQKKyAgICAgICAgICAgIGFjY2Vzcy5jYWxsTGlua0luZm8oKS0+
ZGlzYWxsb3dTdHVicygpOworCisgICAgICAgICAgICBhY2Nlc3MuY2FsbExpbmtJbmZvKCktPnNl
dFVwQ2FsbCgKKyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm86OkNhbGwsIHN0dWJJbmZvLmNv
ZGVPcmlnaW4sIGxvYWRlZFZhbHVlR1BSKTsKKworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBkb25lOworCisgICAgICAgICAgICAvLyBUaGVyZSBpcyBhICJ0aGlzIiBhcmd1bWVu
dC4KKyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDE7CisgICAgICAg
ICAgICAvLyAuLi4gYW5kIGEgdmFsdWUgYXJndW1lbnQgaWYgd2UncmUgY2FsbGluZyBhIHNldHRl
ci4KKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKQorICAgICAgICAgICAgICAgIG51
bWJlck9mUGFyYW1ldGVycysrOworCisgICAgICAgICAgICAvLyBHZXQgdGhlIGFjY2Vzc29yOyBp
ZiB0aGVyZSBhaW4ndCBvbmUgdGhlbiB0aGUgcmVzdWx0IGlzIGpzVW5kZWZpbmVkKCkuCisgICAg
ICAgICAgICBpZiAobV90eXBlID09IFNldHRlcikgeworICAgICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobG9hZGVkVmFs
dWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSksCisgICAgICAgICAgICAgICAg
ICAgIGxvYWRlZFZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZkdldHRlcigpKSwKKyAgICAg
ICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgcmV0dXJuVW5kZWZpbmVkID0gaml0LmJyYW5jaFRlc3RQ
dHIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBsb2FkZWRWYWx1ZUdQUik7
CisKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPSBDYWxsRnJhbWU6
OmhlYWRlclNpemVJblJlZ2lzdGVycyArIG51bWJlck9mUGFyYW1ldGVyczsKKyAgICAgICAgICAg
IHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0gbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNp
emVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisKKyAgICAgICAgICAg
IHVuc2lnbmVkIGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9CisgICAgICAgICAgICBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVz
Rm9yQ2FsbCk7CisKKyAgICAgICAgICAgIGppdC5zdWJQdHIoCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsCisgICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSk7CisKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyksCisg
ICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsKKworICAgICAg
ICAgICAgaml0LnN0b3JlQ2VsbCgKKyAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiwgY2Fs
bGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0
ZXIpKSk7CisKKyAgICAgICAgICAgIGppdC5zdG9yZUNlbGwoCisgICAgICAgICAgICAgICAgYmFz
ZUdQUiwKKyAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDApLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCisgICAg
ICAgICAgICBpZiAobV90eXBlID09IFNldHRlcikgeworICAgICAgICAgICAgICAgIGppdC5zdG9y
ZVZhbHVlKAorICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAg
ICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoCisgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dDYXNl
ID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2ssCisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsKKworICAgICAg
ICAgICAgZmFzdFBhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICBpZiAobV90
eXBlID09IEdldHRlcikKKyAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVn
cyk7CisgICAgICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICAgICAg
c2xvd0Nhc2UubGluaygmaml0KTsKKyAgICAgICAgICAgIGppdC5tb3ZlKGxvYWRlZFZhbHVlR1BS
LCBHUFJJbmZvOjpyZWdUMCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgIC8v
IFdlICphbHdheXMqIGtub3cgdGhhdCB0aGUgZ2V0dGVyL3NldHRlciwgaWYgbm9uLW51bGwsIGlz
IGEgY2VsbC4KKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7CisjZW5kaWYKKyAgICAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihhY2Nlc3MuY2FsbExpbmtJbmZv
KCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBqaXQubmVh
ckNhbGwoKTsKKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyKQorICAgICAgICAgICAg
ICAgIGppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5k
KGppdC5qdW1wKCkpOworCisgICAgICAgICAgICByZXR1cm5VbmRlZmluZWQubGluaygmaml0KTsK
KyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyKQorICAgICAgICAgICAgICAgIGppdC5t
b3ZlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIHZhbHVlUmVncyk7CisKKyAgICAgICAgICAg
IGRvbmUubGluaygmaml0KTsKKworICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpIC0gc3RhdGUucHJlc2VydmVkUmV1c2VkUmVnaXN0ZXJTdGF0ZS5udW1iZXJPZkJ5
dGVzUHJlc2VydmVkIC0gc3BpbGxTdGF0ZS5udW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0
ZXJQcmVzZXJ2YXRpb24pLAorICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGJv
b2wgY2FsbEhhc1JldHVyblZhbHVlID0gaXNHZXR0ZXIoKTsKKyAgICAgICAgICAgIHJlc3RvcmVM
aXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRlLCBjYWxsSGFzUmV0dXJuVmFs
dWUpOworCisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nl
c3NDYXNlPigpLmNhbGxMaW5rSW5mbygpLT5zZXRDYWxsTG9jYXRpb25zKAorICAgICAgICAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChz
bG93UGF0aENhbGwpKSwKKyAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrKSksCisgICAgICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RQYXRoQ2FsbCkp
OworCisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAorICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aENhbGwsCisgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHZt
LmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQ3Vz
dG9tVmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyIHx8IG1fdHlw
ZSA9PSBDdXN0b21WYWx1ZVNldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIp
OworCisgICAgICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIEMgY2FsbCBzbyBh
bnkgb2Ygb3VyIHN0YWNrIHNwaWxsYWdlIGlzbid0IG92ZXJ3cml0dGVuLiBJdCdzCisgICAgICAg
ICAgICAvLyBoYXJkIHRvIHRyYWNrIGlmIHNvbWVvbmUgZGlkIHNwaWxsYWdlIG9yIG5vdCwgc28g
d2UganVzdCBhc3N1bWUgdGhhdCB3ZSBhbHdheXMgbmVlZAorICAgICAgICAgICAgLy8gdG8gbWFr
ZSBzb21lIHNwYWNlIGhlcmUuCisgICAgICAgICAgICBqaXQubWFrZVNwYWNlT25TdGFja0ZvckND
YWxsKCk7CisKKyAgICAgICAgICAgIC8vIGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1
ZUZ1bmMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KTsKKyAgICAgICAgICAgIC8vIHNldHRlcjogdm9pZCAoKlB1dFZhbHVlRnVuYykoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgdGhpc09iamVjdCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpOworICAg
ICAgICAgICAgLy8gQ3VzdG9tIHZhbHVlcyBhcmUgcGFzc2VkIHRoZSBzbG90QmFzZSAodGhlIHBy
b3BlcnR5IGhvbGRlciksIGN1c3RvbSBhY2Nlc3NvcnMgYXJlIHBhc3NlZCB0aGUgdGhpc1ZhdWxl
IChyZWNpZXZlcikuCisgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgZGlmZmVyZW5j
ZXMgaW4gY3VzdG9tIHZhbHVlcyBhbmQgY3VzdG9tIGFjY2Vzc29ycy4KKyAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgwMTQKKyAgICAgICAg
ICAgIEdQUlJlZyBiYXNlRm9yQ3VzdG9tVmFsdWUgPSBtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0
ZXIgfHwgbV90eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyID8gYmFzZUZvckFjY2Vzc0dQUiA6IGJh
c2VGb3JHZXRHUFI7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGlmIChtX3R5cGUg
PT0gQ3VzdG9tVmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyKSB7
CisgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAg
ICAgICAgICAgICAgICAgYmFzZUZvckN1c3RvbVZhbHVlLAorICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaWRlbnQuaW1wbCgpKSk7CisgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJh
c2VGb3JDdXN0b21WYWx1ZSwgdmFsdWVSZWdzLmdwcigpKTsKKyNlbHNlCisgICAgICAgICAgICBp
ZiAobV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3Nv
ckdldHRlcikgeworICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoCisgICAgICAgICAgICAgICAgICAgIEVBQklfMzJCSVRfRFVNTVlfQVJHIGJhc2VGb3JDdXN0
b21WYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZyksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihpZGVudC5pbXBsKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAg
ICAgICAgRUFCSV8zMkJJVF9EVU1NWV9BUkcgYmFzZUZvckN1c3RvbVZhbHVlLAorICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwK
KyAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzLnRh
Z0dQUigpKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgaml0LnN0b3JlUHRy
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0udG9wQ2FsbEZyYW1lKTsKKworICAgICAg
ICAgICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKHRoaXMtPmFzPEdldHRlclNl
dHRlckFjY2Vzc0Nhc2U+KCkubV9jdXN0b21BY2Nlc3Nvci5vcGFxdWUpKTsKKyAgICAgICAgICAg
IH0pOworCisgICAgICAgICAgICBpZiAobV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1f
dHlwZSA9PSBDdXN0b21BY2Nlc3NvckdldHRlcikKKyAgICAgICAgICAgICAgICBqaXQuc2V0dXBS
ZXN1bHRzKHZhbHVlUmVncyk7CisgICAgICAgICAgICBqaXQucmVjbGFpbVNwYWNlT25TdGFja0Zv
ckNDYWxsKCk7CisKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBub0V4Y2VwdGlvbiA9
CisgICAgICAgICAgICBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0
ZWRFeGNlcHRpb25DaGVjayk7CisKKyAgICAgICAgICAgIHN0YXRlLnJlc3RvcmVMaXZlUmVnaXN0
ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNlcHRpb24oc3BpbGxTdGF0ZSk7CisgICAg
ICAgICAgICBzdGF0ZS5lbWl0RXhwbGljaXRFeGNlcHRpb25IYW5kbGVyKCk7CisKKyAgICAgICAg
ICAgIG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7CisgICAgICAgICAgICBib29sIGNhbGxIYXNSZXR1
cm5WYWx1ZSA9IGlzR2V0dGVyKCk7CisgICAgICAgICAgICByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zy
b21TdGFja0ZvckNhbGwoc3BpbGxTdGF0ZSwgY2FsbEhhc1JldHVyblZhbHVlKTsKKyAgICAgICAg
fQorICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBjYXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKEluZmVycmVkVHlwZSogdHlwZSA9IHN0cnVj
dHVyZSgpLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQuaW1wbCgpKSkgeworICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5k
ZXNjcmlwdG9yKCksICJcbiIpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBw
ZW5kKAorICAgICAgICAgICAgICAgIGppdC5icmFuY2hJZk5vdFR5cGUodmFsdWVSZWdzLCBzY3Jh
dGNoR1BSLCB0eXBlLT5kZXNjcmlwdG9yKCkpKTsKKyAgICAgICAgfSBlbHNlIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgZGF0YUxvZygiRG9uJ3QgaGF2ZSB0eXBlLlxuIik7CisKKyAgICAgICAg
aWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgeworICAgICAgICAgICAgaml0LnN0b3JlVmFs
dWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAg
ICAgICAgICAgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsKKyAgICAgICAgICAg
ICAgICAgICAgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVl
KSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFs
dWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAg
ICAgICAgICAgICAgc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQpICogc2l6
ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBUcmFuc2l0aW9uOiB7CisgICAgICAgIC8v
IEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24oKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBudWxsIGlmIHRo
aXMgd2Fzbid0IHRydWUuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzID49IDYgfHwgIXN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpIHx8IHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKKworICAgICAgICBpZiAoSW5mZXJyZWRUeXBlKiB0eXBlID0gbmV3U3Ry
dWN0dXJlKCktPmluZmVycmVkVHlwZUZvcihpZGVudC5pbXBsKCkpKSB7CisgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYXZlIHR5cGU6ICIsIHR5cGUt
PmRlc2NyaXB0b3IoKSwgIlxuIik7CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5h
cHBlbmQoCisgICAgICAgICAgICAgICAgaml0LmJyYW5jaElmTm90VHlwZSh2YWx1ZVJlZ3MsIHNj
cmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOworICAgICAgICB9IGVsc2UgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICBkYXRhTG9nKCJEb24ndCBoYXZlIHR5cGUuXG4iKTsKKworICAgICAg
ICAvLyBOT1RFOiBUaGlzIGxvZ2ljIGlzIGR1cGxpY2F0ZWQgaW4gQWNjZXNzQ2FzZTo6ZG9lc0Nh
bGxzKCkuIEl0J3MgaW1wb3J0YW50IHRoYXQgZG9lc0NhbGxzKCkga25vd3MKKyAgICAgICAgLy8g
ZXhhY3RseSB3aGVuIHRoaXMgd291bGQgbWFrZSBjYWxscy4KKyAgICAgICAgYm9vbCBhbGxvY2F0
aW5nID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgICAgIGJvb2wgcmVhbGxvY2F0aW5nID0gYWxsb2Nh
dGluZyAmJiBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAgICAgYm9vbCBh
bGxvY2F0aW5nSW5saW5lID0gYWxsb2NhdGluZyAmJiAhc3RydWN0dXJlKCktPmNvdWxkSGF2ZUlu
ZGV4aW5nSGVhZGVyKCk7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9j
YXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxv
Y2soYmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgYWxsb2NhdG9yLmxv
Y2soc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlVGFnR1BSKSk7CisjZW5k
aWYKKyAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9y
LmxvY2soc2NyYXRjaEdQUik7CisKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxp
ZEdQUlJlZzsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gSW52YWxpZEdQUlJlZzsKKyAg
ICAgICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIyID0g
YWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICAgICAgc2NyYXRjaEdQUjMg
PSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIH0KKworICAgICAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0K
KyAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwp
OworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAg
QVNTRVJUKHN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlk
YXRlZCgpKTsKKworICAgICAgICBpZiAoYWxsb2NhdGluZykgeworICAgICAgICAgICAgc2l6ZV90
IG5ld1NpemUgPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihK
U1ZhbHVlKTsKKworICAgICAgICAgICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUpIHsKKyAgICAgICAg
ICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtLmF1eGlsaWFyeVNwYWNlLmFs
bG9jYXRvckZvcihuZXdTaXplKTsKKworICAgICAgICAgICAgICAgIGlmICghYWxsb2NhdG9yKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIFl1Y2ssIHRoaXMgY2FzZSB3b3VsZCBzdWNrIQorICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGFsbG9jYXRvciksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICBqaXQuZW1p
dEFsbG9jYXRlKHNjcmF0Y2hHUFIsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIz
LCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIp
OworCisgICAgICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
bmV3U2l6ZSA+IG9sZFNpemUpOworCisgICAgICAgICAgICAgICAgaWYgKHJlYWxsb2NhdGluZykg
eworICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIHJl
YWxsb2NhdGluZyAoaS5lLiB0aGUgb2xkIHN0cnVjdHVyZS9idXR0ZXJmbHkKKyAgICAgICAgICAg
ICAgICAgICAgLy8gYWxyZWFkeSBoYWQgb3V0LW9mLWxpbmUgcHJvcGVydHkgc3RvcmFnZSkuCisK
KyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKKworICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIgPSBuZXcgc3RvcmFnZSwgc2Ny
YXRjaEdQUjMgPSBvbGQgc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgLy8gc2NyYXRjaEdQ
UjIgPSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0g
MDsgb2Zmc2V0IDwgb2xkU2l6ZTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaEdQUjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0
ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9y
ZVB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSAr
IHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSBvbGRTaXplOyBvZmZz
ZXQgPCBuZXdTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkKKyAgICAgICAgICAgICAgICAg
ICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAr
IHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgYWxsb2Nh
dGluZyBvdXQtb2YtbGluZSB1c2luZyBhbiBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgUmVn
aXN0ZXJTZXQgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlOworICAgICAgICAgICAgICAgIGV4dHJh
UmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoYmFzZUdQUik7CisgICAgICAgICAgICAgICAgZXh0cmFS
ZWdpc3RlcnNUb1ByZXNlcnZlLnNldCh2YWx1ZVJlZ3MpOworICAgICAgICAgICAgICAgIEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVM
aXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoCisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCku
Yml0cygpKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNrRm9y
Q0NhbGwoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIXJlYWxsb2Nh
dGluZykgeworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGJhc2VHUFIpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAg
ICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGdW5jdGlvblB0cihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlT
dG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhl
IGNhc2Ugd2hlcmUgd2UgYXJlIHJlYWxsb2NhdGluZyAoaS5lLiB0aGUgb2xkIHN0cnVjdHVyZS9i
dXR0ZXJmbHkKKyAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBoYWQgb3V0LW9mLWxpbmUg
cHJvcGVydHkgc3RvcmFnZSkuCisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3Bl
cmF0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b25DYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyKG9wZXJhdGlv
blJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGppdC5yZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKKyAgICAgICAgICAg
ICAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vRXhjZXB0
aW9uID0gaml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0
aW9uQ2hlY2spOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0YXRlLnJlc3Rv
cmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNlcHRpb24oc3BpbGxT
dGF0ZSk7CisgICAgICAgICAgICAgICAgc3RhdGUuZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxl
cigpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vRXhjZXB0aW9uLmxpbmso
JmppdCk7CisgICAgICAgICAgICAgICAgc3RhdGUucmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3Rh
Y2tGb3JDYWxsKHNwaWxsU3RhdGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKSB7CisgICAgICAgICAgICBq
aXQuc3RvcmVWYWx1ZSgKKyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAor
ICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKwor
ICAgICAgICAgICAgICAgICAgICBvZmZzZXRJbklubGluZVN0b3JhZ2UobV9vZmZzZXQpICogc2l6
ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIWFsbG9j
YXRpbmcpCisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1
dHRlcmZseShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUpIHsKKyAgICAgICAgICAgIC8vIFdlIHNl
dCB0aGUgbmV3IGJ1dHRlcmZseSBhbmQgdGhlIHN0cnVjdHVyZSBsYXN0LiBEb2luZyBpdCB0aGlz
IHdheSBlbnN1cmVzIHRoYXQKKyAgICAgICAgICAgIC8vIHdoYXRldmVyIHdlIGhhZCBkb25lIHVw
IHRvIHRoaXMgcG9pbnQgaXMgZm9yZ290dGVuIGlmIHdlIGNob29zZSB0byBicmFuY2ggdG8gc2xv
dworICAgICAgICAgICAgLy8gcGF0aC4KKyAgICAgICAgICAgIGppdC5udWtlU3RydWN0dXJlQW5k
U3RvcmVCdXR0ZXJmbHkoc2NyYXRjaEdQUiwgYmFzZUdQUik7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHVpbnQzMl90IHN0cnVjdHVyZUJpdHMgPSBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+
KG5ld1N0cnVjdHVyZSgpLT5pZCgpKTsKKyAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdHJ1Y3R1cmVCaXRzKSwKKyAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpKTsKKyAgICAgICAgCisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJz
QnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7
CisgICAgICAgIAorICAgICAgICAvLyBXZSB3aWxsIGhhdmUgYSBzbG93IHBhdGggaWYgd2Ugd2Vy
ZSBhbGxvY2F0aW5nIHdpdGhvdXQgdGhlIGhlbHAgb2YgYW4gb3BlcmF0aW9uLgorICAgICAgICBp
ZiAoYWxsb2NhdGluZ0lubGluZSkgeworICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVz
ZVJlZ2lzdGVycygpKSB7CisgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAg
ICAgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhq
aXQsIHByZXNlcnZlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3Jl
LmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKHNsb3dQYXRoKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93UGF0aC5lbXB0eSgpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheUxlbmd0aDogeworICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoCisgICAgICAg
ICAgICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgaml0LmJveEludDMyKHNjcmF0
Y2hHUFIsIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBTdHJpbmdMZW5ndGg6IHsKKyAgICAgICAg
aml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6Om9mZnNl
dE9mTGVuZ3RoKCkpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgaml0LmJveElu
dDMyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1
Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBJbnRy
aW5zaWNHZXR0ZXI6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNWYWxpZE9mZnNldChvZmZz
ZXQoKSkpOworICAgICAgICAKKyAgICAgICAgLy8gV2UgbmVlZCB0byBlbnN1cmUgdGhlIGdldHRl
ciB2YWx1ZSBkb2VzIG5vdCBtb3ZlIGZyb20gdW5kZXIgdXMuIE5vdGUgdGhhdCBHZXR0ZXJTZXR0
ZXJzCisgICAgICAgIC8vIGFyZSBpbW11dGFibGUgc28gd2UganVzdCBuZWVkIHRvIHdhdGNoIHRo
ZSBwcm9wZXJ0eSBub3QgYW55IHZhbHVlIGluc2lkZSBpdC4KKyAgICAgICAgU3RydWN0dXJlKiBj
dXJyU3RydWN0dXJlOworICAgICAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZSgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBjdXJyU3RydWN0dXJlID0gbV9jb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24o
KS5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0
Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgb2Zmc2V0KCkpOworICAgICAgICAKKyAg
ICAgICAgdGhpcy0+YXM8SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZT4oKS5lbWl0SW50cmluc2lj
R2V0dGVyKHN0YXRlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBEaXJlY3RBcmd1bWVudHNMZW5ndGg6CisgICAgY2FzZSBTY29wZWRBcmd1bWVudHNMZW5ndGg6
CisgICAgICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgaGFuZGxlZCBieSBnZW5lcmF0ZVdpdGhHdWFy
ZCgpLCBzaW5jZSB0aGUgZ3VhcmQgaXMgcGFydCBvZiB0aGUKKyAgICAgICAgLy8gYWxnb3JpdGht
LiBXZSBjYW4gYmUgc3VyZSB0aGF0IG5vYm9keSB3aWxsIGNhbGwgZ2VuZXJhdGUoKSBkaXJlY3Rs
eSBmb3IgdGhlc2Ugc2luY2UgdGhleQorICAgICAgICAvLyBhcmUgbm90IGd1YXJkZWQgYnkgc3Ry
dWN0dXJlIGNoZWNrcy4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FjY2Vzc0Nhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjllMWFkZjk3NTI0YzUzMTc2NjdhMDgwMzZjYmU1NzY0
ZTczMmQwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmgKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShKSVQpCisK
KyNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQWNjZXNzR2VuZXJh
dGlvblN0YXRlOworCisvLyBBbiBBY2Nlc3NDYXNlIGRlc2NyaWJlcyBvbmUgb2YgdGhlIGNhc2Vz
IG9mIGEgUG9seW1vcnBoaWNBY2Nlc3MuIEEgUG9seW1vcnBoaWNBY2Nlc3MgcmVwcmVzZW50cyBh
CisvLyBwbGFubmVkICh0byBnZW5lcmF0ZSBpbiBmdXR1cmUpIG9yIGdlbmVyYXRlZCBzdHViIGZv
ciBzb21lIGlubGluZSBjYWNoZS4gVGhhdCBzdHViIGNvbnRhaW5zIGZhc3QKKy8vIHBhdGggY29k
ZSBmb3Igc29tZSBmaW5pdGUgbnVtYmVyIG9mIGZhc3QgY2FzZXMsIGVhY2ggZGVzY3JpYmVkIGJ5
IGFuIEFjY2Vzc0Nhc2Ugb2JqZWN0LgorLy8KKy8vIEFuIEFjY2Vzc0Nhc2Ugb2JqZWN0IGhhcyBh
IGxpZmVjeWNsZSB0aGF0IHByb2NlZWRzIHRocm91Z2ggc2V2ZXJhbCBzdGF0ZXMuIE5vdGUgdGhh
dCB0aGUgc3RhdGVzCisvLyBvZiBBY2Nlc3NDYXNlIGhhdmUgYSBsb3QgdG8gZG8gd2l0aCB0aGUg
Z2xvYmFsIGVmZmVjdCBlcG9jaCAod2UnbGwgc2F5IGVwb2NoIGZvciBzaG9ydCkuIFRoaXMgaXMK
Ky8vIGEgc2ltcGxlIHdheSBvZiByZWFzb25pbmcgYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSBzeXN0
ZW0gb3V0c2lkZSB0aGlzIEFjY2Vzc0Nhc2UuIEFueSBvYnNlcnZhYmxlCisvLyBlZmZlY3QgLSBs
aWtlIHN0b3JpbmcgdG8gYSBwcm9wZXJ0eSwgY2hhbmdpbmcgYW4gb2JqZWN0J3Mgc3RydWN0dXJl
LCBldGMuIC0gaW5jcmVtZW50cyB0aGUgZXBvY2guCisvLyBUaGUgc3RhdGVzIGFyZToKKy8vCisv
LyBQcmltb3JkaWFsOiAgIFRoaXMgaXMgYW4gQWNjZXNzQ2FzZSB0aGF0IHdhcyBqdXN0IGFsbG9j
YXRlZC4gSXQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbnkgYWN0dWFsCisvLyAgICAgICAgICAg
ICAgIGNvZGUgYW5kIGl0IGlzIG5vdCBvd25lZCBieSBhbnkgUG9seW1vcnBoaWNBY2Nlc3MuIElu
IHRoaXMgc3RhdGUsIHRoZSBBY2Nlc3NDYXNlCisvLyAgICAgICAgICAgICAgIGFzc3VtZXMgdGhh
dCBpdCBpcyBpbiB0aGUgc2FtZSBlcG9jaCBhcyB3aGVuIGl0IHdhcyBjcmVhdGVkLiBUaGlzIGlz
IGltcG9ydGFudAorLy8gICAgICAgICAgICAgICBiZWNhdXNlIGl0IG1heSBtYWtlIGNsYWltcyBh
Ym91dCBpdHNlbGYgKCJJIHJlcHJlc2VudCBhIHZhbGlkIGNhc2Ugc28gbG9uZyBhcyB5b3UKKy8v
ICAgICAgICAgICAgICAgcmVnaXN0ZXIgYSB3YXRjaHBvaW50IG9uIHRoaXMgc2V0IikgdGhhdCBj
b3VsZCBiZSBjb250cmFkaWN0ZWQgYnkgc29tZSBvdXRzaWRlCisvLyAgICAgICAgICAgICAgIGVm
ZmVjdHMgKGxpa2UgZmlyaW5nIGFuZCBkZWxldGluZyB0aGUgd2F0Y2hwb2ludCBzZXQgaW4gcXVl
c3Rpb24pLiBUaGlzIGlzIGFsc28gdGhlCisvLyAgICAgICAgICAgICAgIHN0YXRlIHRoYXQgYW4g
QWNjZXNzQ2FzZSBpcyBpbiB3aGVuIGl0IGlzIGNsb25lZCAoQWNjZXNzQ2FzZTo6Y2xvbmUoKSku
CisvLworLy8gQ29tbWl0dGVkOiAgICBUaGlzIGhhcHBlbnMgYXMgc29vbiBhcyBzb21lIFBvbHlt
b3JwaGljQWNjZXNzIHRha2VzIG93bmVyc2hpcCBvZiB0aGlzIEFjY2Vzc0Nhc2UuCisvLyAgICAg
ICAgICAgICAgIEluIHRoaXMgc3RhdGUsIHRoZSBBY2Nlc3NDYXNlIG5vIGxvbmdlciBhc3N1bWVz
IGFueXRoaW5nIGFib3V0IHRoZSBlcG9jaC4gVG8KKy8vICAgICAgICAgICAgICAgYWNjb21wbGlz
aCB0aGlzLCBQb2x5bW9ycGhpY0FjY2VzcyBjYWxscyBBY2Nlc3NDYXNlOjpjb21taXQoKS4gVGhp
cyBtdXN0IGJlIGRvbmUKKy8vICAgICAgICAgICAgICAgZHVyaW5nIHRoZSBzYW1lIGVwb2NoIHdo
ZW4gdGhlIEFjY2Vzc0Nhc2Ugd2FzIGNyZWF0ZWQsIGVpdGhlciBieSB0aGUgY2xpZW50IG9yIGJ5
CisvLyAgICAgICAgICAgICAgIGNsb25lKCkuIFdoZW4gY3JlYXRlZCBieSB0aGUgY2xpZW50LCBj
b21taXR0aW5nIGR1cmluZyB0aGUgc2FtZSBlcG9jaCB3b3JrcyBiZWNhdXNlCisvLyAgICAgICAg
ICAgICAgIHdlIGNhbiBiZSBzdXJlIHRoYXQgd2hhdGV2ZXIgd2F0Y2hwb2ludCBzZXRzIHRoZXkg
c3Bva2Ugb2YgYXJlIHN0aWxsIHZhbGlkLiBXaGVuCisvLyAgICAgICAgICAgICAgIGNyZWF0ZWQg
YnkgY2xvbmUoKSwgd2UgY2FuIGJlIHN1cmUgdGhhdCB0aGUgc2V0IGlzIHN0aWxsIHZhbGlkIGJl
Y2F1c2UgdGhlIG9yaWdpbmFsCisvLyAgICAgICAgICAgICAgIG9mIHRoZSBjbG9uZSBzdGlsbCBo
YXMgd2F0Y2hwb2ludHMgb24gaXQuCisvLworLy8gR2VuZXJhdGVkOiAgICBUaGlzIGlzIHRoZSBz
dGF0ZSB3aGVuIHRoZSBQb2x5bW9ycGhpY0FjY2VzcyBnZW5lcmF0ZXMgY29kZSBmb3IgdGhpcyBj
YXNlIGJ5CisvLyAgICAgICAgICAgICAgIGNhbGxpbmcgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoKSBv
ciBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgpLiBBdCB0aGlzIHBvaW50CisvLyAgICAg
ICAgICAgICAgIHRoZSBjYXNlIG9iamVjdCB3aWxsIGhhdmUgc29tZSBleHRyYSBzdHVmZiBpbiBp
dCwgbGlrZSBwb3NzaWJseSB0aGUgQ2FsbExpbmtJbmZvCisvLyAgICAgICAgICAgICAgIG9iamVj
dCBhc3NvY2lhdGVkIHdpdGggdGhlIGlubGluZSBjYWNoZS4KKy8vICAgICAgICAgICAgICAgRklY
TUU6IE1vdmluZyBpbnRvIHRoZSBHZW5lcmF0ZWQgc3RhdGUgc2hvdWxkIG5vdCBtdXRhdGUgdGhl
IEFjY2Vzc0Nhc2Ugb2JqZWN0IG9yCisvLyAgICAgICAgICAgICAgIHB1dCBtb3JlIHN0dWZmIGlu
dG8gaXQuIElmIHdlIGZpeCB0aGlzLCB0aGVuIHdlIGNhbiBnZXQgcmlkIG9mIEFjY2Vzc0Nhc2U6
OmNsb25lKCkuCisvLyAgICAgICAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTY0NTYKKy8vCisvLyBBbiBBY2Nlc3NDYXNlIG1heSBiZSBkZXN0cm95ZWQg
d2hpbGUgaW4gYW55IG9mIHRoZXNlIHN0YXRlcy4KKy8vCisvLyBXZSB3aWxsIHNvbWV0aW1lcyBi
dWZmZXIgY29tbWl0dGVkIEFjY2Vzc0Nhc2VzIGluIHRoZSBQb2x5bW9ycGhpY0FjY2VzcyBvYmpl
Y3QgYmVmb3JlIGdlbmVyYXRpbmcKKy8vIGNvZGUuIFRoaXMgYWxsb3dzIHVzIHRvIG9ubHkgcmVn
ZW5lcmF0ZSBvbmNlIHdlJ3ZlIGFjY3VtdWxhdGVkIChob3BlZnVsbHkpIG1vcmUgdGhhbiBvbmUg
bmV3CisvLyBBY2Nlc3NDYXNlLgorY2xhc3MgQWNjZXNzQ2FzZSB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBBY2Nlc3NUeXBlIDogdWludDhfdCB7Cisg
ICAgICAgIExvYWQsCisgICAgICAgIFRyYW5zaXRpb24sCisgICAgICAgIFJlcGxhY2UsCisgICAg
ICAgIE1pc3MsCisgICAgICAgIEdldEdldHRlciwKKyAgICAgICAgR2V0dGVyLAorICAgICAgICBT
ZXR0ZXIsCisgICAgICAgIEN1c3RvbVZhbHVlR2V0dGVyLAorICAgICAgICBDdXN0b21BY2Nlc3Nv
ckdldHRlciwKKyAgICAgICAgQ3VzdG9tVmFsdWVTZXR0ZXIsCisgICAgICAgIEN1c3RvbUFjY2Vz
c29yU2V0dGVyLAorICAgICAgICBJbnRyaW5zaWNHZXR0ZXIsCisgICAgICAgIEluSGl0LAorICAg
ICAgICBJbk1pc3MsCisgICAgICAgIEFycmF5TGVuZ3RoLAorICAgICAgICBTdHJpbmdMZW5ndGgs
CisgICAgICAgIERpcmVjdEFyZ3VtZW50c0xlbmd0aCwKKyAgICAgICAgU2NvcGVkQXJndW1lbnRz
TGVuZ3RoCisgICAgfTsKKworICAgIGVudW0gU3RhdGUgOiB1aW50OF90IHsKKyAgICAgICAgUHJp
bW9yZGlhbCwKKyAgICAgICAgQ29tbWl0dGVkLAorICAgICAgICBHZW5lcmF0ZWQKKyAgICB9Owor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUJiBhcygpIHsgcmV0dXJuICpzdGF0aWNf
Y2FzdDxUKj4odGhpcyk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY29uc3Qg
VCYgYXMoKSBjb25zdCB7IHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgVCo+KHRoaXMpOyB9CisK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFjY2Vzc0Nhc2VUeXBlLCB0eXBlbmFtZS4uLiBBcmd1
bWVudHM+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlVHlwZT4gY3JlYXRl
KEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2VUeXBlPihuZXcgQWNjZXNzQ2FzZVR5cGUoYXJndW1lbnRzLi4uKSk7
CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUo
Vk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNldCA9IGludmFsaWRP
ZmZzZXQsCisgICAgICAgIFN0cnVjdHVyZSogPSBudWxscHRyLCBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKKworICAgIC8v
IFRoaXMgY3JlYXRlIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBmb3IgdHJhbnNpdGlvbnMuCisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwqIG93
bmVyLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCisgICAgICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
PSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFZNJiwgSlNDZWxsKiBvd25l
ciwgU3RydWN0dXJlU3R1YkluZm8mKTsKKworICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZTsgfQorICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZTsgfQorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0
OyB9CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAobV90eXBlID09IFRyYW5zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUt
PnByZXZpb3VzSUQoKTsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOworICAgIH0K
KyAgICBib29sIGd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgY29uc3Q7CisKKyAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09
IFRyYW5zaXRpb24pOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQor
CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKworICAgIHZpcnR1YWwgSlNPYmplY3QqIGFsdGVybmF0
ZUJhc2UoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb25TZXQoKS5zbG90QmFzZUNvbmRpdGlvbigp
Lm9iamVjdCgpOyB9CisgICAgdmlydHVhbCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0KCkg
Y29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgYm9vbCB2aWFQcm94eSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAvLyBJZiB5b3Ugc3VwcGx5IHRoZSBvcHRpb25h
bCB2ZWN0b3IsIHRoaXMgd2lsbCBhcHBlbmQgdGhlIHNldCBvZiBjZWxscyB0aGF0IHRoaXMgd2ls
bCBuZWVkIHRvIGtlZXAgYWxpdmUKKyAgICAvLyBwYXN0IHRoZSBjYWxsLgorICAgIGJvb2wgZG9l
c0NhbGxzKFZlY3RvcjxKU0NlbGwqPiogY2VsbHNUb01hcmsgPSBudWxscHRyKSBjb25zdDsKKwor
ICAgIGJvb2wgaXNHZXR0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKCkp
IHsKKyAgICAgICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tVmFsdWVHZXR0ZXI6
CisgICAgICAgIGNhc2UgQ3VzdG9tQWNjZXNzb3JHZXR0ZXI6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGJvb2wgaXNBY2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIGlzR2V0
dGVyKCkgfHwgdHlwZSgpID09IFNldHRlcjsgfQorCisgICAgLy8gSXMgaXQgc3RpbGwgcG9zc2li
bGUgZm9yIHRoaXMgY2FzZSB0byBldmVyIGJlIHRha2VuPyBNdXN0IGNhbGwgdGhpcyBhcyBhIHBy
ZXJlcXVpc2l0ZSBmb3IKKyAgICAvLyBjYWxsaW5nIGdlbmVyYXRlKCkgYW5kIGZyaWVuZHMuIElm
IHRoaXMgcmV0dXJucyB0cnVlLCB0aGVuIHlvdSBjYW4gY2FsbCBnZW5lcmF0ZSgpLiBJZgorICAg
IC8vIHRoaXMgcmV0dXJucyBmYWxzZSwgdGhlbiBnZW5lcmF0ZSgpIHdpbGwgY3Jhc2guIFlvdSBt
dXN0IGNhbGwgZ2VuZXJhdGUoKSBpbiB0aGUgc2FtZSBlcG9jaAorICAgIC8vIGFzIHdoZW4geW91
IGNhbGxlZCBjb3VsZFN0aWxsU3VjY2VlZCgpLgorICAgIGJvb2wgY291bGRTdGlsbFN1Y2NlZWQo
KSBjb25zdDsKKworICAgIC8vIElmIHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhlbiBpdCdz
IGEgZ29vZCBpZGVhIHRvIHJlbW92ZSAnb3RoZXInIGZyb20gdGhlIGFjY2VzcyBvbmNlICd0aGlz
JworICAgIC8vIGlzIGFkZGVkLiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgaW4gY2FzZSBvZiBj
b250cmFkaWN0aW9ucywgJ3RoaXMnIHJlcHJlc2VudHMgYSBuZXdlciwgYW5kIHNvCisgICAgLy8g
bW9yZSB1c2VmdWwsIHRydXRoLiBUaGlzIG1ldGhvZCBjYW4gYmUgY29uc2VydmF0aXZlOyBpdCB3
aWxsIHJldHVybiBmYWxzZSB3aGVuIGl0IGRvdWJ0LgorICAgIGJvb2wgY2FuUmVwbGFjZShjb25z
dCBBY2Nlc3NDYXNlJiBvdGhlcikgY29uc3Q7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJiwgQ29t
bWFQcmludGVyJikgY29uc3QgeyB9CisKKyAgICB2aXJ0dWFsIH5BY2Nlc3NDYXNlKCk7CisKK3By
b3RlY3RlZDoKKyAgICBBY2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwg
UHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0Jik7CisgICAgQWNjZXNzQ2FzZShjb25zdCBBY2Nlc3NDYXNlJikgPSBkZWZhdWx0OworICAg
IEFjY2Vzc0Nhc2UmIG9wZXJhdG9yPShjb25zdCBBY2Nlc3NDYXNlJikgPSBkZWxldGU7CisgICAg
dm9pZCByZXNldFN0YXRlKCkgeyBtX3N0YXRlID0gUHJpbW9yZGlhbDsgfQorCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CisgICAgZnJpZW5kIGNsYXNzIFBvbHltb3JwaGlj
QWNjZXNzOworCisgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKyAgICBib29sIHByb3Bh
Z2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJikgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogVGhp
cyBvbmx5IGV4aXN0cyBiZWNhdXNlIG9mIGhvdyBBY2Nlc3NDYXNlIHB1dHMgcG9zdC1nZW5lcmF0
aW9uIHRoaW5ncyBpbnRvIGl0c2VsZi4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTU2NDU2CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gY2xvbmUoKSBjb25zdDsKKworICAgIC8vIFBlcmZvcm0gYW55IGFjdGlvbiB0aGF0IG11
c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBlcG9jaCBpbiB3aGljaCB0aGUg
Y2FzZQorICAgIC8vIHdhcyBjcmVhdGVkLiBSZXR1cm5zIGEgc2V0IG9mIHdhdGNocG9pbnQgc2V0
cyB0aGF0IHdpbGwgbmVlZCB0byBiZSB3YXRjaGVkLgorICAgIFZlY3RvcjxXYXRjaHBvaW50U2V0
KiwgMj4gY29tbWl0KFZNJiwgY29uc3QgSWRlbnRpZmllciYpOworCisgICAgLy8gRmFsbCB0aHJv
dWdoIG9uIHN1Y2Nlc3MuIFR3byBraW5kcyBvZiBmYWlsdXJlcyBhcmUgc3VwcG9ydGVkOiBmYWxs
LXRocm91Z2gsIHdoaWNoIG1lYW5zIHRoYXQgd2UKKyAgICAvLyBzaG91bGQgdHJ5IGEgZGlmZmVy
ZW50IGNhc2U7IGFuZCBmYWlsdXJlLCB3aGljaCBtZWFucyB0aGF0IHRoaXMgd2FzIHRoZSByaWdo
dCBjYXNlIGJ1dCBpdCBuZWVkcworICAgIC8vIGhlbHAgZnJvbSB0aGUgc2xvdyBwYXRoLgorICAg
IHZvaWQgZ2VuZXJhdGVXaXRoR3VhcmQoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCk7CisKKyAgICAvLyBGYWxsIHRocm91Z2ggb24g
c3VjY2VzcywgYWRkIGEganVtcCB0byB0aGUgZmFpbHVyZSBsaXN0IG9uIGZhaWx1cmUuCisgICAg
dm9pZCBnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmKTsKKworICAgIHZvaWQgZ2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYpOworCisgICAgQWNjZXNzVHlwZSBtX3R5cGU7
CisgICAgU3RhdGUgbV9zdGF0ZSB7IFByaW1vcmRpYWwgfTsKKyAgICBQcm9wZXJ0eU9mZnNldCBt
X29mZnNldDsKKworICAgIC8vIFVzdWFsbHkgdGhpcyBpcyB0aGUgc3RydWN0dXJlIHRoYXQgd2Ug
ZXhwZWN0IHRoZSBiYXNlIG9iamVjdCB0byBoYXZlLiBCdXQsIHRoaXMgaXMgdGhlICpuZXcqCisg
ICAgLy8gc3RydWN0dXJlIGZvciBhIHRyYW5zaXRpb24gYW5kIHdlIHJlbHkgb24gdGhlIGZhY3Qg
dGhhdCBpdCBoYXMgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBvbGQKKyAgICAvLyBzdHJ1Y3R1
cmUuIEZvciBwcm94aWVzLCB0aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG9iamVjdCBiZWhp
bmQgdGhlIHByb3h5LgorICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwor
CisgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKaW5kZXggYTZjNDU4Y2I3M2JlNTc1MmQ5OGQyNTVi
MzdjOTlkNWFlYjQyMzM3ZC4uZWI1NzFmZjk5ZjcxMzM5NGZlMTc0NjQ3NTk4NzEyNzY2YzJlMjE4
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVz
LmNwcApAQCAtMjgsNiArMjgsOCBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiQ29tcGxleEdldFN0YXR1cy5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2Uu
aCIKKyNpbmNsdWRlICJJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTU2NvcGUuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIK
QEAgLTIzMSwxOSArMjMzLDE5IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nh
c2U6OkludHJpbnNpY0dldHRlcjogewotICAgICAgICAgICAgICAgICAgICBpbnRyaW5zaWNGdW5j
dGlvbiA9IGFjY2Vzcy5pbnRyaW5zaWNGdW5jdGlvbigpOworICAgICAgICAgICAgICAgICAgICBp
bnRyaW5zaWNGdW5jdGlvbiA9IGFjY2Vzcy5hczxJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlPigp
LmludHJpbnNpY0Z1bmN0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkdldHRlcjogewog
ICAgICAgICAgICAgICAgICAgICBjYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2Fs
bExpbmtTdGF0dXM+KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbyA9IGFjY2Vzcy5jYWxsTGlua0luZm8oKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBhY2Nlc3MuYXM8R2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
KmNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBj
YWxsRXhpdFNpdGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBBY2Nl
c3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlcjogewotICAgICAgICAgICAgICAgICAgICBkb21K
SVQgPSBhY2Nlc3MuZG9tSklUKCk7CisgICAgICAgICAgICAgICAgICAgIGRvbUpJVCA9IGFjY2Vz
cy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmRvbUpJVCgpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoIWRvbUpJVCkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlk
U3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQu
bV9zdGF0ZSA9IEN1c3RvbTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wY2FiMWRhMDZj
M2VhNmZlNzk0NjkyZmNlODIyNDcxOWQyYzgyNjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCkBAIC0w
LDAgKzEsMjM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2Uu
aCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJET01KSVRBY2Nlc3NDYXNlUGF0Y2hw
b2ludFBhcmFtcy5oIgorI2luY2x1ZGUgIkRPTUpJVENhbGxET01HZXR0ZXJQYXRjaHBvaW50Lmgi
CisjaW5jbHVkZSAiRE9NSklUR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNB
Y2Nlc3MuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorCituYW1lc3BhY2UgSlND
IHsKKworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
QWNjZXNzVHlwZSBhY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0
LCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LCBKU09iamVjdCog
Y3VzdG9tU2xvdEJhc2UpCisgICAgOiBCYXNlKHZtLCBvd25lciwgYWNjZXNzVHlwZSwgb2Zmc2V0
LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgdmlhUHJveHksIGFkZGl0aW9uYWxTZXQpCit7Cisg
ICAgbV9jdXN0b21TbG90QmFzZS5zZXRNYXlCZU51bGwodm0sIG93bmVyLCBjdXN0b21TbG90QmFz
ZSk7Cit9CisKKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEdldHRlclNldHRlckFjY2Vz
c0Nhc2U6OmNyZWF0ZSgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlw
ZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBib29sIHZpYVByb3h5
LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LAorICAgIFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jIGN1c3RvbUdldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLCBET01KSVQ6Okdl
dHRlclNldHRlciogZG9tSklUKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR2V0
dGVyOgorICAgIGNhc2UgQ3VzdG9tQWNjZXNzb3JHZXR0ZXI6CisgICAgY2FzZSBDdXN0b21WYWx1
ZUdldHRlcjoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlPiByZXN1bHQobmV3IEdldHRlclNldHRlckFjY2Vzc0Nhc2Uodm0sIG93bmVyLCB0
eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCB2aWFQcm94eSwgYWRkaXRpb25h
bFNldCwgY3VzdG9tU2xvdEJhc2UpKTsKKyAgICByZXN1bHQtPm1fZG9tSklUID0gZG9tSklUOwor
ICAgIHJlc3VsdC0+bV9jdXN0b21BY2Nlc3Nvci5nZXR0ZXIgPSBjdXN0b21HZXR0ZXI7CisgICAg
cmV0dXJuIFdURk1vdmUocmVzdWx0KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFj
Y2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCisgICAgSlNPYmplY3Qq
IGN1c3RvbVNsb3RCYXNlKQoreworICAgIEFTU0VSVCh0eXBlID09IFNldHRlciB8fCB0eXBlID09
IEN1c3RvbVZhbHVlU2V0dGVyIHx8IHR5cGUgPT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEdldHRl
clNldHRlckFjY2Vzc0Nhc2Uodm0sIG93bmVyLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29u
ZGl0aW9uU2V0LCBmYWxzZSwgbnVsbHB0ciwgY3VzdG9tU2xvdEJhc2UpKTsKKyAgICByZXN1bHQt
Pm1fY3VzdG9tQWNjZXNzb3Iuc2V0dGVyID0gY3VzdG9tU2V0dGVyOworICAgIHJldHVybiBXVEZN
b3ZlKHJlc3VsdCk7Cit9CisKKworR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6fkdldHRlclNldHRl
ckFjY2Vzc0Nhc2UoKQoreworfQorCisKK0dldHRlclNldHRlckFjY2Vzc0Nhc2U6OkdldHRlclNl
dHRlckFjY2Vzc0Nhc2UoY29uc3QgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSYgb3RoZXIpCisgICAg
OiBCYXNlKG90aGVyKQorICAgICwgbV9jdXN0b21TbG90QmFzZShvdGhlci5tX2N1c3RvbVNsb3RC
YXNlKQoreworICAgIG1fY3VzdG9tQWNjZXNzb3Iub3BhcXVlID0gb3RoZXIubV9jdXN0b21BY2Nl
c3Nvci5vcGFxdWU7CisgICAgbV9kb21KSVQgPSBvdGhlci5tX2RvbUpJVDsKK30KKworc3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNsb25lKCkgY29u
c3QKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4gcmVzdWx0
KG5ldyBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKCp0aGlzKSk7CisgICAgcmVzdWx0LT5yZXNldFN0
YXRlKCk7CisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKK30KKworSlNPYmplY3QqIEdldHRl
clNldHRlckFjY2Vzc0Nhc2U6OmFsdGVybmF0ZUJhc2UoKSBjb25zdAoreworICAgIGlmIChjdXN0
b21TbG90QmFzZSgpKQorICAgICAgICByZXR1cm4gY3VzdG9tU2xvdEJhc2UoKTsKKyAgICByZXR1
cm4gY29uZGl0aW9uU2V0KCkuc2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKTsKK30KKwordm9p
ZCBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0LCBDb21t
YVByaW50ZXImIGNvbW1hKSBjb25zdAoreworICAgIEJhc2U6OmR1bXBJbXBsKG91dCwgY29tbWEp
OworICAgIG91dC5wcmludChjb21tYSwgImN1c3RvbVNsb3RCYXNlID0gIiwgUmF3UG9pbnRlcihj
dXN0b21TbG90QmFzZSgpKSk7CisgICAgaWYgKGNhbGxMaW5rSW5mbygpKQorICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJjYWxsTGlua0luZm8gPSAiLCBSYXdQb2ludGVyKGNhbGxMaW5rSW5mbygp
KSk7CisgICAgb3V0LnByaW50KGNvbW1hLCAiY3VzdG9tQWNjZXNzb3IgPSAiLCBSYXdQb2ludGVy
KG1fY3VzdG9tQWNjZXNzb3Iub3BhcXVlKSk7Cit9CisKK3ZvaWQgR2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZTo6ZW1pdERPTUpJVEdldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBHUFJS
ZWcgYmFzZUZvckdldEdQUikKK3sKKyAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7
CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKnN0YXRlLnN0dWJJbmZvOworICAg
IEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHN0YXRlLnZhbHVlUmVnczsKKyAgICBHUFJSZWcgYmFz
ZUdQUiA9IHN0YXRlLmJhc2VHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0ZS5zY3Jh
dGNoR1BSOworCisgICAgLy8gV2UgY29uc3RydWN0IHRoZSBlbnZpcm9ubWVudCB0aGF0IGNhbiBl
eGVjdXRlIHRoZSBET01KSVQ6OlBhdGNocG9pbnQgaGVyZS4KKyAgICBSZWY8RE9NSklUOjpDYWxs
RE9NR2V0dGVyUGF0Y2hwb2ludD4gcGF0Y2hwb2ludCA9IGRvbUpJVCgpLT5jYWxsRE9NR2V0dGVy
KCk7CisKKyAgICBWZWN0b3I8R1BSUmVnPiBncFNjcmF0Y2g7CisgICAgVmVjdG9yPEZQUlJlZz4g
ZnBTY3JhdGNoOworICAgIFZlY3RvcjxET01KSVQ6OlZhbHVlPiByZWdzOworCisgICAgU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJz
KTsKKyAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQor
ICAgIGFsbG9jYXRvci5sb2NrKHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFz
ZVRhZ0dQUikpOworI2VuZGlmCisgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKKyAgICBh
bGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKKworICAgIEdQUlJlZyBwYXJhbUJhc2VHUFIgPSBJ
bnZhbGlkR1BSUmVnOworICAgIEdQUlJlZyBwYXJhbUdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRH
UFJSZWc7CisgICAgSlNWYWx1ZVJlZ3MgcGFyYW1WYWx1ZVJlZ3MgPSB2YWx1ZVJlZ3M7CisgICAg
R1BSUmVnIHJlbWFpbmluZ1NjcmF0Y2hHUFIgPSBJbnZhbGlkR1BSUmVnOworCisgICAgLy8gdmFs
dWVSZWdzIGFuZCBiYXNlRm9yR2V0R1BSIG1heSBiZSB0aGUgc2FtZS4gRm9yIGV4YW1wbGUsIGlu
IEJhc2VsaW5lIEpJVCwgd2UgcGFzcyB0aGUgc2FtZSByZWdUMCBmb3IgYmFzZUdQUiBhbmQgdmFs
dWVSZWdzLgorICAgIC8vIEluIEZUTCwgdGhlcmUgaXMgbm8gY29uc3RyYWludCB0aGF0IHRoZSBi
YXNlRm9yR2V0R1BSIGludGVyZmVyZXMgd2l0aCB0aGUgcmVzdWx0LiBUbyBtYWtlIGltcGxlbWVu
dGF0aW9uIHNpbXBsZSBpbgorICAgIC8vIERPTUpJVDo6UGF0Y2hwb2ludCwgRE9NSklUOjpQYXRj
aHBvaW50IGFzc3VtZXMgdGhhdCByZXN1bHQgcmVnaXN0ZXJzIGFsd2F5cyBlYXJseSBpbnRlcmZl
cmUgd2l0aCBpbnB1dCByZWdpc3RlcnMsIGluIHRoaXMgY2FzZSwKKyAgICAvLyBiYXNlRm9yR2V0
R1BSLiBTbyB3ZSBtb3ZlIGJhc2VGb3JHZXRHUFIgdG8gdGhlIG90aGVyIHJlZ2lzdGVyIGlmIGJh
c2VGb3JHZXRHUFIgPT0gdmFsdWVSZWdzLgorICAgIGlmIChiYXNlRm9yR2V0R1BSICE9IHZhbHVl
UmVncy5wYXlsb2FkR1BSKCkpIHsKKyAgICAgICAgcGFyYW1CYXNlR1BSID0gYmFzZUZvckdldEdQ
UjsKKyAgICAgICAgaWYgKCFwYXRjaHBvaW50LT5yZXF1aXJlR2xvYmFsT2JqZWN0KQorICAgICAg
ICAgICAgcmVtYWluaW5nU2NyYXRjaEdQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHBhcmFtR2xvYmFsT2JqZWN0R1BSID0gc2NyYXRjaEdQUjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBqaXQubW92ZSh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgcGFyYW1CYXNlR1BSID0gc2NyYXRjaEdQUjsKKyAgICAgICAgaWYgKHBhdGNocG9p
bnQtPnJlcXVpcmVHbG9iYWxPYmplY3QpCisgICAgICAgICAgICBwYXJhbUdsb2JhbE9iamVjdEdQ
UiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICB9CisKKyAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0Rm9yRE9NSklUID0gc3RydWN0dXJlKCktPmdsb2JhbE9iamVj
dCgpOworCisgICAgcmVncy5hcHBlbmQocGFyYW1WYWx1ZVJlZ3MpOworICAgIHJlZ3MuYXBwZW5k
KHBhcmFtQmFzZUdQUik7CisgICAgaWYgKHBhdGNocG9pbnQtPnJlcXVpcmVHbG9iYWxPYmplY3Qp
IHsKKyAgICAgICAgQVNTRVJUKHBhcmFtR2xvYmFsT2JqZWN0R1BSICE9IEludmFsaWRHUFJSZWcp
OworICAgICAgICByZWdzLmFwcGVuZChET01KSVQ6OlZhbHVlKHBhcmFtR2xvYmFsT2JqZWN0R1BS
LCBnbG9iYWxPYmplY3RGb3JET01KSVQpKTsKKyAgICB9CisKKyAgICBpZiAocGF0Y2hwb2ludC0+
bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKSB7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAg
ICBpZiAocmVtYWluaW5nU2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAg
ICBncFNjcmF0Y2guYXBwZW5kKHJlbWFpbmluZ1NjcmF0Y2hHUFIpOworICAgICAgICAgICAgKytp
OworICAgICAgICB9CisgICAgICAgIGZvciAoOyBpIDwgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNo
UmVnaXN0ZXJzOyArK2kpCisgICAgICAgICAgICBncFNjcmF0Y2guYXBwZW5kKGFsbG9jYXRvci5h
bGxvY2F0ZVNjcmF0Y2hHUFIoKSk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVyczsgKytpKQorICAgICAgICBmcFNj
cmF0Y2guYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hGUFIoKSk7CisKKyAgICAvLyBM
ZXQncyBzdG9yZSB0aGUgcmV1c2VkIHJlZ2lzdGVycyB0byB0aGUgc3RhY2suIEFmdGVyIHRoYXQs
IHdlIGNhbiB1c2UgYWxsb2NhdGVkIHNjcmF0Y2ggcmVnaXN0ZXJzLgorICAgIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6UHJlc2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGUgPQorICAgIGFsbG9j
YXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKKworICAgIGlmICh2
ZXJib3NlKSB7CisgICAgICAgIGRhdGFMb2coImJhc2VHUFIgPSAiLCBiYXNlR1BSLCAiXG4iKTsK
KyAgICAgICAgZGF0YUxvZygidmFsdWVSZWdzID0gIiwgdmFsdWVSZWdzLCAiXG4iKTsKKyAgICAg
ICAgZGF0YUxvZygic2NyYXRjaEdQUiA9ICIsIHNjcmF0Y2hHUFIsICJcbiIpOworICAgICAgICBk
YXRhTG9nKCJwYXJhbUJhc2VHUFIgPSAiLCBwYXJhbUJhc2VHUFIsICJcbiIpOworICAgICAgICBp
ZiAocGFyYW1HbG9iYWxPYmplY3RHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGRh
dGFMb2coInBhcmFtR2xvYmFsT2JqZWN0R1BSID0gIiwgcGFyYW1HbG9iYWxPYmplY3RHUFIsICJc
biIpOworICAgICAgICBkYXRhTG9nKCJwYXJhbVZhbHVlUmVncyA9ICIsIHBhcmFtVmFsdWVSZWdz
LCAiXG4iKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhdGNocG9pbnQtPm51
bUdQU2NyYXRjaFJlZ2lzdGVyczsgKytpKQorICAgICAgICAgICAgZGF0YUxvZygiZ3BTY3JhdGNo
WyIsIGksICJdID0gIiwgZ3BTY3JhdGNoW2ldLCAiXG4iKTsKKyAgICB9CisKKyAgICBpZiAocGF0
Y2hwb2ludC0+cmVxdWlyZUdsb2JhbE9iamVjdCkKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdEZvckRPTUpJVCksIHBhcmFtR2xvYmFsT2Jq
ZWN0R1BSKTsKKworICAgIC8vIFdlIGp1c3Qgc3BpbGwgdGhlIHJlZ2lzdGVycyB1c2VkIGluIERP
TUpJVDo6UGF0Y2hwb2ludCBoZXJlLiBGb3Igbm90IHNwaWxsZWQgcmVnaXN0ZXJzIGhlcmUgZXhw
bGljaXRseSwKKyAgICAvLyB0aGV5IG11c3QgYmUgaW4gdGhlIHVzZWQgcmVnaXN0ZXIgc2V0IHBh
c3NlZCBieSB0aGUgY2FsbGVycyAoQmFzZWxpbmUsIERGRywgYW5kIEZUTCkgaWYgdGhleSBuZWVk
IHRvIGJlIGtlcHQuCisgICAgLy8gU29tZSByZWdpc3RlcnMgY2FuIGJlIGxvY2tlZCwgYnV0IG5v
dCBpbiB0aGUgdXNlZCByZWdpc3RlciBzZXQuIEZvciBleGFtcGxlLCB0aGUgY2FsbGVyIGNvdWxk
IG1ha2UgYmFzZUdQUgorICAgIC8vIHNhbWUgdG8gdmFsdWVSZWdzLCBhbmQgbm90IGluY2x1ZGUg
aXQgaW4gdGhlIHVzZWQgcmVnaXN0ZXJzIHNpbmNlIGl0IHdpbGwgYmUgY2hhbmdlZC4KKyAgICBS
ZWdpc3RlclNldCByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGw7CisgICAgZm9yIChhdXRvJiB2YWx1
ZSA6IHJlZ3MpIHsKKyAgICAgICAgRE9NSklUOjpSZWcgcmVnID0gdmFsdWUucmVnKCk7CisgICAg
ICAgIGlmIChyZWcuaXNKU1ZhbHVlUmVncygpKQorICAgICAgICAgICAgcmVnaXN0ZXJzVG9TcGls
bEZvckNDYWxsLnNldChyZWcuanNWYWx1ZVJlZ3MoKSk7CisgICAgICAgIGVsc2UgaWYgKHJlZy5p
c0dQUigpKQorICAgICAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChyZWcuZ3By
KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwu
c2V0KHJlZy5mcHIoKSk7CisgICAgfQorICAgIGZvciAoR1BSUmVnIHJlZyA6IGdwU2NyYXRjaCkK
KyAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChyZWcpOworICAgIGZvciAoRlBS
UmVnIHJlZyA6IGZwU2NyYXRjaCkKKyAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNl
dChyZWcpOworICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5leGNsdWRlKFJlZ2lzdGVyU2V0
OjpyZWdpc3RlcnNUb05vdFNhdmVGb3JDQ2FsbCgpKTsKKworICAgIERPTUpJVEFjY2Vzc0Nhc2VQ
YXRjaHBvaW50UGFyYW1zIHBhcmFtcyhXVEZNb3ZlKHJlZ3MpLCBXVEZNb3ZlKGdwU2NyYXRjaCks
IFdURk1vdmUoZnBTY3JhdGNoKSk7CisgICAgcGF0Y2hwb2ludC0+Z2VuZXJhdG9yKCktPnJ1bihq
aXQsIHBhcmFtcyk7CisgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBp
bmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAgc3RhdGUuc3VjY2VlZCgpOworICAgIAorICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9ucyA9IHBhcmFtcy5lbWl0U2xvd1BhdGhD
YWxscyhzdGF0ZSwgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLCBqaXQpOworICAgIGlmICghZXhj
ZXB0aW9ucy5lbXB0eSgpKSB7CisgICAgICAgIGV4Y2VwdGlvbnMubGluaygmaml0KTsKKyAgICAg
ICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2
ZWRTdGF0ZSk7CisgICAgICAgIHN0YXRlLmVtaXRFeHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIoKTsK
KyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2MTkyZGFjMjQyYWZmNTIzMGNlM2Y2YjU1MzQxZDIz
M2Q0ZjdlOGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShKSVQpCisKKyNpbmNsdWRlICJQcm94eWFibGVBY2Nlc3NDYXNlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlIDogcHVibGljIFByb3h5YWJs
ZUFjY2Vzc0Nhc2UgeworcHVibGljOgorICAgIHR5cGVkZWYgUHJveHlhYmxlQWNjZXNzQ2FzZSBC
YXNlOworICAgIGZyaWVuZCBjbGFzcyBBY2Nlc3NDYXNlOworCisgICAgLy8gVGhpcyBjYW4gcmV0
dXJuIG51bGwgaWYgaXQgaGFzbid0IGJlZW4gZ2VuZXJhdGVkIHlldC4gVGhhdCdzCisgICAgLy8g
YWN0dWFsbHkgc29tZXdoYXQgbGlrZWx5IGJlY2F1c2Ugb2YgaG93IHdlIGRvIGJ1ZmZlcmluZyBv
ZiBuZXcgY2FzZXMuCisgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8oKSBjb25zdCB7IHJl
dHVybiBtX2NhbGxMaW5rSW5mby5nZXQoKTsgfQorICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFz
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tU2xvdEJhc2UuZ2V0KCk7IH0KKyAgICBET01KSVQ6
OkdldHRlclNldHRlciogZG9tSklUKCkgY29uc3QgeyByZXR1cm4gbV9kb21KSVQ7IH0KKworICAg
IEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGVt
aXRET01KSVRHZXR0ZXIoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiwgR1BSUmVnIGJhc2VGb3JHZXRH
UFIpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoCisg
ICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0
cnVjdHVyZSosCisgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCisgICAgICAgIGJvb2wgdmlhUHJveHkgPSBmYWxz
ZSwKKyAgICAgICAgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCA9IG51bGxwdHIsCisgICAg
ICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jID0gbnVsbHB0ciwKKyAgICAgICAgSlNPYmpl
Y3QqIGN1c3RvbVNsb3RCYXNlID0gbnVsbHB0ciwKKyAgICAgICAgRE9NSklUOjpHZXR0ZXJTZXR0
ZXIqID0gbnVsbHB0cik7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IGNyZWF0ZShWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFN0cnVjdHVyZSosIFByb3Bl
cnR5T2Zmc2V0LAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFB1
dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jID0gbnVsbHB0ciwKKyAgICAgICAgSlNPYmplY3Qq
IGN1c3RvbVNsb3RCYXNlID0gbnVsbHB0cik7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3Ry
ZWFtJiwgQ29tbWFQcmludGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB+R2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZSgpOworCitwcml2YXRlOgorICAgIEdldHRlclNldHRlckFjY2Vzc0Nhc2UoVk0m
LCBKU0NlbGwqLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0
KiBhZGRpdGlvbmFsU2V0LCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UpOworCisgICAgR2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZShjb25zdCBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlJik7CisKKyAgICBX
cml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fY3VzdG9tU2xvdEJhc2U7CisgICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm87CisgICAgdW5pb24geworICAgICAgICBQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBzZXR0ZXI7CisgICAgICAgIFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jIGdldHRlcjsKKyAgICAgICAgdm9pZCogb3BhcXVlOworICAgIH0gbV9j
dXN0b21BY2Nlc3NvcjsKKyAgICBET01KSVQ6OkdldHRlclNldHRlciogbV9kb21KSVQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50cmluc2ljR2V0dGVyQWNjZXNzQ2Fz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50cmluc2ljR2V0dGVyQWNj
ZXNzQ2FzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDBlNjM5MDcwZmVkNTQwNDMzZTRmNmM2MTBmZTczYmU4
MmQ1ZTBkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcApAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaCIKKworI2lmIEVOQUJMRShK
SVQpCisKK25hbWVzcGFjZSBKU0MgeworCitJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpJbnRy
aW5zaWNHZXR0ZXJBY2Nlc3NDYXNlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCwgSlNGdW5jdGlvbiogaW50cmluc2ljRnVuY3Rpb24pCisg
ICAgOiBCYXNlKHZtLCBvd25lciwgSW50cmluc2ljR2V0dGVyLCBvZmZzZXQsIHN0cnVjdHVyZSwg
Y29uZGl0aW9uU2V0KQoreworICAgIG1faW50cmluc2ljRnVuY3Rpb24uc2V0KHZtLCBvd25lciwg
aW50cmluc2ljRnVuY3Rpb24pOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gSW50
cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgSlNGdW5jdGlvbiogaW50cmluc2ljRnVu
Y3Rpb24pCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPihuZXcgSW50
cmluc2ljR2V0dGVyQWNjZXNzQ2FzZSh2bSwgb3duZXIsIG9mZnNldCwgc3RydWN0dXJlLCBjb25k
aXRpb25TZXQsIGludHJpbnNpY0Z1bmN0aW9uKSk7Cit9CisKK0ludHJpbnNpY0dldHRlckFjY2Vz
c0Nhc2U6On5JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlKCkKK3sKK30KKworc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OmNsb25lKCkgY29uc3QK
K3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZT4gcmVzdWx0
KG5ldyBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlKCp0aGlzKSk7CisgICAgcmVzdWx0LT5yZXNl
dFN0YXRlKCk7CisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0ludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTAyMWMxOGU2ZGIwZjFkYjVmMmIzZDE0ZjJhNGRmNTcwNTlhNmRmZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRyaW5zaWNHZXR0ZXJB
Y2Nlc3NDYXNlLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEpJVCkKKworI2lu
Y2x1ZGUgIkFjY2Vzc0Nhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEludHJpbnNp
Y0dldHRlckFjY2Vzc0Nhc2UgOiBwdWJsaWMgQWNjZXNzQ2FzZSB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBBY2Nlc3NDYXNlIEJhc2U7CisgICAgZnJpZW5kIGNsYXNzIEFjY2Vzc0Nhc2U7CisKKyAg
ICBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW50cmlu
c2ljRnVuY3Rpb24uZ2V0KCk7IH0KKyAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnRyaW5zaWNGdW5jdGlvbi0+aW50cmluc2ljKCk7IH0KKworICAgIHN0YXRpYyBi
b29sIGNhbkVtaXRJbnRyaW5zaWNHZXR0ZXIoSlNGdW5jdGlvbiosIFN0cnVjdHVyZSopOworICAg
IHZvaWQgZW1pdEludHJpbnNpY0dldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmKTsKKworICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiwg
UHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiwgSlNGdW5jdGlvbiogaW50cmluc2ljRnVuY3Rpb24pOworCisgICAgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB+SW50cmluc2lj
R2V0dGVyQWNjZXNzQ2FzZSgpOworCitwcml2YXRlOgorICAgIEludHJpbnNpY0dldHRlckFjY2Vz
c0Nhc2UoVk0mLCBKU0NlbGwqLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbik7
CisKKyAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gbV9pbnRyaW5zaWNGdW5jdGlvbjsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCmlu
ZGV4IDNjZDE5ODRmOGRkNjdmZTc3ZGEyN2I4ZTdmYzg4NzFiZmJjNDRmZjguLjBjZWMwMjYyNzA3
Zjk0ZTgxZmU1NzA1OWM4YzBmY2U2ZWVlOWQ4OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcApAQCAtMzEsMTYgKzMxLDEw
IEBACiAjaW5jbHVkZSAiQmluYXJ5U3dpdGNoLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgi
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiRE9NSklUQWNjZXNzQ2FzZVBhdGNo
cG9pbnRQYXJhbXMuaCIKLSNpbmNsdWRlICJET01KSVRDYWxsRE9NR2V0dGVyUGF0Y2hwb2ludC5o
IgotI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIkdldHRlclNldHRlci5o
IgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJTY29w
ZWRBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNp
bmNsdWRlICJTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlU3R1YkluZm8uaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CkBAIC0yMTAs
MTM1OCArMjA0LDYgQEAgdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRFeHBsaWNpdEV4
Y2VwdGlvbkhhbmRsZXIoKQogICAgIH0KIH0KIAotQWNjZXNzQ2FzZTo6QWNjZXNzQ2FzZSgpCi17
Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjp0cnlHZXQoCi0g
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCog
YWRkaXRpb25hbFNldCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0
KG5ldyBBY2Nlc3NDYXNlKCkpOwotCi0gICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJl
c3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0s
IG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25kaXRp
b25TZXQ7Ci0KLSAgICBpZiAodmlhUHJveHkgfHwgYWRkaXRpb25hbFNldCkgewotICAgICAgICBy
ZXN1bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOwotICAgICAg
ICByZXN1bHQtPm1fcmFyZURhdGEtPnZpYVByb3h5ID0gdmlhUHJveHk7Ci0gICAgICAgIHJlc3Vs
dC0+bV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldCA9IGFkZGl0aW9uYWxTZXQ7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vz
c0Nhc2U6OmdldCgKLSAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKLSAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBib29sIHZpYVByb3h5LCBX
YXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0LAotICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jIGN1c3RvbUdldHRlciwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlLCBET01KSVQ6OkdldHRl
clNldHRlciogZG9tSklUKQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1
bHQobmV3IEFjY2Vzc0Nhc2UoKSk7Ci0KLSAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7Ci0gICAg
cmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKLSAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2
bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRp
dGlvblNldDsKLQotICAgIGlmICh2aWFQcm94eSB8fCBhZGRpdGlvbmFsU2V0IHx8IHJlc3VsdC0+
ZG9lc0NhbGxzKCkgfHwgY3VzdG9tR2V0dGVyIHx8IGN1c3RvbVNsb3RCYXNlIHx8IGRvbUpJVCkg
ewotICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRh
PigpOwotICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPnZpYVByb3h5ID0gdmlhUHJveHk7Ci0g
ICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldCA9IGFkZGl0aW9uYWxTZXQ7
Ci0gICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3IuZ2V0dGVyID0gY3Vz
dG9tR2V0dGVyOwotICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlLnNl
dE1heUJlTnVsbCh2bSwgb3duZXIsIGN1c3RvbVNsb3RCYXNlKTsKLSAgICAgICAgcmVzdWx0LT5t
X3JhcmVEYXRhLT5kb21KSVQgPSBkb21KSVQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6Om1lZ2Ftb3JwaGlj
TG9hZChWTSYgdm0sIEpTQ2VsbCogb3duZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAg
ICBVTlVTRURfUEFSQU0ob3duZXIpOwotICAgIAotICAgIGlmIChHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVycyA8IDkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7Ci0gICAgCi0gICAg
cmVzdWx0LT5tX3R5cGUgPSBNZWdhbW9ycGhpY0xvYWQ7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnJlcGxhY2Uo
Ci0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1
bHQobmV3IEFjY2Vzc0Nhc2UoKSk7Ci0KLSAgICByZXN1bHQtPm1fdHlwZSA9IFJlcGxhY2U7Ci0g
ICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKLSAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNl
dCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGQ6
OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbigKLSAgICBWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQob2xk
U3RydWN0dXJlID09IG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpKTsKLQotICAgIC8vIFNraXAg
b3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3Qg
aGF2ZQotICAgIC8vIGVub3VnaCByZWdpc3RlcnMgdG8gbWFrZSBpdCBoYXBwZW4uCi0gICAgaWYg
KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgNgotICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
Ci0gICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOwotCi0gICAgcmVzdWx0LT5tX3R5cGUgPSBUcmFu
c2l0aW9uOwotICAgIHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0LT5tX3N0
cnVjdHVyZS5zZXQodm0sIG93bmVyLCBuZXdTdHJ1Y3R1cmUpOwotICAgIHJlc3VsdC0+bV9jb25k
aXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGQ6
OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6c2V0dGVyKAotICAgIFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiBjb25kaXRpb25TZXQsIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIGN1c3RvbVNldHRl
ciwKLSAgICBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKLQotICAgIHJlc3VsdC0+bV90
eXBlID0gdHlwZTsKLSAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgIHJlc3VsdC0+
bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICByZXN1bHQtPm1fY29u
ZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotICAgIHJlc3VsdC0+bV9yYXJlRGF0YSA9IHN0ZDo6
bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7Ci0gICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0b21B
Y2Nlc3Nvci5zZXR0ZXIgPSBjdXN0b21TZXR0ZXI7Ci0gICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5j
dXN0b21TbG90QmFzZS5zZXRNYXlCZU51bGwodm0sIG93bmVyLCBjdXN0b21TbG90QmFzZSk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNj
ZXNzQ2FzZTo6aW4oCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUs
IFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJl
c3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKLQotICAgIHJlc3VsdC0+bV90eXBlID0gdHlwZTsKLSAg
ICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgcmVz
dWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXRMZW5ndGgo
Vk0mLCBKU0NlbGwqLCBBY2Nlc3NUeXBlIHR5cGUpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKLQotICAgIHJlc3VsdC0+bV90eXBl
ID0gdHlwZTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxBY2Nl
c3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXRJbnRyaW5zaWMoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBKU0Z1bmN0aW9uKiBnZXR0ZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRp
dGlvblNldCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBB
Y2Nlc3NDYXNlKCkpOwotCi0gICAgcmVzdWx0LT5tX3R5cGUgPSBJbnRyaW5zaWNHZXR0ZXI7Ci0g
ICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwotICAgIHJl
c3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAgcmVzdWx0LT5tX29mZnNl
dCA9IG9mZnNldDsKLQotICAgIHJlc3VsdC0+bV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8
UmFyZURhdGE+KCk7Ci0gICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5pbnRyaW5zaWNGdW5jdGlvbi5z
ZXQodm0sIG93bmVyLCBnZXR0ZXIpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotQWNjZXNz
Q2FzZTo6fkFjY2Vzc0Nhc2UoKQotewotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
QWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKAotICAgIFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHN3aXRjaCAoc3R1Yklu
Zm8uY2FjaGVUeXBlKSB7Ci0gICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgotICAgICAg
ICByZXR1cm4gZ2V0KAotICAgICAgICAgICAgdm0sIG93bmVyLCBMb2FkLCBzdHViSW5mby51LmJ5
SWRTZWxmLm9mZnNldCwKLSAgICAgICAgICAgIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKSk7Ci0KLSAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6
Ci0gICAgICAgIHJldHVybiByZXBsYWNlKAotICAgICAgICAgICAgdm0sIG93bmVyLCBzdHViSW5m
by51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuYnlJZFNl
bGYub2Zmc2V0KTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLX0KLQotc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmNsb25lKCkg
Y29uc3QKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nl
c3NDYXNlKCkpOwotICAgIHJlc3VsdC0+bV90eXBlID0gbV90eXBlOwotICAgIHJlc3VsdC0+bV9v
ZmZzZXQgPSBtX29mZnNldDsKLSAgICByZXN1bHQtPm1fc3RydWN0dXJlID0gbV9zdHJ1Y3R1cmU7
Ci0gICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0OwotICAgIGlmIChS
YXJlRGF0YSogcmFyZURhdGEgPSBtX3JhcmVEYXRhLmdldCgpKSB7Ci0gICAgICAgIHJlc3VsdC0+
bV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7Ci0gICAgICAgIHJlc3Vs
dC0+bV9yYXJlRGF0YS0+dmlhUHJveHkgPSByYXJlRGF0YS0+dmlhUHJveHk7Ci0gICAgICAgIHJl
c3VsdC0+bV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldCA9IHJhcmVEYXRhLT5hZGRpdGlvbmFsU2V0
OwotICAgICAgICAvLyBOT1RFOiBXZSBkb24ndCBjb3B5IHRoZSBjYWxsTGlua0luZm8sIHNpbmNl
IHRoYXQncyBjcmVhdGVkIGR1cmluZyBjb2RlIGdlbmVyYXRpb24uCi0gICAgICAgIHJlc3VsdC0+
bV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iub3BhcXVlID0gcmFyZURhdGEtPmN1c3RvbUFjY2Vz
c29yLm9wYXF1ZTsKLSAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0b21TbG90QmFzZSA9
IHJhcmVEYXRhLT5jdXN0b21TbG90QmFzZTsKLSAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5p
bnRyaW5zaWNGdW5jdGlvbiA9IHJhcmVEYXRhLT5pbnRyaW5zaWNGdW5jdGlvbjsKLSAgICAgICAg
cmVzdWx0LT5tX3JhcmVEYXRhLT5kb21KSVQgPSByYXJlRGF0YS0+ZG9tSklUOwotICAgIH0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1WZWN0b3I8V2F0Y2hwb2ludFNldCosIDI+IEFjY2Vzc0Nh
c2U6OmNvbW1pdChWTSYgdm0sIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQotewotICAgIC8vIEl0
J3MgZmluZSB0byBjb21taXQgc29tZXRoaW5nIHRoYXQgaXMgYWxyZWFkeSBjb21taXR0ZWQuIFRo
YXQgYXJpc2VzIHdoZW4gd2Ugc3dpdGNoIHRvIHVzaW5nCi0gICAgLy8gbmV3bHkgYWxsb2NhdGVk
IHdhdGNocG9pbnRzLiBXaGVuIGl0IGhhcHBlbnMsIGl0J3Mgbm90IGVmZmljaWVudCAtIGJ1dCB3
ZSB0aGluayB0aGF0J3MgT0sKLSAgICAvLyBiZWNhdXNlIG1vc3QgQWNjZXNzQ2FzZXMgaGF2ZSBu
byBleHRyYSB3YXRjaHBvaW50cyBhbnl3YXkuCi0gICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZSA9
PSBQcmltb3JkaWFsIHx8IG1fc3RhdGUgPT0gQ29tbWl0dGVkKTsKLSAgICAKLSAgICBWZWN0b3I8
V2F0Y2hwb2ludFNldCosIDI+IHJlc3VsdDsKLSAgICAKLSAgICBpZiAoKHN0cnVjdHVyZSgpICYm
IHN0cnVjdHVyZSgpLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCi0gICAgICAgIHx8
IG1fY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKLSAgICAgICAg
cmVzdWx0LmFwcGVuZCh2bS5lbnN1cmVXYXRjaHBvaW50U2V0Rm9ySW1wdXJlUHJvcGVydHkoaWRl
bnQpKTsKLQotICAgIGlmIChhZGRpdGlvbmFsU2V0KCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQo
YWRkaXRpb25hbFNldCgpKTsKLSAgICAKLSAgICBtX3N0YXRlID0gQ29tbWl0dGVkOwotICAgIAot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgQWNjZXNzQ2FzZTo6Z3VhcmRlZEJ5U3RydWN0
dXJlQ2hlY2soKSBjb25zdAotewotICAgIGlmICh2aWFQcm94eSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgTWVnYW1vcnBoaWNMb2Fk
OgotICAgIGNhc2UgQXJyYXlMZW5ndGg6Ci0gICAgY2FzZSBTdHJpbmdMZW5ndGg6Ci0gICAgY2Fz
ZSBEaXJlY3RBcmd1bWVudHNMZW5ndGg6Ci0gICAgY2FzZSBTY29wZWRBcmd1bWVudHNMZW5ndGg6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci19Ci0KLUpTT2JqZWN0KiBBY2Nlc3NDYXNlOjphbHRlcm5hdGVCYXNlKCkgY29u
c3QKLXsKLSAgICBpZiAoY3VzdG9tU2xvdEJhc2UoKSkKLSAgICAgICAgcmV0dXJuIGN1c3RvbVNs
b3RCYXNlKCk7Ci0gICAgcmV0dXJuIGNvbmRpdGlvblNldCgpLnNsb3RCYXNlQ29uZGl0aW9uKCku
b2JqZWN0KCk7Ci19Ci0KLWJvb2wgQWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKFZlY3RvcjxKU0NlbGwq
PiogY2VsbHNUb01hcmspIGNvbnN0Ci17Ci0gICAgc3dpdGNoICh0eXBlKCkpIHsKLSAgICBjYXNl
IEdldHRlcjoKLSAgICBjYXNlIFNldHRlcjoKLSAgICBjYXNlIEN1c3RvbVZhbHVlR2V0dGVyOgot
ICAgIGNhc2UgQ3VzdG9tQWNjZXNzb3JHZXR0ZXI6Ci0gICAgY2FzZSBDdXN0b21WYWx1ZVNldHRl
cjoKLSAgICBjYXNlIEN1c3RvbUFjY2Vzc29yU2V0dGVyOgotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBjYXNlIFRyYW5zaXRpb246Ci0gICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQotICAgICAg
ICAgICAgJiYgc3RydWN0dXJlKCktPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKLSAgICAg
ICAgICAgIGlmIChjZWxsc1RvTWFyaykKLSAgICAgICAgICAgICAgICBjZWxsc1RvTWFyay0+YXBw
ZW5kKG5ld1N0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotfQotCi1ib29sIEFjY2Vzc0Nhc2U6OmNvdWxkU3RpbGxTdWNjZWVkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9jb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5
QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKTsKLX0KLQotYm9vbCBBY2Nlc3NDYXNl
OjpjYW5CZVJlcGxhY2VkQnlNZWdhbW9ycGhpY0xvYWQoKSBjb25zdAotewotICAgIGlmICh0eXBl
KCkgPT0gTWVnYW1vcnBoaWNMb2FkKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBy
ZXR1cm4gdHlwZSgpID09IExvYWQKLSAgICAgICAgJiYgIXZpYVByb3h5KCkKLSAgICAgICAgJiYg
Y29uZGl0aW9uU2V0KCkuaXNFbXB0eSgpCi0gICAgICAgICYmICFhZGRpdGlvbmFsU2V0KCkKLSAg
ICAgICAgJiYgIWN1c3RvbVNsb3RCYXNlKCk7Ci19Ci0KLWJvb2wgQWNjZXNzQ2FzZTo6Y2FuUmVw
bGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcikgY29uc3QKLXsKLSAgICAvLyBUaGlzIHB1dHMg
aW4gYSBnb29kIGVmZm9ydCB0byB0cnkgdG8gZmlndXJlIG91dCBpZiAnb3RoZXInIGlzIG1hZGUg
c3VwZXJmbHVvdXMgYnkgJyp0aGlzJy4KLSAgICAvLyBJdCdzIGZpbmUgZm9yIHRoaXMgdG8gcmV0
dXJuIGZhbHNlIGlmIGl0J3MgaW4gZG91YnQuCi0KLSAgICBzd2l0Y2ggKHR5cGUoKSkgewotICAg
IGNhc2UgTWVnYW1vcnBoaWNMb2FkOgotICAgICAgICByZXR1cm4gb3RoZXIuY2FuQmVSZXBsYWNl
ZEJ5TWVnYW1vcnBoaWNMb2FkKCk7Ci0gICAgY2FzZSBBcnJheUxlbmd0aDoKLSAgICBjYXNlIFN0
cmluZ0xlbmd0aDoKLSAgICBjYXNlIERpcmVjdEFyZ3VtZW50c0xlbmd0aDoKLSAgICBjYXNlIFNj
b3BlZEFyZ3VtZW50c0xlbmd0aDoKLSAgICAgICAgcmV0dXJuIG90aGVyLnR5cGUoKSA9PSB0eXBl
KCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKCFndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygp
IHx8ICFvdGhlci5ndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSgpID09IG90aGVyLnN0
cnVjdHVyZSgpOwotICAgIH0KLX0KLQotdm9pZCBBY2Nlc3NDYXNlOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KG1fdHlwZSwgIjooIik7Ci0KLSAgICBDb21t
YVByaW50ZXIgY29tbWE7Ci0gICAgCi0gICAgb3V0LnByaW50KGNvbW1hLCBtX3N0YXRlKTsKLQot
ICAgIGlmIChtX3R5cGUgPT0gVHJhbnNpdGlvbikKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
c3RydWN0dXJlID0gIiwgcG9pbnRlckR1bXAoc3RydWN0dXJlKCkpLCAiIC0+ICIsIHBvaW50ZXJE
dW1wKG5ld1N0cnVjdHVyZSgpKSk7Ci0gICAgZWxzZSBpZiAobV9zdHJ1Y3R1cmUpCi0gICAgICAg
IG91dC5wcmludChjb21tYSwgInN0cnVjdHVyZSA9ICIsIHBvaW50ZXJEdW1wKG1fc3RydWN0dXJl
LmdldCgpKSk7Ci0KLSAgICBpZiAoaXNWYWxpZE9mZnNldChtX29mZnNldCkpCi0gICAgICAgIG91
dC5wcmludChjb21tYSwgIm9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKLSAgICBpZiAoIW1fY29uZGl0
aW9uU2V0LmlzRW1wdHkoKSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY29uZGl0aW9ucyA9
ICIsIG1fY29uZGl0aW9uU2V0KTsKLQotICAgIGlmIChSYXJlRGF0YSogcmFyZURhdGEgPSBtX3Jh
cmVEYXRhLmdldCgpKSB7Ci0gICAgICAgIGlmIChyYXJlRGF0YS0+dmlhUHJveHkpCi0gICAgICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJ2aWFQcm94eSA9ICIsIHJhcmVEYXRhLT52aWFQcm94eSk7
Ci0gICAgICAgIGlmIChyYXJlRGF0YS0+YWRkaXRpb25hbFNldCkKLSAgICAgICAgICAgIG91dC5w
cmludChjb21tYSwgImFkZGl0aW9uYWxTZXQgPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5hZGRp
dGlvbmFsU2V0LmdldCgpKSk7Ci0gICAgICAgIGlmIChyYXJlRGF0YS0+Y2FsbExpbmtJbmZvKQot
ICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY2FsbExpbmtJbmZvID0gIiwgUmF3UG9pbnRl
cihyYXJlRGF0YS0+Y2FsbExpbmtJbmZvLmdldCgpKSk7Ci0gICAgICAgIGlmIChyYXJlRGF0YS0+
Y3VzdG9tQWNjZXNzb3Iub3BhcXVlKQotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY3Vz
dG9tQWNjZXNzb3IgPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFx
dWUpKTsKLSAgICAgICAgaWYgKHJhcmVEYXRhLT5jdXN0b21TbG90QmFzZSkKLSAgICAgICAgICAg
IG91dC5wcmludChjb21tYSwgImN1c3RvbVNsb3RCYXNlID0gIiwgUmF3UG9pbnRlcihyYXJlRGF0
YS0+Y3VzdG9tU2xvdEJhc2UuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBvdXQucHJpbnQoIikiKTsK
LX0KLQotYm9vbCBBY2Nlc3NDYXNlOjp2aXNpdFdlYWsoVk0mIHZtKSBjb25zdAotewotICAgIGlm
IChtX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9zdHJ1Y3R1cmUuZ2V0KCkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX2NvbmRpdGlvblNldC5hcmVTdGlsbExpdmUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3JhcmVEYXRhKSB7Ci0gICAgICAg
IGlmIChtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8pCi0gICAgICAgICAgICBtX3JhcmVEYXRhLT5j
YWxsTGlua0luZm8tPnZpc2l0V2Vhayh2bSk7Ci0gICAgICAgIGlmIChtX3JhcmVEYXRhLT5jdXN0
b21TbG90QmFzZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9yYXJlRGF0YS0+Y3VzdG9tU2xvdEJhc2Uu
Z2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobV9yYXJlRGF0
YS0+aW50cmluc2ljRnVuY3Rpb24gJiYgIUhlYXA6OmlzTWFya2VkKG1fcmFyZURhdGEtPmludHJp
bnNpY0Z1bmN0aW9uLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQWNjZXNzQ2FzZTo6cHJvcGFnYXRlVHJhbnNpdGlv
bnMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci17Ci0gICAgYm9vbCByZXN1bHQgPSB0cnVl
OwotICAgIAotICAgIGlmIChtX3N0cnVjdHVyZSkKLSAgICAgICAgcmVzdWx0ICY9IG1fc3RydWN0
dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKLSAgICAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewot
ICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkQ29uY3VycmVu
dGx5KG1fc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKQotICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZChtX3N0cnVjdHVyZS5nZXQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKLSAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0
YXRlLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCkKLXsKLSAgICBTdXBlclNh
bXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0KLSAgICBSRUxFQVNFX0FTU0VS
VChtX3N0YXRlID09IENvbW1pdHRlZCk7Ci0gICAgbV9zdGF0ZSA9IEdlbmVyYXRlZDsKLSAgICAK
LSAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7Ci0gICAgVk0mIHZtID0gKmppdC52
bSgpOwotICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gKnN0YXRlLmlkZW50OwotICAgIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICpzdGF0ZS5zdHViSW5mbzsKLSAgICBKU1ZhbHVl
UmVncyB2YWx1ZVJlZ3MgPSBzdGF0ZS52YWx1ZVJlZ3M7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSBz
dGF0ZS5iYXNlR1BSOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGUuc2NyYXRjaEdQUjsK
LSAgICAKLSAgICBVTlVTRURfUEFSQU0odm0pOwotCi0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAg
ICBjYXNlIEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7Ci0gICAg
ICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRl
eGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgZmFsbFRocm91
Z2guYXBwZW5kKAotICAgICAgICAgICAgaml0LmJyYW5jaFRlc3QzMigKLSAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKElzQXJyYXkpKSk7Ci0gICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKLSAgICAgICAgICAg
IGppdC5icmFuY2hUZXN0MzIoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBz
Y3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzaykp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBTdHJpbmdMZW5ndGg6IHsKLSAg
ICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKLSAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAot
ICAgICAgICAgICAgaml0LmJyYW5jaDgoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpO
b3RFcXVhbCwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgICAgICAKLSAgICBjYXNlIERpcmVjdEFyZ3VtZW50c0xlbmd0aDogewotICAgICAgICBBU1NF
UlQoIXZpYVByb3h5KCkpOwotICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCi0gICAgICAgICAg
ICBqaXQuYnJhbmNoOCgKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAot
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5
cGVJbmZvVHlwZU9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihEaXJlY3RBcmd1bWVudHNUeXBlKSkpOwotCi0gICAgICAgIGZhbGxUaHJvdWdoLmFw
cGVuZCgKLSAgICAgICAgICAgIGppdC5icmFuY2hUZXN0UHRyKAotICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Tm9uWmVybywKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZUdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk1hcHBlZEFyZ3VtZW50cygpKSkp
OwotICAgICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSksCi0gICAgICAgICAg
ICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICAgICAgaml0LmJveEludDMyKHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncyk7Ci0gICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBTY29wZWRBcmd1bWVudHNM
ZW5ndGg6IHsKLSAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKLSAgICAgICAgZmFsbFRocm91
Z2guYXBwZW5kKAotICAgICAgICAgICAgaml0LmJyYW5jaDgoCi0gICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCi0gICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoU2NvcGVkQXJndW1lbnRzVHlwZSkpKTsKLQot
ICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCi0gICAgICAgICAgICBqaXQuYnJhbmNoVGVzdDgo
Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLAotICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9m
T3ZlcnJvZGVUaGluZ3MoKSkpKTsKLSAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVG90
YWxMZW5ndGgoKSksCi0gICAgICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICAg
ICAgaml0LmJveEludDMyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncyk7Ci0gICAg
ICAgIHN0YXRlLnN1Y2NlZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCi0g
ICAgY2FzZSBNZWdhbW9ycGhpY0xvYWQ6IHsKLSAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGtl
eSA9IGlkZW50LmltcGwoKTsKLSAgICAgICAgdW5zaWduZWQgaGFzaCA9IElkZW50aWZpZXJSZXBI
YXNoOjpoYXNoKGtleSk7Ci0gICAgICAgIAotICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdpc3RlcnMpOwotICAgICAgICBhbGxv
Y2F0b3IubG9jayhiYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBhbGxv
Y2F0b3IubG9jayhzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VUYWdHUFIp
KTsKLSNlbmRpZgotICAgICAgICBhbGxvY2F0b3IubG9jayh2YWx1ZVJlZ3MpOwotICAgICAgICBh
bGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBpbnRl
cm1lZGlhdGVHUFIgPSBzY3JhdGNoR1BSOwotICAgICAgICBHUFJSZWcgbWFza0dQUiA9IGFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgR1BSUmVnIG1hc2tlZEhhc2hHUFIg
PSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgICAgIEdQUlJlZyBpbmRleEdQ
UiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgR1BSUmVnIG9mZnNl
dEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgCi0gICAgICAg
IGlmICh2ZXJib3NlKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJiYXNlR1BSID0gIiwgYmFzZUdQ
UiwgIlxuIik7Ci0gICAgICAgICAgICBkYXRhTG9nKCJ2YWx1ZVJlZ3MgPSAiLCB2YWx1ZVJlZ3Ms
ICJcbiIpOwotICAgICAgICAgICAgZGF0YUxvZygic2NyYXRjaEdQUiA9ICIsIHNjcmF0Y2hHUFIs
ICJcbiIpOwotICAgICAgICAgICAgZGF0YUxvZygiaW50ZXJtZWRpYXRlR1BSID0gIiwgaW50ZXJt
ZWRpYXRlR1BSLCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coIm1hc2tHUFIgPSAiLCBtYXNr
R1BSLCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coIm1hc2tlZEhhc2hHUFIgPSAiLCBtYXNr
ZWRIYXNoR1BSLCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coImluZGV4R1BSID0gIiwgaW5k
ZXhHUFIsICJcbiIpOwotICAgICAgICAgICAgZGF0YUxvZygib2Zmc2V0R1BSID0gIiwgb2Zmc2V0
R1BSLCAiXG4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6UHJlc2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGUgPQotICAgICAgICAgICAgYWxsb2NhdG9y
LnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOwotCi0gICAgICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgbXlGYWlsQW5kSWdub3JlOwotICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IG15RmFsbFRocm91Z2g7Ci0gICAgICAgIAotICAgICAgICBqaXQuZW1pdExvYWRT
dHJ1Y3R1cmUoYmFzZUdQUiwgaW50ZXJtZWRpYXRlR1BSLCBtYXNrR1BSKTsKLSAgICAgICAgaml0
LmxvYWRQdHIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoaW50ZXJtZWRpYXRl
R1BSLCBTdHJ1Y3R1cmU6OnByb3BlcnR5VGFibGVVbnNhZmVPZmZzZXQoKSksCi0gICAgICAgICAg
ICBpbnRlcm1lZGlhdGVHUFIpOwotICAgICAgICAKLSAgICAgICAgbXlGYWlsQW5kSWdub3JlLmFw
cGVuZChqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIGludGVybWVkaWF0ZUdQ
UikpOwotICAgICAgICAKLSAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
aW50ZXJtZWRpYXRlR1BSLCBQcm9wZXJ0eVRhYmxlOjpvZmZzZXRPZkluZGV4TWFzaygpKSwgbWFz
a0dQUik7Ci0gICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhpbnRlcm1l
ZGlhdGVHUFIsIFByb3BlcnR5VGFibGU6Om9mZnNldE9mSW5kZXgoKSksIGluZGV4R1BSKTsKLSAg
ICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhpbnRl
cm1lZGlhdGVHUFIsIFByb3BlcnR5VGFibGU6Om9mZnNldE9mSW5kZXhTaXplKCkpLAotICAgICAg
ICAgICAgaW50ZXJtZWRpYXRlR1BSKTsKLQotICAgICAgICBqaXQubW92ZShtYXNrR1BSLCBtYXNr
ZWRIYXNoR1BSKTsKLSAgICAgICAgaml0LmFuZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KGhhc2gpLCBtYXNrZWRIYXNoR1BSKTsKLSAgICAgICAgaml0LmxzaGlmdDMyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDIpLCBpbnRlcm1lZGlhdGVHUFIpOwotICAgICAgICBqaXQuYWRkUHRy
KGluZGV4R1BSLCBpbnRlcm1lZGlhdGVHUFIpOwotICAgICAgICAKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpMYWJlbCBsb29wID0gaml0LmxhYmVsKCk7Ci0gICAgICAgIAotICAgICAgICBqaXQubG9h
ZDMyKENDYWxsSGVscGVyczo6QmFzZUluZGV4KGluZGV4R1BSLCBtYXNrZWRIYXNoR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRpbWVzRm91ciksIG9mZnNldEdQUik7Ci0gICAgICAgIAotICAgICAgICBteUZh
bGxUaHJvdWdoLmFwcGVuZCgKLSAgICAgICAgICAgIGppdC5icmFuY2gzMigKLSAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkVxdWFsLAotICAgICAgICAgICAgICAgIG9mZnNldEdQUiwKLSAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQcm9wZXJ0eVRhYmxlOjpF
bXB0eUVudHJ5SW5kZXgpKSk7Ci0gICAgICAgIAotICAgICAgICBqaXQuc3ViMzIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoMSksIG9mZnNldEdQUik7Ci0gICAgICAgIGppdC5tdWwzMihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXplb2YoUHJvcGVydHlNYXBFbnRyeSkpLCBvZmZzZXRH
UFIsIG9mZnNldEdQUik7Ci0gICAgICAgIGppdC5hZGRQdHIoaW50ZXJtZWRpYXRlR1BSLCBvZmZz
ZXRHUFIpOwotICAgICAgICAKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGNvbGxpc2lvbiA9
ICBqaXQuYnJhbmNoUHRyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhvZmZzZXRHUFIsIE9CSkVDVF9PRkZTRVRP
RihQcm9wZXJ0eU1hcEVudHJ5LCBrZXkpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihrZXkpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIG9mZnNldEdQUiBjdXJyZW50
bHkgaG9sZHMgYSBwb2ludGVyIHRvIHRoZSBQcm9wZXJ0eU1hcEVudHJ5LCB3aGljaCBoYXMgdGhl
IG9mZnNldCBhbmQgYXR0cmlidXRlcy4KLSAgICAgICAgLy8gQ2hlY2sgdGhlbSBhbmQgdGhlbiBh
dHRlbXB0IHRoZSBsb2FkLgotICAgICAgICAKLSAgICAgICAgbXlGYWxsVGhyb3VnaC5hcHBlbmQo
Ci0gICAgICAgICAgICBqaXQuYnJhbmNoVGVzdDMyKAotICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Tm9uWmVybywKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob2Zm
c2V0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoUHJvcGVydHlNYXBFbnRyeSwgYXR0cmlidXRlcykpLAot
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEFjY2Vzc29yIHwgQ3Vz
dG9tQWNjZXNzb3IpKSk7Ci0gICAgICAgIAotICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhvZmZzZXRHUFIsIE9CSkVDVF9PRkZTRVRPRihQcm9wZXJ0eU1hcEVudHJ5LCBv
ZmZzZXQpKSwgb2Zmc2V0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGppdC5sb2FkUHJvcGVydHko
YmFzZUdQUiwgb2Zmc2V0R1BSLCB2YWx1ZVJlZ3MpOwotICAgICAgICAKLSAgICAgICAgYWxsb2Nh
dG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7
Ci0gICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKLSAgICAgICAgCi0gICAgICAgIGNvbGxpc2lvbi5s
aW5rKCZqaXQpOwotCi0gICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MigxKSwgbWFza2VkSGFzaEdQUik7Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogV2UgY291
bGQgYmUgc21hcnRlciBhYm91dCB0aGlzLiBDdXJyZW50bHkgd2UncmUgYnVybmluZyBhIEdQUiBm
b3IgdGhlIG1hc2suIEJ1dCBsb29waW5nCi0gICAgICAgIC8vIGFyb3VuZCBpc24ndCBzdXBlciBj
b21tb24gc28gd2UgY291bGQsIGZvciBleGFtcGxlLCByZWNvbXB1dGUgdGhlIG1hc2sgZnJvbSB0
aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCi0gICAgICAgIC8vIHRoZSB0YWJsZSBhbmQgaW5kZXguIEJ1
dCBiZWZvcmUgd2UgZG8gdGhhdCB3ZSBzaG91bGQgcHJvYmFibHkgbWFrZSBpdCBlYXNpZXIgdG8g
bXVsdGlwbHkgYW5kCi0gICAgICAgIC8vIGRpdmlkZSBieSB0aGUgc2l6ZSBvZiBQcm9wZXJ0eU1h
cEVudHJ5LiBUaGF0IHByb2JhYmx5IGludm9sdmVzIG1ha2luZyBQcm9wZXJ0eU1hcEVudHJ5IGJl
IGFycmFuZ2VkCi0gICAgICAgIC8vIHRvIGhhdmUgYSBwb3dlci1vZi0yIHNpemUuCi0gICAgICAg
IGppdC5hbmQzMihtYXNrR1BSLCBtYXNrZWRIYXNoR1BSKTsKLSAgICAgICAgaml0Lmp1bXAoKS5s
aW5rVG8obG9vcCwgJmppdCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoYWxsb2NhdG9yLmRpZFJl
dXNlUmVnaXN0ZXJzKCkpIHsKLSAgICAgICAgICAgIG15RmFpbEFuZElnbm9yZS5saW5rKCZqaXQp
OwotICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmco
aml0LCBwcmVzZXJ2ZWRTdGF0ZSk7Ci0gICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFw
cGVuZChqaXQuanVtcCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbXlGYWxsVGhyb3Vn
aC5saW5rKCZqaXQpOwotICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3Rl
cnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7Ci0gICAgICAgICAgICBmYWxsVGhyb3Vn
aC5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0
ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChteUZhaWxBbmRJZ25vcmUpOwotICAgICAgICAgICAgZmFs
bFRocm91Z2guYXBwZW5kKG15RmFsbFRocm91Z2gpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OiB7Ci0gICAgICAgIGlmICh2aWFQcm94eSgpKSB7Ci0g
ICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgaml0LmJyYW5j
aDgoCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpKSk7Ci0KLSAgICAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOwotCi0gICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCi0g
ICAgICAgICAgICAgICAgaml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksCi0gICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZSgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgaml0LmJyYW5jaFN0cnVj
dHVyZSgKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSgpKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfSB9OwotCi0gICAgZ2VuZXJhdGVJbXBsKHN0
YXRlKTsKLX0KLQotdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGUmIHN0YXRlKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUgPT0gQ29tbWl0dGVkKTsK
LSAgICBtX3N0YXRlID0gR2VuZXJhdGVkOwotICAgIAotICAgIGdlbmVyYXRlSW1wbChzdGF0ZSk7
Ci19Ci0KLXZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZSYgc3RhdGUpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFs
c2UpOwotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJHZW5lcmF0aW5nIGNvZGUg
Zm9yOiAiLCAqdGhpcywgIlxuIik7Ci0gICAgCi0gICAgQVNTRVJUKG1fc3RhdGUgPT0gR2VuZXJh
dGVkKTsgLy8gV2UgcmVseSBvbiB0aGUgY2FsbGVycyBzZXR0aW5nIHRoaXMgZm9yIHVzLgotICAg
IAotICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0YXRlLmppdDsKLSAgICBWTSYgdm0gPSAqaml0
LnZtKCk7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBqaXQuY29kZUJsb2NrKCk7Ci0gICAg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKnN0YXRlLnN0dWJJbmZvOwotICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50ID0gKnN0YXRlLmlkZW50OwotICAgIEpTVmFsdWVSZWdzIHZhbHVl
UmVncyA9IHN0YXRlLnZhbHVlUmVnczsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRlLmJhc2VH
UFI7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0ZS5zY3JhdGNoR1BSOwotCi0gICAgQVNT
RVJUKG1fY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KCkpOwotCi0gICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYgY29uZGl0aW9uIDogbV9jb25kaXRpb25TZXQpIHsKLSAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSgpOwotCi0gICAgICAg
IGlmIChjb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpKSB7Ci0gICAgICAgICAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5zaXRpb25XYXRjaHBvaW50KHN0
YXRlLmFkZFdhdGNocG9pbnQoY29uZGl0aW9uKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0
eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVjdHVyZSkpIHsKLSAgICAgICAg
ICAgIC8vIFRoZSByZWFzb24gd2h5IHRoaXMgY2Fubm90IGhhcHBlbiBpcyB0aGF0IHdlIHJlcXVp
cmUgdGhhdCBQb2x5bW9ycGhpY0FjY2VzcyBjYWxscwotICAgICAgICAgICAgLy8gQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGUoKSBvbmx5IGFmdGVyIGl0IGhhcyB2ZXJpZmllZCB0aGF0Ci0gICAgICAgICAg
ICAvLyBBY2Nlc3NDYXNlOjpjb3VsZFN0aWxsU3VjY2VlZCgpIHJldHVybmVkIHRydWUuCi0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGRhdGFMb2coIlRoaXMgY29uZGl0aW9uIGlzIG5vIGxvbmdl
ciBtZXQ6ICIsIGNvbmRpdGlvbiwgIlxuIik7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2Ugd2lsbCBlbWl0IGNvZGUg
dGhhdCBoYXMgYSB3ZWFrIHJlZmVyZW5jZSB0aGF0IGlzbid0IG90aGVyd2lzZSBsaXN0ZWQgYW55
d2hlcmUuCi0gICAgICAgIHN0YXRlLndlYWtSZWZlcmVuY2VzLmFwcGVuZChXcml0ZUJhcnJpZXI8
SlNDZWxsPih2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKTsKLSAgICAgICAgCi0gICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb25kaXRpb24ub2JqZWN0KCkpLCBz
Y3JhdGNoR1BSKTsKLSAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAotICAgICAg
ICAgICAgaml0LmJyYW5jaFN0cnVjdHVyZSgKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgIHN0cnVj
dHVyZSkpOwotICAgIH0KLQotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBJbkhpdDoK
LSAgICBjYXNlIEluTWlzczoKLSAgICAgICAgaml0LmJveEJvb2xlYW5QYXlsb2FkKG1fdHlwZSA9
PSBJbkhpdCwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgICAgIHN0YXRlLnN1Y2NlZWQo
KTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBNaXNzOgotICAgICAgICBqaXQubW92ZVRy
dXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOwotICAgICAgICBzdGF0ZS5zdWNj
ZWVkKCk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgTG9hZDoKLSAgICBjYXNlIEdldEdl
dHRlcjoKLSAgICBjYXNlIEdldHRlcjoKLSAgICBjYXNlIFNldHRlcjoKLSAgICBjYXNlIEN1c3Rv
bVZhbHVlR2V0dGVyOgotICAgIGNhc2UgQ3VzdG9tQWNjZXNzb3JHZXR0ZXI6Ci0gICAgY2FzZSBD
dXN0b21WYWx1ZVNldHRlcjoKLSAgICBjYXNlIEN1c3RvbUFjY2Vzc29yU2V0dGVyOiB7Ci0gICAg
ICAgIEdQUlJlZyB2YWx1ZVJlZ3NQYXlsb2FkR1BSID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG1fb2Zmc2V0KSkgewotICAgICAg
ICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlOwotICAgICAgICAgICAgaWYgKG1fY29uZGl0
aW9uU2V0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gc3RydWN0
dXJlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9
IG1fY29uZGl0aW9uU2V0LnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCktPnN0cnVjdHVyZSgp
OwotICAgICAgICAgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVw
bGFjZW1lbnRzKHZtLCBvZmZzZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBHUFJSZWcgYmFz
ZUZvckdldEdQUjsKLSAgICAgICAgaWYgKHZpYVByb3h5KCkpIHsKLSAgICAgICAgICAgIEFTU0VS
VChtX3R5cGUgIT0gQ3VzdG9tVmFsdWVTZXR0ZXIgfHwgbV90eXBlICE9IEN1c3RvbUFjY2Vzc29y
U2V0dGVyKTsgLy8gQmVjYXVzZSBzZXR0ZXJzIG5lZWQgdG8gbm90IHRyYXNoIHZhbHVlUmVnc1Bh
eWxvYWRHUFIuCi0gICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlciB8fCBtX3R5cGUgPT0g
U2V0dGVyKQotICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSBzY3JhdGNoR1BSOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJhc2VGb3JHZXRHUFIgPSB2YWx1ZVJlZ3NQ
YXlsb2FkR1BSOwotCi0gICAgICAgICAgICBBU1NFUlQoKG1fdHlwZSAhPSBHZXR0ZXIgJiYgbV90
eXBlICE9IFNldHRlcikgfHwgYmFzZUZvckdldEdQUiAhPSBiYXNlR1BSKTsKLSAgICAgICAgICAg
IEFTU0VSVChtX3R5cGUgIT0gU2V0dGVyIHx8IGJhc2VGb3JHZXRHUFIgIT0gdmFsdWVSZWdzUGF5
bG9hZEdQUik7Ci0KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKAotICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksCi0g
ICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgYmFzZUZvckdldEdQUiA9IGJhc2VHUFI7Ci0KLSAgICAgICAgR1BSUmVnIGJhc2VGb3JBY2Nl
c3NHUFI7Ci0gICAgICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBqaXQubW92ZSgKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoYWx0ZXJuYXRlQmFzZSgpKSwKLSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBzY3JhdGNoR1BSOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBiYXNlRm9yR2V0R1BSOwotCi0gICAgICAgIEdQ
UlJlZyBsb2FkZWRWYWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgIGlmIChtX3R5cGUg
IT0gQ3VzdG9tVmFsdWVHZXR0ZXIgJiYgbV90eXBlICE9IEN1c3RvbUFjY2Vzc29yR2V0dGVyICYm
IG1fdHlwZSAhPSBDdXN0b21WYWx1ZVNldHRlciAmJiBtX3R5cGUgIT0gQ3VzdG9tQWNjZXNzb3JT
ZXR0ZXIpIHsKLSAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gTG9hZCB8fCBtX3R5cGUgPT0gR2V0
R2V0dGVyKQotICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0gdmFsdWVSZWdzUGF5bG9h
ZEdQUjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiA9
IHNjcmF0Y2hHUFI7Ci0KLSAgICAgICAgICAgIEFTU0VSVCgobV90eXBlICE9IEdldHRlciAmJiBt
X3R5cGUgIT0gU2V0dGVyKSB8fCBsb2FkZWRWYWx1ZUdQUiAhPSBiYXNlR1BSKTsKLSAgICAgICAg
ICAgIEFTU0VSVChtX3R5cGUgIT0gU2V0dGVyIHx8IGxvYWRlZFZhbHVlR1BSICE9IHZhbHVlUmVn
c1BheWxvYWRHUFIpOwotCi0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUjsKLSAgICAgICAg
ICAgIGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpCi0gICAgICAgICAgICAgICAgc3RvcmFn
ZUdQUiA9IGJhc2VGb3JBY2Nlc3NHUFI7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBqaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VGb3JBY2Nlc3NHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksCi0gICAg
ICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKLSAgICAgICAgICAgICAgICBzdG9yYWdl
R1BSID0gbG9hZGVkVmFsdWVHUFI7Ci0gICAgICAgICAgICB9Ci0KLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICAgICAgaml0LmxvYWQ2NCgKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UobV9vZmZzZXQpKSwgbG9h
ZGVkVmFsdWVHUFIpOwotI2Vsc2UKLSAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gTG9hZCB8fCBt
X3R5cGUgPT0gR2V0R2V0dGVyKSB7Ci0gICAgICAgICAgICAgICAgaml0LmxvYWQzMigKLSAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJl
bGF0aXZlVG9CYXNlKG1fb2Zmc2V0KSArIFRhZ09mZnNldCksCi0gICAgICAgICAgICAgICAgICAg
IHZhbHVlUmVncy50YWdHUFIoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBqaXQubG9h
ZDMyKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdlR1BSLCBv
ZmZzZXRSZWxhdGl2ZVRvQmFzZShtX29mZnNldCkgKyBQYXlsb2FkT2Zmc2V0KSwKLSAgICAgICAg
ICAgICAgICBsb2FkZWRWYWx1ZUdQUik7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChtX3R5cGUgPT0gTG9hZCB8fCBtX3R5cGUgPT0gR2V0R2V0dGVyKSB7Ci0gICAgICAgICAgICBz
dGF0ZS5zdWNjZWVkKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoT3B0aW9uczo6dXNlRE9NSklUKCkgJiYgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0
dGVyICYmIG1fcmFyZURhdGEtPmRvbUpJVCkgewotICAgICAgICAgICAgLy8gV2UgZG8gbm90IG5l
ZWQgdG8gZW1pdCBDaGVja0RPTSBvcGVyYXRpb24gc2luY2Ugc3RydWN0dXJlIGNoZWNrIGVuc3Vy
ZXMKLSAgICAgICAgICAgIC8vIHRoYXQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZ2l2ZW4gYmFzZSB2
YWx1ZSBpcyBzdHJ1Y3R1cmUoKSEgU28gYWxsIHdlIHNob3VsZAotICAgICAgICAgICAgLy8gZG8g
aXMgcGVyZm9ybWluZyB0aGUgQ2hlY2tET00gdGhpbmd5IGluIElDIGNvbXBpbGluZyB0aW1lIGhl
cmUuCi0gICAgICAgICAgICBpZiAoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpLT5pc1N1YkNsYXNz
T2YobV9yYXJlRGF0YS0+ZG9tSklULT50aGlzQ2xhc3NJbmZvKCkpKSB7Ci0gICAgICAgICAgICAg
ICAgZW1pdERPTUpJVEdldHRlcihzdGF0ZSwgYmFzZUZvckdldEdQUik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU3R1ZmYg
Zm9yIGN1c3RvbSBnZXR0ZXJzL3NldHRlcnMuCi0gICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBv
cGVyYXRpb25DYWxsOwotCi0gICAgICAgIC8vIFN0dWZmIGZvciBKUyBnZXR0ZXJzL3NldHRlcnMu
Ci0gICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtGdW5jdGlv
bkNoZWNrOwotICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgZmFzdFBhdGhDYWxsOwotICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1BhdGhDYWxsOwotCi0gICAgICAgIC8vIFRoaXMgYWxz
byBkb2VzIHRoZSBuZWNlc3NhcnkgY2FsY3VsYXRpb25zIG9mIHdoZXRoZXIgb3Igbm90IHdlJ3Jl
IGFuCi0gICAgICAgIC8vIGV4Y2VwdGlvbiBoYW5kbGluZyBjYWxsIHNpdGUuCi0gICAgICAgIEFj
Y2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2Vy
dmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKTsKLQotICAgICAgICBhdXRvIHJlc3RvcmVM
aXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbCA9IFsmXShBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6
OlNwaWxsU3RhdGUmIHNwaWxsU3RhdGUsIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlKSB7Ci0gICAg
ICAgICAgICBSZWdpc3RlclNldCBkb250UmVzdG9yZTsKLSAgICAgICAgICAgIGlmIChjYWxsSGFz
UmV0dXJuVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSByZXN1bHQgdmFs
dWUuIFdlIGRvbid0IHdhbnQgdG8gb3ZlcndyaXRlIHRoZSByZXN1bHQgd2l0aCB3aGF0IHdlIHN0
b3JlZCB0byB0aGUgc3RhY2suCi0gICAgICAgICAgICAgICAgLy8gV2Ugc29tZXRpbWVzIGhhdmUg
dG8gc3RvcmUgaXQgdG8gdGhlIHN0YWNrIGp1c3QgaW4gY2FzZSB3ZSB0aHJvdyBhbiBleGNlcHRp
b24gYW5kIG5lZWQgdGhlIG9yaWdpbmFsIHZhbHVlLgotICAgICAgICAgICAgICAgIGRvbnRSZXN0
b3JlLnNldCh2YWx1ZVJlZ3MpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGUucmVz
dG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUsIGRvbnRSZXN0b3Jl
KTsKLSAgICAgICAgfTsKLQotICAgICAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5k
bGluZ09yT3JpZ2luYWwoKS5iaXRzKCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdG
b3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSkpOwotCi0gICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyIHx8IG1fdHlwZSA9PSBTZXR0
ZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVChiYXNlR1BSICE9IGxvYWRlZFZhbHVlR1BSKTsKLSAg
ICAgICAgICAgIEFTU0VSVChtX3R5cGUgIT0gU2V0dGVyIHx8IChiYXNlR1BSICE9IHZhbHVlUmVn
c1BheWxvYWRHUFIgJiYgbG9hZGVkVmFsdWVHUFIgIT0gdmFsdWVSZWdzUGF5bG9hZEdQUikpOwot
Ci0gICAgICAgICAgICAvLyBDcmVhdGUgYSBKUyBjYWxsIHVzaW5nIGEgSlMgY2FsbCBpbmxpbmUg
Y2FjaGUuIEFzc3VtZSB0aGF0OgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gU1Ag
aXMgYWxpZ25lZCBhbmQgcmVwcmVzZW50cyB0aGUgZXh0ZW50IG9mIHRoZSBjYWxsaW5nIGNvbXBp
bGVyJ3Mgc3RhY2sgdXNhZ2UuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gLSBGUCBp
cyBzZXQgY29ycmVjdGx5IChpLmUuIGl0IHBvaW50cyB0byB0aGUgY2FsbGVyJ3MgY2FsbCBmcmFt
ZSBoZWFkZXIpLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIC0gU1AgLSBGUCBpcyBh
biBhbGlnbmVkIGRpZmZlcmVuY2UuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gLSBB
bnkgYnl0ZSBiZXR3ZWVuIEZQIChleGNsdXNpdmUpIGFuZCBTUCAoaW5jbHVzaXZlKSBjb3VsZCBi
ZSBsaXZlIGluIHRoZSBjYWxsaW5nCi0gICAgICAgICAgICAvLyAgIGNvZGUuCi0gICAgICAgICAg
ICAvLwotICAgICAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSB0ZW1wb3JhcmlseSBncm93IHRoZSBz
dGFjayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhlIGNhbGwgYW5kIHRoZW4KLSAgICAgICAgICAgIC8v
IHNocmluayBpdCBhZnRlci4KLQotICAgICAgICAgICAgc3RhdGUuc2V0U3BpbGxTdGF0ZUZvckpT
R2V0dGVyU2V0dGVyKHNwaWxsU3RhdGUpOwotCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
bV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvKTsKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxM
aW5rSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtJbmZvPigpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBGSVhNRTogSWYgd2UgZ2VuZXJhdGVkIGEgcG9seW1vcnBoaWMgY2Fs
bCBzdHViIHRoYXQganVtcGVkIGJhY2sgdG8gdGhlIGdldHRlcgotICAgICAgICAgICAgLy8gc3R1
Yiwgd2hpY2ggdGhlbiBqdW1wZWQgYmFjayB0byB0aGUgbWFpbiBjb2RlLCB0aGVuIHdlJ2QgaGF2
ZSBhIHJlYWNoYWJpbGl0eQotICAgICAgICAgICAgLy8gc2l0dWF0aW9uIHRoYXQgdGhlIEdDIGRv
ZXNuJ3Qga25vdyBhYm91dC4gVGhlIEdDIHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBwb2x5bW9ycGhp
YwotICAgICAgICAgICAgLy8gY2FsbCBzdHViIHN0YXllZCBhbGl2ZSwgYW5kIGl0IHdvdWxkIGVu
c3VyZSB0aGF0IHRoZSBtYWluIGNvZGUgc3RheWVkIGFsaXZlLCBidXQKLSAgICAgICAgICAgIC8v
IGl0IHdvdWxkbid0IGtub3cgdGhhdCB0aGUgZ2V0dGVyIHN0dWIgd2FzIGFsaXZlLiBJZGVhbGx5
IEpJVCBzdHViIHJvdXRpbmVzIHdvdWxkCi0gICAgICAgICAgICAvLyBiZSBHQyBvYmplY3RzLCBh
bmQgdGhlbiB3ZSdkIGJlIGFibGUgdG8gc2F5IHRoYXQgdGhlIHBvbHltb3JwaGljIGNhbGwgc3R1
YiBoYXMgYQotICAgICAgICAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBnZXR0ZXIgc3R1Yi4KLSAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg5
MTQKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+ZGlzYWxsb3dTdHVicygp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8tPnNl
dFVwQ2FsbCgKLSAgICAgICAgICAgICAgICBDYWxsTGlua0luZm86OkNhbGwsIHN0dWJJbmZvLmNv
ZGVPcmlnaW4sIGxvYWRlZFZhbHVlR1BSKTsKLQotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBkb25lOwotCi0gICAgICAgICAgICAvLyBUaGVyZSBpcyBhICJ0aGlzIiBhcmd1bWVu
dC4KLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDE7Ci0gICAgICAg
ICAgICAvLyAuLi4gYW5kIGEgdmFsdWUgYXJndW1lbnQgaWYgd2UncmUgY2FsbGluZyBhIHNldHRl
ci4KLSAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKQotICAgICAgICAgICAgICAgIG51
bWJlck9mUGFyYW1ldGVycysrOwotCi0gICAgICAgICAgICAvLyBHZXQgdGhlIGFjY2Vzc29yOyBp
ZiB0aGVyZSBhaW4ndCBvbmUgdGhlbiB0aGUgcmVzdWx0IGlzIGpzVW5kZWZpbmVkKCkuCi0gICAg
ICAgICAgICBpZiAobV90eXBlID09IFNldHRlcikgewotICAgICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobG9hZGVkVmFs
dWVHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSksCi0gICAgICAgICAgICAgICAg
ICAgIGxvYWRlZFZhbHVlR1BSKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgaml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZkdldHRlcigpKSwKLSAgICAg
ICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgcmV0dXJuVW5kZWZpbmVkID0gaml0LmJyYW5jaFRlc3RQ
dHIoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBsb2FkZWRWYWx1ZUdQUik7
Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPSBDYWxsRnJhbWU6
OmhlYWRlclNpemVJblJlZ2lzdGVycyArIG51bWJlck9mUGFyYW1ldGVyczsKLQotICAgICAgICAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQotICAgICAgICAgICAgICAgIG51bWJl
ck9mUmVnc0ZvckNhbGwgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwg
PQotICAgICAgICAgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVu
dEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKLQotICAgICAgICAgICAgaml0LnN1YlB0
cigKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVt
YmVyT2ZCeXRlc0ZvckNhbGwpLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwotCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgY2Fs
bGVlRnJhbWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKLSAgICAgICAgICAgICAgICAtc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKLQotICAgICAgICAgICAg
aml0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
bnVtYmVyT2ZQYXJhbWV0ZXJzKSwKLSAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zm
c2V0KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5
bG9hZE9mZnNldCkpOwotCi0gICAgICAgICAgICBqaXQuc3RvcmVDZWxsKAotICAgICAgICAgICAg
ICAgIGxvYWRlZFZhbHVlR1BSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpKTsKLQotICAgICAgICAgICAgaml0LnN0b3JlQ2Vs
bCgKLSAgICAgICAgICAgICAgICBiYXNlR1BSLAotICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1l
LndpdGhPZmZzZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCkub2Zmc2V0KCkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSk7Ci0KLSAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKSB7Ci0g
ICAgICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCi0gICAgICAgICAgICAgICAgICAgIHZhbHVl
UmVncywKLSAgICAgICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEpLm9mZnNldCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgc2xvd0Nhc2UgPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGxvYWRlZFZhbHVlR1BSLCBhZGRyZXNz
T2ZMaW5rRnVuY3Rpb25DaGVjaywKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoMCkpOwotCi0gICAgICAgICAgICBmYXN0UGF0aENhbGwgPSBqaXQubmVhckNhbGwo
KTsKLSAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyKQotICAgICAgICAgICAgICAgIGpp
dC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKLSAgICAgICAgICAgIGRvbmUuYXBwZW5kKGppdC5q
dW1wKCkpOwotCi0gICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwotICAgICAgICAgICAg
aml0Lm1vdmUobG9hZGVkVmFsdWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKLSNpZiBVU0UoSlNWQUxV
RTMyXzY0KQotICAgICAgICAgICAgLy8gV2UgKmFsd2F5cyoga25vdyB0aGF0IHRoZSBnZXR0ZXIv
c2V0dGVyLCBpZiBub24tbnVsbCwgaXMgYSBjZWxsLgotICAgICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1Qx
KTsKLSNlbmRpZgotICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby5nZXQoKSksIEdQUkluZm86OnJlZ1QyKTsKLSAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOwotICAgICAgICAgICAgaWYg
KG1fdHlwZSA9PSBHZXR0ZXIpCi0gICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1
ZVJlZ3MpOwotICAgICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0KLSAgICAgICAg
ICAgIHJldHVyblVuZGVmaW5lZC5saW5rKCZqaXQpOwotICAgICAgICAgICAgaWYgKG1fdHlwZSA9
PSBHZXR0ZXIpCi0gICAgICAgICAgICAgICAgaml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmlu
ZWQoKSwgdmFsdWVSZWdzKTsKLQotICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwotCi0gICAg
ICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKChjb2RlQmxvY2st
PnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkgLSBzdGF0ZS5wcmVzZXJ2
ZWRSZXVzZWRSZWdpc3RlclN0YXRlLm51bWJlck9mQnl0ZXNQcmVzZXJ2ZWQgLSBzcGlsbFN0YXRl
Lm51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiksCi0gICAgICAg
ICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUgPSBp
c0dldHRlcigpOwotICAgICAgICAgICAgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JD
YWxsKHNwaWxsU3RhdGUsIGNhbGxIYXNSZXR1cm5WYWx1ZSk7Ci0KLSAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzaygKLSAgICAgICAgICAgICAgICBbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewotICAgICAgICAgICAgICAgICAgICBtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8tPnNl
dENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93UGF0aENhbGwpKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZihh
ZGRyZXNzT2ZMaW5rRnVuY3Rpb25DaGVjaykpLAotICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdFBhdGhDYWxsKSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKAotICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQ3Vz
dG9tVmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyIHx8IG1fdHlw
ZSA9PSBDdXN0b21WYWx1ZVNldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIp
OwotCi0gICAgICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIEMgY2FsbCBzbyBh
bnkgb2Ygb3VyIHN0YWNrIHNwaWxsYWdlIGlzbid0IG92ZXJ3cml0dGVuLiBJdCdzCi0gICAgICAg
ICAgICAvLyBoYXJkIHRvIHRyYWNrIGlmIHNvbWVvbmUgZGlkIHNwaWxsYWdlIG9yIG5vdCwgc28g
d2UganVzdCBhc3N1bWUgdGhhdCB3ZSBhbHdheXMgbmVlZAotICAgICAgICAgICAgLy8gdG8gbWFr
ZSBzb21lIHNwYWNlIGhlcmUuCi0gICAgICAgICAgICBqaXQubWFrZVNwYWNlT25TdGFja0ZvckND
YWxsKCk7Ci0KLSAgICAgICAgICAgIC8vIGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1
ZUZ1bmMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KTsKLSAgICAgICAgICAgIC8vIHNldHRlcjogdm9pZCAoKlB1dFZhbHVlRnVuYykoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgdGhpc09iamVjdCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpOwotICAg
ICAgICAgICAgLy8gQ3VzdG9tIHZhbHVlcyBhcmUgcGFzc2VkIHRoZSBzbG90QmFzZSAodGhlIHBy
b3BlcnR5IGhvbGRlciksIGN1c3RvbSBhY2Nlc3NvcnMgYXJlIHBhc3NlZCB0aGUgdGhpc1ZhdWxl
IChyZWNpZXZlcikuCi0gICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgZGlmZmVyZW5j
ZXMgaW4gY3VzdG9tIHZhbHVlcyBhbmQgY3VzdG9tIGFjY2Vzc29ycy4KLSAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgwMTQKLSAgICAgICAg
ICAgIEdQUlJlZyBiYXNlRm9yQ3VzdG9tVmFsdWUgPSBtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0
ZXIgfHwgbV90eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyID8gYmFzZUZvckFjY2Vzc0dQUiA6IGJh
c2VGb3JHZXRHUFI7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGlmIChtX3R5cGUg
PT0gQ3VzdG9tVmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyKSB7
Ci0gICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKLSAgICAg
ICAgICAgICAgICAgICAgYmFzZUZvckN1c3RvbVZhbHVlLAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaWRlbnQuaW1wbCgpKSk7Ci0gICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJh
c2VGb3JDdXN0b21WYWx1ZSwgdmFsdWVSZWdzLmdwcigpKTsKLSNlbHNlCi0gICAgICAgICAgICBp
ZiAobV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3Nv
ckdldHRlcikgewotICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoCi0gICAgICAgICAgICAgICAgICAgIEVBQklfMzJCSVRfRFVNTVlfQVJHIGJhc2VGb3JDdXN0
b21WYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZyksCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihpZGVudC5pbXBsKCkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKLSAgICAgICAgICAgICAg
ICAgICAgRUFCSV8zMkJJVF9EVU1NWV9BUkcgYmFzZUZvckN1c3RvbVZhbHVlLAotICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwK
LSAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzLnRh
Z0dQUigpKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgaml0LnN0b3JlUHRy
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0udG9wQ2FsbEZyYW1lKTsKLQotICAgICAg
ICAgICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soCi0gICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5jdGlv
blB0cihtX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUpKTsKLSAgICAgICAgICAgICAg
ICB9KTsKLQotICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBt
X3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIpCi0gICAgICAgICAgICAgICAgaml0LnNldHVw
UmVzdWx0cyh2YWx1ZVJlZ3MpOwotICAgICAgICAgICAgaml0LnJlY2xhaW1TcGFjZU9uU3RhY2tG
b3JDQ2FsbCgpOwotCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbm9FeGNlcHRpb24g
PQotICAgICAgICAgICAgICAgIGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzOjpJ
bnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKLQotICAgICAgICAgICAgc3RhdGUucmVzdG9yZUxpdmVS
ZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsV2l0aFRocm93bkV4Y2VwdGlvbihzcGlsbFN0YXRlKTsK
LSAgICAgICAgICAgIHN0YXRlLmVtaXRFeHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIoKTsKLSAgICAg
ICAgCi0gICAgICAgICAgICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOwotICAgICAgICAgICAgYm9v
bCBjYWxsSGFzUmV0dXJuVmFsdWUgPSBpc0dldHRlcigpOwotICAgICAgICAgICAgcmVzdG9yZUxp
dmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUsIGNhbGxIYXNSZXR1cm5WYWx1
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgY2FzZSBSZXBsYWNlOiB7Ci0gICAgICAgIGlmIChJbmZlcnJlZFR5cGUq
IHR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5mZXJyZWRUeXBlRm9yKGlkZW50LmltcGwoKSkpIHsKLSAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhdmUgdHlw
ZTogIiwgdHlwZS0+ZGVzY3JpcHRvcigpLCAiXG4iKTsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxB
bmRSZXBhdGNoLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBqaXQuYnJhbmNoSWZOb3RUeXBlKHZh
bHVlUmVncywgc2NyYXRjaEdQUiwgdHlwZS0+ZGVzY3JpcHRvcigpKSk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkRvbid0IGhhdmUgdHlwZS5cbiIp
OwotICAgICAgICAKLSAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgewotICAg
ICAgICAgICAgaml0LnN0b3JlVmFsdWUoCi0gICAgICAgICAgICAgICAgdmFsdWVSZWdzLAotICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICAgICAg
YmFzZUdQUiwKLSAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpICsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zm
c2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUo
Ci0gICAgICAgICAgICAgICAgdmFsdWVSZWdzLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0
ZXJmbHkobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
c3RhdGUuc3VjY2VlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2FzZSBUcmFu
c2l0aW9uOiB7Ci0gICAgICAgIC8vIEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24oKSBzaG91bGQgaGF2
ZSByZXR1cm5lZCBudWxsIGlmIHRoaXMgd2Fzbid0IHRydWUuCi0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID49IDYgfHwgIXN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpIHx8IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IG5l
d1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLQotICAgICAgICBpZiAoSW5mZXJy
ZWRUeXBlKiB0eXBlID0gbmV3U3RydWN0dXJlKCktPmluZmVycmVkVHlwZUZvcihpZGVudC5pbXBs
KCkpKSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
KCJIYXZlIHR5cGU6ICIsIHR5cGUtPmRlc2NyaXB0b3IoKSwgIlxuIik7Ci0gICAgICAgICAgICBz
dGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgaml0LmJyYW5jaElm
Tm90VHlwZSh2YWx1ZVJlZ3MsIHNjcmF0Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOwotICAg
ICAgICB9IGVsc2UgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJEb24ndCBoYXZl
IHR5cGUuXG4iKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE5PVEU6IFRoaXMgbG9naWMgaXMgZHVw
bGljYXRlZCBpbiBBY2Nlc3NDYXNlOjpkb2VzQ2FsbHMoKS4gSXQncyBpbXBvcnRhbnQgdGhhdCBk
b2VzQ2FsbHMoKSBrbm93cwotICAgICAgICAvLyBleGFjdGx5IHdoZW4gdGhpcyB3b3VsZCBtYWtl
IGNhbGxzLgotICAgICAgICBib29sIGFsbG9jYXRpbmcgPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAhPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICAg
ICAgYm9vbCByZWFsbG9jYXRpbmcgPSBhbGxvY2F0aW5nICYmIHN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpOwotICAgICAgICBib29sIGFsbG9jYXRpbmdJbmxpbmUgPSBhbGxvY2F0aW5n
ICYmICFzdHJ1Y3R1cmUoKS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKTsKLQotICAgICAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHN0dWJJbmZvLnBhdGNoLnVzZWRSZWdp
c3RlcnMpOwotICAgICAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKLSNpZiBVU0UoSlNWQUxV
RTMyXzY0KQotICAgICAgICBhbGxvY2F0b3IubG9jayhzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnBhdGNoLmJhc2VUYWdHUFIpKTsKLSNlbmRpZgotICAgICAgICBhbGxvY2F0b3IubG9jayh2
YWx1ZVJlZ3MpOwotICAgICAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKLQotICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnOwotICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUjMgPSBJbnZhbGlkR1BSUmVnOwotICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkg
ewotICAgICAgICAgICAgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCk7Ci0gICAgICAgICAgICBzY3JhdGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJl
c2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGUgPQotICAgICAgICAgICAgYWxsb2NhdG9yLnByZXNl
cnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
OjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOwotICAgICAgICAKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKLQotICAgICAgICBBU1NFUlQoc3RydWN0dXJl
KCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwotCi0gICAg
ICAgIGlmIChhbGxvY2F0aW5nKSB7Ci0gICAgICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG5ld1N0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAgICAg
ICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gdm0uYXV4aWxpYXJ5U3BhY2UuYWxsb2Nh
dG9yRm9yKG5ld1NpemUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICgh
YWxsb2NhdG9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFl1Y2ssIHRoaXMgY2FzZSB3b3Vs
ZCBzdWNrIQotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0Lmp1bXAoKSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBzY3JhdGNoR1BS
Mik7Ci0gICAgICAgICAgICAgICAgaml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSLCBhbGxvY2F0
b3IsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xvd1BhdGgpOwotICAgICAgICAgICAgICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSArIHNpemVvZihJ
bmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTaXplID4gb2xk
U2l6ZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHJlYWxsb2NhdGlu
ZykgewotICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgYXJl
IHJlYWxsb2NhdGluZyAoaS5lLiB0aGUgb2xkIHN0cnVjdHVyZS9idXR0ZXJmbHkKLSAgICAgICAg
ICAgICAgICAgICAgLy8gYWxyZWFkeSBoYWQgb3V0LW9mLWxpbmUgcHJvcGVydHkgc3RvcmFnZSku
Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgc2NyYXRjaEdQUjMpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xk
IHN0b3JhZ2UsCi0gICAgICAgICAgICAgICAgICAgIC8vIHNjcmF0Y2hHUFIyID0gYXZhaWxhYmxl
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9s
ZFNpemU7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBqaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PigK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArIHNpemVvZihKU1Zh
bHVlKSArIHNpemVvZih2b2lkKikpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3Jh
dGNoR1BSMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUjIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY3JhdGNoR1BSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCop
KSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IG9sZFNpemU7IG9m
ZnNldCA8IG5ld1NpemU7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKQotICAgICAgICAgICAgICAg
ICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0
ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBhbGxv
Y2F0aW5nIG91dC1vZi1saW5lIHVzaW5nIGFuIG9wZXJhdGlvbi4KLSAgICAgICAgICAgICAgICBS
ZWdpc3RlclNldCBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmU7Ci0gICAgICAgICAgICAgICAgZXh0
cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldChiYXNlR1BSKTsKLSAgICAgICAgICAgICAgICBleHRy
YVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KHZhbHVlUmVncyk7Ci0gICAgICAgICAgICAgICAgQWNj
ZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2
ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKAotICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLmNhbGxTaXRlSW5kZXhGb3JFeGNlcHRpb25IYW5kbGluZ09yT3JpZ2luYWwo
KS5iaXRzKCkpLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaml0Lm1ha2VTcGFjZU9uU3RhY2tG
b3JDQ2FsbCgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghcmVhbGxv
Y2F0aW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYmFzZUdQUik7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAgICAgICAgICAgICAgICAgIFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9uQ2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25QdHIob3Bl
cmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFs
Q2FwYWNpdHkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3
ZSBhcmUgcmVhbGxvY2F0aW5nIChpLmUuIHRoZSBvbGQgc3RydWN0dXJlL2J1dHRlcmZseQotICAg
ICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGhhZCBvdXQtb2YtbGluZSBwcm9wZXJ0eSBzdG9y
YWdlKS4KLSAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0g
aml0LmNhbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAotICAgICAg
ICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb25DYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGdW5jdGlvblB0cihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVy
dHlTdG9yYWdlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaml0LnJlY2xhaW1TcGFjZU9u
U3RhY2tGb3JDQ2FsbCgpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgbm9FeGNlcHRpb24gPQotICAgICAgICAgICAgICAgICAgICBq
aXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVj
ayk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3RhdGUucmVzdG9yZUxpdmVS
ZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsV2l0aFRocm93bkV4Y2VwdGlvbihzcGlsbFN0YXRlKTsK
LSAgICAgICAgICAgICAgICBzdGF0ZS5lbWl0RXhwbGljaXRFeGNlcHRpb25IYW5kbGVyKCk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbm9FeGNlcHRpb24ubGluaygmaml0KTsK
LSAgICAgICAgICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNh
bGwoc3BpbGxTdGF0ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKSB7Ci0gICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgK
LSAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAotICAgICAgICAgICAgICAg
ICAgICBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKwotICAgICAgICAgICAgICAg
ICAgICBvZmZzZXRJbklubGluZVN0b3JhZ2UobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWFsbG9jYXRpbmcpCi0gICAgICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgaml0LnN0
b3JlVmFsdWUoCi0gICAgICAgICAgICAgICAgdmFsdWVSZWdzLAotICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShtX29mZnNl
dCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KGFsbG9jYXRpbmdJbmxpbmUpIHsKLSAgICAgICAgICAgIC8vIFdlIHNldCB0aGUgbmV3IGJ1dHRl
cmZseSBhbmQgdGhlIHN0cnVjdHVyZSBsYXN0LiBEb2luZyBpdCB0aGlzIHdheSBlbnN1cmVzIHRo
YXQKLSAgICAgICAgICAgIC8vIHdoYXRldmVyIHdlIGhhZCBkb25lIHVwIHRvIHRoaXMgcG9pbnQg
aXMgZm9yZ290dGVuIGlmIHdlIGNob29zZSB0byBicmFuY2ggdG8gc2xvdwotICAgICAgICAgICAg
Ly8gcGF0aC4KLSAgICAgICAgICAgIGppdC5udWtlU3RydWN0dXJlQW5kU3RvcmVCdXR0ZXJmbHko
c2NyYXRjaEdQUiwgYmFzZUdQUik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHVpbnQz
Ml90IHN0cnVjdHVyZUJpdHMgPSBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KG5ld1N0cnVjdHVyZSgp
LT5pZCgpKTsKLSAgICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihzdHJ1Y3R1cmVCaXRzKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKLQotICAgICAg
ICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZl
ZFN0YXRlKTsKLSAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwotICAgICAgICAKLSAgICAgICAgLy8g
V2Ugd2lsbCBoYXZlIGEgc2xvdyBwYXRoIGlmIHdlIHdlcmUgYWxsb2NhdGluZyB3aXRob3V0IHRo
ZSBoZWxwIG9mIGFuIG9wZXJhdGlvbi4KLSAgICAgICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUpIHsK
LSAgICAgICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgewotICAgICAg
ICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAgYWxsb2NhdG9y
LnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7Ci0g
ICAgICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0g
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFw
cGVuZChzbG93UGF0aCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc2xvd1BhdGguZW1wdHkoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYXNl
IEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAg
ICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdGF0ZS5mYWls
QW5kSWdub3JlLmFwcGVuZCgKLSAgICAgICAgICAgIGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6
Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOwot
ICAgICAgICBqaXQuYm94SW50MzIoc2NyYXRjaEdQUiwgdmFsdWVSZWdzKTsKLSAgICAgICAgc3Rh
dGUuc3VjY2VlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2FzZSBTdHJpbmdM
ZW5ndGg6IHsKLSAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsK
LSAgICAgICAgaml0LmJveEludDMyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncyk7
Ci0gICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAg
ICAgCi0gICAgY2FzZSBJbnRyaW5zaWNHZXR0ZXI6IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aXNWYWxpZE9mZnNldChvZmZzZXQoKSkpOwotCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gZW5zdXJl
IHRoZSBnZXR0ZXIgdmFsdWUgZG9lcyBub3QgbW92ZSBmcm9tIHVuZGVyIHVzLiBOb3RlIHRoYXQg
R2V0dGVyU2V0dGVycwotICAgICAgICAvLyBhcmUgaW1tdXRhYmxlIHNvIHdlIGp1c3QgbmVlZCB0
byB3YXRjaCB0aGUgcHJvcGVydHkgbm90IGFueSB2YWx1ZSBpbnNpZGUgaXQuCi0gICAgICAgIFN0
cnVjdHVyZSogY3VyclN0cnVjdHVyZTsKLSAgICAgICAgaWYgKG1fY29uZGl0aW9uU2V0LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUoKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IG1fY29uZGl0aW9uU2V0LnNsb3RCYXNl
Q29uZGl0aW9uKCkub2JqZWN0KCktPnN0cnVjdHVyZSgpOwotICAgICAgICBjdXJyU3RydWN0dXJl
LT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIG9mZnNldCgpKTsKLQot
ICAgICAgICBlbWl0SW50cmluc2ljR2V0dGVyKHN0YXRlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzTGVuZ3RoOgotICAgIGNhc2UgU2NvcGVkQXJn
dW1lbnRzTGVuZ3RoOgotICAgIGNhc2UgTWVnYW1vcnBoaWNMb2FkOgotICAgICAgICAvLyBUaGVz
ZSBuZWVkIHRvIGJlIGhhbmRsZWQgYnkgZ2VuZXJhdGVXaXRoR3VhcmQoKSwgc2luY2UgdGhlIGd1
YXJkIGlzIHBhcnQgb2YgdGhlCi0gICAgICAgIC8vIGFsZ29yaXRobS4gV2UgY2FuIGJlIHN1cmUg
dGhhdCBub2JvZHkgd2lsbCBjYWxsIGdlbmVyYXRlKCkgZGlyZWN0bHkgZm9yIHRoZXNlIHNpbmNl
IHRoZXkKLSAgICAgICAgLy8gYXJlIG5vdCBndWFyZGVkIGJ5IHN0cnVjdHVyZSBjaGVja3MuCi0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAotICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgQWNjZXNzQ2FzZTo6ZW1pdERP
TUpJVEdldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBHUFJSZWcgYmFzZUZvckdl
dEdQUikKLXsKLSAgICBDQ2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7Ci0gICAgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKnN0YXRlLnN0dWJJbmZvOwotICAgIEpTVmFsdWVSZWdz
IHZhbHVlUmVncyA9IHN0YXRlLnZhbHVlUmVnczsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRl
LmJhc2VHUFI7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0ZS5zY3JhdGNoR1BSOwotCi0g
ICAgLy8gV2UgY29uc3RydWN0IHRoZSBlbnZpcm9ubWVudCB0aGF0IGNhbiBleGVjdXRlIHRoZSBE
T01KSVQ6OlBhdGNocG9pbnQgaGVyZS4KLSAgICBSZWY8RE9NSklUOjpDYWxsRE9NR2V0dGVyUGF0
Y2hwb2ludD4gcGF0Y2hwb2ludCA9IG1fcmFyZURhdGEtPmRvbUpJVC0+Y2FsbERPTUdldHRlcigp
OwotCi0gICAgVmVjdG9yPEdQUlJlZz4gZ3BTY3JhdGNoOwotICAgIFZlY3RvcjxGUFJSZWc+IGZw
U2NyYXRjaDsKLSAgICBWZWN0b3I8RE9NSklUOjpWYWx1ZT4gcmVnczsKLQotICAgIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7
Ci0gICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICBhbGxvY2F0b3IubG9jayhzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VU
YWdHUFIpKTsKLSNlbmRpZgotICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7Ci0gICAgYWxs
b2NhdG9yLmxvY2soc2NyYXRjaEdQUik7Ci0KLSAgICBHUFJSZWcgcGFyYW1CYXNlR1BSID0gSW52
YWxpZEdQUlJlZzsKLSAgICBHUFJSZWcgcGFyYW1HbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BS
UmVnOwotICAgIEpTVmFsdWVSZWdzIHBhcmFtVmFsdWVSZWdzID0gdmFsdWVSZWdzOwotICAgIEdQ
UlJlZyByZW1haW5pbmdTY3JhdGNoR1BSID0gSW52YWxpZEdQUlJlZzsKLQotICAgIC8vIHZhbHVl
UmVncyBhbmQgYmFzZUZvckdldEdQUiBtYXkgYmUgdGhlIHNhbWUuIEZvciBleGFtcGxlLCBpbiBC
YXNlbGluZSBKSVQsIHdlIHBhc3MgdGhlIHNhbWUgcmVnVDAgZm9yIGJhc2VHUFIgYW5kIHZhbHVl
UmVncy4KLSAgICAvLyBJbiBGVEwsIHRoZXJlIGlzIG5vIGNvbnN0cmFpbnQgdGhhdCB0aGUgYmFz
ZUZvckdldEdQUiBpbnRlcmZlcmVzIHdpdGggdGhlIHJlc3VsdC4gVG8gbWFrZSBpbXBsZW1lbnRh
dGlvbiBzaW1wbGUgaW4KLSAgICAvLyBET01KSVQ6OlBhdGNocG9pbnQsIERPTUpJVDo6UGF0Y2hw
b2ludCBhc3N1bWVzIHRoYXQgcmVzdWx0IHJlZ2lzdGVycyBhbHdheXMgZWFybHkgaW50ZXJmZXJl
IHdpdGggaW5wdXQgcmVnaXN0ZXJzLCBpbiB0aGlzIGNhc2UsCi0gICAgLy8gYmFzZUZvckdldEdQ
Ui4gU28gd2UgbW92ZSBiYXNlRm9yR2V0R1BSIHRvIHRoZSBvdGhlciByZWdpc3RlciBpZiBiYXNl
Rm9yR2V0R1BSID09IHZhbHVlUmVncy4KLSAgICBpZiAoYmFzZUZvckdldEdQUiAhPSB2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpKSB7Ci0gICAgICAgIHBhcmFtQmFzZUdQUiA9IGJhc2VGb3JHZXRHUFI7
Ci0gICAgICAgIGlmICghcGF0Y2hwb2ludC0+cmVxdWlyZUdsb2JhbE9iamVjdCkKLSAgICAgICAg
ICAgIHJlbWFpbmluZ1NjcmF0Y2hHUFIgPSBzY3JhdGNoR1BSOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBwYXJhbUdsb2JhbE9iamVjdEdQUiA9IHNjcmF0Y2hHUFI7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaml0Lm1vdmUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgIHBhcmFtQmFzZUdQUiA9IHNjcmF0Y2hHUFI7Ci0gICAgICAgIGlmIChwYXRjaHBvaW50
LT5yZXF1aXJlR2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgcGFyYW1HbG9iYWxPYmplY3RHUFIg
PSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgfQotCi0gICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdEZvckRPTUpJVCA9IHN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3Qo
KTsKLQotICAgIHJlZ3MuYXBwZW5kKHBhcmFtVmFsdWVSZWdzKTsKLSAgICByZWdzLmFwcGVuZChw
YXJhbUJhc2VHUFIpOwotICAgIGlmIChwYXRjaHBvaW50LT5yZXF1aXJlR2xvYmFsT2JqZWN0KSB7
Ci0gICAgICAgIEFTU0VSVChwYXJhbUdsb2JhbE9iamVjdEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsK
LSAgICAgICAgcmVncy5hcHBlbmQoRE9NSklUOjpWYWx1ZShwYXJhbUdsb2JhbE9iamVjdEdQUiwg
Z2xvYmFsT2JqZWN0Rm9yRE9NSklUKSk7Ci0gICAgfQotCi0gICAgaWYgKHBhdGNocG9pbnQtPm51
bUdQU2NyYXRjaFJlZ2lzdGVycykgewotICAgICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAgICAg
aWYgKHJlbWFpbmluZ1NjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZykgewotICAgICAgICAgICAg
Z3BTY3JhdGNoLmFwcGVuZChyZW1haW5pbmdTY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICsraTsK
LSAgICAgICAgfQotICAgICAgICBmb3IgKDsgaSA8IHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJl
Z2lzdGVyczsgKytpKQotICAgICAgICAgICAgZ3BTY3JhdGNoLmFwcGVuZChhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCkpOwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnM7ICsraSkKLSAgICAgICAgZnBTY3Jh
dGNoLmFwcGVuZChhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoRlBSKCkpOwotCi0gICAgLy8gTGV0
J3Mgc3RvcmUgdGhlIHJldXNlZCByZWdpc3RlcnMgdG8gdGhlIHN0YWNrLiBBZnRlciB0aGF0LCB3
ZSBjYW4gdXNlIGFsbG9jYXRlZCBzY3JhdGNoIHJlZ2lzdGVycy4KLSAgICBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0KLSAgICAgICAgYWxs
b2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOwotCi0gICAgaWYg
KHZlcmJvc2UpIHsKLSAgICAgICAgZGF0YUxvZygiYmFzZUdQUiA9ICIsIGJhc2VHUFIsICJcbiIp
OwotICAgICAgICBkYXRhTG9nKCJ2YWx1ZVJlZ3MgPSAiLCB2YWx1ZVJlZ3MsICJcbiIpOwotICAg
ICAgICBkYXRhTG9nKCJzY3JhdGNoR1BSID0gIiwgc2NyYXRjaEdQUiwgIlxuIik7Ci0gICAgICAg
IGRhdGFMb2coInBhcmFtQmFzZUdQUiA9ICIsIHBhcmFtQmFzZUdQUiwgIlxuIik7Ci0gICAgICAg
IGlmIChwYXJhbUdsb2JhbE9iamVjdEdQUiAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAg
ZGF0YUxvZygicGFyYW1HbG9iYWxPYmplY3RHUFIgPSAiLCBwYXJhbUdsb2JhbE9iamVjdEdQUiwg
IlxuIik7Ci0gICAgICAgIGRhdGFMb2coInBhcmFtVmFsdWVSZWdzID0gIiwgcGFyYW1WYWx1ZVJl
Z3MsICJcbiIpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGF0Y2hwb2ludC0+
bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyArK2kpCi0gICAgICAgICAgICBkYXRhTG9nKCJncFNjcmF0
Y2hbIiwgaSwgIl0gPSAiLCBncFNjcmF0Y2hbaV0sICJcbiIpOwotICAgIH0KLQotICAgIGlmIChw
YXRjaHBvaW50LT5yZXF1aXJlR2xvYmFsT2JqZWN0KQotICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0Rm9yRE9NSklUKSwgcGFyYW1HbG9iYWxP
YmplY3RHUFIpOwotCi0gICAgLy8gV2UganVzdCBzcGlsbCB0aGUgcmVnaXN0ZXJzIHVzZWQgaW4g
RE9NSklUOjpQYXRjaHBvaW50IGhlcmUuIEZvciBub3Qgc3BpbGxlZCByZWdpc3RlcnMgaGVyZSBl
eHBsaWNpdGx5LAotICAgIC8vIHRoZXkgbXVzdCBiZSBpbiB0aGUgdXNlZCByZWdpc3RlciBzZXQg
cGFzc2VkIGJ5IHRoZSBjYWxsZXJzIChCYXNlbGluZSwgREZHLCBhbmQgRlRMKSBpZiB0aGV5IG5l
ZWQgdG8gYmUga2VwdC4KLSAgICAvLyBTb21lIHJlZ2lzdGVycyBjYW4gYmUgbG9ja2VkLCBidXQg
bm90IGluIHRoZSB1c2VkIHJlZ2lzdGVyIHNldC4gRm9yIGV4YW1wbGUsIHRoZSBjYWxsZXIgY291
bGQgbWFrZSBiYXNlR1BSCi0gICAgLy8gc2FtZSB0byB2YWx1ZVJlZ3MsIGFuZCBub3QgaW5jbHVk
ZSBpdCBpbiB0aGUgdXNlZCByZWdpc3RlcnMgc2luY2UgaXQgd2lsbCBiZSBjaGFuZ2VkLgotICAg
IFJlZ2lzdGVyU2V0IHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbDsKLSAgICBmb3IgKGF1dG8mIHZh
bHVlIDogcmVncykgewotICAgICAgICBET01KSVQ6OlJlZyByZWcgPSB2YWx1ZS5yZWcoKTsKLSAg
ICAgICAgaWYgKHJlZy5pc0pTVmFsdWVSZWdzKCkpCi0gICAgICAgICAgICByZWdpc3RlcnNUb1Nw
aWxsRm9yQ0NhbGwuc2V0KHJlZy5qc1ZhbHVlUmVncygpKTsKLSAgICAgICAgZWxzZSBpZiAocmVn
LmlzR1BSKCkpCi0gICAgICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZy5n
cHIoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2Fs
bC5zZXQocmVnLmZwcigpKTsKLSAgICB9Ci0gICAgZm9yIChHUFJSZWcgcmVnIDogZ3BTY3JhdGNo
KQotICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7Ci0gICAgZm9yIChG
UFJSZWcgcmVnIDogZnBTY3JhdGNoKQotICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwu
c2V0KHJlZyk7Ci0gICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLmV4Y2x1ZGUoUmVnaXN0ZXJT
ZXQ6OnJlZ2lzdGVyc1RvTm90U2F2ZUZvckNDYWxsKCkpOwotCi0gICAgRE9NSklUQWNjZXNzQ2Fz
ZVBhdGNocG9pbnRQYXJhbXMgcGFyYW1zKFdURk1vdmUocmVncyksIFdURk1vdmUoZ3BTY3JhdGNo
KSwgV1RGTW92ZShmcFNjcmF0Y2gpKTsKLSAgICBwYXRjaHBvaW50LT5nZW5lcmF0b3IoKS0+cnVu
KGppdCwgcGFyYW1zKTsKLSAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9w
cGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICBzdGF0ZS5zdWNjZWVkKCk7Ci0KLSAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbnMgPSBwYXJhbXMuZW1pdFNsb3dQYXRoQ2Fs
bHMoc3RhdGUsIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbCwgaml0KTsKLSAgICBpZiAoIWV4Y2Vw
dGlvbnMuZW1wdHkoKSkgewotICAgICAgICBleGNlcHRpb25zLmxpbmsoJmppdCk7Ci0gICAgICAg
IGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVk
U3RhdGUpOwotICAgICAgICBzdGF0ZS5lbWl0RXhwbGljaXRFeGNlcHRpb25IYW5kbGVyKCk7Ci0g
ICAgfQotfQogCiBQb2x5bW9ycGhpY0FjY2Vzczo6UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KIFBv
bHltb3JwaGljQWNjZXNzOjp+UG9seW1vcnBoaWNBY2Nlc3MoKSB7IH0KQEAgLTE3NTYsMzIgKzM5
OCw2IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJh
dGUoCiAgICAgbV9saXN0LnJlc2l6ZShkc3RJbmRleCk7CiAgICAgCiAgICAgaWYgKHZlcmJvc2Up
Ci0gICAgICAgIGRhdGFMb2coIkluIHJlZ2VuZXJhdGU6IGNhc2VzOiAiLCBsaXN0RHVtcChjYXNl
cyksICJcbiIpOwotICAgIAotICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIHJlbW92ZWQgb2J2aW91c2x5
IHVubmVjZXNzYXJ5IGNhc2VzLCB3ZSBjYW4gY2hlY2sgaWYgdGhlIG1lZ2Ftb3JwaGljIGxvYWQK
LSAgICAvLyBvcHRpbWl6YXRpb24gaXMgYXBwbGljYWJsZS4gTm90ZSB0aGF0IHdlIGJhc2ljYWxs
eSB0dW5lIG1lZ2Ftb3JwaGljTG9hZENvc3QgYWNjb3JkaW5nIHRvIGNvZGUKLSAgICAvLyBzaXpl
LiBJdCB3b3VsZCBiZSBmYXN0ZXIgdG8ganVzdCBhbGxvdyBtb3JlIHJlcGF0Y2hpbmcgd2l0aCBt
YW55IGxvYWQgY2FzZXMsIGFuZCBhdm9pZCB0aGUKLSAgICAvLyBtZWdhbW9ycGhpY0xvYWQgb3B0
aW1pemF0aW9uLCBpZiB3ZSBoYWQgaW5maW5pdGUgZXhlY3V0YWJsZSBtZW1vcnkuCi0gICAgaWYg
KGNhc2VzLnNpemUoKSA+PSBPcHRpb25zOjptYXhBY2Nlc3NWYXJpYW50TGlzdFNpemUoKSkgewot
ICAgICAgICB1bnNpZ25lZCBudW1TZWxmTG9hZHMgPSAwOwotICAgICAgICBmb3IgKGF1dG8mIG5l
d0Nhc2UgOiBjYXNlcykgewotICAgICAgICAgICAgaWYgKG5ld0Nhc2UtPmNhbkJlUmVwbGFjZWRC
eU1lZ2Ftb3JwaGljTG9hZCgpKQotICAgICAgICAgICAgICAgIG51bVNlbGZMb2FkcysrOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobnVtU2VsZkxvYWRzID49IE9wdGlvbnM6Om1l
Z2Ftb3JwaGljTG9hZENvc3QoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8gbWVnYSA9IEFjY2Vz
c0Nhc2U6Om1lZ2Ftb3JwaGljTG9hZCh2bSwgY29kZUJsb2NrKSkgewotICAgICAgICAgICAgICAg
IGNhc2VzLnJlbW92ZUFsbE1hdGNoaW5nKAotICAgICAgICAgICAgICAgICAgICBbJl0gKHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiYgbmV3Q2FzZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbmV3Q2FzZS0+Y2FuQmVSZXBsYWNlZEJ5TWVnYW1vcnBoaWNMb2Fk
KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGNhc2VzLmFwcGVuZChXVEZNb3ZlKG1lZ2EpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiT3B0
aW1pemVkIGNhc2VzOiAiLCBsaXN0RHVtcChjYXNlcyksICJcbiIpOwogICAgIAogICAgIC8vIEF0
IHRoaXMgcG9pbnQgd2UncmUgY29udmluY2VkIHRoYXQgJ2Nhc2VzJyBjb250YWlucyB0aGUgY2Fz
ZXMgdGhhdCB3ZSB3YW50IHRvIEpJVCBub3cgYW5kIHdlCkBAIC0xOTc4LDkgKzU5NCw2IEBAIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBl
IHR5cGUpCiAgICAgY2FzZSBBY2Nlc3NDYXNlOjpMb2FkOgogICAgICAgICBvdXQucHJpbnQoIkxv
YWQiKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQWNjZXNzQ2FzZTo6TWVnYW1vcnBoaWNM
b2FkOgotICAgICAgICBvdXQucHJpbnQoIk1lZ2Ftb3JwaGljTG9hZCIpOwotICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBBY2Nlc3NDYXNlOjpUcmFuc2l0aW9uOgogICAgICAgICBvdXQucHJpbnQo
IlRyYW5zaXRpb24iKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAppbmRleCA2ZjcwMWM1ZmFmOWYxYzNj
MDc2MGEwMzczZjMxZTY4N2YzZWExMDZkLi5kMTg1MmM3YjU0NTNkMWUxZTU1NDA5YTJiYTBlNGI4
ZjhhZDhlODlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAor
I2luY2x1ZGUgIkFjY2Vzc0Nhc2UuaCIKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVk
ZSAiSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgpAQCAt
NDcsMjc3ICs0OCw2IEBAIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwogY2xhc3MgV2F0Y2hwb2lu
dHNPblN0cnVjdHVyZVN0dWJJbmZvOwogY2xhc3MgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOwog
Ci1zdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlOwotCi0vLyBBbiBBY2Nlc3NDYXNlIGRlc2Ny
aWJlcyBvbmUgb2YgdGhlIGNhc2VzIG9mIGEgUG9seW1vcnBoaWNBY2Nlc3MuIEEgUG9seW1vcnBo
aWNBY2Nlc3MgcmVwcmVzZW50cyBhCi0vLyBwbGFubmVkICh0byBnZW5lcmF0ZSBpbiBmdXR1cmUp
IG9yIGdlbmVyYXRlZCBzdHViIGZvciBzb21lIGlubGluZSBjYWNoZS4gVGhhdCBzdHViIGNvbnRh
aW5zIGZhc3QKLS8vIHBhdGggY29kZSBmb3Igc29tZSBmaW5pdGUgbnVtYmVyIG9mIGZhc3QgY2Fz
ZXMsIGVhY2ggZGVzY3JpYmVkIGJ5IGFuIEFjY2Vzc0Nhc2Ugb2JqZWN0LgotLy8KLS8vIEFuIEFj
Y2Vzc0Nhc2Ugb2JqZWN0IGhhcyBhIGxpZmVjeWNsZSB0aGF0IHByb2NlZWRzIHRocm91Z2ggc2V2
ZXJhbCBzdGF0ZXMuIE5vdGUgdGhhdCB0aGUgc3RhdGVzCi0vLyBvZiBBY2Nlc3NDYXNlIGhhdmUg
YSBsb3QgdG8gZG8gd2l0aCB0aGUgZ2xvYmFsIGVmZmVjdCBlcG9jaCAod2UnbGwgc2F5IGVwb2No
IGZvciBzaG9ydCkuIFRoaXMgaXMKLS8vIGEgc2ltcGxlIHdheSBvZiByZWFzb25pbmcgYWJvdXQg
dGhlIHN0YXRlIG9mIHRoZSBzeXN0ZW0gb3V0c2lkZSB0aGlzIEFjY2Vzc0Nhc2UuIEFueSBvYnNl
cnZhYmxlCi0vLyBlZmZlY3QgLSBsaWtlIHN0b3JpbmcgdG8gYSBwcm9wZXJ0eSwgY2hhbmdpbmcg
YW4gb2JqZWN0J3Mgc3RydWN0dXJlLCBldGMuIC0gaW5jcmVtZW50cyB0aGUgZXBvY2guCi0vLyBU
aGUgc3RhdGVzIGFyZToKLS8vCi0vLyBQcmltb3JkaWFsOiAgIFRoaXMgaXMgYW4gQWNjZXNzQ2Fz
ZSB0aGF0IHdhcyBqdXN0IGFsbG9jYXRlZC4gSXQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbnkg
YWN0dWFsCi0vLyAgICAgICAgICAgICAgIGNvZGUgYW5kIGl0IGlzIG5vdCBvd25lZCBieSBhbnkg
UG9seW1vcnBoaWNBY2Nlc3MuIEluIHRoaXMgc3RhdGUsIHRoZSBBY2Nlc3NDYXNlCi0vLyAgICAg
ICAgICAgICAgIGFzc3VtZXMgdGhhdCBpdCBpcyBpbiB0aGUgc2FtZSBlcG9jaCBhcyB3aGVuIGl0
IHdhcyBjcmVhdGVkLiBUaGlzIGlzIGltcG9ydGFudAotLy8gICAgICAgICAgICAgICBiZWNhdXNl
IGl0IG1heSBtYWtlIGNsYWltcyBhYm91dCBpdHNlbGYgKCJJIHJlcHJlc2VudCBhIHZhbGlkIGNh
c2Ugc28gbG9uZyBhcyB5b3UKLS8vICAgICAgICAgICAgICAgcmVnaXN0ZXIgYSB3YXRjaHBvaW50
IG9uIHRoaXMgc2V0IikgdGhhdCBjb3VsZCBiZSBjb250cmFkaWN0ZWQgYnkgc29tZSBvdXRzaWRl
Ci0vLyAgICAgICAgICAgICAgIGVmZmVjdHMgKGxpa2UgZmlyaW5nIGFuZCBkZWxldGluZyB0aGUg
d2F0Y2hwb2ludCBzZXQgaW4gcXVlc3Rpb24pLiBUaGlzIGlzIGFsc28gdGhlCi0vLyAgICAgICAg
ICAgICAgIHN0YXRlIHRoYXQgYW4gQWNjZXNzQ2FzZSBpcyBpbiB3aGVuIGl0IGlzIGNsb25lZCAo
QWNjZXNzQ2FzZTo6Y2xvbmUoKSkuCi0vLwotLy8gQ29tbWl0dGVkOiAgICBUaGlzIGhhcHBlbnMg
YXMgc29vbiBhcyBzb21lIFBvbHltb3JwaGljQWNjZXNzIHRha2VzIG93bmVyc2hpcCBvZiB0aGlz
IEFjY2Vzc0Nhc2UuCi0vLyAgICAgICAgICAgICAgIEluIHRoaXMgc3RhdGUsIHRoZSBBY2Nlc3ND
YXNlIG5vIGxvbmdlciBhc3N1bWVzIGFueXRoaW5nIGFib3V0IHRoZSBlcG9jaC4gVG8KLS8vICAg
ICAgICAgICAgICAgYWNjb21wbGlzaCB0aGlzLCBQb2x5bW9ycGhpY0FjY2VzcyBjYWxscyBBY2Nl
c3NDYXNlOjpjb21taXQoKS4gVGhpcyBtdXN0IGJlIGRvbmUKLS8vICAgICAgICAgICAgICAgZHVy
aW5nIHRoZSBzYW1lIGVwb2NoIHdoZW4gdGhlIEFjY2Vzc0Nhc2Ugd2FzIGNyZWF0ZWQsIGVpdGhl
ciBieSB0aGUgY2xpZW50IG9yIGJ5Ci0vLyAgICAgICAgICAgICAgIGNsb25lKCkuIFdoZW4gY3Jl
YXRlZCBieSB0aGUgY2xpZW50LCBjb21taXR0aW5nIGR1cmluZyB0aGUgc2FtZSBlcG9jaCB3b3Jr
cyBiZWNhdXNlCi0vLyAgICAgICAgICAgICAgIHdlIGNhbiBiZSBzdXJlIHRoYXQgd2hhdGV2ZXIg
d2F0Y2hwb2ludCBzZXRzIHRoZXkgc3Bva2Ugb2YgYXJlIHN0aWxsIHZhbGlkLiBXaGVuCi0vLyAg
ICAgICAgICAgICAgIGNyZWF0ZWQgYnkgY2xvbmUoKSwgd2UgY2FuIGJlIHN1cmUgdGhhdCB0aGUg
c2V0IGlzIHN0aWxsIHZhbGlkIGJlY2F1c2UgdGhlIG9yaWdpbmFsCi0vLyAgICAgICAgICAgICAg
IG9mIHRoZSBjbG9uZSBzdGlsbCBoYXMgd2F0Y2hwb2ludHMgb24gaXQuCi0vLwotLy8gR2VuZXJh
dGVkOiAgICBUaGlzIGlzIHRoZSBzdGF0ZSB3aGVuIHRoZSBQb2x5bW9ycGhpY0FjY2VzcyBnZW5l
cmF0ZXMgY29kZSBmb3IgdGhpcyBjYXNlIGJ5Ci0vLyAgICAgICAgICAgICAgIGNhbGxpbmcgQWNj
ZXNzQ2FzZTo6Z2VuZXJhdGUoKSBvciBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgpLiBB
dCB0aGlzIHBvaW50Ci0vLyAgICAgICAgICAgICAgIHRoZSBjYXNlIG9iamVjdCB3aWxsIGhhdmUg
c29tZSBleHRyYSBzdHVmZiBpbiBpdCwgbGlrZSBwb3NzaWJseSB0aGUgQ2FsbExpbmtJbmZvCi0v
LyAgICAgICAgICAgICAgIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGlubGluZSBjYWNoZS4K
LS8vICAgICAgICAgICAgICAgRklYTUU6IE1vdmluZyBpbnRvIHRoZSBHZW5lcmF0ZWQgc3RhdGUg
c2hvdWxkIG5vdCBtdXRhdGUgdGhlIEFjY2Vzc0Nhc2Ugb2JqZWN0IG9yCi0vLyAgICAgICAgICAg
ICAgIHB1dCBtb3JlIHN0dWZmIGludG8gaXQuIElmIHdlIGZpeCB0aGlzLCB0aGVuIHdlIGNhbiBn
ZXQgcmlkIG9mIEFjY2Vzc0Nhc2U6OmNsb25lKCkuCi0vLyAgICAgICAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY0NTYKLS8vCi0vLyBBbiBBY2Nlc3ND
YXNlIG1heSBiZSBkZXN0cm95ZWQgd2hpbGUgaW4gYW55IG9mIHRoZXNlIHN0YXRlcy4KLS8vCi0v
LyBXZSB3aWxsIHNvbWV0aW1lcyBidWZmZXIgY29tbWl0dGVkIEFjY2Vzc0Nhc2VzIGluIHRoZSBQ
b2x5bW9ycGhpY0FjY2VzcyBvYmplY3QgYmVmb3JlIGdlbmVyYXRpbmcKLS8vIGNvZGUuIFRoaXMg
YWxsb3dzIHVzIHRvIG9ubHkgcmVnZW5lcmF0ZSBvbmNlIHdlJ3ZlIGFjY3VtdWxhdGVkIChob3Bl
ZnVsbHkpIG1vcmUgdGhhbiBvbmUgbmV3Ci0vLyBBY2Nlc3NDYXNlLgotY2xhc3MgQWNjZXNzQ2Fz
ZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWNjZXNzQ2FzZSk7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZW51bSBBY2Nlc3NUeXBlIDogdWludDhfdCB7
Ci0gICAgICAgIExvYWQsCi0gICAgICAgIE1lZ2Ftb3JwaGljTG9hZCwKLSAgICAgICAgVHJhbnNp
dGlvbiwKLSAgICAgICAgUmVwbGFjZSwKLSAgICAgICAgTWlzcywKLSAgICAgICAgR2V0R2V0dGVy
LAotICAgICAgICBHZXR0ZXIsCi0gICAgICAgIFNldHRlciwKLSAgICAgICAgQ3VzdG9tVmFsdWVH
ZXR0ZXIsCi0gICAgICAgIEN1c3RvbUFjY2Vzc29yR2V0dGVyLAotICAgICAgICBDdXN0b21WYWx1
ZVNldHRlciwKLSAgICAgICAgQ3VzdG9tQWNjZXNzb3JTZXR0ZXIsCi0gICAgICAgIEludHJpbnNp
Y0dldHRlciwKLSAgICAgICAgSW5IaXQsCi0gICAgICAgIEluTWlzcywKLSAgICAgICAgQXJyYXlM
ZW5ndGgsCi0gICAgICAgIFN0cmluZ0xlbmd0aCwKLSAgICAgICAgRGlyZWN0QXJndW1lbnRzTGVu
Z3RoLAotICAgICAgICBTY29wZWRBcmd1bWVudHNMZW5ndGgKLSAgICB9OwotICAgIAotICAgIGVu
dW0gU3RhdGUgOiB1aW50OF90IHsKLSAgICAgICAgUHJpbW9yZGlhbCwKLSAgICAgICAgQ29tbWl0
dGVkLAotICAgICAgICBHZW5lcmF0ZWQKLSAgICB9OwotCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiB0cnlHZXQoCi0gICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNj
ZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosCi0gICAgICAgIGNvbnN0IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCi0g
ICAgICAgIGJvb2wgdmlhUHJveHkgPSBmYWxzZSwKLSAgICAgICAgV2F0Y2hwb2ludFNldCogYWRk
aXRpb25hbFNldCA9IG51bGxwdHIpOwotCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nl
c3NDYXNlPiBnZXQoCi0gICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUHJv
cGVydHlPZmZzZXQsIFN0cnVjdHVyZSosCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCi0gICAgICAgIGJvb2wg
dmlhUHJveHkgPSBmYWxzZSwKLSAgICAgICAgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCA9
IG51bGxwdHIsCi0gICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jID0gbnVsbHB0ciwK
LSAgICAgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlID0gbnVsbHB0ciwKLSAgICAgICAgRE9N
SklUOjpHZXR0ZXJTZXR0ZXIqID0gbnVsbHB0cik7Ci0gICAgCi0gICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiBtZWdhbW9ycGhpY0xvYWQoVk0mLCBKU0NlbGwqIG93bmVyKTsK
LSAgICAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlcGxhY2UoVk0m
LCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Ci0KLSAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHRyYW5zaXRpb24oCi0gICAgICAgIFZNJiwg
SlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSk7Ci0KLSAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHNldHRlcigKLSAgICAgICAgVk0mLCBKU0NlbGwq
IG93bmVyLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwKLSAgICAgICAg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZh
bHVlRnVuYyA9IG51bGxwdHIsCi0gICAgICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSA9IG51
bGxwdHIpOwotCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBpbigKLSAg
ICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqLAotICAgICAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCgpKTsKLQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gZ2V0
TGVuZ3RoKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSk7Ci0gICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBnZXRJbnRyaW5zaWMoVk0mLCBKU0NlbGwqIG93bmVyLCBK
U0Z1bmN0aW9uKiBpbnRyaW5zaWMsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYpOwotICAgIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFZNJiwgSlNDZWxsKiBvd25l
ciwgU3RydWN0dXJlU3R1YkluZm8mKTsKLQotICAgIH5BY2Nlc3NDYXNlKCk7Ci0gICAgCi0gICAg
QWNjZXNzVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgU3RhdGUgc3Rh
dGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBib29sIHZpYVByb3h5KCkgY29uc3Qg
eyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPnZpYVByb3h5IDogZmFsc2U7IH0KLSAg
ICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAo
bV90eXBlID09IFRyYW5zaXRpb24pCi0gICAgICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUtPnBy
ZXZpb3VzSUQoKTsKLSAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOwotICAgIH0KLSAg
ICBib29sIGd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgY29uc3Q7Ci0KLSAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IFRy
YW5zaXRpb24pOwotICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgfQotICAg
IAotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29uZGl0aW9uU2V0OyB9Ci0gICAgSlNGdW5jdGlvbiogaW50cmluc2ljRnVuY3Rp
b24oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBJbnRyaW5zaWNHZXR0
ZXIgJiYgbV9yYXJlRGF0YSk7Ci0gICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5pbnRyaW5zaWNG
dW5jdGlvbi5nZXQoKTsKLSAgICB9Ci0gICAgSW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gaW50cmluc2ljRnVuY3Rpb24oKS0+aW50cmluc2ljKCk7Ci0g
ICAgfQotCi0gICAgRE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVCgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQobV9yYXJlRGF0YSk7Ci0gICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5k
b21KSVQ7Ci0gICAgfQotCi0gICAgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPmFkZGl0aW9u
YWxTZXQuZ2V0KCkgOiBudWxscHRyOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBjdXN0b21TbG90
QmFzZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURh
dGEtPmN1c3RvbVNsb3RCYXNlLmdldCgpIDogbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBKU09iamVj
dCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0OwotCi0gICAgLy8gSWYgeW91IHN1cHBseSB0aGUgb3B0
aW9uYWwgdmVjdG9yLCB0aGlzIHdpbGwgYXBwZW5kIHRoZSBzZXQgb2YgY2VsbHMgdGhhdCB0aGlz
IHdpbGwgbmVlZCB0byBrZWVwIGFsaXZlCi0gICAgLy8gcGFzdCB0aGUgY2FsbC4KLSAgICBib29s
IGRvZXNDYWxscyhWZWN0b3I8SlNDZWxsKj4qIGNlbGxzVG9NYXJrID0gbnVsbHB0cikgY29uc3Q7
Ci0KLSAgICBib29sIGlzR2V0dGVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlw
ZSgpKSB7Ci0gICAgICAgIGNhc2UgR2V0dGVyOgotICAgICAgICBjYXNlIEN1c3RvbVZhbHVlR2V0
dGVyOgotICAgICAgICBjYXNlIEN1c3RvbUFjY2Vzc29yR2V0dGVyOgotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGlzIGNhbiByZXR1cm4gbnVsbCBldmVuIGZvciBh
IGdldHRlci9zZXR0ZXIsIGlmIGl0IGhhc24ndCBiZWVuIGdlbmVyYXRlZCB5ZXQuIFRoYXQncwot
ICAgIC8vIGFjdHVhbGx5IHNvbWV3aGF0IGxpa2VseSBiZWNhdXNlIG9mIGhvdyB3ZSBkbyBidWZm
ZXJpbmcgb2YgbmV3IGNhc2VzLgotICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGlmICghbV9yYXJlRGF0YSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLmdldCgpOwot
ICAgIH0KLSAgICAKLSAgICAvLyBJcyBpdCBzdGlsbCBwb3NzaWJsZSBmb3IgdGhpcyBjYXNlIHRv
IGV2ZXIgYmUgdGFrZW4/ICBNdXN0IGNhbGwgdGhpcyBhcyBhIHByZXJlcXVpc2l0ZSBmb3IKLSAg
ICAvLyBjYWxsaW5nIGdlbmVyYXRlKCkgYW5kIGZyaWVuZHMuICBJZiB0aGlzIHJldHVybnMgdHJ1
ZSwgdGhlbiB5b3UgY2FuIGNhbGwgZ2VuZXJhdGUoKS4gIElmCi0gICAgLy8gdGhpcyByZXR1cm5z
IGZhbHNlLCB0aGVuIGdlbmVyYXRlKCkgd2lsbCBjcmFzaC4gIFlvdSBtdXN0IGNhbGwgZ2VuZXJh
dGUoKSBpbiB0aGUgc2FtZSBlcG9jaAotICAgIC8vIGFzIHdoZW4geW91IGNhbGxlZCBjb3VsZFN0
aWxsU3VjY2VlZCgpLgotICAgIGJvb2wgY291bGRTdGlsbFN1Y2NlZWQoKSBjb25zdDsKLSAgICAK
LSAgICBzdGF0aWMgYm9vbCBjYW5FbWl0SW50cmluc2ljR2V0dGVyKEpTRnVuY3Rpb24qLCBTdHJ1
Y3R1cmUqKTsKLQotICAgIGJvb2wgY2FuQmVSZXBsYWNlZEJ5TWVnYW1vcnBoaWNMb2FkKCkgY29u
c3Q7Ci0KLSAgICAvLyBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIHRydWUsIHRoZW4gaXQncyBhIGdv
b2QgaWRlYSB0byByZW1vdmUgJ290aGVyJyBmcm9tIHRoZSBhY2Nlc3Mgb25jZSAndGhpcycKLSAg
ICAvLyBpcyBhZGRlZC4gVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0IGluIGNhc2Ugb2YgY29udHJh
ZGljdGlvbnMsICd0aGlzJyByZXByZXNlbnRzIGEgbmV3ZXIsIGFuZCBzbwotICAgIC8vIG1vcmUg
dXNlZnVsLCB0cnV0aC4gVGhpcyBtZXRob2QgY2FuIGJlIGNvbnNlcnZhdGl2ZTsgaXQgd2lsbCBy
ZXR1cm4gZmFsc2Ugd2hlbiBpdCBkb3VidC4KLSAgICBib29sIGNhblJlcGxhY2UoY29uc3QgQWNj
ZXNzQ2FzZSYgb3RoZXIpIGNvbnN0OwotCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwotICAg
IGZyaWVuZCBjbGFzcyBQb2x5bW9ycGhpY0FjY2VzczsKLQotICAgIEFjY2Vzc0Nhc2UoKTsKLQot
ICAgIGJvb2wgdmlzaXRXZWFrKFZNJikgY29uc3Q7Ci0gICAgYm9vbCBwcm9wYWdhdGVUcmFuc2l0
aW9ucyhTbG90VmlzaXRvciYpIGNvbnN0OwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIG9ubHkg
ZXhpc3RzIGJlY2F1c2Ugb2YgaG93IEFjY2Vzc0Nhc2UgcHV0cyBwb3N0LWdlbmVyYXRpb24gdGhp
bmdzIGludG8gaXRzZWxmLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTY0NTYKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY2xvbmUoKSBj
b25zdDsKLSAgICAKLSAgICAvLyBQZXJmb3JtIGFueSBhY3Rpb24gdGhhdCBtdXN0IGJlIHBlcmZv
cm1lZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgZXBvY2ggaW4gd2hpY2ggdGhlIGNhc2UKLSAgICAv
LyB3YXMgY3JlYXRlZC4gUmV0dXJucyBhIHNldCBvZiB3YXRjaHBvaW50IHNldHMgdGhhdCB3aWxs
IG5lZWQgdG8gYmUgd2F0Y2hlZC4KLSAgICBWZWN0b3I8V2F0Y2hwb2ludFNldCosIDI+IGNvbW1p
dChWTSYsIGNvbnN0IElkZW50aWZpZXImKTsKLQotICAgIC8vIEZhbGwgdGhyb3VnaCBvbiBzdWNj
ZXNzLiBUd28ga2luZHMgb2YgZmFpbHVyZXMgYXJlIHN1cHBvcnRlZDogZmFsbC10aHJvdWdoLCB3
aGljaCBtZWFucyB0aGF0IHdlCi0gICAgLy8gc2hvdWxkIHRyeSBhIGRpZmZlcmVudCBjYXNlOyBh
bmQgZmFpbHVyZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIHdhcyB0aGUgcmlnaHQgY2FzZSBidXQg
aXQgbmVlZHMKLSAgICAvLyBoZWxwIGZyb20gdGhlIHNsb3cgcGF0aC4KLSAgICB2b2lkIGdlbmVy
YXRlV2l0aEd1YXJkKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCYgZmFsbFRocm91Z2gpOwotCi0gICAgLy8gRmFsbCB0aHJvdWdoIG9uIHN1Y2Nlc3MsIGFk
ZCBhIGp1bXAgdG8gdGhlIGZhaWx1cmUgbGlzdCBvbiBmYWlsdXJlLgotICAgIHZvaWQgZ2VuZXJh
dGUoQWNjZXNzR2VuZXJhdGlvblN0YXRlJik7Ci0gICAgCi0gICAgdm9pZCBnZW5lcmF0ZUltcGwo
QWNjZXNzR2VuZXJhdGlvblN0YXRlJik7Ci0gICAgdm9pZCBlbWl0SW50cmluc2ljR2V0dGVyKEFj
Y2Vzc0dlbmVyYXRpb25TdGF0ZSYpOwotICAgIHZvaWQgZW1pdERPTUpJVEdldHRlcihBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGUmLCBHUFJSZWcgYmFzZUZvckdldEdQUik7Ci0gICAgCi0gICAgQWNjZXNz
VHlwZSBtX3R5cGUgeyBMb2FkIH07Ci0gICAgU3RhdGUgbV9zdGF0ZSB7IFByaW1vcmRpYWwgfTsK
LSAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldCB7IGludmFsaWRPZmZzZXQgfTsKLQotICAgIC8v
IFVzdWFsbHkgdGhpcyBpcyB0aGUgc3RydWN0dXJlIHRoYXQgd2UgZXhwZWN0IHRoZSBiYXNlIG9i
amVjdCB0byBoYXZlLiBCdXQsIHRoaXMgaXMgdGhlICpuZXcqCi0gICAgLy8gc3RydWN0dXJlIGZv
ciBhIHRyYW5zaXRpb24gYW5kIHdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCBpdCBoYXMgYSBzdHJv
bmcgcmVmZXJlbmNlIHRvIHRoZSBvbGQKLSAgICAvLyBzdHJ1Y3R1cmUuIEZvciBwcm94aWVzLCB0
aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG9iamVjdCBiZWhpbmQgdGhlIHByb3h5LgotICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOwotCi0gICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Ci0KLSAgICBjbGFzcyBSYXJlRGF0YSB7Ci0g
ICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgUmFy
ZURhdGEoKQotICAgICAgICAgICAgOiB2aWFQcm94eShmYWxzZSkKLSAgICAgICAgICAgICwgZG9t
SklUKG51bGxwdHIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGN1c3RvbUFjY2Vzc29yLm9wYXF1
ZSA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2wgdmlhUHJveHk7
Ci0gICAgICAgIFJlZlB0cjxXYXRjaHBvaW50U2V0PiBhZGRpdGlvbmFsU2V0OwotICAgICAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgbGl2ZSBpbiB0aGUgc3R1YiByb3V0aW5lIG9i
amVjdC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NjQ1NgotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZvPiBjYWxsTGlua0lu
Zm87Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jIGdldHRlcjsKLSAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jIHNl
dHRlcjsKLSAgICAgICAgICAgIHZvaWQqIG9wYXF1ZTsKLSAgICAgICAgfSBjdXN0b21BY2Nlc3Nv
cjsKLSAgICAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBjdXN0b21TbG90QmFzZTsKLSAgICAg
ICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGludHJpbnNpY0Z1bmN0aW9uOwotICAgICAgICBE
T01KSVQ6OkdldHRlclNldHRlciogZG9tSklUOwotICAgIH07Ci0KLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmFyZURhdGE+IG1fcmFyZURhdGE7Ci19OwotCiBjbGFzcyBBY2Nlc3NHZW5lcmF0aW9uUmVz
dWx0IHsKIHB1YmxpYzoKICAgICBlbnVtIEtpbmQgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYz
ODc5YzRkZTRjZGQ0OWJiZjM4Mjg0MmMzYTRhZDUyNDZlNzFiNWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAK
QEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcm94eWFibGVBY2Nlc3NDYXNl
LmgiCisKKyNpZiBFTkFCTEUoSklUKQorCituYW1lc3BhY2UgSlNDIHsKKworUHJveHlhYmxlQWNj
ZXNzQ2FzZTo6UHJveHlhYmxlQWNjZXNzQ2FzZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgYm9v
bCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCkKKyAgICA6IEJhc2Uodm0s
IG93bmVyLCBhY2Nlc3NUeXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KQorICAg
ICwgbV92aWFQcm94eSh2aWFQcm94eSkKKyAgICAsIG1fYWRkaXRpb25hbFNldChhZGRpdGlvbmFs
U2V0KQoreworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gUHJveHlhYmxlQWNjZXNz
Q2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50
U2V0KiBhZGRpdGlvbmFsU2V0KQoreworICAgIEFTU0VSVCh0eXBlID09IExvYWQgfHwgdHlwZSA9
PSBNaXNzIHx8IHR5cGUgPT0gR2V0R2V0dGVyKTsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+KG5ldyBQcm94eWFibGVBY2Nlc3NDYXNlKHZtLCBvd25lciwgdHlwZSwgb2Zm
c2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgdmlhUHJveHksIGFkZGl0aW9uYWxTZXQpKTsK
K30KKworUHJveHlhYmxlQWNjZXNzQ2FzZTo6flByb3h5YWJsZUFjY2Vzc0Nhc2UoKQoreworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y2xvbmUo
KSBjb25zdAoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm94eWFibGVBY2Nlc3NDYXNlPiByZXN1
bHQobmV3IFByb3h5YWJsZUFjY2Vzc0Nhc2UoKnRoaXMpKTsKKyAgICByZXN1bHQtPnJlc2V0U3Rh
dGUoKTsKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworfQorCit2b2lkIFByb3h5YWJsZUFj
Y2Vzc0Nhc2U6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQsIENvbW1hUHJpbnRlciYgY29tbWEp
IGNvbnN0Cit7CisgICAgQmFzZTo6ZHVtcEltcGwob3V0LCBjb21tYSk7CisgICAgb3V0LnByaW50
KGNvbW1hLCAidmlhUHJveHkgPSAiLCB2aWFQcm94eSgpKTsKKyAgICBvdXQucHJpbnQoY29tbWEs
ICJhZGRpdGlvbmFsU2V0ID0gIiwgUmF3UG9pbnRlcihhZGRpdGlvbmFsU2V0KCkpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm94eWFibGVBY2Nlc3NDYXNlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTc4YmUyMjI4NTc5MzBhNDU3MjdiNGFlNDc0ZDkyZDFhOTY5NWNhMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm94eWFibGVBY2Nlc3ND
YXNlLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUg
IkFjY2Vzc0Nhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFByb3h5YWJsZUFjY2Vz
c0Nhc2UgOiBwdWJsaWMgQWNjZXNzQ2FzZSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBBY2Nlc3ND
YXNlIEJhc2U7CisKKyAgICBib29sIHZpYVByb3h5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV92aWFQcm94eTsgfQorICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX2FkZGl0aW9uYWxTZXQuZ2V0KCk7IH0KKworICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlw
ZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCisgICAgICAgIGJvb2wgdmlh
UHJveHkgPSBmYWxzZSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCA9IG51bGxwdHIpOwor
CisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYsIENvbW1hUHJpbnRlciYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjbG9uZSgpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgflByb3h5YWJsZUFjY2Vzc0Nhc2UoKTsKKworcHJvdGVjdGVkOgorICAg
IFByb3h5YWJsZUFjY2Vzc0Nhc2UoVk0mLCBKU0NlbGwqLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0eU9m
ZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBib29s
IHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0KTsKKworcHJpdmF0ZToKKyAg
ICBib29sIG1fdmlhUHJveHk7CisgICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+IG1fYWRkaXRpb25h
bFNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcApp
bmRleCBmYzBhNDcyZGIyYmU1MDg5NTk1MDRjY2I4MTZkZTZjYmQ1ZjUxODQxLi5mZGFkZjcwMjJh
ZDNkY2UzNWE2M2M3OTFmNjkyNzMyMDFhNTUzNDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgiCisjaW5j
bHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgog
I2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CkBAIC0yMjcsNyArMjI4LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yU3R1YkluZm8oCiAgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJbmxp
bmVhYmxlOiB7CiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0
YXR1cz4gY2FsbExpbmtTdGF0dXMgPQogICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtl
X3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvID0gYWNjZXNzLmNhbGxMaW5rSW5mbygpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGFjY2Vzcy5hczxH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmNhbGxMaW5rSW5mbygpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAqY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssICpjYWxs
TGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpOwogICAgICAgICAgICAgICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cAppbmRleCAzOGU1Y2VmOTIzN2EwODZiNmI0NjFmZmRmMzlmOWFkNDRjZWU3YjY1Li43MGI3Njdj
NTc3Mzg1OWRhYzIwMzhjNDkxNTlhYTA1MzhkZTI4MWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKQEAgLTIxNiw4ICsy
MTYsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChDb2RlQmxvY2sqIGNvZGVCbG9j
aykKICAgICB9CiAKICAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKLSAgICBjYXNlIEFjY2Vzc1R5
cGU6OkdldFB1cmU6Ci0gICAgICAgIHJlc2V0R2V0QnlJRChjb2RlQmxvY2ssICp0aGlzLCBHZXRC
eUlES2luZDo6UHVyZSk7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXQ6CisgICAgICAgIHJl
c2V0R2V0QnlJRChjb2RlQmxvY2ssICp0aGlzLCBHZXRCeUlES2luZDo6VHJ5KTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXQ6CiAgICAgICAgIHJlc2V0R2V0QnlJRChj
b2RlQmxvY2ssICp0aGlzLCBHZXRCeUlES2luZDo6Tm9ybWFsKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKaW5kZXggMzliNzIxZjE0
YjBlMDc0NDNjMGNlMjA2YmZiODE3NzE4OWEzNjA2NC4uYjA5MWUyMTU3YTY0MzEyNmNhYjBmN2Rl
YzRlYzg5MWY2MGVjMTcwYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgUG9seW1vcnBo
aWNBY2Nlc3M7CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0LAot
ICAgIEdldFB1cmUsCisgICAgVHJ5R2V0LAogICAgIFB1dCwKICAgICBJbgogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggNzY1YzNi
NDg4ZGMyMjc0MTJiNTMxMmEwNTM1ZmViNmMxMjdkNmEyMy4uODgyYzllMDFmZTQ3YTk3NTY0Zjg0
MTk0NDlmNDQwOGNiODg3NGJmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTQ1MzEsNyArNDUzMSw3IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgbV9pbmxp
bmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2RmZ0NvZGVCbG9jaywKICAgICAgICAgICAg
ICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3N0dWJJbmZvcywgbV9kZmdTdHViSW5mb3MsCiAgICAg
ICAgICAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwgdWlkKTsKLSAgICAgICAgICAgIEFjY2Vz
c1R5cGUgdHlwZSA9IG9wX3RyeV9nZXRfYnlfaWQgPT0gb3Bjb2RlSUQgPyBBY2Nlc3NUeXBlOjpH
ZXRQdXJlIDogQWNjZXNzVHlwZTo6R2V0OworICAgICAgICAgICAgQWNjZXNzVHlwZSB0eXBlID0g
b3BfdHJ5X2dldF9ieV9pZCA9PSBvcGNvZGVJRCA/IEFjY2Vzc1R5cGU6OlRyeUdldCA6IEFjY2Vz
c1R5cGU6OkdldDsKIAogICAgICAgICAgICAgdW5zaWduZWQgb3Bjb2RlTGVuZ3RoID0gb3Bjb2Rl
SUQgPT0gb3BfdHJ5X2dldF9ieV9pZCA/IE9QQ09ERV9MRU5HVEgob3BfdHJ5X2dldF9ieV9pZCkg
OiBPUENPREVfTEVOR1RIKG9wX2dldF9ieV9pZCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggMGQ4YTRmMDZkZDBjMDRkN2NmZjY1
ZDk1MTRkZWQ5YzVjYjQ5ZmY1Ni4uMDkyMTlkMWQ3YmE5YmNkYmU1MzcxMGExMzQyNjJiNjg1OGY3
Mzk4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKQEAgLTEwMDYsNyArMTAwNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVU
cnlHZXRCeUlkKE5vZGUqIG5vZGUpCiAKICAgICAgICAgYmFzZS51c2UoKTsKIAotICAgICAgICBj
YWNoZWRHZXRCeUlkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgYmFzZVJlZ3MsIHJlc3VsdFJlZ3Ms
IG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgSklUQ29tcGlsZXI6Okp1bXAoKSwgTmVlZFRvU3Bp
bGwsIEFjY2Vzc1R5cGU6OkdldFB1cmUpOworICAgICAgICBjYWNoZWRHZXRCeUlkKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgYmFzZVJlZ3MsIHJlc3VsdFJlZ3MsIG5vZGUtPmlkZW50aWZpZXJOdW1i
ZXIoKSwgSklUQ29tcGlsZXI6Okp1bXAoKSwgTmVlZFRvU3BpbGwsIEFjY2Vzc1R5cGU6OlRyeUdl
dCk7CiAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlLCBEYXRhRm9ybWF0
SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTAy
Myw3ICsxMDIzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRyeUdldEJ5SWQoTm9k
ZSogbm9kZSkKIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJh
bmNoSWZOb3RDZWxsKGJhc2VSZWdzKTsKIAotICAgICAgICBjYWNoZWRHZXRCeUlkKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgYmFzZVJlZ3MsIHJlc3VsdFJlZ3MsIG5vZGUtPmlkZW50aWZpZXJOdW1i
ZXIoKSwgbm90Q2VsbCwgTmVlZFRvU3BpbGwsIEFjY2Vzc1R5cGU6OkdldFB1cmUpOworICAgICAg
ICBjYWNoZWRHZXRCeUlkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgYmFzZVJlZ3MsIHJlc3VsdFJl
Z3MsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgbm90Q2VsbCwgTmVlZFRvU3BpbGwsIEFjY2Vz
c1R5cGU6OlRyeUdldCk7CiAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2Rl
LCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgIGJy
ZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmlu
ZGV4IDhmMDBmMWNjY2Y0YzRkM2IxN2NhMWNlMzA1ZDU1YWYwMjQ5YjE5NmMuLjY0MjBlNjdkZTI3
ZGNmNzdjYTliZjFlOWNmZWY4YmI1ZmFlMDViOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTYyNiw3ICs2MjYsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgY29tcGlsZVB1dFN0cnVjdHVyZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgVHJ5R2V0QnlJZDoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeUlkKEFjY2Vz
c1R5cGU6OkdldFB1cmUpOworICAgICAgICAgICAgY29tcGlsZUdldEJ5SWQoQWNjZXNzVHlwZTo6
VHJ5R2V0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdldEJ5SWQ6CiAgICAg
ICAgIGNhc2UgR2V0QnlJZEZsdXNoOgpAQCAtMjgxNCw3ICsyODE0LDcgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkKEFjY2Vzc1R5cGUgdHlwZSkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVCh0eXBlID09IEFjY2Vzc1R5cGU6OkdldCB8fCB0eXBlID09IEFjY2Vzc1R5cGU6
OkdldFB1cmUpOworICAgICAgICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpHZXQgfHwgdHlw
ZSA9PSBBY2Nlc3NUeXBlOjpUcnlHZXQpOwogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpKSB7CiAgICAgICAgIGNhc2UgQ2VsbFVzZTogewogICAgICAgICAgICAgc2V0
SlNWYWx1ZShnZXRCeUlkKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIHR5cGUpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSW50cmluc2ljRW1pdHRlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ludHJpbnNpY0VtaXR0ZXIuY3BwCmluZGV4IGM4MmI4
YTNkYjJmMmI2OGMzNzQzYjk1NDdmYTVjZDczZDMwOGM5ZDguLjRmYjdhNTkwOWRkZDVhZmMyYzU0
MWQyYTNiMmViYWEyY2Q3Nzc0NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSW50cmluc2ljRW1pdHRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9J
bnRyaW5zaWNFbWl0dGVyLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNDYWxsSGVs
cGVycy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgor
I2luY2x1ZGUgIkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaCIKICNpbmNsdWRlICJKU0FycmF5
QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNDZWxsSW5saW5lcy5oIgpAQCAtNDgsNyArNDksNyBAQCB0eXBlZGVmIENDYWxsSGVscGVyczo6
SW1tUHRyIEltbVB0cjsKIHR5cGVkZWYgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQgVHJ1c3Rl
ZEltbTY0OwogdHlwZWRlZiBDQ2FsbEhlbHBlcnM6OkltbTY0IEltbTY0OwogCi1ib29sIEFjY2Vz
c0Nhc2U6OmNhbkVtaXRJbnRyaW5zaWNHZXR0ZXIoSlNGdW5jdGlvbiogZ2V0dGVyLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKK2Jvb2wgSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y2FuRW1pdElu
dHJpbnNpY0dldHRlcihKU0Z1bmN0aW9uKiBnZXR0ZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ewogCiAgICAgc3dpdGNoIChnZXR0ZXItPmludHJpbnNpYygpKSB7CkBAIC02OCw3ICs2OSw3IEBA
IGJvb2wgQWNjZXNzQ2FzZTo6Y2FuRW1pdEludHJpbnNpY0dldHRlcihKU0Z1bmN0aW9uKiBnZXR0
ZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAotdm9pZCBBY2Nlc3NDYXNlOjplbWl0SW50cmluc2ljR2V0dGVyKEFjY2Vzc0dlbmVy
YXRpb25TdGF0ZSYgc3RhdGUpCit2b2lkIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OmVtaXRJ
bnRyaW5zaWNHZXR0ZXIoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKIHsKICAgICBDQ2Fs
bEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7CiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0g
c3RhdGUudmFsdWVSZWdzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAKaW5kZXggYTliMjRlODExNzhlZmZjZGMxYjgzZDRiMDFjNmU4Mzk5Zjc1YWU1OC4uYTFk
NGU3MzUxYjI2MjJmZmQwMGMxZGRjYTQ2NDA2ZTI4YTRhMDZmNSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0yMTEsNyArMjExLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3QKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKIAogICAgIGlmIChzdHViSW5mby0+Y29uc2lkZXJDYWNoaW5nKGV4ZWMtPmNv
ZGVCbG9jaygpLCBiYXNlVmFsdWUuc3RydWN0dXJlT3JOdWxsKCkpICYmICFzbG90LmlzVGFpbnRl
ZEJ5T3BhcXVlT2JqZWN0KCkgJiYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpIHx8IHNsb3QuaXND
YWNoZWFibGVHZXR0ZXIoKSB8fCBzbG90LmlzVW5zZXQoKSkpCi0gICAgICAgIHJlcGF0Y2hHZXRC
eUlEKGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywgR2V0QnlJREtpbmQ6
OlB1cmUpOworICAgICAgICByZXBhdGNoR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIGlkZW50LCBz
bG90LCAqc3R1YkluZm8sIEdldEJ5SURLaW5kOjpUcnkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShzbG90LmdldFB1cmVSZXN1bHQoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IDhkY2Y0OWNlMDExMmJkNDcwMDgy
ODRjYzJlMGIxODI1MGU3NjYxOGYuLmJmZjUzNjA4ZDdhNTQwYzk0ODYxMzZhZTgzZDVlOGMwY2Zh
MTc1ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCkBAIC01NzksNyArNTc5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9p
ZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZz
ZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRQdXJlKTsKKyAgICAg
ICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEFjY2Vzc1R5cGU6OlRyeUdldCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCmluZGV4IDVmMTRlOTA2YmNjMTE5YTk4YjRmMWVjMTRmNjA1ZjgzOWVi
OWM3NGMuLmJjMzRiMzAwMDdlM2YzYmMxMzhlZTc1MGY3MDUyNGE5MTJjMGY3Y2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cApAQCAtNTk0LDcgKzU5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
Z2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwg
Q2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24pLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdzOjpw
YXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEFjY2Vzc1R5cGU6
OkdldFB1cmUpOworICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9u
bHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBBY2Nlc3NUeXBlOjpUcnlHZXQp
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAppbmRleCAyOGVmN2M2NTZiYTc4M2E4NDAwODFkNjZlODFl
M2Y5MmU4MDI4YzUzLi5kMmZiNjA0M2I3OWY1Y2RjMWIxY2Q4ZTdiOGU1MzBlOTkxMDQ3YTJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKQEAgLTM5LDggKzM5LDEwIEBACiAj
aW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKICNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJv
dXRpbmUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlLmgiCiAjaW5jbHVkZSAiSUNTdGF0cy5oIgogI2luY2x1ZGUgIklubGluZUFj
Y2Vzcy5oIgorI2luY2x1ZGUgIkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaCIKICNpbmNsdWRl
ICJKSVQuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgpAQCAtMTc2LDE4ICsxNzgsMTggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
R2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb24KICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3ND
YXNlOjpnZXRMZW5ndGgodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgpOwor
ICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBB
Y2Nlc3NDYXNlOjpBcnJheUxlbmd0aCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhi
YXNlVmFsdWUpKQotICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2
bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTdHJpbmdMZW5ndGgpOworICAgICAgICAgICAgbmV3
Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTdHJp
bmdMZW5ndGgpOwogICAgICAgICBlbHNlIGlmIChEaXJlY3RBcmd1bWVudHMqIGFyZ3VtZW50cyA9
IGpzRHluYW1pY0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odm0sIGJhc2VWYWx1ZSkpIHsKICAgICAg
ICAgICAgIC8vIElmIHRoZXJlIHdlcmUgb3ZlcnJpZGVzLCB0aGVuIHdlIGNhbiBoYW5kbGUgdGhp
cyBhcyBhIG5vcm1hbCBwcm9wZXJ0eSBsb2FkISBHdWFyZGluZwogICAgICAgICAgICAgLy8gdGhp
cyB3aXRoIHN1Y2ggYSBjaGVjayBlbmFibGVzIHVzIHRvIGFkZCBhbiBJQyBjYXNlIGZvciB0aGF0
IGxvYWQgaWYgbmVlZGVkLgogICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPm92ZXJyb2RlVGhp
bmdzKCkpCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2
bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpEaXJlY3RBcmd1bWVudHNMZW5ndGgpOworICAgICAg
ICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNj
ZXNzQ2FzZTo6RGlyZWN0QXJndW1lbnRzTGVuZ3RoKTsKICAgICAgICAgfSBlbHNlIGlmIChTY29w
ZWRBcmd1bWVudHMqIGFyZ3VtZW50cyA9IGpzRHluYW1pY0Nhc3Q8U2NvcGVkQXJndW1lbnRzKj4o
dm0sIGJhc2VWYWx1ZSkpIHsKICAgICAgICAgICAgIC8vIERpdHRvLgogICAgICAgICAgICAgaWYg
KCFhcmd1bWVudHMtPm92ZXJyb2RlVGhpbmdzKCkpCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9
IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTY29wZWRB
cmd1bWVudHNMZW5ndGgpOworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpj
cmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2NvcGVkQXJndW1lbnRzTGVuZ3RoKTsK
ICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTI2Nyw3ICsyNjksNyBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNl
VmFsdWUsIGNvbgogICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpICYmIHNsb3Qu
ZG9tSklUKCkpCiAgICAgICAgICAgICBkb21KSVQgPSBzbG90LmRvbUpJVCgpOwogCi0gICAgICAg
IGlmIChraW5kID09IEdldEJ5SURLaW5kOjpQdXJlKSB7CisgICAgICAgIGlmIChraW5kID09IEdl
dEJ5SURLaW5kOjpUcnkpIHsKICAgICAgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlw
ZTsKICAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKICAgICAgICAgICAg
ICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TG9hZDsKQEAgLTI3OCwyNyArMjgwLDI4IEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGJhc2VWYWx1ZSwgY29uCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAotICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vz
c0Nhc2U6OnRyeUdldCh2bSwgY29kZUJsb2NrLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29u
ZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoIWxvYWRUYXJnZXRGcm9tUHJveHkgJiYgZ2V0dGVyICYmIEFjY2Vz
c0Nhc2U6OmNhbkVtaXRJbnRyaW5zaWNHZXR0ZXIoZ2V0dGVyLCBzdHJ1Y3R1cmUpKQotICAgICAg
ICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldEludHJpbnNpYyh2bSwgY29kZUJsb2NrLCBn
ZXR0ZXIsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KTsKKyAg
ICAgICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVC
bG9jaywgdHlwZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZy
b21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCkpOworICAgICAgICB9IGVsc2UgaWYgKCFsb2Fk
VGFyZ2V0RnJvbVByb3h5ICYmIGdldHRlciAmJiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpj
YW5FbWl0SW50cmluc2ljR2V0dGVyKGdldHRlciwgc3RydWN0dXJlKSkKKyAgICAgICAgICAgIG5l
d0Nhc2UgPSBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywg
c2xvdC5jYWNoZWRPZmZzZXQoKSwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGdldHRlcik7CiAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlOwot
ICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQotICAgICAgICAgICAgICAg
IHR5cGUgPSBBY2Nlc3NDYXNlOjpMb2FkOwotICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5pc1Vu
c2V0KCkpCi0gICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6Ok1pc3M7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCi0gICAgICAgICAgICAgICAg
dHlwZSA9IEFjY2Vzc0Nhc2U6OkdldHRlcjsKLSAgICAgICAgICAgIGVsc2UgaWYgKHNsb3QuYXR0
cmlidXRlcygpICYgQ3VzdG9tQWNjZXNzb3IpCi0gICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vz
c0Nhc2U6OkN1c3RvbUFjY2Vzc29yR2V0dGVyOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1ZUdldHRlcjsKLQotICAgICAgICAg
ICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldCgKLSAgICAgICAgICAgICAgICB2bSwgY29kZUJs
b2NrLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJv
bVByb3h5LAotICAgICAgICAgICAgICAgIHNsb3Qud2F0Y2hwb2ludFNldCgpLCBzbG90LmlzQ2Fj
aGVhYmxlQ3VzdG9tKCkgPyBzbG90LmN1c3RvbUdldHRlcigpIDogbnVsbHB0ciwKLSAgICAgICAg
ICAgICAgICBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBzbG90LnNsb3RCYXNlKCkgOiBudWxs
cHRyLAotICAgICAgICAgICAgICAgIGRvbUpJVCk7CisgICAgICAgICAgICBpZiAoc2xvdC5pc0Nh
Y2hlYWJsZVZhbHVlKCkgfHwgc2xvdC5pc1Vuc2V0KCkpIHsKKyAgICAgICAgICAgICAgICBuZXdD
YXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIHNsb3QuaXNV
bnNldCgpID8gQWNjZXNzQ2FzZTo6TWlzcyA6IEFjY2Vzc0Nhc2U6OkxvYWQsCisgICAgICAgICAg
ICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9t
UHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlOworICAgICAgICAgICAgICAg
IGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCisgICAgICAgICAgICAgICAgICAgIHR5cGUg
PSBBY2Nlc3NDYXNlOjpHZXR0ZXI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5hdHRy
aWJ1dGVzKCkgJiBDdXN0b21BY2Nlc3NvcikKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFj
Y2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yR2V0dGVyOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlR2V0dGVyOwor
CisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0
ZSgKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgdHlwZSwgb2Zmc2V0LCBzdHJ1
Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwKKyAgICAgICAgICAgICAg
ICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IHNs
b3QuY3VzdG9tR2V0dGVyKCkgOiBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICBzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCkgPyBzbG90LnNsb3RCYXNlKCkgOiBudWxscHRyLAorICAgICAgICAg
ICAgICAgICAgICBkb21KSVQpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBA
IC0zODYsNyArMzg5LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJ
RChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHIKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpy
ZXBsYWNlKHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Cisg
ICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFj
Y2Vzc0Nhc2U6OlJlcGxhY2UsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHN0cnVjdHVyZSk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVy
dHlTbG90OjpOZXdQcm9wZXJ0eSk7CiAKQEAgLTQxOSw3ICs0MjIsNyBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNl
VmFsdWUsIFN0cgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnRyYW5zaXRp
b24odm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIG9mZnNldCwgY29uZGl0
aW9uU2V0KTsKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNv
ZGVCbG9jaywgb2Zmc2V0LCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0KTsK
ICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNs
b3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkgewogICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1
c3RvbSgpKSB7CkBAIC00MzMsNyArNDM2LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHIKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpzZXR0ZXIoCisgICAgICAgICAgICBu
ZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAogICAgICAgICAgICAgICAg
IHZtLCBjb2RlQmxvY2ssIHNsb3QuaXNDdXN0b21BY2Nlc3NvcigpID8gQWNjZXNzQ2FzZTo6Q3Vz
dG9tQWNjZXNzb3JTZXR0ZXIgOiBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlciwgc3RydWN0
dXJlLCBpbnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsCiAgICAgICAgICAgICAgICAgc2xvdC5j
dXN0b21TZXR0ZXIoKSwgc2xvdC5iYXNlKCkpOwogICAgICAgICB9IGVsc2UgewpAQCAtNDUwLDcg
KzQ1Myw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RyCiAgICAgICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwogCi0gICAgICAgICAg
ICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6c2V0dGVyKAorICAgICAgICAgICAgbmV3Q2FzZSA9IEdl
dHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKICAgICAgICAgICAgICAgICB2bSwgY29kZUJs
b2NrLCBBY2Nlc3NDYXNlOjpTZXR0ZXIsIHN0cnVjdHVyZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQp
OwogICAgICAgICB9CiAgICAgfQpAQCAtNTEzLDggKzUxNiw4IEBAIHN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlSZXBhdGNoSW4oCiAKICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQWRkQWNjZXNz
Q2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQpKTsKIAotICAgIHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6aW4oCi0gICAgICAgIHZtLCBj
b2RlQmxvY2ssIHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1p
c3MsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGNvZGVCbG9j
aywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgaW52
YWxpZE9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQpOwogCiAgICAgQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGNvZGVCbG9jaywgaWRl
bnQsIFdURk1vdmUobmV3Q2FzZSkpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
aAppbmRleCBlMTc2NzY4NjkxMTIzZDJhYzFlNzYwM2ZiY2UxMDMzZmRlZmU5MDgyLi41MmEwNjBj
ZTRkNWU1ZjcyYzE4M2I1YzcwZDFjYWYxZmY4NTA0NWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guaApAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBjbGFz
cyBHZXRCeUlES2luZCB7CiAgICAgTm9ybWFsLAotICAgIFB1cmUKKyAgICBUcnkKIH07CiAKIHZv
aWQgcmVwYXRjaEdldEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlJREtpbmQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IDU4MzE4ODgzNDUzNDAy
M2U3M2Q3YzBiZDMwZTFiYjk3MTg5ZDk5ZmUuLmJiZDcwOTYyYWFlYjc5NDVhMzc5NTg2ZjcxMDRh
ZDg3YmM0N2U1NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAg
LTIyOCw3ICsyMjgsNiBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2
KGJvb2wsIGNsb2JiZXJBbGxSZWdzSW5GVExJQ1Nsb3dQYXRoLCAhQVNTRVJUX0RJU0FCTEVELCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZUFjY2Vzc0lubGluaW5nLCB0cnVlLCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KHVuc2lnbmVkLCBtYXhBY2Nlc3NWYXJpYW50TGlzdFNp
emUsIDgsIE5vcm1hbCwgbnVsbHB0cikgXAotICAgIHYodW5zaWduZWQsIG1lZ2Ftb3JwaGljTG9h
ZENvc3QsIDk5OSwgTm9ybWFsLCBudWxscHRyKSAvKiBUaGlzIHVzZWQgdG8gYmUgMTAsIGJ1dCB3
ZSdyZSB0ZW1wb3JhcmlseSB0ZXN0aW5nIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBmZWF0dXJlIGlz
IGRpc2FibGVkLiAqL1wKICAgICB2KGJvb2wsIHVzZVBvbHl2YXJpYW50RGV2aXJ0dWFsaXphdGlv
biwgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB1c2VQb2x5bW9ycGhpY0Fj
Y2Vzc0lubGluaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZVBv
bHltb3JwaGljQ2FsbElubGluaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301779</attachid>
            <date>2017-02-16 10:19:24 -0800</date>
            <delta_ts>2017-02-16 10:19:50 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-168408-20170216101647.patch</filename>
            <type>text/plain</type>
            <size>190454</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyNDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
YTY4YjUyNDNkZjRlNzQwOTBhNmY0ZDE0ODM3MWEyOTlkYmQwYzA1Li5mODI3OTkxMDE0ZjhhNTdk
YWViOWIyNDczMTRjODYxN2M3M2FlYTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzYgQEAKKzIwMTctMDItMTYgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgQWNjZXNzQ2FzZSB0byBiZSBtb3JlIGxpa2UgQjNW
YWx1ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4
NDA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgVGhpcyBw
YXRjaCBtYWtlcyBBY2Nlc3NDYXNlIChhbmQgbmV3IHN1YmNsYXNzZXMpIG1vcmUgbGlrZSBCM1Zh
bHVlLiBJbiB0aGUgbmV3IHN5c3RlbSBlYWNoCisgICAgICAgIHR5cGUgaGFzIGFuIGFzc29jaWF0
ZWQgQWNjZXNzQ2FzZSBzdWJjbGFzcy4gRm9yIGluc3RhbmNlIGFueSBnZXR0ZXIgc2hvdWxkIHVz
ZSB0aGUKKyAgICAgICAgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSBzdWJjbGFzcy4gVGhlIG5ldyBz
eXN0ZW0gaXMgZWFzaWVyIHRvIGZvbGxvdyBzaW5jZSB5b3Ugbm8gbG9uZ2VyIG5lZWQKKyAgICAg
ICAgdG8ga25vdyBleGFjdGx5IHdoaWNoIG1lbWJlcnMgYXJlIHVzZWQgYnkgd2hpY2ggdHlwZXMu
IFRoZSBzdWJjbGFzcyB0byBBY2Nlc3NUeXBlIG1hcHBpbmcgaXM6CisKKyAgICAgICAgR2V0dGVy
U2V0dGVyQWNjZXNzQ2FzZToKKyAgICAgICAgICAgIEdldHRlcgorICAgICAgICAgICAgQ3VzdG9t
QWNjZXNzb3JHZXR0ZXIKKyAgICAgICAgICAgIEN1c3RvbVZhbHVlR2V0dGVyCisgICAgICAgICAg
ICBTZXR0ZXIKKworICAgICAgICBQcm94eWFibGVBY2Nlc3NDYXNlOgorICAgICAgICAgICAgTG9h
ZAorICAgICAgICAgICAgTWlzcworICAgICAgICAgICAgR2V0R2V0dGVyCisKKyAgICAgICAgSW50
cmluc2ljR2V0dGVyQWNjZXNzQ2FzZToKKyAgICAgICAgICAgIEludHJpbnNpY0dldHRlcgorCisg
ICAgICAgIEFjY2Vzc0Nhc2U6CisgICAgICAgICAgICBFdmVyeXRoaW5nIGVsc2UKKworICAgICAg
ICBJdCBhbHNvIGhhcyB0aGUgYWRkaXRpb25hbCBhZHZhbnRhZ2UgdGhhdCBpdCB1c2VzIGxlc3Mg
bWVtb3J5IGZvciB0aGUgY2FzZXMgd2hlcmUgd2Ugd291bGQgaGF2ZSBuZWVkZWQKKyAgICAgICAg
cmFyZSBkYXRhIGluIHRoZSBwYXN0IGJ1dCB0aGF0IGNhc2Ugd291bGQgb25seSB1c2UgYSBzbWFs
bCBiaXQgb2YgaXQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMgbWVnYW1vcnBo
aWMgbG9hZHMgYW5kIHJlbmFtZXMgc29tZSBUcnlHZXRCeUlkIHJlbGF0ZWQgZW51bSB2YWx1ZXMg
ZnJvbSBQdXJlIHRvIFRyeS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpB
Y2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6fkFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNl
Ojpmcm9tU3RydWN0dXJlU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjbG9u
ZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNvbW1pdCk6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6Omd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKToKKyAgICAgICAgKEpTQzo6QWNjZXNz
Q2FzZTo6ZG9lc0NhbGxzKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y291bGRTdGlsbFN1
Y2NlZWQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjYW5SZXBsYWNlKToKKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnZpc2l0
V2Vhayk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToK
KyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQpOgorICAgICAgICAo
SlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Omdl
bmVyYXRlSW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6YXMpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp0eXBlKToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6c3RhdGUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpvZmZzZXQpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpzdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjb25kaXRp
b25TZXQpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjphbHRlcm5hdGVCYXNlKToKKyAgICAg
ICAgKEpTQzo6QWNjZXNzQ2FzZTo6YWRkaXRpb25hbFNldCk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OnZpYVByb3h5KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6aXNHZXR0ZXIpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppc0FjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpyZXNldFN0YXRl
KToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2sp
OgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6R2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZSk6CisgICAgICAgIChKU0M6OkdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OkdldHRlclNldHRlckFjY2Vzc0Nhc2U6On5HZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlKToKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y2xvbmUpOgorICAg
ICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjphbHRlcm5hdGVCYXNlKToKKyAgICAg
ICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZHVtcEltcGwpOgorICAgICAgICAoSlND
OjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0dGVyKToKKyAgICAgICAgKiBi
eXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjYWxsTGlua0luZm8pOgorICAgICAgICAoSlNDOjpHZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjdXN0b21TbG90QmFzZSk6CisgICAgICAgIChKU0M6OkdldHRl
clNldHRlckFjY2Vzc0Nhc2U6OmRvbUpJVCk6CisgICAgICAgICogYnl0ZWNvZGUvSW50cmluc2lj
R2V0dGVyQWNjZXNzQ2FzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpJbnRyaW5zaWNHZXR0
ZXJBY2Nlc3NDYXNlOjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6
SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SW50cmlu
c2ljR2V0dGVyQWNjZXNzQ2FzZTo6fkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UpOgorICAgICAg
ICAoSlNDOjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjbG9uZSk6CisgICAgICAgICogYnl0
ZWNvZGUvSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6aW50cmluc2ljRnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjppbnRyaW5zaWMpOgorICAgICAgICAqIGJ5
dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNB
Y2Nlc3M6OnJlZ2VuZXJhdGUpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKEpTQzo6QWNjZXNzQ2FzZTo6QWNjZXNzQ2FzZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkFjY2Vzc0Nhc2U6OnRyeUdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om1lZ2Ftb3JwaGljTG9h
ZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnJlcGxhY2UpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6QWNjZXNzQ2FzZTo6c2V0dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6aW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZXRMZW5n
dGgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZXRJbnRyaW5zaWMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjp+QWNjZXNzQ2FzZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNsb25lKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6Y29tbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNz
Q2FzZTo6Z3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpB
Y2Nlc3NDYXNlOjphbHRlcm5hdGVCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNz
Q2FzZTo6ZG9lc0NhbGxzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y291
bGRTdGlsbFN1Y2NlZWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjYW5C
ZVJlcGxhY2VkQnlNZWdhbW9ycGhpY0xvYWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpjYW5SZXBsYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6
ZHVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnZpc2l0V2Vhayk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkFjY2Vzc0Nhc2U6OmVtaXRET01KSVRHZXR0ZXIpOiBEZWxldGVkLgorICAgICAgICAq
IGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmg6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OnR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpzdGF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om9mZnNldCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkFjY2Vzc0Nhc2U6OnZpYVByb3h5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6c3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6
bmV3U3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y29uZGl0
aW9uU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6aW50cmluc2ljRnVu
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppbnRyaW5zaWMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpkb21KSVQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpBY2Nlc3NDYXNlOjphZGRpdGlvbmFsU2V0KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6QWNjZXNzQ2FzZTo6Y3VzdG9tU2xvdEJhc2UpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpBY2Nlc3NDYXNlOjppc0dldHRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nh
c2U6OmNhbGxMaW5rSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OlJh
cmVEYXRhOjpSYXJlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUHJveHlhYmxl
QWNjZXNzQ2FzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpQcm94eWFibGVBY2Nlc3NDYXNl
OjpQcm94eWFibGVBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6UHJveHlhYmxlQWNjZXNzQ2Fz
ZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6UHJveHlhYmxlQWNjZXNzQ2FzZTo6flByb3h5YWJs
ZUFjY2Vzc0Nhc2UpOgorICAgICAgICAoSlNDOjpQcm94eWFibGVBY2Nlc3NDYXNlOjpjbG9uZSk6
CisgICAgICAgIChKU0M6OlByb3h5YWJsZUFjY2Vzc0Nhc2U6OmR1bXBJbXBsKToKKyAgICAgICAg
KiBieXRlY29kZS9Qcm94eWFibGVBY2Nlc3NDYXNlLmg6IEFkZGVkLgorICAgICAgICAqIGJ5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJlc2V0KToKKyAgICAgICAgKiBi
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUcnlHZXRCeUlkKToKKyAgICAgICAgKiBmdGwvRlRM
TG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlR2V0QnlJZCk6CisgICAgICAgICogaml0L0ludHJpbnNpY0VtaXR0ZXIuY3BwOgorICAgICAg
ICAoSlNDOjpJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjYW5FbWl0SW50cmluc2ljR2V0dGVy
KToKKyAgICAgICAgKEpTQzo6SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdEludHJpbnNp
Y0dldHRlcik6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNhbkVtaXRJbnRyaW5zaWNHZXR0
ZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjplbWl0SW50cmluc2ljR2V0
dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
ICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAq
IGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAg
ICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6dHJ5UmVwYXRjaEluKToK
KyAgICAgICAgKiBqaXQvUmVwYXRjaC5oOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgor
CiAyMDE3LTAyLTE2ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAg
ICAgICAgIFtKU0NdIFVwZGF0ZSBtb2R1bGUgbmFtZXNwYWNlIG9iamVjdCBhY2NvcmRpbmcgdG8g
dGhlIGxhdGVzdCBFQ01BMjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
MjUyNmY4MzU5Y2E0MGM5NTM2ZGE4MTg4NjcxYzVhNjQzODU1YTVmYi4uNGUwZDc5ZmE1OTk1Y2Fm
ZDg0ZWU3MmVmOGRiZDEyNDI0MzhmZjgyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtMTg1LDYgKzE4NSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAg
YnVpbHRpbnMvQnVpbHRpbkV4ZWN1dGFibGVzLmNwcAogICAgIGJ1aWx0aW5zL0J1aWx0aW5FeGVj
dXRhYmxlQ3JlYXRvci5jcHAKIAorICAgIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCiAgICAgYnl0
ZWNvZGUvQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAKICAg
ICBieXRlY29kZS9Bcml0aFByb2ZpbGUuY3BwCiAgICAgYnl0ZWNvZGUvQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZS5jcHAKQEAgLTIxOCw5ICsyMTksMTEgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBieXRlY29kZS9GdW5jdGlvbkNvZGVCbG9jay5jcHAKICAgICBieXRlY29kZS9HZXRC
eUlkU3RhdHVzLmNwcAogICAgIGJ5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAorICAgIGJ5dGVj
b2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCiAgICAgYnl0ZWNvZGUvSW5saW5lQWNjZXNz
LmNwcAogICAgIGJ5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAKICAgICBieXRlY29kZS9Jbmxp
bmVDYWxsRnJhbWVTZXQuY3BwCisgICAgYnl0ZWNvZGUvSW50cmluc2ljR2V0dGVyQWNjZXNzQ2Fz
ZS5jcHAKICAgICBieXRlY29kZS9KdW1wVGFibGUuY3BwCiAgICAgYnl0ZWNvZGUvTExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAogICAgIGJ5dGVjb2RlL0xh
enlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcApAQCAtMjMzLDYgKzIzNiw3IEBAIHNldChKYXZhU2Ny
aXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcAogICAg
IGJ5dGVjb2RlL1Byb2dyYW1Db2RlQmxvY2suY3BwCiAgICAgYnl0ZWNvZGUvUHJvcGVydHlDb25k
aXRpb24uY3BwCisgICAgYnl0ZWNvZGUvUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAKICAgICBieXRl
Y29kZS9QdXRCeUlkRmxhZ3MuY3BwCiAgICAgYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKICAg
ICBieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMGZlNGI1ZjA1ZmRhNDkzYzk2MGY3ZmJmOTdlMjY3M2M4ZGE1NDFjNy4uNTQyNWI5ZTZi
MTgxN2QyZDAxODUyZTU0MDdkNjFjZTcwZDM4OTdkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTEzMDQsNiArMTMwNCwxMSBAQAogCQk1MzQ5MDI4NTFDNzI3NkI3MDAxMkJDQjgg
LyogVHlwZWRBcnJheUNUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzNDkwMjgyMUM3MjQyQzgwMDEyQkNCOCAvKiBUeXBlZEFycmF5Q1Rlc3Qu
Y3BwICovOyB9OwogCQk1MzRDNDU3QzFCQzcyNDExMDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzRDNDU3QjFCQzcyNDExMDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yLmggKi87IH07CiAJCTUzNEM0NTdFMUJDNzI1NDkwMDc0NzZBNyAvKiBKU1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTM0QzQ1N0QxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3Rvci5jcHAgKi87IH07CisJCTUzNEUwMzRFMUU0RDRCMTYwMDIxM0Y2NCAvKiBBY2Nlc3ND
YXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzRF
MDM0RDFFNEQ0QjE2MDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5oICovOyB9OworCQk1MzRFMDM1MDFF
NEQ5NUVEMDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzRFMDM0RjFFNEQ5NUVEMDAyMTNGNjQgLyogQWNjZXNz
Q2FzZS5jcHAgKi87IH07CisJCTUzNEUwMzU0MUU1M0JEMjkwMDIxM0Y2NCAvKiBJbnRyaW5zaWNH
ZXR0ZXJBY2Nlc3NDYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzRFMDM1MzFFNTNCRDI5MDAyMTNGNjQgLyogSW50cmluc2ljR2V0dGVyQWNjZXNz
Q2FzZS5oICovOyB9OworCQk1MzRFMDM1NjFFNTNCRURFMDAyMTNGNjQgLyogUHJveHlhYmxlQWNj
ZXNzQ2FzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTM0RTAzNTUxRTUzQkVERTAwMjEzRjY0IC8qIFByb3h5YWJsZUFjY2Vzc0Nhc2UuaCAqLzsgfTsK
KwkJNTM0RTAzNTgxRTUzQkYyRjAwMjEzRjY0IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNEUwMzU3MUU1
M0JGMkYwMDIxM0Y2NCAvKiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmggKi87IH07CiAJCTUzNTI5
QTRDMUM0NTdCNzUwMDBCNDlDNiAvKiBBUElVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM1MjlBNEIxQzQ1N0I3NTAwMEI0OUM2IC8qIEFQSVV0
aWxzLmggKi87IH07CiAJCTUzNTU1NzE0MUQ5RDlFQTUwMDZENTgzQiAvKiBXYXNtTWVtb3J5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzU1NTcxMzFE
OUQ5RUE1MDA2RDU4M0IgLyogV2FzbU1lbW9yeS5oICovOyB9OwogCQk1MzU1NTcxNjFEOURGQTMy
MDA2RDU4M0IgLyogV2FzbU1lbW9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MzU1NTcxNTFEOURGQTMyMDA2RDU4M0IgLyogV2FzbU1lbW9yeS5j
cHAgKi87IH07CkBAIC0xMzExLDYgKzEzMTYsOSBAQAogCQk1MzcwQjRGNjFCRjI2MjA1MDA1QzQw
RkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM3MEI0RjQxQkYyNUVB
MjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2Uu
aCAqLzsgfTsKIAkJNTM5MTdFN0IxQjc5MDZGQTAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MzkxN0U3QTFCNzkwNkU0MDAwRUJEMzMgLyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCAqLzsgfTsKIAkJNTM5RkI4QkExQzk5REE3
QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlGQjhCOTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlu
bGluZXMuaCAqLzsgfTsKKwkJNTNCMEJFMzQxRTU2MUFDOTAwQThGQzI5IC8qIEdldHRlclNldHRl
ckFjY2Vzc0Nhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTNCMEJFMzMxRTU2MUFDOTAwQThGQzI5IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2Uu
Y3BwICovOyB9OworCQk1M0IwQkUzNjFFNTYxQjA5MDBBOEZDMjkgLyogUHJveHlhYmxlQWNjZXNz
Q2FzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
M0IwQkUzNTFFNTYxQjA5MDBBOEZDMjkgLyogUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAgKi87IH07
CisJCTUzQjBCRTM4MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzQjBC
RTM3MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcCAqLzsg
fTsKIAkJNTNENDQ0REMxREFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNENDQ0REIxREFG
MDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oICovOyB9OwogCQk1M0Q0NDRERTFE
QUYwOUEwMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRDQ0NEREMURBRjA5QTAwMEI5Mjc4NCAv
KiBCM1dhc21BZGRyZXNzVmFsdWUuY3BwICovOyB9OwogCQk1M0Y0MEU4NTFENThGOTc3MDA5OUEx
QjYgLyogV2FzbVNlY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggKi87
IH07CkBAIC0zNzQxLDYgKzM3NDksMTEgQEAKIAkJNTM0QzQ1N0ExQkM3MDNEQzAwNzQ3NkE3IC8q
IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlw
dDsgcGF0aCA9IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTM0QzQ1N0IxQkM3MjQxMTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM0QzQ1N0Qx
QkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzRFMDM0RDFFNEQ0QjE2MDAy
MTNGNjQgLyogQWNjZXNzQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
Y2Nlc3NDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNEUwMzRGMUU0RDk1
RUQwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MzRFMDM1MzFFNTNCRDI5MDAyMTNGNjQgLyogSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNEUwMzU1MUU1M0JFREUwMDIxM0Y2
NCAvKiBQcm94eWFibGVBY2Nlc3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFByb3h5YWJsZUFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTM0RTAzNTcxRTUzQkYyRjAwMjEzRjY0IC8qIEdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzUyOUE0QjFDNDU3Qjc1MDAwQjQ5QzYgLyog
QVBJVXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJVXRpbHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM1NTU3MTMxRDlEOUVBNTAwNkQ1ODNCIC8q
IFdhc21NZW1vcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1lbW9y
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzU1NTcxNTFEOURGQTMyMDA2RDU4
M0IgLyogV2FzbU1lbW9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXYXNtTWVtb3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3NTEsNiAr
Mzc2NCw5IEBACiAJCTUzOTE3RTgzMUI3OTFDQjgwMDBFQkQzMyAvKiBUeXBlZEFycmF5UHJvdG90
eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gVHlwZWRBcnJh
eVByb3RvdHlwZS5qczsgcGF0aCA9IGJ1aWx0aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUuanM7IHNv
dXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJNTM5RUIwNzExRDU1M0RGODAwQzgyRUY3IC8q
IHRlc3RXYXNtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHRlc3RX
YXNtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5RkI4QjkxQzk5REE3QzAw
OTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzQjBC
RTMzMUU1NjFBQzkwMEE4RkMyOSAvKiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0IwQkUzNTFFNTYxQjA5MDBBOEZDMjkg
LyogUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQcm94eWFibGVBY2Nlc3NDYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTNCMEJFMzcxRTU2MUIyNDAwQThGQzI5IC8qIEludHJpbnNpY0dldHRlckFjY2Vzc0Nh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50cmluc2ljR2V0
dGVyQWNjZXNzQ2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRDQ0NERC
MURBRjA4QUIwMEI5Mjc4NCAvKiBCM1dhc21BZGRyZXNzVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNXYXNtQWRkcmVzc1ZhbHVlLmg7IHBhdGggPSBiMy9CM1dhc21B
ZGRyZXNzVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNENDQ0REQxREFG
MDlBMDAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCM1dhc21BZGRyZXNzVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNX
YXNtQWRkcmVzc1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGMjU2
RTExQjg3RTI4MDAwQjRCNzY4IC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MDEyLDYgKzYwMjgsMjEgQEAK
IAkJCXRhYldpZHRoID0gNDsKIAkJCXVzZXNUYWJzID0gMDsKIAkJfTsKKwkJNTM0RTAzNTIxRTUz
QkJBOTAwMjEzRjY0IC8qIGFjY2Vzc0Nhc2UgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJ
CWNoaWxkcmVuID0gKAorCQkJCTUzNEUwMzRGMUU0RDk1RUQwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNl
LmNwcCAqLywKKwkJCQk1MzRFMDM0RDFFNEQ0QjE2MDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5oICov
LAorCQkJCTUzQjBCRTM3MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3ND
YXNlLmNwcCAqLywKKwkJCQk1MzRFMDM1MzFFNTNCRDI5MDAyMTNGNjQgLyogSW50cmluc2ljR2V0
dGVyQWNjZXNzQ2FzZS5oICovLAorCQkJCTUzQjBCRTM1MUU1NjFCMDkwMEE4RkMyOSAvKiBQcm94
eWFibGVBY2Nlc3NDYXNlLmNwcCAqLywKKwkJCQk1MzRFMDM1NTFFNTNCRURFMDAyMTNGNjQgLyog
UHJveHlhYmxlQWNjZXNzQ2FzZS5oICovLAorCQkJCTUzQjBCRTMzMUU1NjFBQzkwMEE4RkMyOSAv
KiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcCAqLywKKwkJCQk1MzRFMDM1NzFFNTNCRjJGMDAy
MTNGNjQgLyogR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBh
Y2Nlc3NDYXNlOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJNjUwRkRGOEQw
OUQwRkNBNzAwNzY5RTU0IC8qIERlcml2ZWQgU291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC03Mjk5LDYgKzczMzAsNyBAQAogCQk5NjlBMDc4RjBF
RDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTUzNEUwMzUyMUU1M0JCQTkwMDIxM0Y2NCAvKiBhY2Nlc3NDYXNl
ICovLAogCQkJCTUzNzBCNEYzMUJGMjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcCAqLywKIAkJCQk1MzcwQjRGNDFCRjI1RUEyMDA1
QzQwRkMgLyogQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oICov
LAogCQkJCTc5QTIyODMzMUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuY3BwICovLApA
QCAtNzk4MCw2ICs4MDEyLDcgQEAKIAkJCQkwRjZCOEFFNTFDNEVGRTE3MDA5NjkwNTIgLyogQjNG
aXhTU0EuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzI1Q0IwMUM1MDZEM0IwMEFEOTQzQSAvKiBC
M0ZvbGRQYXRoQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUxNjFCREFDREFD
MDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTM0RTAz
NTYxRTUzQkVERTAwMjEzRjY0IC8qIFByb3h5YWJsZUFjY2Vzc0Nhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRUM4NTE3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MTkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTFBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVy
aWNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLApAQCAtODQzNSw2ICs4NDY4LDcgQEAK
IAkJCQkwRkVBMEExMjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMU3RhdGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3RkNDMjZEMTdBMEI2QUEwMDc4NkQxQSAvKiBGVExTd2l0Y2hDYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjIzNUJFMjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1MzRFMDM1NDFFNTNCRDI5MDAyMTNGNjQgLyogSW50cmluc2ljR2V0
dGVyQWNjZXNzQ2FzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMjAxNzA4QjAwNzAwQkI3
MjJDIC8qIEZUTFR5cGVkUG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQ0ExNzNE
QTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC04NDQ5LDYgKzg0ODMsNyBAQAogCQkJCTUyQjMxMEZCMTk3NEFFNjEwMDgwODU3QyAvKiBG
dW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNEJGRjJDMUFE
NDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0MDUwRTE2RjVDRDAwQjM0NDYwIC8qIEZ1bmN0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1MzRFMDM1ODFFNTNCRjJGMDAyMTNGNjQgLyogR2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1
bmN0aW9uUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQTBDNDAzMUNERDdEMUQwMDQ4
MTk5MSAvKiBGdW5jdGlvbldoaXRlbGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQ0U2M0Qx
OENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCkBA
IC04NzE2LDYgKzg3NTEsNyBAQAogCQkJCUE1MDNGQTFFMTg4RTBGQjAwMDExMEYxNCAvKiBKU0ph
dmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwMTNDQThD
MUI0OTFBOTQwMENBRTYxMyAvKiBKU0pvYi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTYw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTTGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQk1MzRFMDM0RTFFNEQ0QjE2MDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9jay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyQTRCQjdGMzE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFs
dWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDExOCw2ICsxMDE1NCw3IEBACiAJCQkJ
MEYyMzVCRTExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjVBNjI4MzE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyQTgzNjM4OTE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlD
YWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0IwQkUzODFFNTYxQjI0MDBBOEZDMjkg
LyogSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEFE
OTExQjFEQ0E5N0ZEMDAxNEY5RkUgLyogRnVuY3Rpb25Db2RlQmxvY2suY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5Q0IxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uQ29uc3RydWN0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3MzQxRTMxREMyQ0U5NjAwQUEyOUJBIC8qIEZ1bmN0
aW9uRXhlY3V0YWJsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMzE5LDYgKzEwMzU2LDcgQEAK
IAkJCQk1MzQ4NkJCQjFDMThFODQ1MDBGNkYzQUYgLyogSlNUeXBlZEFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMkI2NkZBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25z
dHJ1Y3RvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2RkMxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTNCMEJF
MzYxRTU2MUIwOTAwQThGQzI5IC8qIFByb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYyQjY2RkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTM0QzQ1N0UxQkM3MjU0OTAwNzQ3NkE3IC8qIEpTVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUE3RTI0NDFCQkM2Nzcy
MDBENzg0NDAgLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTEwMzM4LDYgKzEwMzc2LDcgQEAKIAkJCQlBRDJGQ0JFODFEQjU4REFEMDBCM0U3MzYgLyog
SlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDJGQ0JF
QTFEQjU4REFEMDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseVRhYmxlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1MzRFMDM1MDFFNEQ5NUVEMDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVy
TWFwLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NzAxMDdFQzEzNDAwMTNFN0IyIC8qIEpT
V3JhcHBlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0ZEOEM5MjBFRUIyRUU3MDAy
ODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTA1NzgsNiArMTA2MTcs
NyBAQAogCQkJCTFBQ0Y3Mzc3MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0RTg0RjlFMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTRGNzI1NjUxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25l
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0IwQkUzNDFFNTYxQUM5MDBBOEZDMjkgLyogR2V0
dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0NBM0FFMzE3REE0
MUFFMDA2NTM4QUYgLyogV2Vha01hcENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3Q0EzQUVCMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwRGF0YS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBN0NBM0FFNTE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xNmExYTUzY2IyNzRlNmZlZjMwNThiODZkODQ3ZmVhMzE2ZmMy
ZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwCkBAIC0wLDAgKzEsMTAwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBY2Nl
c3NDYXNlLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgi
CisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiRE9NSklUR2V0dGVyU2V0dGVy
LmgiCisjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVy
LmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5oIgorI2luY2x1ZGUgIkhlYXBJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oIgorI2luY2x1
ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1
ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCisjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCisj
aW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0
b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworQWNjZXNzQ2Fz
ZTo6QWNjZXNzQ2FzZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAg
ICwgbV9vZmZzZXQob2Zmc2V0KQoreworICAgIG1fc3RydWN0dXJlLnNldE1heUJlTnVsbCh2bSwg
b3duZXIsIHN0cnVjdHVyZSk7CisgICAgbV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBj
b25kaXRpb25TZXQpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBJbkhpdDoKKyAg
ICBjYXNlIEluTWlzczoKKyAgICBjYXNlIEFycmF5TGVuZ3RoOgorICAgIGNhc2UgU3RyaW5nTGVu
Z3RoOgorICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzTGVuZ3RoOgorICAgIGNhc2UgU2NvcGVkQXJn
dW1lbnRzTGVuZ3RoOgorICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfTsKKworICAgIHJldHVy
biBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4obmV3IEFjY2Vzc0Nhc2Uodm0sIG93bmVyLCB0
eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KSk7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjcmVhdGUoCisgICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldCYgY29uZGl0aW9uU2V0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG9sZFN0cnVjdHVyZSA9
PSBuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSk7CisKKyAgICAvLyBTa2lwIG9wdGltaXppbmcg
dGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCBhIHJlYWxsb2MsIGlmIHdlIGRvbid0IGhhdmUKKyAgICAv
LyBlbm91Z2ggcmVnaXN0ZXJzIHRvIG1ha2UgaXQgaGFwcGVuLgorICAgIGlmIChHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVycyA8IDYKKyAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQorICAgICAgICAm
JiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPihu
ZXcgQWNjZXNzQ2FzZSh2bSwgb3duZXIsIFRyYW5zaXRpb24sIG9mZnNldCwgbmV3U3RydWN0dXJl
LCBjb25kaXRpb25TZXQpKTsKK30KKworQWNjZXNzQ2FzZTo6fkFjY2Vzc0Nhc2UoKQoreworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0
dWJJbmZvKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQoreworICAgIHN3aXRjaCAoc3R1YkluZm8uY2FjaGVUeXBlKSB7CisgICAgY2FzZSBD
YWNoZVR5cGU6OkdldEJ5SWRTZWxmOgorICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2Fz
ZTo6Y3JlYXRlKHZtLCBvd25lciwgTG9hZCwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0
dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSk7CisKKyAgICBjYXNl
IENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpj
cmVhdGUodm0sIG93bmVyLCBSZXBsYWNlLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCwgc3R1
YkluZm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKKworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmNsb25lKCkgY29uc3QKK3sKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCp0aGlzKSk7CisgICAgcmVz
dWx0LT5yZXNldFN0YXRlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVmVjdG9yPFdhdGNo
cG9pbnRTZXQqLCAyPiBBY2Nlc3NDYXNlOjpjb21taXQoVk0mIHZtLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCkKK3sKKyAgICAvLyBJdCdzIGZpbmUgdG8gY29tbWl0IHNvbWV0aGluZyB0aGF0IGlz
IGFscmVhZHkgY29tbWl0dGVkLiBUaGF0IGFyaXNlcyB3aGVuIHdlIHN3aXRjaCB0byB1c2luZwor
ICAgIC8vIG5ld2x5IGFsbG9jYXRlZCB3YXRjaHBvaW50cy4gV2hlbiBpdCBoYXBwZW5zLCBpdCdz
IG5vdCBlZmZpY2llbnQgLSBidXQgd2UgdGhpbmsgdGhhdCdzIE9LCisgICAgLy8gYmVjYXVzZSBt
b3N0IEFjY2Vzc0Nhc2VzIGhhdmUgbm8gZXh0cmEgd2F0Y2hwb2ludHMgYW55d2F5LgorICAgIFJF
TEVBU0VfQVNTRVJUKG1fc3RhdGUgPT0gUHJpbW9yZGlhbCB8fCBtX3N0YXRlID09IENvbW1pdHRl
ZCk7CisKKyAgICBWZWN0b3I8V2F0Y2hwb2ludFNldCosIDI+IHJlc3VsdDsKKworICAgIGlmICgo
c3RydWN0dXJlKCkgJiYgc3RydWN0dXJlKCktPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
KSkKKyAgICAgICAgfHwgbV9jb25kaXRpb25TZXQubmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpKQorICAgICAgICByZXN1bHQuYXBwZW5kKHZtLmVuc3VyZVdhdGNocG9pbnRTZXRGb3JJbXB1
cmVQcm9wZXJ0eShpZGVudCkpOworCisgICAgaWYgKGFkZGl0aW9uYWxTZXQoKSkKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChhZGRpdGlvbmFsU2V0KCkpOworCisgICAgbV9zdGF0ZSA9IENvbW1pdHRl
ZDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgQWNjZXNzQ2FzZTo6Z3VhcmRlZEJ5
U3RydWN0dXJlQ2hlY2soKSBjb25zdAoreworICAgIGlmICh2aWFQcm94eSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQXJyYXlMZW5n
dGg6CisgICAgY2FzZSBTdHJpbmdMZW5ndGg6CisgICAgY2FzZSBEaXJlY3RBcmd1bWVudHNMZW5n
dGg6CisgICAgY2FzZSBTY29wZWRBcmd1bWVudHNMZW5ndGg6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wg
QWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKFZlY3RvcjxKU0NlbGwqPiogY2VsbHNUb01hcmspIGNvbnN0
Cit7CisgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICBjYXNlIEdldHRlcjoKKyAgICBjYXNlIFNl
dHRlcjoKKyAgICBjYXNlIEN1c3RvbVZhbHVlR2V0dGVyOgorICAgIGNhc2UgQ3VzdG9tQWNjZXNz
b3JHZXR0ZXI6CisgICAgY2FzZSBDdXN0b21WYWx1ZVNldHRlcjoKKyAgICBjYXNlIEN1c3RvbUFj
Y2Vzc29yU2V0dGVyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFRyYW5zaXRpb246
CisgICAgICAgIGlmIChuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQorICAgICAgICAgICAgJiYgc3RydWN0dXJlKCkt
PmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKKyAgICAgICAgICAgIGlmIChjZWxsc1RvTWFy
aykKKyAgICAgICAgICAgICAgICBjZWxsc1RvTWFyay0+YXBwZW5kKG5ld1N0cnVjdHVyZSgpKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29s
IEFjY2Vzc0Nhc2U6OmNvdWxkU3RpbGxTdWNjZWVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9j
b25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKTsKK30KKworYm9vbCBBY2Nlc3NDYXNlOjpjYW5SZXBsYWNlKGNvbnN0IEFj
Y2Vzc0Nhc2UmIG90aGVyKSBjb25zdAoreworICAgIC8vIFRoaXMgcHV0cyBpbiBhIGdvb2QgZWZm
b3J0IHRvIHRyeSB0byBmaWd1cmUgb3V0IGlmICdvdGhlcicgaXMgbWFkZSBzdXBlcmZsdW91cyBi
eSAnKnRoaXMnLgorICAgIC8vIEl0J3MgZmluZSBmb3IgdGhpcyB0byByZXR1cm4gZmFsc2UgaWYg
aXQncyBpbiBkb3VidC4KKworICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgY2FzZSBBcnJheUxl
bmd0aDoKKyAgICBjYXNlIFN0cmluZ0xlbmd0aDoKKyAgICBjYXNlIERpcmVjdEFyZ3VtZW50c0xl
bmd0aDoKKyAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c0xlbmd0aDoKKyAgICAgICAgcmV0dXJuIG90
aGVyLnR5cGUoKSA9PSB0eXBlKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKCFndWFyZGVk
QnlTdHJ1Y3R1cmVDaGVjaygpIHx8ICFvdGhlci5ndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUoKSA9
PSBvdGhlci5zdHJ1Y3R1cmUoKTsKKyAgICB9Cit9CisKK3ZvaWQgQWNjZXNzQ2FzZTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3R5cGUsICI6KCIpOwor
CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworCisgICAgb3V0LnByaW50KGNvbW1hLCBtX3N0YXRl
KTsKKworICAgIGlmIChtX3R5cGUgPT0gVHJhbnNpdGlvbikKKyAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAic3RydWN0dXJlID0gIiwgcG9pbnRlckR1bXAoc3RydWN0dXJlKCkpLCAiIC0+ICIsIHBv
aW50ZXJEdW1wKG5ld1N0cnVjdHVyZSgpKSk7CisgICAgZWxzZSBpZiAobV9zdHJ1Y3R1cmUpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgInN0cnVjdHVyZSA9ICIsIHBvaW50ZXJEdW1wKG1fc3Ry
dWN0dXJlLmdldCgpKSk7CisKKyAgICBpZiAoaXNWYWxpZE9mZnNldChtX29mZnNldCkpCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgIm9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKKyAgICBpZiAoIW1f
Y29uZGl0aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY29uZGl0
aW9ucyA9ICIsIG1fY29uZGl0aW9uU2V0KTsKKworICAgIGR1bXBJbXBsKG91dCwgY29tbWEpOwor
ICAgIG91dC5wcmludCgiKSIpOworfQorCitib29sIEFjY2Vzc0Nhc2U6OnZpc2l0V2VhayhWTSYg
dm0pIGNvbnN0Cit7CisgICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtlZChtX3N0
cnVjdHVyZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29uZGl0
aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlz
QWNjZXNzb3IoKSkgeworICAgICAgICBhdXRvJiBhY2Nlc3NvciA9IHRoaXMtPmFzPEdldHRlclNl
dHRlckFjY2Vzc0Nhc2U+KCk7CisgICAgICAgIGlmIChhY2Nlc3Nvci5jYWxsTGlua0luZm8oKSkK
KyAgICAgICAgICAgIGFjY2Vzc29yLmNhbGxMaW5rSW5mbygpLT52aXNpdFdlYWsodm0pOworICAg
ICAgICBpZiAoYWNjZXNzb3IuY3VzdG9tU2xvdEJhc2UoKSAmJiAhSGVhcDo6aXNNYXJrZWQoYWNj
ZXNzb3IuY3VzdG9tU2xvdEJhc2UoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fSBlbHNlIGlmICh0eXBlKCkgPT0gSW50cmluc2ljR2V0dGVyKSB7CisgICAgICAgIGF1dG8mIGlu
dHJpbnNpYyA9IHRoaXMtPmFzPEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U+KCk7CisgICAgICAg
IGlmIChpbnRyaW5zaWMuaW50cmluc2ljRnVuY3Rpb24oKSAmJiAhSGVhcDo6aXNNYXJrZWQoaW50
cmluc2ljLmludHJpbnNpY0Z1bmN0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFjY2Vzc0Nhc2U6OnByb3BhZ2F0
ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAoreworICAgIGJvb2wgcmVz
dWx0ID0gdHJ1ZTsKKworICAgIGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAgcmVzdWx0ICY9IG1f
c3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKworICAgIHN3aXRjaCAobV90eXBlKSB7
CisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJy
ZW50bHkobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpCisgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgQWNjZXNz
Q2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCisgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0
ZSwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gpCit7CisgICAgU3VwZXJTYW1w
bGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworCisgICAgUkVMRUFTRV9BU1NFUlQo
bV9zdGF0ZSA9PSBDb21taXR0ZWQpOworICAgIG1fc3RhdGUgPSBHZW5lcmF0ZWQ7CisKKyAgICBD
Q2FsbEhlbHBlcnMmIGppdCA9ICpzdGF0ZS5qaXQ7CisgICAgVk0mIHZtID0gKmppdC52bSgpOwor
ICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHN0YXRlLnZhbHVlUmVnczsKKyAgICBHUFJSZWcg
YmFzZUdQUiA9IHN0YXRlLmJhc2VHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0ZS5z
Y3JhdGNoR1BSOworCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKworICAgIHN3aXRjaCAobV90eXBl
KSB7CisgICAgY2FzZSBBcnJheUxlbmd0aDogeworICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkp
OworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGZh
bGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2hUZXN0MzIoCisgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihJc0FycmF5KSkpOworICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCisgICAg
ICAgICAgICBqaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
WmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFw
ZU1hc2spKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgU3RyaW5nTGVuZ3Ro
OiB7CisgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7CisgICAgICAgIGZhbGxUaHJvdWdoLmFw
cGVuZCgKKyAgICAgICAgICAgIGppdC5icmFuY2g4KAorICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzTGVuZ3RoOiB7CisgICAgICAgIEFTU0VS
VCghdmlhUHJveHkoKSk7CisgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAg
IGppdC5icmFuY2g4KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKERpcmVjdEFyZ3VtZW50c1R5cGUpKSk7CisKKyAgICAgICAgZmFsbFRocm91Z2guYXBw
ZW5kKAorICAgICAgICAgICAgaml0LmJyYW5jaFRlc3RQdHIoCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpOb25aZXJvLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTWFwcGVkQXJndW1lbnRzKCkpKSk7
CisgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSwKKyAgICAgICAgICAg
IHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBqaXQuYm94SW50MzIodmFsdWVSZWdz
LnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzKTsKKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBTY29wZWRBcmd1bWVudHNMZW5ndGg6IHsK
KyAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKKyAgICAgICAgZmFsbFRocm91Z2guYXBwZW5k
KAorICAgICAgICAgICAgaml0LmJyYW5jaDgoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoU2NvcGVkQXJndW1lbnRzVHlwZSkpKTsKKworICAgICAgICBm
YWxsVGhyb3VnaC5hcHBlbmQoCisgICAgICAgICAgICBqaXQuYnJhbmNoVGVzdDgoCisgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLAorICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVU
aGluZ3MoKSkpKTsKKyAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlR1BSLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVG90YWxMZW5ndGgo
KSksCisgICAgICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgaml0LmJv
eEludDMyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRl
LnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRlZmF1bHQ6IHsKKyAg
ICAgICAgaWYgKHZpYVByb3h5KCkpIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgK
KyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoOCgKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQdXJlRm9yd2FyZGluZ1Byb3h5VHlw
ZSkpKTsKKworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJh
c2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisKKyAgICAgICAg
ICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0
dXJlKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlKCkpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKKyAgICAg
ICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAorICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlKCkpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9
IH07CisKKyAgICBnZW5lcmF0ZUltcGwoc3RhdGUpOworfQorCit2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQobV9zdGF0ZSA9PSBDb21taXR0ZWQpOworICAgIG1fc3RhdGUgPSBHZW5lcmF0ZWQ7CisKKyAg
ICBnZW5lcmF0ZUltcGwoc3RhdGUpOworfQorCit2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1w
bChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQoreworICAgIFN1cGVyU2FtcGxlclNjb3Bl
IHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0
YUxvZygiXG5cbkdlbmVyYXRpbmcgY29kZSBmb3I6ICIsICp0aGlzLCAiXG4iKTsKKworICAgIEFT
U0VSVChtX3N0YXRlID09IEdlbmVyYXRlZCk7IC8vIFdlIHJlbHkgb24gdGhlIGNhbGxlcnMgc2V0
dGluZyB0aGlzIGZvciB1cy4KKworICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0YXRlLmppdDsK
KyAgICBWTSYgdm0gPSAqaml0LnZtKCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBqaXQu
Y29kZUJsb2NrKCk7CisgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKnN0YXRlLnN0
dWJJbmZvOworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gKnN0YXRlLmlkZW50OworICAg
IEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHN0YXRlLnZhbHVlUmVnczsKKyAgICBHUFJSZWcgYmFz
ZUdQUiA9IHN0YXRlLmJhc2VHUFI7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzdGF0ZS5zY3Jh
dGNoR1BSOworCisgICAgQVNTRVJUKG1fY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxp
ZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpOworCisgICAgZm9yIChjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uIDogbV9jb25kaXRpb25TZXQpIHsK
KyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVj
dHVyZSgpOworCisgICAgICAgIGlmIChjb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPmFkZFRyYW5z
aXRpb25XYXRjaHBvaW50KHN0YXRlLmFkZFdhdGNocG9pbnQoY29uZGl0aW9uKSk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghY29uZGl0aW9uLnN0cnVj
dHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0cnVj
dHVyZSkpIHsKKyAgICAgICAgICAgIC8vIFRoZSByZWFzb24gd2h5IHRoaXMgY2Fubm90IGhhcHBl
biBpcyB0aGF0IHdlIHJlcXVpcmUgdGhhdCBQb2x5bW9ycGhpY0FjY2VzcyBjYWxscworICAgICAg
ICAgICAgLy8gQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoKSBvbmx5IGFmdGVyIGl0IGhhcyB2ZXJpZmll
ZCB0aGF0CisgICAgICAgICAgICAvLyBBY2Nlc3NDYXNlOjpjb3VsZFN0aWxsU3VjY2VlZCgpIHJl
dHVybmVkIHRydWUuCisKKyAgICAgICAgICAgIGRhdGFMb2coIlRoaXMgY29uZGl0aW9uIGlzIG5v
IGxvbmdlciBtZXQ6ICIsIGNvbmRpdGlvbiwgIlxuIik7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2Ugd2lsbCBlbWl0
IGNvZGUgdGhhdCBoYXMgYSB3ZWFrIHJlZmVyZW5jZSB0aGF0IGlzbid0IG90aGVyd2lzZSBsaXN0
ZWQgYW55d2hlcmUuCisgICAgICAgIHN0YXRlLndlYWtSZWZlcmVuY2VzLmFwcGVuZChXcml0ZUJh
cnJpZXI8SlNDZWxsPih2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpKTsKKworICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29uZGl0aW9uLm9iamVjdCgpKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZCgKKyAgICAgICAg
ICAgIGppdC5icmFuY2hTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpO
b3RFcXVhbCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUpKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgSW5IaXQ6Cisg
ICAgY2FzZSBJbk1pc3M6CisgICAgICAgIGppdC5ib3hCb29sZWFuUGF5bG9hZChtX3R5cGUgPT0g
SW5IaXQsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7
CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgTWlzczoKKyAgICAgICAgaml0Lm1vdmVUcnVz
dGVkVmFsdWUoanNVbmRlZmluZWQoKSwgdmFsdWVSZWdzKTsKKyAgICAgICAgc3RhdGUuc3VjY2Vl
ZCgpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIExvYWQ6CisgICAgY2FzZSBHZXRHZXR0
ZXI6CisgICAgY2FzZSBHZXR0ZXI6CisgICAgY2FzZSBTZXR0ZXI6CisgICAgY2FzZSBDdXN0b21W
YWx1ZUdldHRlcjoKKyAgICBjYXNlIEN1c3RvbUFjY2Vzc29yR2V0dGVyOgorICAgIGNhc2UgQ3Vz
dG9tVmFsdWVTZXR0ZXI6CisgICAgY2FzZSBDdXN0b21BY2Nlc3NvclNldHRlcjogeworICAgICAg
ICBHUFJSZWcgdmFsdWVSZWdzUGF5bG9hZEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisK
KyAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQobV9vZmZzZXQpKSB7CisgICAgICAgICAgICBTdHJ1
Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7CisgICAgICAgICAgICBpZiAobV9jb25kaXRpb25TZXQuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUoKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gbV9jb25kaXRp
b25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgICAg
ICAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMo
dm0sIG9mZnNldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEdQUlJlZyBiYXNlRm9yR2V0R1BS
OworICAgICAgICBpZiAodmlhUHJveHkoKSkgeworICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSAh
PSBDdXN0b21WYWx1ZVNldHRlciB8fCBtX3R5cGUgIT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOyAv
LyBCZWNhdXNlIHNldHRlcnMgbmVlZCB0byBub3QgdHJhc2ggdmFsdWVSZWdzUGF5bG9hZEdQUi4K
KyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyIHx8IG1fdHlwZSA9PSBTZXR0ZXIpCisg
ICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgYmFzZUZvckdldEdQUiA9IHZhbHVlUmVnc1BheWxvYWRHUFI7
CisKKyAgICAgICAgICAgIEFTU0VSVCgobV90eXBlICE9IEdldHRlciAmJiBtX3R5cGUgIT0gU2V0
dGVyKSB8fCBiYXNlRm9yR2V0R1BSICE9IGJhc2VHUFIpOworICAgICAgICAgICAgQVNTRVJUKG1f
dHlwZSAhPSBTZXR0ZXIgfHwgYmFzZUZvckdldEdQUiAhPSB2YWx1ZVJlZ3NQYXlsb2FkR1BSKTsK
KworICAgICAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwKKyAgICAgICAgICAg
ICAgICBiYXNlRm9yR2V0R1BSKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBiYXNlRm9y
R2V0R1BSID0gYmFzZUdQUjsKKworICAgICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUjsKKyAg
ICAgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGppdC5t
b3ZlKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihhbHRlcm5h
dGVCYXNlKCkpLAorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYmFz
ZUZvckFjY2Vzc0dQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
YmFzZUZvckFjY2Vzc0dQUiA9IGJhc2VGb3JHZXRHUFI7CisKKyAgICAgICAgR1BSUmVnIGxvYWRl
ZFZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgaWYgKG1fdHlwZSAhPSBDdXN0b21W
YWx1ZUdldHRlciAmJiBtX3R5cGUgIT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgJiYgbV90eXBlICE9
IEN1c3RvbVZhbHVlU2V0dGVyICYmIG1fdHlwZSAhPSBDdXN0b21BY2Nlc3NvclNldHRlcikgewor
ICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBMb2FkIHx8IG1fdHlwZSA9PSBHZXRHZXR0ZXIpCisg
ICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIgPSB2YWx1ZVJlZ3NQYXlsb2FkR1BSOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0gc2NyYXRjaEdQ
UjsKKworICAgICAgICAgICAgQVNTRVJUKChtX3R5cGUgIT0gR2V0dGVyICYmIG1fdHlwZSAhPSBT
ZXR0ZXIpIHx8IGxvYWRlZFZhbHVlR1BSICE9IGJhc2VHUFIpOworICAgICAgICAgICAgQVNTRVJU
KG1fdHlwZSAhPSBTZXR0ZXIgfHwgbG9hZGVkVmFsdWVHUFIgIT0gdmFsdWVSZWdzUGF5bG9hZEdQ
Uik7CisKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSOworICAgICAgICAgICAgaWYgKGlz
SW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkKKyAgICAgICAgICAgICAgICBzdG9yYWdlR1BSID0gYmFz
ZUZvckFjY2Vzc0dQUjsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGppdC5s
b2FkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUZv
ckFjY2Vzc0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwKKyAgICAgICAgICAgICAg
ICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBsb2Fk
ZWRWYWx1ZUdQUjsKKyAgICAgICAgICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAg
ICAgICBqaXQubG9hZDY0KAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShtX29mZnNldCkpLCBsb2FkZWRWYWx1ZUdQ
Uik7CisjZWxzZQorICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBMb2FkIHx8IG1fdHlwZSA9PSBH
ZXRHZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jh
c2UobV9vZmZzZXQpICsgVGFnT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdz
LnRhZ0dQUigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGppdC5sb2FkMzIoCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0
aXZlVG9CYXNlKG1fb2Zmc2V0KSArIFBheWxvYWRPZmZzZXQpLAorICAgICAgICAgICAgICAgIGxv
YWRlZFZhbHVlR1BSKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fdHlwZSA9
PSBMb2FkIHx8IG1fdHlwZSA9PSBHZXRHZXR0ZXIpIHsKKyAgICAgICAgICAgIHN0YXRlLnN1Y2Nl
ZWQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChPcHRp
b25zOjp1c2VET01KSVQoKSAmJiBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgJiYgdGhp
cy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5kb21KSVQoKSkgeworICAgICAgICAgICAg
YXV0byYgYWNjZXNzID0gdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKTsKKyAgICAg
ICAgICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIGVtaXQgQ2hlY2tET00gb3BlcmF0aW9uIHNpbmNl
IHN0cnVjdHVyZSBjaGVjayBlbnN1cmVzCisgICAgICAgICAgICAvLyB0aGF0IHRoZSBzdHJ1Y3R1
cmUgb2YgdGhlIGdpdmVuIGJhc2UgdmFsdWUgaXMgc3RydWN0dXJlKCkhIFNvIGFsbCB3ZSBzaG91
bGQKKyAgICAgICAgICAgIC8vIGRvIGlzIHBlcmZvcm1pbmcgdGhlIENoZWNrRE9NIHRoaW5neSBp
biBJQyBjb21waWxpbmcgdGltZSBoZXJlLgorICAgICAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5j
bGFzc0luZm8oKS0+aXNTdWJDbGFzc09mKGFjY2Vzcy5kb21KSVQoKS0+dGhpc0NsYXNzSW5mbygp
KSkgeworICAgICAgICAgICAgICAgIGFjY2Vzcy5lbWl0RE9NSklUR2V0dGVyKHN0YXRlLCBiYXNl
Rm9yR2V0R1BSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvLyBTdHVmZiBmb3IgY3VzdG9tIGdldHRlcnMvc2V0dGVycy4KKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGw7CisKKyAgICAgICAgLy8gU3R1
ZmYgZm9yIEpTIGdldHRlcnMvc2V0dGVycy4KKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFi
ZWxQdHIgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2s7CisgICAgICAgIENDYWxsSGVscGVyczo6
Q2FsbCBmYXN0UGF0aENhbGw7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENh
bGw7CisKKyAgICAgICAgLy8gVGhpcyBhbHNvIGRvZXMgdGhlIG5lY2Vzc2FyeSBjYWxjdWxhdGlv
bnMgb2Ygd2hldGhlciBvciBub3Qgd2UncmUgYW4KKyAgICAgICAgLy8gZXhjZXB0aW9uIGhhbmRs
aW5nIGNhbGwgc2l0ZS4KKyAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRl
IHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgp
OworCisgICAgICAgIGF1dG8gcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsID0g
WyZdKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSYgc3BpbGxTdGF0ZSwgYm9vbCBj
YWxsSGFzUmV0dXJuVmFsdWUpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3Jl
OworICAgICAgICAgICAgaWYgKGNhbGxIYXNSZXR1cm5WYWx1ZSkgeworICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgdGhlIHJlc3VsdCB2YWx1ZS4gV2UgZG9uJ3Qgd2FudCB0byBvdmVyd3JpdGUg
dGhlIHJlc3VsdCB3aXRoIHdoYXQgd2Ugc3RvcmVkIHRvIHRoZSBzdGFjay4KKyAgICAgICAgICAg
ICAgICAvLyBXZSBzb21ldGltZXMgaGF2ZSB0byBzdG9yZSBpdCB0byB0aGUgc3RhY2sganVzdCBp
biBjYXNlIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBhbmQgbmVlZCB0aGUgb3JpZ2luYWwgdmFsdWUu
CisgICAgICAgICAgICAgICAgZG9udFJlc3RvcmUuc2V0KHZhbHVlUmVncyk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNh
bGwoc3BpbGxTdGF0ZSwgZG9udFJlc3RvcmUpOworICAgICAgICB9OworCisgICAgICAgIGppdC5z
dG9yZTMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUuY2Fs
bFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCisgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CisKKyAgICAgICAgaWYgKG1fdHlwZSA9
PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgeworICAgICAgICAgICAgYXV0byYgYWNjZXNz
ID0gdGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKTsKKyAgICAgICAgICAgIEFTU0VS
VChiYXNlR1BSICE9IGxvYWRlZFZhbHVlR1BSKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUg
IT0gU2V0dGVyIHx8IChiYXNlR1BSICE9IHZhbHVlUmVnc1BheWxvYWRHUFIgJiYgbG9hZGVkVmFs
dWVHUFIgIT0gdmFsdWVSZWdzUGF5bG9hZEdQUikpOworCisgICAgICAgICAgICAvLyBDcmVhdGUg
YSBKUyBjYWxsIHVzaW5nIGEgSlMgY2FsbCBpbmxpbmUgY2FjaGUuIEFzc3VtZSB0aGF0OgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIC0gU1AgaXMgYWxpZ25lZCBhbmQgcmVwcmVzZW50
cyB0aGUgZXh0ZW50IG9mIHRoZSBjYWxsaW5nIGNvbXBpbGVyJ3Mgc3RhY2sgdXNhZ2UuCisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gLSBGUCBpcyBzZXQgY29ycmVjdGx5IChpLmUuIGl0
IHBvaW50cyB0byB0aGUgY2FsbGVyJ3MgY2FsbCBmcmFtZSBoZWFkZXIpLgorICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vIC0gU1AgLSBGUCBpcyBhbiBhbGlnbmVkIGRpZmZlcmVuY2UuCisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gLSBBbnkgYnl0ZSBiZXR3ZWVuIEZQIChleGNs
dXNpdmUpIGFuZCBTUCAoaW5jbHVzaXZlKSBjb3VsZCBiZSBsaXZlIGluIHRoZSBjYWxsaW5nCisg
ICAgICAgICAgICAvLyAgIGNvZGUuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhl
cmVmb3JlLCB3ZSB0ZW1wb3JhcmlseSBncm93IHRoZSBzdGFjayBmb3IgdGhlIHB1cnBvc2Ugb2Yg
dGhlIGNhbGwgYW5kIHRoZW4KKyAgICAgICAgICAgIC8vIHNocmluayBpdCBhZnRlci4KKworICAg
ICAgICAgICAgc3RhdGUuc2V0U3BpbGxTdGF0ZUZvckpTR2V0dGVyU2V0dGVyKHNwaWxsU3RhdGUp
OworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghYWNjZXNzLmNhbGxMaW5rSW5mbygpKTsK
KyAgICAgICAgICAgIGFjY2Vzcy5tX2NhbGxMaW5rSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2Fs
bExpbmtJbmZvPigpOworCisgICAgICAgICAgICAvLyBGSVhNRTogSWYgd2UgZ2VuZXJhdGVkIGEg
cG9seW1vcnBoaWMgY2FsbCBzdHViIHRoYXQganVtcGVkIGJhY2sgdG8gdGhlIGdldHRlcgorICAg
ICAgICAgICAgLy8gc3R1Yiwgd2hpY2ggdGhlbiBqdW1wZWQgYmFjayB0byB0aGUgbWFpbiBjb2Rl
LCB0aGVuIHdlJ2QgaGF2ZSBhIHJlYWNoYWJpbGl0eQorICAgICAgICAgICAgLy8gc2l0dWF0aW9u
IHRoYXQgdGhlIEdDIGRvZXNuJ3Qga25vdyBhYm91dC4gVGhlIEdDIHdvdWxkIGVuc3VyZSB0aGF0
IHRoZSBwb2x5bW9ycGhpYworICAgICAgICAgICAgLy8gY2FsbCBzdHViIHN0YXllZCBhbGl2ZSwg
YW5kIGl0IHdvdWxkIGVuc3VyZSB0aGF0IHRoZSBtYWluIGNvZGUgc3RheWVkIGFsaXZlLCBidXQK
KyAgICAgICAgICAgIC8vIGl0IHdvdWxkbid0IGtub3cgdGhhdCB0aGUgZ2V0dGVyIHN0dWIgd2Fz
IGFsaXZlLiBJZGVhbGx5IEpJVCBzdHViIHJvdXRpbmVzIHdvdWxkCisgICAgICAgICAgICAvLyBi
ZSBHQyBvYmplY3RzLCBhbmQgdGhlbiB3ZSdkIGJlIGFibGUgdG8gc2F5IHRoYXQgdGhlIHBvbHlt
b3JwaGljIGNhbGwgc3R1YiBoYXMgYQorICAgICAgICAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBn
ZXR0ZXIgc3R1Yi4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDg5MTQKKyAgICAgICAgICAgIGFjY2Vzcy5jYWxsTGlua0luZm8oKS0+ZGlz
YWxsb3dTdHVicygpOworCisgICAgICAgICAgICBhY2Nlc3MuY2FsbExpbmtJbmZvKCktPnNldFVw
Q2FsbCgKKyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm86OkNhbGwsIHN0dWJJbmZvLmNvZGVP
cmlnaW4sIGxvYWRlZFZhbHVlR1BSKTsKKworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBkb25lOworCisgICAgICAgICAgICAvLyBUaGVyZSBpcyBhICJ0aGlzIiBhcmd1bWVudC4K
KyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGFyYW1ldGVycyA9IDE7CisgICAgICAgICAg
ICAvLyAuLi4gYW5kIGEgdmFsdWUgYXJndW1lbnQgaWYgd2UncmUgY2FsbGluZyBhIHNldHRlci4K
KyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKQorICAgICAgICAgICAgICAgIG51bWJl
ck9mUGFyYW1ldGVycysrOworCisgICAgICAgICAgICAvLyBHZXQgdGhlIGFjY2Vzc29yOyBpZiB0
aGVyZSBhaW4ndCBvbmUgdGhlbiB0aGUgcmVzdWx0IGlzIGpzVW5kZWZpbmVkKCkuCisgICAgICAg
ICAgICBpZiAobV90eXBlID09IFNldHRlcikgeworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRy
KAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobG9hZGVkVmFsdWVH
UFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSksCisgICAgICAgICAgICAgICAgICAg
IGxvYWRlZFZhbHVlR1BSKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
aml0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhs
b2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZkdldHRlcigpKSwKKyAgICAgICAg
ICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgcmV0dXJuVW5kZWZpbmVkID0gaml0LmJyYW5jaFRlc3RQdHIo
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBsb2FkZWRWYWx1ZUdQUik7CisK
KyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPSBDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVycyArIG51bWJlck9mUGFyYW1ldGVyczsKKyAgICAgICAgICAgIHVu
c2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0gbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVv
ZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CisKKyAgICAgICAgICAgIHVu
c2lnbmVkIGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9CisgICAgICAgICAgICBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9y
Q2FsbCk7CisKKyAgICAgICAgICAgIGppdC5zdWJQdHIoCisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIsCisgICAgICAgICAgICAgICAgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSk7CisKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyksCisgICAg
ICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsKKworICAgICAgICAg
ICAgaml0LnN0b3JlQ2VsbCgKKyAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiwgY2FsbGVl
RnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIp
KSk7CisKKyAgICAgICAgICAgIGppdC5zdG9yZUNlbGwoCisgICAgICAgICAgICAgICAgYmFzZUdQ
UiwKKyAgICAgICAgICAgICAgICBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDApLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworCisgICAgICAg
ICAgICBpZiAobV90eXBlID09IFNldHRlcikgeworICAgICAgICAgICAgICAgIGppdC5zdG9yZVZh
bHVlKAorICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAgICAg
IGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoCisgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dDYXNlID0g
aml0LmJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2ssCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsKKworICAgICAgICAg
ICAgZmFzdFBhdGhDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICBpZiAobV90eXBl
ID09IEdldHRlcikKKyAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7
CisgICAgICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICAgICAgc2xv
d0Nhc2UubGluaygmaml0KTsKKyAgICAgICAgICAgIGppdC5tb3ZlKGxvYWRlZFZhbHVlR1BSLCBH
UFJJbmZvOjpyZWdUMCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgIC8vIFdl
ICphbHdheXMqIGtub3cgdGhhdCB0aGUgZ2V0dGVyL3NldHRlciwgaWYgbm9uLW51bGwsIGlzIGEg
Y2VsbC4KKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7CisjZW5kaWYKKyAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihhY2Nlc3MuY2FsbExpbmtJbmZvKCkp
LCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICBzbG93UGF0aENhbGwgPSBqaXQubmVhckNh
bGwoKTsKKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyKQorICAgICAgICAgICAgICAg
IGppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKGpp
dC5qdW1wKCkpOworCisgICAgICAgICAgICByZXR1cm5VbmRlZmluZWQubGluaygmaml0KTsKKyAg
ICAgICAgICAgIGlmIChtX3R5cGUgPT0gR2V0dGVyKQorICAgICAgICAgICAgICAgIGppdC5tb3Zl
VHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIHZhbHVlUmVncyk7CisKKyAgICAgICAgICAgIGRv
bmUubGluaygmaml0KTsKKworICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlcikpIC0gc3RhdGUucHJlc2VydmVkUmV1c2VkUmVnaXN0ZXJTdGF0ZS5udW1iZXJPZkJ5dGVz
UHJlc2VydmVkIC0gc3BpbGxTdGF0ZS5udW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQ
cmVzZXJ2YXRpb24pLAorICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGJvb2wg
Y2FsbEhhc1JldHVyblZhbHVlID0gaXNHZXR0ZXIoKTsKKyAgICAgICAgICAgIHJlc3RvcmVMaXZl
UmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRlLCBjYWxsSGFzUmV0dXJuVmFsdWUp
OworCisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICB0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlPigpLmNhbGxMaW5rSW5mbygpLT5zZXRDYWxsTG9jYXRpb25zKAorICAgICAgICAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbChsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93
UGF0aENhbGwpKSwKKyAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlua0J1
ZmZlci5sb2NhdGlvbk9mKGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrKSksCisgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RQYXRoQ2FsbCkpOwor
CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAorICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aENhbGwsCisgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdl
dENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQ3VzdG9t
VmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyIHx8IG1fdHlwZSA9
PSBDdXN0b21WYWx1ZVNldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOwor
CisgICAgICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIEMgY2FsbCBzbyBhbnkg
b2Ygb3VyIHN0YWNrIHNwaWxsYWdlIGlzbid0IG92ZXJ3cml0dGVuLiBJdCdzCisgICAgICAgICAg
ICAvLyBoYXJkIHRvIHRyYWNrIGlmIHNvbWVvbmUgZGlkIHNwaWxsYWdlIG9yIG5vdCwgc28gd2Ug
anVzdCBhc3N1bWUgdGhhdCB3ZSBhbHdheXMgbmVlZAorICAgICAgICAgICAgLy8gdG8gbWFrZSBz
b21lIHNwYWNlIGhlcmUuCisgICAgICAgICAgICBqaXQubWFrZVNwYWNlT25TdGFja0ZvckNDYWxs
KCk7CisKKyAgICAgICAgICAgIC8vIGdldHRlcjogRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1
bmMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsK
KyAgICAgICAgICAgIC8vIHNldHRlcjogdm9pZCAoKlB1dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgdGhpc09iamVjdCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpOworICAgICAg
ICAgICAgLy8gQ3VzdG9tIHZhbHVlcyBhcmUgcGFzc2VkIHRoZSBzbG90QmFzZSAodGhlIHByb3Bl
cnR5IGhvbGRlciksIGN1c3RvbSBhY2Nlc3NvcnMgYXJlIHBhc3NlZCB0aGUgdGhpc1ZhdWxlIChy
ZWNpZXZlcikuCisgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgZGlmZmVyZW5jZXMg
aW4gY3VzdG9tIHZhbHVlcyBhbmQgY3VzdG9tIGFjY2Vzc29ycy4KKyAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgwMTQKKyAgICAgICAgICAg
IEdQUlJlZyBiYXNlRm9yQ3VzdG9tVmFsdWUgPSBtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIg
fHwgbV90eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyID8gYmFzZUZvckFjY2Vzc0dQUiA6IGJhc2VG
b3JHZXRHUFI7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGlmIChtX3R5cGUgPT0g
Q3VzdG9tVmFsdWVHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyKSB7Cisg
ICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAg
ICAgICAgICAgICAgYmFzZUZvckN1c3RvbVZhbHVlLAorICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaWRlbnQuaW1wbCgpKSk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VG
b3JDdXN0b21WYWx1ZSwgdmFsdWVSZWdzLmdwcigpKTsKKyNlbHNlCisgICAgICAgICAgICBpZiAo
bV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3Nvckdl
dHRlcikgeworICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
CisgICAgICAgICAgICAgICAgICAgIEVBQklfMzJCSVRfRFVNTVlfQVJHIGJhc2VGb3JDdXN0b21W
YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZyksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihpZGVudC5pbXBsKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICAg
ICAgRUFCSV8zMkJJVF9EVU1NWV9BUkcgYmFzZUZvckN1c3RvbVZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzLnRhZ0dQ
UigpKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0udG9wQ2FsbEZyYW1lKTsKKworICAgICAgICAg
ICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKHRoaXMtPmFzPEdldHRlclNldHRl
ckFjY2Vzc0Nhc2U+KCkubV9jdXN0b21BY2Nlc3Nvci5vcGFxdWUpKTsKKyAgICAgICAgICAgIH0p
OworCisgICAgICAgICAgICBpZiAobV90eXBlID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlw
ZSA9PSBDdXN0b21BY2Nlc3NvckdldHRlcikKKyAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1
bHRzKHZhbHVlUmVncyk7CisgICAgICAgICAgICBqaXQucmVjbGFpbVNwYWNlT25TdGFja0ZvckND
YWxsKCk7CisKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBub0V4Y2VwdGlvbiA9Cisg
ICAgICAgICAgICBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVyczo6SW52ZXJ0ZWRF
eGNlcHRpb25DaGVjayk7CisKKyAgICAgICAgICAgIHN0YXRlLnJlc3RvcmVMaXZlUmVnaXN0ZXJz
RnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNlcHRpb24oc3BpbGxTdGF0ZSk7CisgICAgICAg
ICAgICBzdGF0ZS5lbWl0RXhwbGljaXRFeGNlcHRpb25IYW5kbGVyKCk7CisKKyAgICAgICAgICAg
IG5vRXhjZXB0aW9uLmxpbmsoJmppdCk7CisgICAgICAgICAgICBib29sIGNhbGxIYXNSZXR1cm5W
YWx1ZSA9IGlzR2V0dGVyKCk7CisgICAgICAgICAgICByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21T
dGFja0ZvckNhbGwoc3BpbGxTdGF0ZSwgY2FsbEhhc1JldHVyblZhbHVlKTsKKyAgICAgICAgfQor
ICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBj
YXNlIFJlcGxhY2U6IHsKKyAgICAgICAgaWYgKEluZmVycmVkVHlwZSogdHlwZSA9IHN0cnVjdHVy
ZSgpLT5pbmZlcnJlZFR5cGVGb3IoaWRlbnQuaW1wbCgpKSkgeworICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNj
cmlwdG9yKCksICJcbiIpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5k
KAorICAgICAgICAgICAgICAgIGppdC5icmFuY2hJZk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNo
R1BSLCB0eXBlLT5kZXNjcmlwdG9yKCkpKTsKKyAgICAgICAgfSBlbHNlIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZygiRG9uJ3QgaGF2ZSB0eXBlLlxuIik7CisKKyAgICAgICAgaWYg
KGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0KSkgeworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUo
CisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAg
ICAgICAgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsKKyAgICAgICAgICAgICAg
ICAgICAgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVS
ZWdzLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAg
ICAgICAgICAgc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9vZmZzZXQpICogc2l6ZW9m
KEpTVmFsdWUpKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUuc3VjY2VlZCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBUcmFuc2l0aW9uOiB7CisgICAgICAgIC8vIEFj
Y2Vzc0Nhc2U6OnRyYW5zaXRpb24oKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBudWxsIGlmIHRoaXMg
d2Fzbid0IHRydWUuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzID49IDYgfHwgIXN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpIHx8IHN0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKTsKKworICAgICAgICBpZiAoSW5mZXJyZWRUeXBlKiB0eXBlID0gbmV3U3RydWN0
dXJlKCktPmluZmVycmVkVHlwZUZvcihpZGVudC5pbXBsKCkpKSB7CisgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYXZlIHR5cGU6ICIsIHR5cGUtPmRl
c2NyaXB0b3IoKSwgIlxuIik7CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBl
bmQoCisgICAgICAgICAgICAgICAgaml0LmJyYW5jaElmTm90VHlwZSh2YWx1ZVJlZ3MsIHNjcmF0
Y2hHUFIsIHR5cGUtPmRlc2NyaXB0b3IoKSkpOworICAgICAgICB9IGVsc2UgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICBkYXRhTG9nKCJEb24ndCBoYXZlIHR5cGUuXG4iKTsKKworICAgICAgICAv
LyBOT1RFOiBUaGlzIGxvZ2ljIGlzIGR1cGxpY2F0ZWQgaW4gQWNjZXNzQ2FzZTo6ZG9lc0NhbGxz
KCkuIEl0J3MgaW1wb3J0YW50IHRoYXQgZG9lc0NhbGxzKCkga25vd3MKKyAgICAgICAgLy8gZXhh
Y3RseSB3aGVuIHRoaXMgd291bGQgbWFrZSBjYWxscy4KKyAgICAgICAgYm9vbCBhbGxvY2F0aW5n
ID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCk7CisgICAgICAgIGJvb2wgcmVhbGxvY2F0aW5nID0gYWxsb2NhdGlu
ZyAmJiBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAgICAgYm9vbCBhbGxv
Y2F0aW5nSW5saW5lID0gYWxsb2NhdGluZyAmJiAhc3RydWN0dXJlKCktPmNvdWxkSGF2ZUluZGV4
aW5nSGVhZGVyKCk7CisKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRv
cihzdHViSW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxvY2so
YmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgYWxsb2NhdG9yLmxvY2so
c3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5iYXNlVGFnR1BSKSk7CisjZW5kaWYK
KyAgICAgICAgYWxsb2NhdG9yLmxvY2sodmFsdWVSZWdzKTsKKyAgICAgICAgYWxsb2NhdG9yLmxv
Y2soc2NyYXRjaEdQUik7CisKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gSW52YWxpZEdQUlJlZzsKKyAgICAg
ICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUpIHsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIyID0gYWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICAgICAgc2NyYXRjaEdQUjMgPSBh
bGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIH0KKworICAgICAgICBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0KKyAg
ICAgICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOwor
CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAgICAgQVNT
RVJUKHN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRl
ZCgpKTsKKworICAgICAgICBpZiAoYWxsb2NhdGluZykgeworICAgICAgICAgICAgc2l6ZV90IG5l
d1NpemUgPSBuZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1Zh
bHVlKTsKKworICAgICAgICAgICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUpIHsKKyAgICAgICAgICAg
ICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHZtLmF1eGlsaWFyeVNwYWNlLmFsbG9j
YXRvckZvcihuZXdTaXplKTsKKworICAgICAgICAgICAgICAgIGlmICghYWxsb2NhdG9yKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFl1Y2ssIHRoaXMgY2FzZSB3b3VsZCBzdWNrIQorICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGFsbG9jYXRvciksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICBqaXQuZW1pdEFs
bG9jYXRlKHNjcmF0Y2hHUFIsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBz
bG93UGF0aCk7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOwor
CisgICAgICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV3
U2l6ZSA+IG9sZFNpemUpOworCisgICAgICAgICAgICAgICAgaWYgKHJlYWxsb2NhdGluZykgewor
ICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIHJlYWxs
b2NhdGluZyAoaS5lLiB0aGUgb2xkIHN0cnVjdHVyZS9idXR0ZXJmbHkKKyAgICAgICAgICAgICAg
ICAgICAgLy8gYWxyZWFkeSBoYWQgb3V0LW9mLWxpbmUgcHJvcGVydHkgc3RvcmFnZSkuCisKKyAg
ICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKKworICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIgPSBuZXcgc3RvcmFnZSwgc2NyYXRj
aEdQUjMgPSBvbGQgc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgLy8gc2NyYXRjaEdQUjIg
PSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsg
b2Zmc2V0IDwgb2xkU2l6ZTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Ny
YXRjaEdQUjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsg
c2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0
cigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSMiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNp
emVvZih2b2lkKikpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSBvbGRTaXplOyBvZmZzZXQg
PCBuZXdTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkKKyAgICAgICAgICAgICAgICAgICAg
aml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCArIHNp
emVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgYWxsb2NhdGlu
ZyBvdXQtb2YtbGluZSB1c2luZyBhbiBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgUmVnaXN0
ZXJTZXQgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlOworICAgICAgICAgICAgICAgIGV4dHJhUmVn
aXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoYmFzZUdQUik7CisgICAgICAgICAgICAgICAgZXh0cmFSZWdp
c3RlcnNUb1ByZXNlcnZlLnNldCh2YWx1ZVJlZ3MpOworICAgICAgICAgICAgICAgIEFjY2Vzc0dl
bmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZl
UmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoCisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0
cygpKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNrRm9yQ0Nh
bGwoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIXJlYWxsb2NhdGlu
ZykgeworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGJhc2VHUFIpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAg
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
dW5jdGlvblB0cihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9y
YWdlV2l0aEluaXRpYWxDYXBhY2l0eSkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNh
c2Ugd2hlcmUgd2UgYXJlIHJlYWxsb2NhdGluZyAoaS5lLiB0aGUgb2xkIHN0cnVjdHVyZS9idXR0
ZXJmbHkKKyAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBoYWQgb3V0LW9mLWxpbmUgcHJv
cGVydHkgc3RvcmFnZSkuCisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0
aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFz
ayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25D
YWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblJl
YWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UpKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGppdC5yZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKKyAgICAgICAgICAgICAg
ICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vRXhjZXB0aW9u
ID0gaml0LmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9u
Q2hlY2spOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0YXRlLnJlc3RvcmVM
aXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNlcHRpb24oc3BpbGxTdGF0
ZSk7CisgICAgICAgICAgICAgICAgc3RhdGUuZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcigp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vRXhjZXB0aW9uLmxpbmsoJmpp
dCk7CisgICAgICAgICAgICAgICAgc3RhdGUucmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tG
b3JDYWxsKHNwaWxsU3RhdGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQobV9vZmZzZXQpKSB7CisgICAgICAgICAgICBqaXQu
c3RvcmVWYWx1ZSgKKyAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAorICAg
ICAgICAgICAgICAgICAgICBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKworICAg
ICAgICAgICAgICAgICAgICBvZmZzZXRJbklubGluZVN0b3JhZ2UobV9vZmZzZXQpICogc2l6ZW9m
KEpTVmFsdWUpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIWFsbG9jYXRp
bmcpCisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgaml0LnN0b3JlVmFsdWUoCisgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRl
cmZseShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKGFsbG9jYXRpbmdJbmxpbmUpIHsKKyAgICAgICAgICAgIC8vIFdlIHNldCB0
aGUgbmV3IGJ1dHRlcmZseSBhbmQgdGhlIHN0cnVjdHVyZSBsYXN0LiBEb2luZyBpdCB0aGlzIHdh
eSBlbnN1cmVzIHRoYXQKKyAgICAgICAgICAgIC8vIHdoYXRldmVyIHdlIGhhZCBkb25lIHVwIHRv
IHRoaXMgcG9pbnQgaXMgZm9yZ290dGVuIGlmIHdlIGNob29zZSB0byBicmFuY2ggdG8gc2xvdwor
ICAgICAgICAgICAgLy8gcGF0aC4KKyAgICAgICAgICAgIGppdC5udWtlU3RydWN0dXJlQW5kU3Rv
cmVCdXR0ZXJmbHkoc2NyYXRjaEdQUiwgYmFzZUdQUik7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHVpbnQzMl90IHN0cnVjdHVyZUJpdHMgPSBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KG5l
d1N0cnVjdHVyZSgpLT5pZCgpKTsKKyAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdHJ1Y3R1cmVCaXRzKSwKKyAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
KTsKKyAgICAgICAgCisgICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQ
b3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7Cisg
ICAgICAgIAorICAgICAgICAvLyBXZSB3aWxsIGhhdmUgYSBzbG93IHBhdGggaWYgd2Ugd2VyZSBh
bGxvY2F0aW5nIHdpdGhvdXQgdGhlIGhlbHAgb2YgYW4gb3BlcmF0aW9uLgorICAgICAgICBpZiAo
YWxsb2NhdGluZ0lubGluZSkgeworICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVzZVJl
Z2lzdGVycygpKSB7CisgICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICAg
ICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQs
IHByZXNlcnZlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFw
cGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHN0
YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKHNsb3dQYXRoKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93UGF0aC5lbXB0eSgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheUxlbmd0aDogeworICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoCisgICAgICAgICAg
ICBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgaml0LmJveEludDMyKHNjcmF0Y2hH
UFIsIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBTdHJpbmdMZW5ndGg6IHsKKyAgICAgICAgaml0
LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9m
TGVuZ3RoKCkpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgaml0LmJveEludDMy
KHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncyk7CisgICAgICAgIHN0YXRlLnN1Y2Nl
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBJbnRyaW5z
aWNHZXR0ZXI6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQo
KSkpOworICAgICAgICAKKyAgICAgICAgLy8gV2UgbmVlZCB0byBlbnN1cmUgdGhlIGdldHRlciB2
YWx1ZSBkb2VzIG5vdCBtb3ZlIGZyb20gdW5kZXIgdXMuIE5vdGUgdGhhdCBHZXR0ZXJTZXR0ZXJz
CisgICAgICAgIC8vIGFyZSBpbW11dGFibGUgc28gd2UganVzdCBuZWVkIHRvIHdhdGNoIHRoZSBw
cm9wZXJ0eSBub3QgYW55IHZhbHVlIGluc2lkZSBpdC4KKyAgICAgICAgU3RydWN0dXJlKiBjdXJy
U3RydWN0dXJlOworICAgICAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZSgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBjdXJyU3RydWN0dXJlID0gbV9jb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5v
YmplY3QoKS0+c3RydWN0dXJlKCk7CisgICAgICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hp
bmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgb2Zmc2V0KCkpOworICAgICAgICAKKyAgICAg
ICAgdGhpcy0+YXM8SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZT4oKS5lbWl0SW50cmluc2ljR2V0
dGVyKHN0YXRlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBE
aXJlY3RBcmd1bWVudHNMZW5ndGg6CisgICAgY2FzZSBTY29wZWRBcmd1bWVudHNMZW5ndGg6Cisg
ICAgICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgaGFuZGxlZCBieSBnZW5lcmF0ZVdpdGhHdWFyZCgp
LCBzaW5jZSB0aGUgZ3VhcmQgaXMgcGFydCBvZiB0aGUKKyAgICAgICAgLy8gYWxnb3JpdGhtLiBX
ZSBjYW4gYmUgc3VyZSB0aGF0IG5vYm9keSB3aWxsIGNhbGwgZ2VuZXJhdGUoKSBkaXJlY3RseSBm
b3IgdGhlc2Ugc2luY2UgdGhleQorICAgICAgICAvLyBhcmUgbm90IGd1YXJkZWQgYnkgc3RydWN0
dXJlIGNoZWNrcy4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjllMWFkZjk3NTI0YzUzMTc2NjdhMDgwMzZjYmU1NzY0ZTcz
MmQwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmgKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShKSVQpCisKKyNp
bmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgorI2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlv
blN0YXRlOworCisvLyBBbiBBY2Nlc3NDYXNlIGRlc2NyaWJlcyBvbmUgb2YgdGhlIGNhc2VzIG9m
IGEgUG9seW1vcnBoaWNBY2Nlc3MuIEEgUG9seW1vcnBoaWNBY2Nlc3MgcmVwcmVzZW50cyBhCisv
LyBwbGFubmVkICh0byBnZW5lcmF0ZSBpbiBmdXR1cmUpIG9yIGdlbmVyYXRlZCBzdHViIGZvciBz
b21lIGlubGluZSBjYWNoZS4gVGhhdCBzdHViIGNvbnRhaW5zIGZhc3QKKy8vIHBhdGggY29kZSBm
b3Igc29tZSBmaW5pdGUgbnVtYmVyIG9mIGZhc3QgY2FzZXMsIGVhY2ggZGVzY3JpYmVkIGJ5IGFu
IEFjY2Vzc0Nhc2Ugb2JqZWN0LgorLy8KKy8vIEFuIEFjY2Vzc0Nhc2Ugb2JqZWN0IGhhcyBhIGxp
ZmVjeWNsZSB0aGF0IHByb2NlZWRzIHRocm91Z2ggc2V2ZXJhbCBzdGF0ZXMuIE5vdGUgdGhhdCB0
aGUgc3RhdGVzCisvLyBvZiBBY2Nlc3NDYXNlIGhhdmUgYSBsb3QgdG8gZG8gd2l0aCB0aGUgZ2xv
YmFsIGVmZmVjdCBlcG9jaCAod2UnbGwgc2F5IGVwb2NoIGZvciBzaG9ydCkuIFRoaXMgaXMKKy8v
IGEgc2ltcGxlIHdheSBvZiByZWFzb25pbmcgYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSBzeXN0ZW0g
b3V0c2lkZSB0aGlzIEFjY2Vzc0Nhc2UuIEFueSBvYnNlcnZhYmxlCisvLyBlZmZlY3QgLSBsaWtl
IHN0b3JpbmcgdG8gYSBwcm9wZXJ0eSwgY2hhbmdpbmcgYW4gb2JqZWN0J3Mgc3RydWN0dXJlLCBl
dGMuIC0gaW5jcmVtZW50cyB0aGUgZXBvY2guCisvLyBUaGUgc3RhdGVzIGFyZToKKy8vCisvLyBQ
cmltb3JkaWFsOiAgIFRoaXMgaXMgYW4gQWNjZXNzQ2FzZSB0aGF0IHdhcyBqdXN0IGFsbG9jYXRl
ZC4gSXQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbnkgYWN0dWFsCisvLyAgICAgICAgICAgICAg
IGNvZGUgYW5kIGl0IGlzIG5vdCBvd25lZCBieSBhbnkgUG9seW1vcnBoaWNBY2Nlc3MuIEluIHRo
aXMgc3RhdGUsIHRoZSBBY2Nlc3NDYXNlCisvLyAgICAgICAgICAgICAgIGFzc3VtZXMgdGhhdCBp
dCBpcyBpbiB0aGUgc2FtZSBlcG9jaCBhcyB3aGVuIGl0IHdhcyBjcmVhdGVkLiBUaGlzIGlzIGlt
cG9ydGFudAorLy8gICAgICAgICAgICAgICBiZWNhdXNlIGl0IG1heSBtYWtlIGNsYWltcyBhYm91
dCBpdHNlbGYgKCJJIHJlcHJlc2VudCBhIHZhbGlkIGNhc2Ugc28gbG9uZyBhcyB5b3UKKy8vICAg
ICAgICAgICAgICAgcmVnaXN0ZXIgYSB3YXRjaHBvaW50IG9uIHRoaXMgc2V0IikgdGhhdCBjb3Vs
ZCBiZSBjb250cmFkaWN0ZWQgYnkgc29tZSBvdXRzaWRlCisvLyAgICAgICAgICAgICAgIGVmZmVj
dHMgKGxpa2UgZmlyaW5nIGFuZCBkZWxldGluZyB0aGUgd2F0Y2hwb2ludCBzZXQgaW4gcXVlc3Rp
b24pLiBUaGlzIGlzIGFsc28gdGhlCisvLyAgICAgICAgICAgICAgIHN0YXRlIHRoYXQgYW4gQWNj
ZXNzQ2FzZSBpcyBpbiB3aGVuIGl0IGlzIGNsb25lZCAoQWNjZXNzQ2FzZTo6Y2xvbmUoKSkuCisv
LworLy8gQ29tbWl0dGVkOiAgICBUaGlzIGhhcHBlbnMgYXMgc29vbiBhcyBzb21lIFBvbHltb3Jw
aGljQWNjZXNzIHRha2VzIG93bmVyc2hpcCBvZiB0aGlzIEFjY2Vzc0Nhc2UuCisvLyAgICAgICAg
ICAgICAgIEluIHRoaXMgc3RhdGUsIHRoZSBBY2Nlc3NDYXNlIG5vIGxvbmdlciBhc3N1bWVzIGFu
eXRoaW5nIGFib3V0IHRoZSBlcG9jaC4gVG8KKy8vICAgICAgICAgICAgICAgYWNjb21wbGlzaCB0
aGlzLCBQb2x5bW9ycGhpY0FjY2VzcyBjYWxscyBBY2Nlc3NDYXNlOjpjb21taXQoKS4gVGhpcyBt
dXN0IGJlIGRvbmUKKy8vICAgICAgICAgICAgICAgZHVyaW5nIHRoZSBzYW1lIGVwb2NoIHdoZW4g
dGhlIEFjY2Vzc0Nhc2Ugd2FzIGNyZWF0ZWQsIGVpdGhlciBieSB0aGUgY2xpZW50IG9yIGJ5Cisv
LyAgICAgICAgICAgICAgIGNsb25lKCkuIFdoZW4gY3JlYXRlZCBieSB0aGUgY2xpZW50LCBjb21t
aXR0aW5nIGR1cmluZyB0aGUgc2FtZSBlcG9jaCB3b3JrcyBiZWNhdXNlCisvLyAgICAgICAgICAg
ICAgIHdlIGNhbiBiZSBzdXJlIHRoYXQgd2hhdGV2ZXIgd2F0Y2hwb2ludCBzZXRzIHRoZXkgc3Bv
a2Ugb2YgYXJlIHN0aWxsIHZhbGlkLiBXaGVuCisvLyAgICAgICAgICAgICAgIGNyZWF0ZWQgYnkg
Y2xvbmUoKSwgd2UgY2FuIGJlIHN1cmUgdGhhdCB0aGUgc2V0IGlzIHN0aWxsIHZhbGlkIGJlY2F1
c2UgdGhlIG9yaWdpbmFsCisvLyAgICAgICAgICAgICAgIG9mIHRoZSBjbG9uZSBzdGlsbCBoYXMg
d2F0Y2hwb2ludHMgb24gaXQuCisvLworLy8gR2VuZXJhdGVkOiAgICBUaGlzIGlzIHRoZSBzdGF0
ZSB3aGVuIHRoZSBQb2x5bW9ycGhpY0FjY2VzcyBnZW5lcmF0ZXMgY29kZSBmb3IgdGhpcyBjYXNl
IGJ5CisvLyAgICAgICAgICAgICAgIGNhbGxpbmcgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoKSBvciBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgpLiBBdCB0aGlzIHBvaW50CisvLyAgICAgICAg
ICAgICAgIHRoZSBjYXNlIG9iamVjdCB3aWxsIGhhdmUgc29tZSBleHRyYSBzdHVmZiBpbiBpdCwg
bGlrZSBwb3NzaWJseSB0aGUgQ2FsbExpbmtJbmZvCisvLyAgICAgICAgICAgICAgIG9iamVjdCBh
c3NvY2lhdGVkIHdpdGggdGhlIGlubGluZSBjYWNoZS4KKy8vICAgICAgICAgICAgICAgRklYTUU6
IE1vdmluZyBpbnRvIHRoZSBHZW5lcmF0ZWQgc3RhdGUgc2hvdWxkIG5vdCBtdXRhdGUgdGhlIEFj
Y2Vzc0Nhc2Ugb2JqZWN0IG9yCisvLyAgICAgICAgICAgICAgIHB1dCBtb3JlIHN0dWZmIGludG8g
aXQuIElmIHdlIGZpeCB0aGlzLCB0aGVuIHdlIGNhbiBnZXQgcmlkIG9mIEFjY2Vzc0Nhc2U6OmNs
b25lKCkuCisvLyAgICAgICAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTY0NTYKKy8vCisvLyBBbiBBY2Nlc3NDYXNlIG1heSBiZSBkZXN0cm95ZWQgd2hp
bGUgaW4gYW55IG9mIHRoZXNlIHN0YXRlcy4KKy8vCisvLyBXZSB3aWxsIHNvbWV0aW1lcyBidWZm
ZXIgY29tbWl0dGVkIEFjY2Vzc0Nhc2VzIGluIHRoZSBQb2x5bW9ycGhpY0FjY2VzcyBvYmplY3Qg
YmVmb3JlIGdlbmVyYXRpbmcKKy8vIGNvZGUuIFRoaXMgYWxsb3dzIHVzIHRvIG9ubHkgcmVnZW5l
cmF0ZSBvbmNlIHdlJ3ZlIGFjY3VtdWxhdGVkIChob3BlZnVsbHkpIG1vcmUgdGhhbiBvbmUgbmV3
CisvLyBBY2Nlc3NDYXNlLgorY2xhc3MgQWNjZXNzQ2FzZSB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgZW51bSBBY2Nlc3NUeXBlIDogdWludDhfdCB7CisgICAg
ICAgIExvYWQsCisgICAgICAgIFRyYW5zaXRpb24sCisgICAgICAgIFJlcGxhY2UsCisgICAgICAg
IE1pc3MsCisgICAgICAgIEdldEdldHRlciwKKyAgICAgICAgR2V0dGVyLAorICAgICAgICBTZXR0
ZXIsCisgICAgICAgIEN1c3RvbVZhbHVlR2V0dGVyLAorICAgICAgICBDdXN0b21BY2Nlc3Nvckdl
dHRlciwKKyAgICAgICAgQ3VzdG9tVmFsdWVTZXR0ZXIsCisgICAgICAgIEN1c3RvbUFjY2Vzc29y
U2V0dGVyLAorICAgICAgICBJbnRyaW5zaWNHZXR0ZXIsCisgICAgICAgIEluSGl0LAorICAgICAg
ICBJbk1pc3MsCisgICAgICAgIEFycmF5TGVuZ3RoLAorICAgICAgICBTdHJpbmdMZW5ndGgsCisg
ICAgICAgIERpcmVjdEFyZ3VtZW50c0xlbmd0aCwKKyAgICAgICAgU2NvcGVkQXJndW1lbnRzTGVu
Z3RoCisgICAgfTsKKworICAgIGVudW0gU3RhdGUgOiB1aW50OF90IHsKKyAgICAgICAgUHJpbW9y
ZGlhbCwKKyAgICAgICAgQ29tbWl0dGVkLAorICAgICAgICBHZW5lcmF0ZWQKKyAgICB9OworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUJiBhcygpIHsgcmV0dXJuICpzdGF0aWNfY2Fz
dDxUKj4odGhpcyk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCYg
YXMoKSBjb25zdCB7IHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgVCo+KHRoaXMpOyB9CisKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFjY2Vzc0Nhc2VUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlVHlwZT4gY3JlYXRlKEFy
Z3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2VUeXBlPihuZXcgQWNjZXNzQ2FzZVR5cGUoYXJndW1lbnRzLi4uKSk7Cisg
ICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0m
LCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNldCA9IGludmFsaWRPZmZz
ZXQsCisgICAgICAgIFN0cnVjdHVyZSogPSBudWxscHRyLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKKworICAgIC8vIFRo
aXMgY3JlYXRlIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBmb3IgdHJhbnNpdGlvbnMuCisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwqIG93bmVy
LCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCisgICAgICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFZNJiwgSlNDZWxsKiBvd25lciwg
U3RydWN0dXJlU3R1YkluZm8mKTsKKworICAgIEFjY2Vzc1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZTsgfQorICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsg
fQorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9
CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
bV90eXBlID09IFRyYW5zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUtPnBy
ZXZpb3VzSUQoKTsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOworICAgIH0KKyAg
ICBib29sIGd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgY29uc3Q7CisKKyAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IFRy
YW5zaXRpb24pOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorCisg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1
cm4gbV9jb25kaXRpb25TZXQ7IH0KKworICAgIHZpcnR1YWwgSlNPYmplY3QqIGFsdGVybmF0ZUJh
c2UoKSBjb25zdCB7IHJldHVybiBjb25kaXRpb25TZXQoKS5zbG90QmFzZUNvbmRpdGlvbigpLm9i
amVjdCgpOyB9CisgICAgdmlydHVhbCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0KCkgY29u
c3QgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgYm9vbCB2aWFQcm94eSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAvLyBJZiB5b3Ugc3VwcGx5IHRoZSBvcHRpb25hbCB2
ZWN0b3IsIHRoaXMgd2lsbCBhcHBlbmQgdGhlIHNldCBvZiBjZWxscyB0aGF0IHRoaXMgd2lsbCBu
ZWVkIHRvIGtlZXAgYWxpdmUKKyAgICAvLyBwYXN0IHRoZSBjYWxsLgorICAgIGJvb2wgZG9lc0Nh
bGxzKFZlY3RvcjxKU0NlbGwqPiogY2VsbHNUb01hcmsgPSBudWxscHRyKSBjb25zdDsKKworICAg
IGJvb2wgaXNHZXR0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsK
KyAgICAgICAgY2FzZSBHZXR0ZXI6CisgICAgICAgIGNhc2UgQ3VzdG9tVmFsdWVHZXR0ZXI6Cisg
ICAgICAgIGNhc2UgQ3VzdG9tQWNjZXNzb3JHZXR0ZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGJvb2wgaXNBY2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIGlzR2V0dGVy
KCkgfHwgdHlwZSgpID09IFNldHRlcjsgfQorCisgICAgLy8gSXMgaXQgc3RpbGwgcG9zc2libGUg
Zm9yIHRoaXMgY2FzZSB0byBldmVyIGJlIHRha2VuPyBNdXN0IGNhbGwgdGhpcyBhcyBhIHByZXJl
cXVpc2l0ZSBmb3IKKyAgICAvLyBjYWxsaW5nIGdlbmVyYXRlKCkgYW5kIGZyaWVuZHMuIElmIHRo
aXMgcmV0dXJucyB0cnVlLCB0aGVuIHlvdSBjYW4gY2FsbCBnZW5lcmF0ZSgpLiBJZgorICAgIC8v
IHRoaXMgcmV0dXJucyBmYWxzZSwgdGhlbiBnZW5lcmF0ZSgpIHdpbGwgY3Jhc2guIFlvdSBtdXN0
IGNhbGwgZ2VuZXJhdGUoKSBpbiB0aGUgc2FtZSBlcG9jaAorICAgIC8vIGFzIHdoZW4geW91IGNh
bGxlZCBjb3VsZFN0aWxsU3VjY2VlZCgpLgorICAgIGJvb2wgY291bGRTdGlsbFN1Y2NlZWQoKSBj
b25zdDsKKworICAgIC8vIElmIHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhlbiBpdCdzIGEg
Z29vZCBpZGVhIHRvIHJlbW92ZSAnb3RoZXInIGZyb20gdGhlIGFjY2VzcyBvbmNlICd0aGlzJwor
ICAgIC8vIGlzIGFkZGVkLiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgaW4gY2FzZSBvZiBjb250
cmFkaWN0aW9ucywgJ3RoaXMnIHJlcHJlc2VudHMgYSBuZXdlciwgYW5kIHNvCisgICAgLy8gbW9y
ZSB1c2VmdWwsIHRydXRoLiBUaGlzIG1ldGhvZCBjYW4gYmUgY29uc2VydmF0aXZlOyBpdCB3aWxs
IHJldHVybiBmYWxzZSB3aGVuIGl0IGRvdWJ0LgorICAgIGJvb2wgY2FuUmVwbGFjZShjb25zdCBB
Y2Nlc3NDYXNlJiBvdGhlcikgY29uc3Q7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJiwgQ29tbWFQ
cmludGVyJikgY29uc3QgeyB9CisKKyAgICB2aXJ0dWFsIH5BY2Nlc3NDYXNlKCk7CisKK3Byb3Rl
Y3RlZDoKKyAgICBBY2Nlc3NDYXNlKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUHJv
cGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
Jik7CisgICAgQWNjZXNzQ2FzZShjb25zdCBBY2Nlc3NDYXNlJikgPSBkZWZhdWx0OworICAgIEFj
Y2Vzc0Nhc2UmIG9wZXJhdG9yPShjb25zdCBBY2Nlc3NDYXNlJikgPSBkZWxldGU7CisgICAgdm9p
ZCByZXNldFN0YXRlKCkgeyBtX3N0YXRlID0gUHJpbW9yZGlhbDsgfQorCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CisgICAgZnJpZW5kIGNsYXNzIFBvbHltb3JwaGljQWNj
ZXNzOworCisgICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsKKyAgICBib29sIHByb3BhZ2F0
ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJikgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogVGhpcyBv
bmx5IGV4aXN0cyBiZWNhdXNlIG9mIGhvdyBBY2Nlc3NDYXNlIHB1dHMgcG9zdC1nZW5lcmF0aW9u
IHRoaW5ncyBpbnRvIGl0c2VsZi4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU2NDU2CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gY2xvbmUoKSBjb25zdDsKKworICAgIC8vIFBlcmZvcm0gYW55IGFjdGlvbiB0aGF0IG11c3Qg
YmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBlcG9jaCBpbiB3aGljaCB0aGUgY2Fz
ZQorICAgIC8vIHdhcyBjcmVhdGVkLiBSZXR1cm5zIGEgc2V0IG9mIHdhdGNocG9pbnQgc2V0cyB0
aGF0IHdpbGwgbmVlZCB0byBiZSB3YXRjaGVkLgorICAgIFZlY3RvcjxXYXRjaHBvaW50U2V0Kiwg
Mj4gY29tbWl0KFZNJiwgY29uc3QgSWRlbnRpZmllciYpOworCisgICAgLy8gRmFsbCB0aHJvdWdo
IG9uIHN1Y2Nlc3MuIFR3byBraW5kcyBvZiBmYWlsdXJlcyBhcmUgc3VwcG9ydGVkOiBmYWxsLXRo
cm91Z2gsIHdoaWNoIG1lYW5zIHRoYXQgd2UKKyAgICAvLyBzaG91bGQgdHJ5IGEgZGlmZmVyZW50
IGNhc2U7IGFuZCBmYWlsdXJlLCB3aGljaCBtZWFucyB0aGF0IHRoaXMgd2FzIHRoZSByaWdodCBj
YXNlIGJ1dCBpdCBuZWVkcworICAgIC8vIGhlbHAgZnJvbSB0aGUgc2xvdyBwYXRoLgorICAgIHZv
aWQgZ2VuZXJhdGVXaXRoR3VhcmQoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCk7CisKKyAgICAvLyBGYWxsIHRocm91Z2ggb24gc3Vj
Y2VzcywgYWRkIGEganVtcCB0byB0aGUgZmFpbHVyZSBsaXN0IG9uIGZhaWx1cmUuCisgICAgdm9p
ZCBnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmKTsKKworICAgIHZvaWQgZ2VuZXJhdGVJ
bXBsKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYpOworCisgICAgQWNjZXNzVHlwZSBtX3R5cGU7Cisg
ICAgU3RhdGUgbV9zdGF0ZSB7IFByaW1vcmRpYWwgfTsKKyAgICBQcm9wZXJ0eU9mZnNldCBtX29m
ZnNldDsKKworICAgIC8vIFVzdWFsbHkgdGhpcyBpcyB0aGUgc3RydWN0dXJlIHRoYXQgd2UgZXhw
ZWN0IHRoZSBiYXNlIG9iamVjdCB0byBoYXZlLiBCdXQsIHRoaXMgaXMgdGhlICpuZXcqCisgICAg
Ly8gc3RydWN0dXJlIGZvciBhIHRyYW5zaXRpb24gYW5kIHdlIHJlbHkgb24gdGhlIGZhY3QgdGhh
dCBpdCBoYXMgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBvbGQKKyAgICAvLyBzdHJ1Y3R1cmUu
IEZvciBwcm94aWVzLCB0aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG9iamVjdCBiZWhpbmQg
dGhlIHByb3h5LgorICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworCisg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKaW5kZXggYTZjNDU4Y2I3M2JlNTc1MmQ5OGQyNTViMzdj
OTlkNWFlYjQyMzM3ZC4uZWI1NzFmZjk5ZjcxMzM5NGZlMTc0NjQ3NTk4NzEyNzY2YzJlMjE4YyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNw
cApAQCAtMjgsNiArMjgsOCBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
Q29tcGxleEdldFN0YXR1cy5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIK
KyNpbmNsdWRlICJJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTU2NvcGUuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKQEAg
LTIzMSwxOSArMjMzLDE5IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6
OkludHJpbnNpY0dldHRlcjogewotICAgICAgICAgICAgICAgICAgICBpbnRyaW5zaWNGdW5jdGlv
biA9IGFjY2Vzcy5pbnRyaW5zaWNGdW5jdGlvbigpOworICAgICAgICAgICAgICAgICAgICBpbnRy
aW5zaWNGdW5jdGlvbiA9IGFjY2Vzcy5hczxJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlPigpLmlu
dHJpbnNpY0Z1bmN0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkdldHRlcjogewogICAg
ICAgICAgICAgICAgICAgICBjYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExp
bmtTdGF0dXM+KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbyA9IGFjY2Vzcy5jYWxsTGlua0luZm8oKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBhY2Nlc3MuYXM8R2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZT4oKS5jYWxsTGlua0luZm8oKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgKmNh
bGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCAqY2FsbExpbmtJbmZvLCBjYWxs
RXhpdFNpdGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3ND
YXNlOjpDdXN0b21BY2Nlc3NvckdldHRlcjogewotICAgICAgICAgICAgICAgICAgICBkb21KSVQg
PSBhY2Nlc3MuZG9tSklUKCk7CisgICAgICAgICAgICAgICAgICAgIGRvbUpJVCA9IGFjY2Vzcy5h
czxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmRvbUpJVCgpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoIWRvbUpJVCkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3Rh
dHVzKHNsb3dQYXRoU3RhdGUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQubV9z
dGF0ZSA9IEN1c3RvbTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YjZiY2NjMjk3NDVl
NjEzYTE1MDcxNzNmZjAzMTkyMTNiMzc3MGZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCkBAIC0wLDAg
KzEsMjM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIK
KworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJET01KSVRBY2Nlc3NDYXNlUGF0Y2hwb2lu
dFBhcmFtcy5oIgorI2luY2x1ZGUgIkRPTUpJVENhbGxET01HZXR0ZXJQYXRjaHBvaW50LmgiCisj
aW5jbHVkZSAiRE9NSklUR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSGVhcElubGluZXMuaCIK
KyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNj
ZXNzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZTo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwg
Ym9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwgSlNPYmplY3QqIGN1
c3RvbVNsb3RCYXNlKQorICAgIDogQmFzZSh2bSwgb3duZXIsIGFjY2Vzc1R5cGUsIG9mZnNldCwg
c3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHZpYVByb3h5LCBhZGRpdGlvbmFsU2V0KQoreworICAg
IG1fY3VzdG9tU2xvdEJhc2Uuc2V0TWF5QmVOdWxsKHZtLCBvd25lciwgY3VzdG9tU2xvdEJhc2Up
OworfQorCisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlOjpjcmVhdGUoCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgYm9vbCB2aWFQcm94eSwg
V2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwKKyAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYyBjdXN0b21HZXR0ZXIsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSwgRE9NSklUOjpHZXR0
ZXJTZXR0ZXIqIGRvbUpJVCkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdldHRl
cjoKKyAgICBjYXNlIEN1c3RvbUFjY2Vzc29yR2V0dGVyOgorICAgIGNhc2UgQ3VzdG9tVmFsdWVH
ZXR0ZXI6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH07CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZT4gcmVzdWx0KG5ldyBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKHZtLCBvd25lciwgdHlw
ZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgdmlhUHJveHksIGFkZGl0aW9uYWxT
ZXQsIGN1c3RvbVNsb3RCYXNlKSk7CisgICAgcmVzdWx0LT5tX2RvbUpJVCA9IGRvbUpJVDsKKyAg
ICByZXN1bHQtPm1fY3VzdG9tQWNjZXNzb3IuZ2V0dGVyID0gY3VzdG9tR2V0dGVyOworICAgIHJl
dHVybiBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlIHR5cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
CisgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAorICAgIEpTT2JqZWN0KiBj
dXN0b21TbG90QmFzZSkKK3sKKyAgICBBU1NFUlQodHlwZSA9PSBTZXR0ZXIgfHwgdHlwZSA9PSBD
dXN0b21WYWx1ZVNldHRlciB8fCB0eXBlID09IEN1c3RvbUFjY2Vzc29yU2V0dGVyKTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBHZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlKHZtLCBvd25lciwgdHlwZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRp
dGlvblNldCwgZmFsc2UsIG51bGxwdHIsIGN1c3RvbVNsb3RCYXNlKSk7CisgICAgcmVzdWx0LT5t
X2N1c3RvbUFjY2Vzc29yLnNldHRlciA9IGN1c3RvbVNldHRlcjsKKyAgICByZXR1cm4gV1RGTW92
ZShyZXN1bHQpOworfQorCisKK0dldHRlclNldHRlckFjY2Vzc0Nhc2U6On5HZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlKCkKK3sKK30KKworCitHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlKGNvbnN0IEdldHRlclNldHRlckFjY2Vzc0Nhc2UmIG90aGVyKQorICAgIDog
QmFzZShvdGhlcikKKyAgICAsIG1fY3VzdG9tU2xvdEJhc2Uob3RoZXIubV9jdXN0b21TbG90QmFz
ZSkKK3sKKyAgICBtX2N1c3RvbUFjY2Vzc29yLm9wYXF1ZSA9IG90aGVyLm1fY3VzdG9tQWNjZXNz
b3Iub3BhcXVlOworICAgIG1fZG9tSklUID0gb3RoZXIubV9kb21KSVQ7Cit9CisKK3N0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjbG9uZSgpIGNvbnN0
Cit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+IHJlc3VsdChu
ZXcgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSgqdGhpcykpOworICAgIHJlc3VsdC0+cmVzZXRTdGF0
ZSgpOworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKK0pTT2JqZWN0KiBHZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlOjphbHRlcm5hdGVCYXNlKCkgY29uc3QKK3sKKyAgICBpZiAoY3VzdG9t
U2xvdEJhc2UoKSkKKyAgICAgICAgcmV0dXJuIGN1c3RvbVNsb3RCYXNlKCk7CisgICAgcmV0dXJu
IGNvbmRpdGlvblNldCgpLnNsb3RCYXNlQ29uZGl0aW9uKCkub2JqZWN0KCk7Cit9CisKK3ZvaWQg
R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCwgQ29tbWFQ
cmludGVyJiBjb21tYSkgY29uc3QKK3sKKyAgICBCYXNlOjpkdW1wSW1wbChvdXQsIGNvbW1hKTsK
KyAgICBvdXQucHJpbnQoY29tbWEsICJjdXN0b21TbG90QmFzZSA9ICIsIFJhd1BvaW50ZXIoY3Vz
dG9tU2xvdEJhc2UoKSkpOworICAgIGlmIChjYWxsTGlua0luZm8oKSkKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAiY2FsbExpbmtJbmZvID0gIiwgUmF3UG9pbnRlcihjYWxsTGlua0luZm8oKSkp
OworICAgIG91dC5wcmludChjb21tYSwgImN1c3RvbUFjY2Vzc29yID0gIiwgUmF3UG9pbnRlciht
X2N1c3RvbUFjY2Vzc29yLm9wYXF1ZSkpOworfQorCit2b2lkIEdldHRlclNldHRlckFjY2Vzc0Nh
c2U6OmVtaXRET01KSVRHZXR0ZXIoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgR1BSUmVn
IGJhc2VGb3JHZXRHUFIpCit7CisgICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqc3RhdGUuaml0Owor
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9ICpzdGF0ZS5zdHViSW5mbzsKKyAgICBK
U1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBzdGF0ZS52YWx1ZVJlZ3M7CisgICAgR1BSUmVnIGJhc2VH
UFIgPSBzdGF0ZS5iYXNlR1BSOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGUuc2NyYXRj
aEdQUjsKKworICAgIC8vIFdlIGNvbnN0cnVjdCB0aGUgZW52aXJvbm1lbnQgdGhhdCBjYW4gZXhl
Y3V0ZSB0aGUgRE9NSklUOjpQYXRjaHBvaW50IGhlcmUuCisgICAgUmVmPERPTUpJVDo6Q2FsbERP
TUdldHRlclBhdGNocG9pbnQ+IHBhdGNocG9pbnQgPSBkb21KSVQoKS0+Y2FsbERPTUdldHRlcigp
OworCisgICAgVmVjdG9yPEdQUlJlZz4gZ3BTY3JhdGNoOworICAgIFZlY3RvcjxGUFJSZWc+IGZw
U2NyYXRjaDsKKyAgICBWZWN0b3I8RE9NSklUOjpWYWx1ZT4gcmVnczsKKworICAgIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7
CisgICAgYWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICBhbGxvY2F0b3IubG9jayhzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VU
YWdHUFIpKTsKKyNlbmRpZgorICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7CisgICAgYWxs
b2NhdG9yLmxvY2soc2NyYXRjaEdQUik7CisKKyAgICBHUFJSZWcgcGFyYW1CYXNlR1BSID0gSW52
YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcgcGFyYW1HbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BS
UmVnOworICAgIEpTVmFsdWVSZWdzIHBhcmFtVmFsdWVSZWdzID0gdmFsdWVSZWdzOworICAgIEdQ
UlJlZyByZW1haW5pbmdTY3JhdGNoR1BSID0gSW52YWxpZEdQUlJlZzsKKworICAgIC8vIHZhbHVl
UmVncyBhbmQgYmFzZUZvckdldEdQUiBtYXkgYmUgdGhlIHNhbWUuIEZvciBleGFtcGxlLCBpbiBC
YXNlbGluZSBKSVQsIHdlIHBhc3MgdGhlIHNhbWUgcmVnVDAgZm9yIGJhc2VHUFIgYW5kIHZhbHVl
UmVncy4KKyAgICAvLyBJbiBGVEwsIHRoZXJlIGlzIG5vIGNvbnN0cmFpbnQgdGhhdCB0aGUgYmFz
ZUZvckdldEdQUiBpbnRlcmZlcmVzIHdpdGggdGhlIHJlc3VsdC4gVG8gbWFrZSBpbXBsZW1lbnRh
dGlvbiBzaW1wbGUgaW4KKyAgICAvLyBET01KSVQ6OlBhdGNocG9pbnQsIERPTUpJVDo6UGF0Y2hw
b2ludCBhc3N1bWVzIHRoYXQgcmVzdWx0IHJlZ2lzdGVycyBhbHdheXMgZWFybHkgaW50ZXJmZXJl
IHdpdGggaW5wdXQgcmVnaXN0ZXJzLCBpbiB0aGlzIGNhc2UsCisgICAgLy8gYmFzZUZvckdldEdQ
Ui4gU28gd2UgbW92ZSBiYXNlRm9yR2V0R1BSIHRvIHRoZSBvdGhlciByZWdpc3RlciBpZiBiYXNl
Rm9yR2V0R1BSID09IHZhbHVlUmVncy4KKyAgICBpZiAoYmFzZUZvckdldEdQUiAhPSB2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpKSB7CisgICAgICAgIHBhcmFtQmFzZUdQUiA9IGJhc2VGb3JHZXRHUFI7
CisgICAgICAgIGlmICghcGF0Y2hwb2ludC0+cmVxdWlyZUdsb2JhbE9iamVjdCkKKyAgICAgICAg
ICAgIHJlbWFpbmluZ1NjcmF0Y2hHUFIgPSBzY3JhdGNoR1BSOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBwYXJhbUdsb2JhbE9iamVjdEdQUiA9IHNjcmF0Y2hHUFI7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgaml0Lm1vdmUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIHBhcmFtQmFzZUdQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAgIGlmIChwYXRjaHBvaW50
LT5yZXF1aXJlR2xvYmFsT2JqZWN0KQorICAgICAgICAgICAgcGFyYW1HbG9iYWxPYmplY3RHUFIg
PSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgfQorCisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdEZvckRPTUpJVCA9IHN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3Qo
KTsKKworICAgIHJlZ3MuYXBwZW5kKHBhcmFtVmFsdWVSZWdzKTsKKyAgICByZWdzLmFwcGVuZChw
YXJhbUJhc2VHUFIpOworICAgIGlmIChwYXRjaHBvaW50LT5yZXF1aXJlR2xvYmFsT2JqZWN0KSB7
CisgICAgICAgIEFTU0VSVChwYXJhbUdsb2JhbE9iamVjdEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsK
KyAgICAgICAgcmVncy5hcHBlbmQoRE9NSklUOjpWYWx1ZShwYXJhbUdsb2JhbE9iamVjdEdQUiwg
Z2xvYmFsT2JqZWN0Rm9yRE9NSklUKSk7CisgICAgfQorCisgICAgaWYgKHBhdGNocG9pbnQtPm51
bUdQU2NyYXRjaFJlZ2lzdGVycykgeworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAg
aWYgKHJlbWFpbmluZ1NjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAg
Z3BTY3JhdGNoLmFwcGVuZChyZW1haW5pbmdTY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICsraTsK
KyAgICAgICAgfQorICAgICAgICBmb3IgKDsgaSA8IHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJl
Z2lzdGVyczsgKytpKQorICAgICAgICAgICAgZ3BTY3JhdGNoLmFwcGVuZChhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCkpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgZnBTY3Jh
dGNoLmFwcGVuZChhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoRlBSKCkpOworCisgICAgLy8gTGV0
J3Mgc3RvcmUgdGhlIHJldXNlZCByZWdpc3RlcnMgdG8gdGhlIHN0YWNrLiBBZnRlciB0aGF0LCB3
ZSBjYW4gdXNlIGFsbG9jYXRlZCBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0KKyAgICBhbGxvY2F0
b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CisKKyAgICBpZiAodmVy
Ym9zZSkgeworICAgICAgICBkYXRhTG9nKCJiYXNlR1BSID0gIiwgYmFzZUdQUiwgIlxuIik7Cisg
ICAgICAgIGRhdGFMb2coInZhbHVlUmVncyA9ICIsIHZhbHVlUmVncywgIlxuIik7CisgICAgICAg
IGRhdGFMb2coInNjcmF0Y2hHUFIgPSAiLCBzY3JhdGNoR1BSLCAiXG4iKTsKKyAgICAgICAgZGF0
YUxvZygicGFyYW1CYXNlR1BSID0gIiwgcGFyYW1CYXNlR1BSLCAiXG4iKTsKKyAgICAgICAgaWYg
KHBhcmFtR2xvYmFsT2JqZWN0R1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBkYXRh
TG9nKCJwYXJhbUdsb2JhbE9iamVjdEdQUiA9ICIsIHBhcmFtR2xvYmFsT2JqZWN0R1BSLCAiXG4i
KTsKKyAgICAgICAgZGF0YUxvZygicGFyYW1WYWx1ZVJlZ3MgPSAiLCBwYXJhbVZhbHVlUmVncywg
IlxuIik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXRjaHBvaW50LT5udW1H
UFNjcmF0Y2hSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgICAgIGRhdGFMb2coImdwU2NyYXRjaFsi
LCBpLCAiXSA9ICIsIGdwU2NyYXRjaFtpXSwgIlxuIik7CisgICAgfQorCisgICAgaWYgKHBhdGNo
cG9pbnQtPnJlcXVpcmVHbG9iYWxPYmplY3QpCisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3RGb3JET01KSVQpLCBwYXJhbUdsb2JhbE9iamVj
dEdQUik7CisKKyAgICAvLyBXZSBqdXN0IHNwaWxsIHRoZSByZWdpc3RlcnMgdXNlZCBpbiBET01K
SVQ6OlBhdGNocG9pbnQgaGVyZS4gRm9yIG5vdCBzcGlsbGVkIHJlZ2lzdGVycyBoZXJlIGV4cGxp
Y2l0bHksCisgICAgLy8gdGhleSBtdXN0IGJlIGluIHRoZSB1c2VkIHJlZ2lzdGVyIHNldCBwYXNz
ZWQgYnkgdGhlIGNhbGxlcnMgKEJhc2VsaW5lLCBERkcsIGFuZCBGVEwpIGlmIHRoZXkgbmVlZCB0
byBiZSBrZXB0LgorICAgIC8vIFNvbWUgcmVnaXN0ZXJzIGNhbiBiZSBsb2NrZWQsIGJ1dCBub3Qg
aW4gdGhlIHVzZWQgcmVnaXN0ZXIgc2V0LiBGb3IgZXhhbXBsZSwgdGhlIGNhbGxlciBjb3VsZCBt
YWtlIGJhc2VHUFIKKyAgICAvLyBzYW1lIHRvIHZhbHVlUmVncywgYW5kIG5vdCBpbmNsdWRlIGl0
IGluIHRoZSB1c2VkIHJlZ2lzdGVycyBzaW5jZSBpdCB3aWxsIGJlIGNoYW5nZWQuCisgICAgUmVn
aXN0ZXJTZXQgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsOworICAgIGZvciAoYXV0byYgdmFsdWUg
OiByZWdzKSB7CisgICAgICAgIERPTUpJVDo6UmVnIHJlZyA9IHZhbHVlLnJlZygpOworICAgICAg
ICBpZiAocmVnLmlzSlNWYWx1ZVJlZ3MoKSkKKyAgICAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxG
b3JDQ2FsbC5zZXQocmVnLmpzVmFsdWVSZWdzKCkpOworICAgICAgICBlbHNlIGlmIChyZWcuaXNH
UFIoKSkKKyAgICAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVnLmdwcigp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNl
dChyZWcuZnByKCkpOworICAgIH0KKyAgICBmb3IgKEdQUlJlZyByZWcgOiBncFNjcmF0Y2gpCisg
ICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVnKTsKKyAgICBmb3IgKEZQUlJl
ZyByZWcgOiBmcFNjcmF0Y2gpCisgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQo
cmVnKTsKKyAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6
cmVnaXN0ZXJzVG9Ob3RTYXZlRm9yQ0NhbGwoKSk7CisKKyAgICBET01KSVRBY2Nlc3NDYXNlUGF0
Y2hwb2ludFBhcmFtcyBwYXJhbXMoV1RGTW92ZShyZWdzKSwgV1RGTW92ZShncFNjcmF0Y2gpLCBX
VEZNb3ZlKGZwU2NyYXRjaCkpOworICAgIHBhdGNocG9pbnQtPmdlbmVyYXRvcigpLT5ydW4oaml0
LCBwYXJhbXMpOworICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5n
KGppdCwgcHJlc2VydmVkU3RhdGUpOworICAgIHN0YXRlLnN1Y2NlZWQoKTsKKyAgICAKKyAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbnMgPSBwYXJhbXMuZW1pdFNsb3dQYXRoQ2Fs
bHMoc3RhdGUsIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbCwgaml0KTsKKyAgICBpZiAoIWV4Y2Vw
dGlvbnMuZW1wdHkoKSkgeworICAgICAgICBleGNlcHRpb25zLmxpbmsoJmppdCk7CisgICAgICAg
IGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVk
U3RhdGUpOworICAgICAgICBzdGF0ZS5lbWl0RXhwbGljaXRFeGNlcHRpb25IYW5kbGVyKCk7Cisg
ICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNj
ZXNzQ2FzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFj
Y2Vzc0Nhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjE5MmRhYzI0MmFmZjUyMzBjZTNmNmI1NTM0MWQyMzNk
NGY3ZThjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldHRlclNldHRlckFjY2Vzc0Nhc2UuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoSklUKQorCisjaW5jbHVkZSAiUHJveHlhYmxlQWNjZXNzQ2FzZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSA6IHB1YmxpYyBQcm94eWFibGVB
Y2Nlc3NDYXNlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFByb3h5YWJsZUFjY2Vzc0Nhc2UgQmFz
ZTsKKyAgICBmcmllbmQgY2xhc3MgQWNjZXNzQ2FzZTsKKworICAgIC8vIFRoaXMgY2FuIHJldHVy
biBudWxsIGlmIGl0IGhhc24ndCBiZWVuIGdlbmVyYXRlZCB5ZXQuIFRoYXQncworICAgIC8vIGFj
dHVhbGx5IHNvbWV3aGF0IGxpa2VseSBiZWNhdXNlIG9mIGhvdyB3ZSBkbyBidWZmZXJpbmcgb2Yg
bmV3IGNhc2VzLgorICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKCkgY29uc3QgeyByZXR1
cm4gbV9jYWxsTGlua0luZm8uZ2V0KCk7IH0KKyAgICBKU09iamVjdCogY3VzdG9tU2xvdEJhc2Uo
KSBjb25zdCB7IHJldHVybiBtX2N1c3RvbVNsb3RCYXNlLmdldCgpOyB9CisgICAgRE9NSklUOjpH
ZXR0ZXJTZXR0ZXIqIGRvbUpJVCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9tSklUOyB9CisKKyAgICBK
U09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBlbWl0
RE9NSklUR2V0dGVyKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYsIEdQUlJlZyBiYXNlRm9yR2V0R1BS
KTsKKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY3JlYXRlKAorICAg
ICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1
Y3R1cmUqLAorICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAorICAgICAgICBib29sIHZpYVByb3h5ID0gZmFsc2Us
CisgICAgICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQgPSBudWxscHRyLAorICAgICAg
ICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyA9IG51bGxwdHIsCisgICAgICAgIEpTT2JqZWN0
KiBjdXN0b21TbG90QmFzZSA9IG51bGxwdHIsCisgICAgICAgIERPTUpJVDo6R2V0dGVyU2V0dGVy
KiA9IG51bGxwdHIpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBj
cmVhdGUoVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0
eU9mZnNldCwKKyAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyA9IG51bGxwdHIsCisgICAgICAgIEpTT2JqZWN0KiBj
dXN0b21TbG90QmFzZSA9IG51bGxwdHIpOworCisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVh
bSYsIENvbW1hUHJpbnRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgfkdldHRlclNldHRlckFj
Y2Vzc0Nhc2UoKTsKKworcHJpdmF0ZToKKyAgICBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlKFZNJiwg
SlNDZWxsKiwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgYm9vbCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCog
YWRkaXRpb25hbFNldCwgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKTsKKworICAgIEdldHRlclNl
dHRlckFjY2Vzc0Nhc2UoY29uc3QgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZSYpOworCisgICAgV3Jp
dGVCYXJyaWVyPEpTT2JqZWN0PiBtX2N1c3RvbVNsb3RCYXNlOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvOworICAgIHVuaW9uIHsKKyAgICAgICAgUHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgc2V0dGVyOworICAgICAgICBQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYyBnZXR0ZXI7CisgICAgICAgIHZvaWQqIG9wYXF1ZTsKKyAgICB9IG1fY3Vz
dG9tQWNjZXNzb3I7CisgICAgRE9NSklUOjpHZXR0ZXJTZXR0ZXIqIG1fZG9tSklUOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludHJpbnNpY0dldHRlckFjY2Vz
c0Nhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkyZDZhNTU4MDczZGJhYmQ4N2E5NTc1ZTg1YzY3NmVkZGNl
MmQxMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5jcHAKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmgiCisKKyNpZiBFTkFCTEUoSklU
KQorCisjaW5jbHVkZSAiSGVhcElubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0ludHJp
bnNpY0dldHRlckFjY2Vzc0Nhc2U6OkludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UoVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBKU0Z1bmN0
aW9uKiBpbnRyaW5zaWNGdW5jdGlvbikKKyAgICA6IEJhc2Uodm0sIG93bmVyLCBJbnRyaW5zaWNH
ZXR0ZXIsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQpCit7CisgICAgbV9pbnRyaW5z
aWNGdW5jdGlvbi5zZXQodm0sIG93bmVyLCBpbnRyaW5zaWNGdW5jdGlvbik7Cit9CisKK3N0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUo
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0
LCBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbikKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+KG5ldyBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlKHZtLCBvd25l
ciwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgaW50cmluc2ljRnVuY3Rpb24pKTsK
K30KKworSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6fkludHJpbnNpY0dldHRlckFjY2Vzc0Nh
c2UoKQoreworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gSW50cmluc2ljR2V0dGVy
QWNjZXNzQ2FzZTo6Y2xvbmUoKSBjb25zdAoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnRyaW5z
aWNHZXR0ZXJBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2Uo
KnRoaXMpKTsKKyAgICByZXN1bHQtPnJlc2V0U3RhdGUoKTsKKyAgICByZXR1cm4gV1RGTW92ZShy
ZXN1bHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW50cmluc2ljR2V0
dGVyQWNjZXNzQ2FzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludHJpbnNp
Y0dldHRlckFjY2Vzc0Nhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDIxYzE4ZTZkYjBmMWRiNWYyYjNkMTRm
MmE0ZGY1NzA1OWE2ZGZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0ludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuaApAQCAtMCwwICsxLDU5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQWNjZXNzQ2FzZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZSA6IHB1YmxpYyBBY2Nl
c3NDYXNlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEFjY2Vzc0Nhc2UgQmFzZTsKKyAgICBmcmll
bmQgY2xhc3MgQWNjZXNzQ2FzZTsKKworICAgIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9pbnRyaW5zaWNGdW5jdGlvbi5nZXQoKTsgfQorICAgIEludHJp
bnNpYyBpbnRyaW5zaWMoKSBjb25zdCB7IHJldHVybiBtX2ludHJpbnNpY0Z1bmN0aW9uLT5pbnRy
aW5zaWMoKTsgfQorCisgICAgc3RhdGljIGJvb2wgY2FuRW1pdEludHJpbnNpY0dldHRlcihKU0Z1
bmN0aW9uKiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBlbWl0SW50cmluc2ljR2V0dGVyKEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZSYpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiBjcmVhdGUoVk0mLCBKU0NlbGwqLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5j
dGlvbik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gY2xvbmUoKSBjb25zdCBv
dmVycmlkZTsKKworICAgIH5JbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlKCk7CisKK3ByaXZhdGU6
CisgICAgSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZShWTSYsIEpTQ2VsbCosIFByb3BlcnR5T2Zm
c2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIEpTRnVu
Y3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uKTsKKworICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9u
PiBtX2ludHJpbnNpY0Z1bmN0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKaW5kZXggM2NkMTk4NGY4ZGQ2N2ZlNzdkYTI3YjhlN2Zj
ODg3MWJmYmM0NGZmOC4uMGNlYzAyNjI3MDdmOTRlODFmZTU3MDU5YzhjMGZjZTZlZWU5ZDg5MCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwCkBAIC0zMSwxNiArMzEsMTAgQEAKICNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIK
ICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNs
dWRlICJET01KSVRBY2Nlc3NDYXNlUGF0Y2hwb2ludFBhcmFtcy5oIgotI2luY2x1ZGUgIkRPTUpJ
VENhbGxET01HZXR0ZXJQYXRjaHBvaW50LmgiCi0jaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgi
Ci0jaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUg
IkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgotI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIlNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogI2luY2x1ZGUgPHd0
Zi9Db21tYVByaW50ZXIuaD4KQEAgLTIxMCwxMzU4ICsyMDQsNiBAQCB2b2lkIEFjY2Vzc0dlbmVy
YXRpb25TdGF0ZTo6ZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcigpCiAgICAgfQogfQogCi1B
Y2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKCkKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IEFjY2Vzc0Nhc2U6OnRyeUdldCgKLSAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vz
c1R5cGUgdHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwK
LSAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBib29s
IHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0KQotewotICAgIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7Ci0KLSAgICByZXN1
bHQtPm1fdHlwZSA9IHR5cGU7Ci0gICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKLSAgICBy
ZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0
LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLQotICAgIGlmICh2aWFQcm94eSB8fCBh
ZGRpdGlvbmFsU2V0KSB7Ci0gICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91
bmlxdWU8UmFyZURhdGE+KCk7Ci0gICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+dmlhUHJveHkg
PSB2aWFQcm94eTsKLSAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5hZGRpdGlvbmFsU2V0ID0g
YWRkaXRpb25hbFNldDsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Z2V0KAotICAgIFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLAotICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25k
aXRpb25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQsCi0g
ICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgY3VzdG9tR2V0dGVyLCBKU09iamVjdCogY3Vz
dG9tU2xvdEJhc2UsIERPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVQpCi17Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKLQotICAgIHJl
c3VsdC0+bV90eXBlID0gdHlwZTsKLSAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAg
IHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICByZXN1
bHQtPm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwotCi0gICAgaWYgKHZpYVByb3h5IHx8
IGFkZGl0aW9uYWxTZXQgfHwgcmVzdWx0LT5kb2VzQ2FsbHMoKSB8fCBjdXN0b21HZXR0ZXIgfHwg
Y3VzdG9tU2xvdEJhc2UgfHwgZG9tSklUKSB7Ci0gICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YSA9
IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7Ci0gICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0
YS0+dmlhUHJveHkgPSB2aWFQcm94eTsKLSAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5hZGRp
dGlvbmFsU2V0ID0gYWRkaXRpb25hbFNldDsKLSAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5j
dXN0b21BY2Nlc3Nvci5nZXR0ZXIgPSBjdXN0b21HZXR0ZXI7Ci0gICAgICAgIHJlc3VsdC0+bV9y
YXJlRGF0YS0+Y3VzdG9tU2xvdEJhc2Uuc2V0TWF5QmVOdWxsKHZtLCBvd25lciwgY3VzdG9tU2xv
dEJhc2UpOwotICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmRvbUpJVCA9IGRvbUpJVDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gQWNjZXNzQ2FzZTo6bWVnYW1vcnBoaWNMb2FkKFZNJiB2bSwgSlNDZWxsKiBvd25lcikKLXsK
LSAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIFVOVVNFRF9QQVJBTShvd25lcik7Ci0gICAgCi0g
ICAgaWYgKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIDwgOSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcg
QWNjZXNzQ2FzZSgpKTsKLSAgICAKLSAgICByZXN1bHQtPm1fdHlwZSA9IE1lZ2Ftb3JwaGljTG9h
ZDsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6cmVwbGFjZSgKLSAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi17Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKLQotICAgIHJl
c3VsdC0+bV90eXBlID0gUmVwbGFjZTsKLSAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0Owot
ICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3ND
YXNlOjp0cmFuc2l0aW9uKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsCi0gICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkK
LXsKLSAgICBSRUxFQVNFX0FTU0VSVChvbGRTdHJ1Y3R1cmUgPT0gbmV3U3RydWN0dXJlLT5wcmV2
aW91c0lEKCkpOwotCi0gICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5l
ZWQgYSByZWFsbG9jLCBpZiB3ZSBkb24ndCBoYXZlCi0gICAgLy8gZW5vdWdoIHJlZ2lzdGVycyB0
byBtYWtlIGl0IGhhcHBlbi4KLSAgICBpZiAoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPCA2
Ci0gICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAg
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7Ci0K
LSAgICByZXN1bHQtPm1fdHlwZSA9IFRyYW5zaXRpb247Ci0gICAgcmVzdWx0LT5tX29mZnNldCA9
IG9mZnNldDsKLSAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG5ld1N0cnVj
dHVyZSk7Ci0gICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3ND
YXNlOjpzZXR0ZXIoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAotICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFz
ZSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3ND
YXNlKCkpOwotCi0gICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9vZmZz
ZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1
Y3R1cmUpOwotICAgIHJlc3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7Ci0gICAg
cmVzdWx0LT5tX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKLSAgICBy
ZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbUFjY2Vzc29yLnNldHRlciA9IGN1c3RvbVNldHRlcjsK
LSAgICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlLnNldE1heUJlTnVsbCh2bSwg
b3duZXIsIGN1c3RvbVNsb3RCYXNlKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjppbigKLSAgICBWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKLXsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOwotCi0gICAg
cmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBv
d25lciwgc3RydWN0dXJlKTsKLSAgICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9u
U2V0OwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IEFjY2Vzc0Nhc2U6OmdldExlbmd0aChWTSYsIEpTQ2VsbCosIEFjY2Vzc1R5cGUgdHlwZSkK
LXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNl
KCkpOwotCi0gICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmdldEludHJpbnNp
YygKLSAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTRnVuY3Rpb24qIGdldHRlciwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0LAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQotewotICAgIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7Ci0KLSAgICByZXN1bHQtPm1f
dHlwZSA9IEludHJpbnNpY0dldHRlcjsKLSAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwg
b3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlv
blNldDsKLSAgICByZXN1bHQtPm1fb2Zmc2V0ID0gb2Zmc2V0OwotCi0gICAgcmVzdWx0LT5tX3Jh
cmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKLSAgICByZXN1bHQtPm1fcmFy
ZURhdGEtPmludHJpbnNpY0Z1bmN0aW9uLnNldCh2bSwgb3duZXIsIGdldHRlcik7Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1BY2Nlc3NDYXNlOjp+QWNjZXNzQ2FzZSgpCi17Ci19Ci0KLXN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1Yklu
Zm8oCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8pCi17Ci0gICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5cGUpIHsKLSAgICBjYXNlIENhY2hl
VHlwZTo6R2V0QnlJZFNlbGY6Ci0gICAgICAgIHJldHVybiBnZXQoCi0gICAgICAgICAgICB2bSwg
b3duZXIsIExvYWQsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LAotICAgICAgICAgICAgc3R1
YkluZm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKLQotICAgIGNhc2Ug
Q2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKLSAgICAgICAgcmV0dXJuIHJlcGxhY2UoCi0gICAg
ICAgICAgICB2bSwgb3duZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVy
ZS5nZXQoKSwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQpOwotCi0gICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6Y2xvbmUoKSBjb25zdAotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7Ci0gICAgcmVzdWx0LT5tX3R5cGUg
PSBtX3R5cGU7Ci0gICAgcmVzdWx0LT5tX29mZnNldCA9IG1fb2Zmc2V0OwotICAgIHJlc3VsdC0+
bV9zdHJ1Y3R1cmUgPSBtX3N0cnVjdHVyZTsKLSAgICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0g
bV9jb25kaXRpb25TZXQ7Ci0gICAgaWYgKFJhcmVEYXRhKiByYXJlRGF0YSA9IG1fcmFyZURhdGEu
Z2V0KCkpIHsKLSAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxS
YXJlRGF0YT4oKTsKLSAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT52aWFQcm94eSA9IHJhcmVE
YXRhLT52aWFQcm94eTsKLSAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5hZGRpdGlvbmFsU2V0
ID0gcmFyZURhdGEtPmFkZGl0aW9uYWxTZXQ7Ci0gICAgICAgIC8vIE5PVEU6IFdlIGRvbid0IGNv
cHkgdGhlIGNhbGxMaW5rSW5mbywgc2luY2UgdGhhdCdzIGNyZWF0ZWQgZHVyaW5nIGNvZGUgZ2Vu
ZXJhdGlvbi4KLSAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFx
dWUgPSByYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iub3BhcXVlOwotICAgICAgICByZXN1bHQtPm1f
cmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlID0gcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlOwotICAg
ICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmludHJpbnNpY0Z1bmN0aW9uID0gcmFyZURhdGEtPmlu
dHJpbnNpY0Z1bmN0aW9uOwotICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmRvbUpJVCA9IHJh
cmVEYXRhLT5kb21KSVQ7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVZlY3RvcjxX
YXRjaHBvaW50U2V0KiwgMj4gQWNjZXNzQ2FzZTo6Y29tbWl0KFZNJiB2bSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQpCi17Ci0gICAgLy8gSXQncyBmaW5lIHRvIGNvbW1pdCBzb21ldGhpbmcgdGhh
dCBpcyBhbHJlYWR5IGNvbW1pdHRlZC4gVGhhdCBhcmlzZXMgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNp
bmcKLSAgICAvLyBuZXdseSBhbGxvY2F0ZWQgd2F0Y2hwb2ludHMuIFdoZW4gaXQgaGFwcGVucywg
aXQncyBub3QgZWZmaWNpZW50IC0gYnV0IHdlIHRoaW5rIHRoYXQncyBPSwotICAgIC8vIGJlY2F1
c2UgbW9zdCBBY2Nlc3NDYXNlcyBoYXZlIG5vIGV4dHJhIHdhdGNocG9pbnRzIGFueXdheS4KLSAg
ICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlID09IFByaW1vcmRpYWwgfHwgbV9zdGF0ZSA9PSBDb21t
aXR0ZWQpOwotICAgIAotICAgIFZlY3RvcjxXYXRjaHBvaW50U2V0KiwgMj4gcmVzdWx0OwotICAg
IAotICAgIGlmICgoc3RydWN0dXJlKCkgJiYgc3RydWN0dXJlKCktPm5lZWRJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKSkKLSAgICAgICAgfHwgbV9jb25kaXRpb25TZXQubmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpKQotICAgICAgICByZXN1bHQuYXBwZW5kKHZtLmVuc3VyZVdhdGNocG9p
bnRTZXRGb3JJbXB1cmVQcm9wZXJ0eShpZGVudCkpOwotCi0gICAgaWYgKGFkZGl0aW9uYWxTZXQo
KSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChhZGRpdGlvbmFsU2V0KCkpOwotICAgIAotICAgIG1f
c3RhdGUgPSBDb21taXR0ZWQ7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBB
Y2Nlc3NDYXNlOjpndWFyZGVkQnlTdHJ1Y3R1cmVDaGVjaygpIGNvbnN0Ci17Ci0gICAgaWYgKHZp
YVByb3h5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAobV90eXBlKSB7
Ci0gICAgY2FzZSBNZWdhbW9ycGhpY0xvYWQ6Ci0gICAgY2FzZSBBcnJheUxlbmd0aDoKLSAgICBj
YXNlIFN0cmluZ0xlbmd0aDoKLSAgICBjYXNlIERpcmVjdEFyZ3VtZW50c0xlbmd0aDoKLSAgICBj
YXNlIFNjb3BlZEFyZ3VtZW50c0xlbmd0aDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX0KLQotSlNPYmplY3QqIEFjY2Vz
c0Nhc2U6OmFsdGVybmF0ZUJhc2UoKSBjb25zdAotewotICAgIGlmIChjdXN0b21TbG90QmFzZSgp
KQotICAgICAgICByZXR1cm4gY3VzdG9tU2xvdEJhc2UoKTsKLSAgICByZXR1cm4gY29uZGl0aW9u
U2V0KCkuc2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKTsKLX0KLQotYm9vbCBBY2Nlc3NDYXNl
Ojpkb2VzQ2FsbHMoVmVjdG9yPEpTQ2VsbCo+KiBjZWxsc1RvTWFyaykgY29uc3QKLXsKLSAgICBz
d2l0Y2ggKHR5cGUoKSkgewotICAgIGNhc2UgR2V0dGVyOgotICAgIGNhc2UgU2V0dGVyOgotICAg
IGNhc2UgQ3VzdG9tVmFsdWVHZXR0ZXI6Ci0gICAgY2FzZSBDdXN0b21BY2Nlc3NvckdldHRlcjoK
LSAgICBjYXNlIEN1c3RvbVZhbHVlU2V0dGVyOgotICAgIGNhc2UgQ3VzdG9tQWNjZXNzb3JTZXR0
ZXI6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgVHJhbnNpdGlvbjoKLSAgICAgICAg
aWYgKG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpCi0gICAgICAgICAgICAmJiBzdHJ1Y3R1cmUoKS0+Y291bGRIYXZl
SW5kZXhpbmdIZWFkZXIoKSkgewotICAgICAgICAgICAgaWYgKGNlbGxzVG9NYXJrKQotICAgICAg
ICAgICAgICAgIGNlbGxzVG9NYXJrLT5hcHBlbmQobmV3U3RydWN0dXJlKCkpOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgQWNjZXNzQ2Fz
ZTo6Y291bGRTdGlsbFN1Y2NlZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbmRpdGlvblNl
dC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpOwotfQotCi1ib29sIEFjY2Vzc0Nhc2U6OmNhbkJlUmVwbGFjZWRCeU1lZ2Ftb3JwaGljTG9h
ZCgpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSA9PSBNZWdhbW9ycGhpY0xvYWQpCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIAotICAgIHJldHVybiB0eXBlKCkgPT0gTG9hZAotICAgICAgICAm
JiAhdmlhUHJveHkoKQotICAgICAgICAmJiBjb25kaXRpb25TZXQoKS5pc0VtcHR5KCkKLSAgICAg
ICAgJiYgIWFkZGl0aW9uYWxTZXQoKQotICAgICAgICAmJiAhY3VzdG9tU2xvdEJhc2UoKTsKLX0K
LQotYm9vbCBBY2Nlc3NDYXNlOjpjYW5SZXBsYWNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKSBj
b25zdAotewotICAgIC8vIFRoaXMgcHV0cyBpbiBhIGdvb2QgZWZmb3J0IHRvIHRyeSB0byBmaWd1
cmUgb3V0IGlmICdvdGhlcicgaXMgbWFkZSBzdXBlcmZsdW91cyBieSAnKnRoaXMnLgotICAgIC8v
IEl0J3MgZmluZSBmb3IgdGhpcyB0byByZXR1cm4gZmFsc2UgaWYgaXQncyBpbiBkb3VidC4KLQot
ICAgIHN3aXRjaCAodHlwZSgpKSB7Ci0gICAgY2FzZSBNZWdhbW9ycGhpY0xvYWQ6Ci0gICAgICAg
IHJldHVybiBvdGhlci5jYW5CZVJlcGxhY2VkQnlNZWdhbW9ycGhpY0xvYWQoKTsKLSAgICBjYXNl
IEFycmF5TGVuZ3RoOgotICAgIGNhc2UgU3RyaW5nTGVuZ3RoOgotICAgIGNhc2UgRGlyZWN0QXJn
dW1lbnRzTGVuZ3RoOgotICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzTGVuZ3RoOgotICAgICAgICBy
ZXR1cm4gb3RoZXIudHlwZSgpID09IHR5cGUoKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBpZiAo
IWd1YXJkZWRCeVN0cnVjdHVyZUNoZWNrKCkgfHwgIW90aGVyLmd1YXJkZWRCeVN0cnVjdHVyZUNo
ZWNrKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4gc3RydWN0dXJlKCkgPT0gb3RoZXIuc3RydWN0dXJlKCk7Ci0gICAgfQotfQotCi12b2lkIEFj
Y2Vzc0Nhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQo
bV90eXBlLCAiOigiKTsKLQotICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAgICAKLSAgICBvdXQu
cHJpbnQoY29tbWEsIG1fc3RhdGUpOwotCi0gICAgaWYgKG1fdHlwZSA9PSBUcmFuc2l0aW9uKQot
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJzdHJ1Y3R1cmUgPSAiLCBwb2ludGVyRHVtcChzdHJ1
Y3R1cmUoKSksICIgLT4gIiwgcG9pbnRlckR1bXAobmV3U3RydWN0dXJlKCkpKTsKLSAgICBlbHNl
IGlmIChtX3N0cnVjdHVyZSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RydWN0dXJlID0g
IiwgcG9pbnRlckR1bXAobV9zdHJ1Y3R1cmUuZ2V0KCkpKTsKLQotICAgIGlmIChpc1ZhbGlkT2Zm
c2V0KG1fb2Zmc2V0KSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAib2Zmc2V0ID0gIiwgbV9v
ZmZzZXQpOwotICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQotICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJjb25kaXRpb25zID0gIiwgbV9jb25kaXRpb25TZXQpOwotCi0gICAgaWYg
KFJhcmVEYXRhKiByYXJlRGF0YSA9IG1fcmFyZURhdGEuZ2V0KCkpIHsKLSAgICAgICAgaWYgKHJh
cmVEYXRhLT52aWFQcm94eSkKLSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgInZpYVByb3h5
ID0gIiwgcmFyZURhdGEtPnZpYVByb3h5KTsKLSAgICAgICAgaWYgKHJhcmVEYXRhLT5hZGRpdGlv
bmFsU2V0KQotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiYWRkaXRpb25hbFNldCA9ICIs
IFJhd1BvaW50ZXIocmFyZURhdGEtPmFkZGl0aW9uYWxTZXQuZ2V0KCkpKTsKLSAgICAgICAgaWYg
KHJhcmVEYXRhLT5jYWxsTGlua0luZm8pCi0gICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJj
YWxsTGlua0luZm8gPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5jYWxsTGlua0luZm8uZ2V0KCkp
KTsKLSAgICAgICAgaWYgKHJhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUpCi0gICAgICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJjdXN0b21BY2Nlc3NvciA9ICIsIFJhd1BvaW50ZXIocmFy
ZURhdGEtPmN1c3RvbUFjY2Vzc29yLm9wYXF1ZSkpOwotICAgICAgICBpZiAocmFyZURhdGEtPmN1
c3RvbVNsb3RCYXNlKQotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiY3VzdG9tU2xvdEJh
c2UgPSAiLCBSYXdQb2ludGVyKHJhcmVEYXRhLT5jdXN0b21TbG90QmFzZS5nZXQoKSkpOwotICAg
IH0KLQotICAgIG91dC5wcmludCgiKSIpOwotfQotCi1ib29sIEFjY2Vzc0Nhc2U6OnZpc2l0V2Vh
ayhWTSYgdm0pIGNvbnN0Ci17Ci0gICAgaWYgKG1fc3RydWN0dXJlICYmICFIZWFwOjppc01hcmtl
ZChtX3N0cnVjdHVyZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW1f
Y29uZGl0aW9uU2V0LmFyZVN0aWxsTGl2ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKG1fcmFyZURhdGEpIHsKLSAgICAgICAgaWYgKG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mbykK
LSAgICAgICAgICAgIG1fcmFyZURhdGEtPmNhbGxMaW5rSW5mby0+dmlzaXRXZWFrKHZtKTsKLSAg
ICAgICAgaWYgKG1fcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlICYmICFIZWFwOjppc01hcmtlZCht
X3JhcmVEYXRhLT5jdXN0b21TbG90QmFzZS5nZXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmIChtX3JhcmVEYXRhLT5pbnRyaW5zaWNGdW5jdGlvbiAmJiAhSGVhcDo6
aXNNYXJrZWQobV9yYXJlRGF0YS0+aW50cmluc2ljRnVuY3Rpb24uZ2V0KCkpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBBY2Nl
c3NDYXNlOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QK
LXsKLSAgICBib29sIHJlc3VsdCA9IHRydWU7Ci0gICAgCi0gICAgaWYgKG1fc3RydWN0dXJlKQot
ICAgICAgICByZXN1bHQgJj0gbV9zdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwotICAg
IAotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBUcmFuc2l0aW9uOgotICAgICAgICBp
ZiAoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkobV9zdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkp
Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKG1fc3RydWN0dXJlLmdldCgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi12b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAotICAg
IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIGZh
bGxUaHJvdWdoKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZh
bHNlKTsKLQotICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUgPT0gQ29tbWl0dGVkKTsKLSAgICBt
X3N0YXRlID0gR2VuZXJhdGVkOwotICAgIAotICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0YXRl
LmppdDsKLSAgICBWTSYgdm0gPSAqaml0LnZtKCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSAqc3RhdGUuaWRlbnQ7Ci0gICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKnN0
YXRlLnN0dWJJbmZvOwotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHN0YXRlLnZhbHVlUmVn
czsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRlLmJhc2VHUFI7Ci0gICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzdGF0ZS5zY3JhdGNoR1BSOwotICAgIAotICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0K
LSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgQXJyYXlMZW5ndGg6IHsKLSAgICAgICAg
QVNTRVJUKCF2aWFQcm94eSgpKTsKLSAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOwotICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCi0gICAgICAgICAgICBqaXQuYnJh
bmNoVGVzdDMyKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywgc2NyYXRjaEdQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKLSAgICAgICAgZmFsbFRo
cm91Z2guYXBwZW5kKAotICAgICAgICAgICAgaml0LmJyYW5jaFRlc3QzMigKLSAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBjYXNlIFN0cmluZ0xlbmd0aDogewotICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwotICAg
ICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCi0gICAgICAgICAgICBqaXQuYnJhbmNoOCgKLSAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwK
LSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgRGlyZWN0QXJndW1l
bnRzTGVuZ3RoOiB7Ci0gICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7Ci0gICAgICAgIGZhbGxU
aHJvdWdoLmFwcGVuZCgKLSAgICAgICAgICAgIGppdC5icmFuY2g4KAotICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAotICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKERpcmVjdEFyZ3VtZW50c1R5cGUpKSk7
Ci0KLSAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAotICAgICAgICAgICAgaml0LmJyYW5jaFRl
c3RQdHIoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLAotICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBEaXJlY3RBcmd1bWVudHM6Om9m
ZnNldE9mTWFwcGVkQXJndW1lbnRzKCkpKSk7Ci0gICAgICAgIGppdC5sb2FkMzIoCi0gICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZz
ZXRPZkxlbmd0aCgpKSwKLSAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwotICAg
ICAgICBqaXQuYm94SW50MzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzKTsKLSAg
ICAgICAgc3RhdGUuc3VjY2VlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAK
LSAgICBjYXNlIFNjb3BlZEFyZ3VtZW50c0xlbmd0aDogewotICAgICAgICBBU1NFUlQoIXZpYVBy
b3h5KCkpOwotICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCi0gICAgICAgICAgICBqaXQuYnJh
bmNoOCgKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAotICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihT
Y29wZWRBcmd1bWVudHNUeXBlKSkpOwotCi0gICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKLSAg
ICAgICAgICAgIGppdC5icmFuY2hUZXN0OCgKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Ok5vblplcm8sCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIs
IFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5ncygpKSkpOwotICAgICAgICBq
aXQubG9hZDMyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIFNj
b3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUb3RhbExlbmd0aCgpKSwKLSAgICAgICAgICAgIHZhbHVl
UmVncy5wYXlsb2FkR1BSKCkpOwotICAgICAgICBqaXQuYm94SW50MzIodmFsdWVSZWdzLnBheWxv
YWRHUFIoKSwgdmFsdWVSZWdzKTsKLSAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIE1lZ2Ftb3JwaGljTG9hZDogewotICAg
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCoga2V5ID0gaWRlbnQuaW1wbCgpOwotICAgICAgICB1bnNp
Z25lZCBoYXNoID0gSWRlbnRpZmllclJlcEhhc2g6Omhhc2goa2V5KTsKLSAgICAgICAgCi0gICAg
ICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Ioc3R1YkluZm8ucGF0Y2gudXNl
ZFJlZ2lzdGVycyk7Ci0gICAgICAgIGFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOwotI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCi0gICAgICAgIGFsbG9jYXRvci5sb2NrKHN0YXRpY19jYXN0PEdQUlJlZz4o
c3R1YkluZm8ucGF0Y2guYmFzZVRhZ0dQUikpOwotI2VuZGlmCi0gICAgICAgIGFsbG9jYXRvci5s
b2NrKHZhbHVlUmVncyk7Ci0gICAgICAgIGFsbG9jYXRvci5sb2NrKHNjcmF0Y2hHUFIpOwotICAg
ICAgICAKLSAgICAgICAgR1BSUmVnIGludGVybWVkaWF0ZUdQUiA9IHNjcmF0Y2hHUFI7Ci0gICAg
ICAgIEdQUlJlZyBtYXNrR1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAg
ICAgICBHUFJSZWcgbWFza2VkSGFzaEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIo
KTsKLSAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOwotICAgICAgICBHUFJSZWcgb2Zmc2V0R1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRj
aEdQUigpOwotICAgICAgICAKLSAgICAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgICAgIGRh
dGFMb2coImJhc2VHUFIgPSAiLCBiYXNlR1BSLCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2co
InZhbHVlUmVncyA9ICIsIHZhbHVlUmVncywgIlxuIik7Ci0gICAgICAgICAgICBkYXRhTG9nKCJz
Y3JhdGNoR1BSID0gIiwgc2NyYXRjaEdQUiwgIlxuIik7Ci0gICAgICAgICAgICBkYXRhTG9nKCJp
bnRlcm1lZGlhdGVHUFIgPSAiLCBpbnRlcm1lZGlhdGVHUFIsICJcbiIpOwotICAgICAgICAgICAg
ZGF0YUxvZygibWFza0dQUiA9ICIsIG1hc2tHUFIsICJcbiIpOwotICAgICAgICAgICAgZGF0YUxv
ZygibWFza2VkSGFzaEdQUiA9ICIsIG1hc2tlZEhhc2hHUFIsICJcbiIpOwotICAgICAgICAgICAg
ZGF0YUxvZygiaW5kZXhHUFIgPSAiLCBpbmRleEdQUiwgIlxuIik7Ci0gICAgICAgICAgICBkYXRh
TG9nKCJvZmZzZXRHUFIgPSAiLCBvZmZzZXRHUFIsICJcbiIpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0
ZSA9Ci0gICAgICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hp
bmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VG
b3JDQ2FsbCk7Ci0KLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBteUZhaWxBbmRJZ25v
cmU7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgbXlGYWxsVGhyb3VnaDsKLSAgICAg
ICAgCi0gICAgICAgIGppdC5lbWl0TG9hZFN0cnVjdHVyZShiYXNlR1BSLCBpbnRlcm1lZGlhdGVH
UFIsIG1hc2tHUFIpOwotICAgICAgICBqaXQubG9hZFB0cigKLSAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhpbnRlcm1lZGlhdGVHUFIsIFN0cnVjdHVyZTo6cHJvcGVydHlUYWJsZVVu
c2FmZU9mZnNldCgpKSwKLSAgICAgICAgICAgIGludGVybWVkaWF0ZUdQUik7Ci0gICAgICAgIAot
ICAgICAgICBteUZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVs
cGVyczo6WmVybywgaW50ZXJtZWRpYXRlR1BSKSk7Ci0gICAgICAgIAotICAgICAgICBqaXQubG9h
ZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhpbnRlcm1lZGlhdGVHUFIsIFByb3BlcnR5VGFibGU6
Om9mZnNldE9mSW5kZXhNYXNrKCkpLCBtYXNrR1BSKTsKLSAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGludGVybWVkaWF0ZUdQUiwgUHJvcGVydHlUYWJsZTo6b2Zmc2V0
T2ZJbmRleCgpKSwgaW5kZXhHUFIpOwotICAgICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGludGVybWVkaWF0ZUdQUiwgUHJvcGVydHlUYWJsZTo6b2Zm
c2V0T2ZJbmRleFNpemUoKSksCi0gICAgICAgICAgICBpbnRlcm1lZGlhdGVHUFIpOwotCi0gICAg
ICAgIGppdC5tb3ZlKG1hc2tHUFIsIG1hc2tlZEhhc2hHUFIpOwotICAgICAgICBqaXQuYW5kMzIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaGFzaCksIG1hc2tlZEhhc2hHUFIpOwotICAgICAg
ICBqaXQubHNoaWZ0MzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMiksIGludGVybWVkaWF0
ZUdQUik7Ci0gICAgICAgIGppdC5hZGRQdHIoaW5kZXhHUFIsIGludGVybWVkaWF0ZUdQUik7Ci0g
ICAgICAgIAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsK
LSAgICAgICAgCi0gICAgICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoaW5k
ZXhHUFIsIG1hc2tlZEhhc2hHUFIsIENDYWxsSGVscGVyczo6VGltZXNGb3VyKSwgb2Zmc2V0R1BS
KTsKLSAgICAgICAgCi0gICAgICAgIG15RmFsbFRocm91Z2guYXBwZW5kKAotICAgICAgICAgICAg
aml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6RXF1YWwsCi0gICAg
ICAgICAgICAgICAgb2Zmc2V0R1BSLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKFByb3BlcnR5VGFibGU6OkVtcHR5RW50cnlJbmRleCkpKTsKLSAgICAgICAgCi0g
ICAgICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgb2Zmc2V0R1BS
KTsKLSAgICAgICAgaml0Lm11bDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihQ
cm9wZXJ0eU1hcEVudHJ5KSksIG9mZnNldEdQUiwgb2Zmc2V0R1BSKTsKLSAgICAgICAgaml0LmFk
ZFB0cihpbnRlcm1lZGlhdGVHUFIsIG9mZnNldEdQUik7Ci0gICAgICAgIAotICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgY29sbGlzaW9uID0gIGppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KG9mZnNldEdQUiwgT0JKRUNUX09GRlNFVE9GKFByb3BlcnR5TWFwRW50cnksIGtleSkpLAotICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGtleSkpOwotICAgICAgICAKLSAg
ICAgICAgLy8gb2Zmc2V0R1BSIGN1cnJlbnRseSBob2xkcyBhIHBvaW50ZXIgdG8gdGhlIFByb3Bl
cnR5TWFwRW50cnksIHdoaWNoIGhhcyB0aGUgb2Zmc2V0IGFuZCBhdHRyaWJ1dGVzLgotICAgICAg
ICAvLyBDaGVjayB0aGVtIGFuZCB0aGVuIGF0dGVtcHQgdGhlIGxvYWQuCi0gICAgICAgIAotICAg
ICAgICBteUZhbGxUaHJvdWdoLmFwcGVuZCgKLSAgICAgICAgICAgIGppdC5icmFuY2hUZXN0MzIo
Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLAotICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcyhvZmZzZXRHUFIsIE9CSkVDVF9PRkZTRVRPRihQcm9wZXJ0
eU1hcEVudHJ5LCBhdHRyaWJ1dGVzKSksCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoQWNjZXNzb3IgfCBDdXN0b21BY2Nlc3NvcikpKTsKLSAgICAgICAgCi0gICAg
ICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9mZnNldEdQUiwgT0JKRUNUX09G
RlNFVE9GKFByb3BlcnR5TWFwRW50cnksIG9mZnNldCkpLCBvZmZzZXRHUFIpOwotICAgICAgICAK
LSAgICAgICAgaml0LmxvYWRQcm9wZXJ0eShiYXNlR1BSLCBvZmZzZXRHUFIsIHZhbHVlUmVncyk7
Ci0gICAgICAgIAotICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9w
cGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwotICAg
ICAgICAKLSAgICAgICAgY29sbGlzaW9uLmxpbmsoJmppdCk7Ci0KLSAgICAgICAgaml0LmFkZDMy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBtYXNrZWRIYXNoR1BSKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBiZSBzbWFydGVyIGFib3V0IHRoaXMuIEN1cnJl
bnRseSB3ZSdyZSBidXJuaW5nIGEgR1BSIGZvciB0aGUgbWFzay4gQnV0IGxvb3BpbmcKLSAgICAg
ICAgLy8gYXJvdW5kIGlzbid0IHN1cGVyIGNvbW1vbiBzbyB3ZSBjb3VsZCwgZm9yIGV4YW1wbGUs
IHJlY29tcHV0ZSB0aGUgbWFzayBmcm9tIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KLSAgICAgICAg
Ly8gdGhlIHRhYmxlIGFuZCBpbmRleC4gQnV0IGJlZm9yZSB3ZSBkbyB0aGF0IHdlIHNob3VsZCBw
cm9iYWJseSBtYWtlIGl0IGVhc2llciB0byBtdWx0aXBseSBhbmQKLSAgICAgICAgLy8gZGl2aWRl
IGJ5IHRoZSBzaXplIG9mIFByb3BlcnR5TWFwRW50cnkuIFRoYXQgcHJvYmFibHkgaW52b2x2ZXMg
bWFraW5nIFByb3BlcnR5TWFwRW50cnkgYmUgYXJyYW5nZWQKLSAgICAgICAgLy8gdG8gaGF2ZSBh
IHBvd2VyLW9mLTIgc2l6ZS4KLSAgICAgICAgaml0LmFuZDMyKG1hc2tHUFIsIG1hc2tlZEhhc2hH
UFIpOwotICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmaml0KTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMoKSkgewotICAgICAgICAgICAg
bXlGYWlsQW5kSWdub3JlLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9y
ZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICAgICAg
ICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5qdW1wKCkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBteUZhbGxUaHJvdWdoLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICBhbGxv
Y2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRl
KTsKLSAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZChqaXQuanVtcCgpKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKG15RmFpbEFu
ZElnbm9yZSk7Ci0gICAgICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQobXlGYWxsVGhyb3VnaCk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRlZmF1bHQ6IHsKLSAg
ICAgICAgaWYgKHZpYVByb3h5KCkpIHsKLSAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgK
LSAgICAgICAgICAgICAgICBqaXQuYnJhbmNoOCgKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAotICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihQdXJlRm9yd2FyZGluZ1Byb3h5VHlw
ZSkpKTsKLQotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJh
c2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0KLSAgICAgICAg
ICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0
dXJlKAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAotICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlKCkpKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKLSAgICAg
ICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAotICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKLSAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlKCkpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9
IH07Ci0KLSAgICBnZW5lcmF0ZUltcGwoc3RhdGUpOwotfQotCi12b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCi17Ci0gICAgUkVMRUFTRV9BU1NF
UlQobV9zdGF0ZSA9PSBDb21taXR0ZWQpOwotICAgIG1fc3RhdGUgPSBHZW5lcmF0ZWQ7Ci0gICAg
Ci0gICAgZ2VuZXJhdGVJbXBsKHN0YXRlKTsKLX0KLQotdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0
ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKLXsKLSAgICBTdXBlclNhbXBsZXJT
Y29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAg
IGRhdGFMb2coIkdlbmVyYXRpbmcgY29kZSBmb3I6ICIsICp0aGlzLCAiXG4iKTsKLSAgICAKLSAg
ICBBU1NFUlQobV9zdGF0ZSA9PSBHZW5lcmF0ZWQpOyAvLyBXZSByZWx5IG9uIHRoZSBjYWxsZXJz
IHNldHRpbmcgdGhpcyBmb3IgdXMuCi0gICAgCi0gICAgQ0NhbGxIZWxwZXJzJiBqaXQgPSAqc3Rh
dGUuaml0OwotICAgIFZNJiB2bSA9ICpqaXQudm0oKTsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGppdC5jb2RlQmxvY2soKTsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSAq
c3RhdGUuc3R1YkluZm87Ci0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSAqc3RhdGUuaWRl
bnQ7Ci0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gc3RhdGUudmFsdWVSZWdzOwotICAgIEdQ
UlJlZyBiYXNlR1BSID0gc3RhdGUuYmFzZUdQUjsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHN0
YXRlLnNjcmF0Y2hHUFI7Ci0KLSAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuc3RydWN0dXJlc0Vu
c3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSk7Ci0KLSAgICBm
b3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBtX2NvbmRpdGlv
blNldCkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3Qo
KS0+c3RydWN0dXJlKCk7Ci0KLSAgICAgICAgaWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3Vt
aW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAgICAgIHN0cnVjdHVyZS0+
YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3RhdGUuYWRkV2F0Y2hwb2ludChjb25kaXRpb24pKTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFjb25kaXRp
b24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoc3RydWN0dXJlKSkgewotICAgICAgICAgICAgLy8gVGhlIHJlYXNvbiB3aHkgdGhpcyBjYW5u
b3QgaGFwcGVuIGlzIHRoYXQgd2UgcmVxdWlyZSB0aGF0IFBvbHltb3JwaGljQWNjZXNzIGNhbGxz
Ci0gICAgICAgICAgICAvLyBBY2Nlc3NDYXNlOjpnZW5lcmF0ZSgpIG9ubHkgYWZ0ZXIgaXQgaGFz
IHZlcmlmaWVkIHRoYXQKLSAgICAgICAgICAgIC8vIEFjY2Vzc0Nhc2U6OmNvdWxkU3RpbGxTdWNj
ZWVkKCkgcmV0dXJuZWQgdHJ1ZS4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgZGF0YUxvZygi
VGhpcyBjb25kaXRpb24gaXMgbm8gbG9uZ2VyIG1ldDogIiwgY29uZGl0aW9uLCAiXG4iKTsKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBXZSB3aWxsIGVtaXQgY29kZSB0aGF0IGhhcyBhIHdlYWsgcmVmZXJlbmNlIHRoYXQg
aXNuJ3Qgb3RoZXJ3aXNlIGxpc3RlZCBhbnl3aGVyZS4KLSAgICAgICAgc3RhdGUud2Vha1JlZmVy
ZW5jZXMuYXBwZW5kKFdyaXRlQmFycmllcjxKU0NlbGw+KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVy
ZSkpOwotICAgICAgICAKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdGF0ZS5mYWls
QW5kUmVwYXRjaC5hcHBlbmQoCi0gICAgICAgICAgICBqaXQuYnJhbmNoU3RydWN0dXJlKAotICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlKSk7Ci0gICAgfQotCi0gICAgc3dpdGNoICht
X3R5cGUpIHsKLSAgICBjYXNlIEluSGl0OgotICAgIGNhc2UgSW5NaXNzOgotICAgICAgICBqaXQu
Ym94Qm9vbGVhblBheWxvYWQobV90eXBlID09IEluSGl0LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
KTsKLSAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNl
IE1pc3M6Ci0gICAgICAgIGppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIHZhbHVl
UmVncyk7Ci0gICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Y2FzZSBMb2FkOgotICAgIGNhc2UgR2V0R2V0dGVyOgotICAgIGNhc2UgR2V0dGVyOgotICAgIGNh
c2UgU2V0dGVyOgotICAgIGNhc2UgQ3VzdG9tVmFsdWVHZXR0ZXI6Ci0gICAgY2FzZSBDdXN0b21B
Y2Nlc3NvckdldHRlcjoKLSAgICBjYXNlIEN1c3RvbVZhbHVlU2V0dGVyOgotICAgIGNhc2UgQ3Vz
dG9tQWNjZXNzb3JTZXR0ZXI6IHsKLSAgICAgICAgR1BSUmVnIHZhbHVlUmVnc1BheWxvYWRHUFIg
PSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpOwotICAgICAgICAKLSAgICAgICAgaWYgKGlzVmFsaWRP
ZmZzZXQobV9vZmZzZXQpKSB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmU7
Ci0gICAgICAgICAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gbV9jb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRp
b24oKS5vYmplY3QoKS0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBjdXJyU3RydWN0dXJlLT5z
dGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIG9mZnNldCgpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEdQUlJlZyBiYXNlRm9yR2V0R1BSOwotICAgICAgICBpZiAodmlhUHJv
eHkoKSkgewotICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSAhPSBDdXN0b21WYWx1ZVNldHRlciB8
fCBtX3R5cGUgIT0gQ3VzdG9tQWNjZXNzb3JTZXR0ZXIpOyAvLyBCZWNhdXNlIHNldHRlcnMgbmVl
ZCB0byBub3QgdHJhc2ggdmFsdWVSZWdzUGF5bG9hZEdQUi4KLSAgICAgICAgICAgIGlmIChtX3R5
cGUgPT0gR2V0dGVyIHx8IG1fdHlwZSA9PSBTZXR0ZXIpCi0gICAgICAgICAgICAgICAgYmFzZUZv
ckdldEdQUiA9IHNjcmF0Y2hHUFI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
YmFzZUZvckdldEdQUiA9IHZhbHVlUmVnc1BheWxvYWRHUFI7Ci0KLSAgICAgICAgICAgIEFTU0VS
VCgobV90eXBlICE9IEdldHRlciAmJiBtX3R5cGUgIT0gU2V0dGVyKSB8fCBiYXNlRm9yR2V0R1BS
ICE9IGJhc2VHUFIpOwotICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSAhPSBTZXR0ZXIgfHwgYmFz
ZUZvckdldEdQUiAhPSB2YWx1ZVJlZ3NQYXlsb2FkR1BSKTsKLQotICAgICAgICAgICAgaml0Lmxv
YWRQdHIoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpT
UHJveHk6OnRhcmdldE9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBiYXNlRm9yR2V0R1BSKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBiYXNlRm9yR2V0R1BSID0gYmFzZUdQUjsKLQot
ICAgICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUjsKLSAgICAgICAgaWYgKCFtX2NvbmRpdGlv
blNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGppdC5tb3ZlKAotICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihhbHRlcm5hdGVCYXNlKCkpLAotICAgICAgICAg
ICAgICAgIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IHNjcmF0
Y2hHUFI7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmFzZUZvckFjY2Vzc0dQUiA9IGJh
c2VGb3JHZXRHUFI7Ci0KLSAgICAgICAgR1BSUmVnIGxvYWRlZFZhbHVlR1BSID0gSW52YWxpZEdQ
UlJlZzsKLSAgICAgICAgaWYgKG1fdHlwZSAhPSBDdXN0b21WYWx1ZUdldHRlciAmJiBtX3R5cGUg
IT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgJiYgbV90eXBlICE9IEN1c3RvbVZhbHVlU2V0dGVyICYm
IG1fdHlwZSAhPSBDdXN0b21BY2Nlc3NvclNldHRlcikgewotICAgICAgICAgICAgaWYgKG1fdHlw
ZSA9PSBMb2FkIHx8IG1fdHlwZSA9PSBHZXRHZXR0ZXIpCi0gICAgICAgICAgICAgICAgbG9hZGVk
VmFsdWVHUFIgPSB2YWx1ZVJlZ3NQYXlsb2FkR1BSOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGxvYWRlZFZhbHVlR1BSID0gc2NyYXRjaEdQUjsKLQotICAgICAgICAgICAgQVNT
RVJUKChtX3R5cGUgIT0gR2V0dGVyICYmIG1fdHlwZSAhPSBTZXR0ZXIpIHx8IGxvYWRlZFZhbHVl
R1BSICE9IGJhc2VHUFIpOwotICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSAhPSBTZXR0ZXIgfHwg
bG9hZGVkVmFsdWVHUFIgIT0gdmFsdWVSZWdzUGF5bG9hZEdQUik7Ci0KLSAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlR1BSOwotICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG1fb2Zmc2V0
KSkKLSAgICAgICAgICAgICAgICBzdG9yYWdlR1BSID0gYmFzZUZvckFjY2Vzc0dQUjsKLSAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAotICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUZvckFjY2Vzc0dQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIp
OwotICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBsb2FkZWRWYWx1ZUdQUjsKLSAgICAgICAg
ICAgIH0KLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBqaXQubG9hZDY0KAotICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxh
dGl2ZVRvQmFzZShtX29mZnNldCkpLCBsb2FkZWRWYWx1ZUdQUik7Ci0jZWxzZQotICAgICAgICAg
ICAgaWYgKG1fdHlwZSA9PSBMb2FkIHx8IG1fdHlwZSA9PSBHZXRHZXR0ZXIpIHsKLSAgICAgICAg
ICAgICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UobV9vZmZzZXQpICsgVGFnT2Zm
c2V0KSwKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLnRhZ0dQUigpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGppdC5sb2FkMzIoCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG1fb2Zmc2V0KSAr
IFBheWxvYWRPZmZzZXQpLAotICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKLSNlbmRp
ZgotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fdHlwZSA9PSBMb2FkIHx8IG1fdHlwZSA9PSBH
ZXRHZXR0ZXIpIHsKLSAgICAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChPcHRpb25zOjp1c2VET01KSVQoKSAmJiBt
X3R5cGUgPT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIgJiYgbV9yYXJlRGF0YS0+ZG9tSklUKSB7Ci0g
ICAgICAgICAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBlbWl0IENoZWNrRE9NIG9wZXJhdGlvbiBz
aW5jZSBzdHJ1Y3R1cmUgY2hlY2sgZW5zdXJlcwotICAgICAgICAgICAgLy8gdGhhdCB0aGUgc3Ry
dWN0dXJlIG9mIHRoZSBnaXZlbiBiYXNlIHZhbHVlIGlzIHN0cnVjdHVyZSgpISBTbyBhbGwgd2Ug
c2hvdWxkCi0gICAgICAgICAgICAvLyBkbyBpcyBwZXJmb3JtaW5nIHRoZSBDaGVja0RPTSB0aGlu
Z3kgaW4gSUMgY29tcGlsaW5nIHRpbWUgaGVyZS4KLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUo
KS0+Y2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NPZihtX3JhcmVEYXRhLT5kb21KSVQtPnRoaXNDbGFz
c0luZm8oKSkpIHsKLSAgICAgICAgICAgICAgICBlbWl0RE9NSklUR2V0dGVyKHN0YXRlLCBiYXNl
Rm9yR2V0R1BSKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBTdHVmZiBmb3IgY3VzdG9tIGdldHRlcnMvc2V0dGVycy4KLSAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGw7Ci0KLSAgICAgICAgLy8gU3R1
ZmYgZm9yIEpTIGdldHRlcnMvc2V0dGVycy4KLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFi
ZWxQdHIgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hlY2s7Ci0gICAgICAgIENDYWxsSGVscGVyczo6
Q2FsbCBmYXN0UGF0aENhbGw7Ci0gICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENh
bGw7Ci0KLSAgICAgICAgLy8gVGhpcyBhbHNvIGRvZXMgdGhlIG5lY2Vzc2FyeSBjYWxjdWxhdGlv
bnMgb2Ygd2hldGhlciBvciBub3Qgd2UncmUgYW4KLSAgICAgICAgLy8gZXhjZXB0aW9uIGhhbmRs
aW5nIGNhbGwgc2l0ZS4KLSAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRl
IHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgp
OwotCi0gICAgICAgIGF1dG8gcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsID0g
WyZdKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSYgc3BpbGxTdGF0ZSwgYm9vbCBj
YWxsSGFzUmV0dXJuVmFsdWUpIHsKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3Jl
OwotICAgICAgICAgICAgaWYgKGNhbGxIYXNSZXR1cm5WYWx1ZSkgewotICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgdGhlIHJlc3VsdCB2YWx1ZS4gV2UgZG9uJ3Qgd2FudCB0byBvdmVyd3JpdGUg
dGhlIHJlc3VsdCB3aXRoIHdoYXQgd2Ugc3RvcmVkIHRvIHRoZSBzdGFjay4KLSAgICAgICAgICAg
ICAgICAvLyBXZSBzb21ldGltZXMgaGF2ZSB0byBzdG9yZSBpdCB0byB0aGUgc3RhY2sganVzdCBp
biBjYXNlIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBhbmQgbmVlZCB0aGUgb3JpZ2luYWwgdmFsdWUu
Ci0gICAgICAgICAgICAgICAgZG9udFJlc3RvcmUuc2V0KHZhbHVlUmVncyk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNh
bGwoc3BpbGxTdGF0ZSwgZG9udFJlc3RvcmUpOwotICAgICAgICB9OwotCi0gICAgICAgIGppdC5z
dG9yZTMyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUuY2Fs
bFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCi0gICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7Ci0KLSAgICAgICAgaWYgKG1fdHlwZSA9
PSBHZXR0ZXIgfHwgbV90eXBlID09IFNldHRlcikgewotICAgICAgICAgICAgQVNTRVJUKGJhc2VH
UFIgIT0gbG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSAhPSBTZXR0
ZXIgfHwgKGJhc2VHUFIgIT0gdmFsdWVSZWdzUGF5bG9hZEdQUiAmJiBsb2FkZWRWYWx1ZUdQUiAh
PSB2YWx1ZVJlZ3NQYXlsb2FkR1BSKSk7Ci0KLSAgICAgICAgICAgIC8vIENyZWF0ZSBhIEpTIGNh
bGwgdXNpbmcgYSBKUyBjYWxsIGlubGluZSBjYWNoZS4gQXNzdW1lIHRoYXQ6Ci0gICAgICAgICAg
ICAvLwotICAgICAgICAgICAgLy8gLSBTUCBpcyBhbGlnbmVkIGFuZCByZXByZXNlbnRzIHRoZSBl
eHRlbnQgb2YgdGhlIGNhbGxpbmcgY29tcGlsZXIncyBzdGFjayB1c2FnZS4KLSAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAvLyAtIEZQIGlzIHNldCBjb3JyZWN0bHkgKGkuZS4gaXQgcG9pbnRz
IHRvIHRoZSBjYWxsZXIncyBjYWxsIGZyYW1lIGhlYWRlcikuCi0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgLy8gLSBTUCAtIEZQIGlzIGFuIGFsaWduZWQgZGlmZmVyZW5jZS4KLSAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAvLyAtIEFueSBieXRlIGJldHdlZW4gRlAgKGV4Y2x1c2l2ZSkg
YW5kIFNQIChpbmNsdXNpdmUpIGNvdWxkIGJlIGxpdmUgaW4gdGhlIGNhbGxpbmcKLSAgICAgICAg
ICAgIC8vICAgY29kZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGVyZWZvcmUs
IHdlIHRlbXBvcmFyaWx5IGdyb3cgdGhlIHN0YWNrIGZvciB0aGUgcHVycG9zZSBvZiB0aGUgY2Fs
bCBhbmQgdGhlbgotICAgICAgICAgICAgLy8gc2hyaW5rIGl0IGFmdGVyLgotCi0gICAgICAgICAg
ICBzdGF0ZS5zZXRTcGlsbFN0YXRlRm9ySlNHZXR0ZXJTZXR0ZXIoc3BpbGxTdGF0ZSk7Ci0KLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JhcmVEYXRhLT5jYWxsTGlua0luZm8pOwotICAg
ICAgICAgICAgbV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxs
TGlua0luZm8+KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBn
ZW5lcmF0ZWQgYSBwb2x5bW9ycGhpYyBjYWxsIHN0dWIgdGhhdCBqdW1wZWQgYmFjayB0byB0aGUg
Z2V0dGVyCi0gICAgICAgICAgICAvLyBzdHViLCB3aGljaCB0aGVuIGp1bXBlZCBiYWNrIHRvIHRo
ZSBtYWluIGNvZGUsIHRoZW4gd2UnZCBoYXZlIGEgcmVhY2hhYmlsaXR5Ci0gICAgICAgICAgICAv
LyBzaXR1YXRpb24gdGhhdCB0aGUgR0MgZG9lc24ndCBrbm93IGFib3V0LiBUaGUgR0Mgd291bGQg
ZW5zdXJlIHRoYXQgdGhlIHBvbHltb3JwaGljCi0gICAgICAgICAgICAvLyBjYWxsIHN0dWIgc3Rh
eWVkIGFsaXZlLCBhbmQgaXQgd291bGQgZW5zdXJlIHRoYXQgdGhlIG1haW4gY29kZSBzdGF5ZWQg
YWxpdmUsIGJ1dAotICAgICAgICAgICAgLy8gaXQgd291bGRuJ3Qga25vdyB0aGF0IHRoZSBnZXR0
ZXIgc3R1YiB3YXMgYWxpdmUuIElkZWFsbHkgSklUIHN0dWIgcm91dGluZXMgd291bGQKLSAgICAg
ICAgICAgIC8vIGJlIEdDIG9iamVjdHMsIGFuZCB0aGVuIHdlJ2QgYmUgYWJsZSB0byBzYXkgdGhh
dCB0aGUgcG9seW1vcnBoaWMgY2FsbCBzdHViIGhhcyBhCi0gICAgICAgICAgICAvLyByZWZlcmVu
Y2UgdG8gdGhlIGdldHRlciBzdHViLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODkxNAotICAgICAgICAgICAgbV9yYXJlRGF0YS0+Y2Fs
bExpbmtJbmZvLT5kaXNhbGxvd1N0dWJzKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
cmFyZURhdGEtPmNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAotICAgICAgICAgICAgICAgIENhbGxM
aW5rSW5mbzo6Q2FsbCwgc3R1YkluZm8uY29kZU9yaWdpbiwgbG9hZGVkVmFsdWVHUFIpOwotCi0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7Ci0KLSAgICAgICAgICAgIC8v
IFRoZXJlIGlzIGEgInRoaXMiIGFyZ3VtZW50LgotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVy
T2ZQYXJhbWV0ZXJzID0gMTsKLSAgICAgICAgICAgIC8vIC4uLiBhbmQgYSB2YWx1ZSBhcmd1bWVu
dCBpZiB3ZSdyZSBjYWxsaW5nIGEgc2V0dGVyLgotICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBT
ZXR0ZXIpCi0gICAgICAgICAgICAgICAgbnVtYmVyT2ZQYXJhbWV0ZXJzKys7Ci0KLSAgICAgICAg
ICAgIC8vIEdldCB0aGUgYWNjZXNzb3I7IGlmIHRoZXJlIGFpbid0IG9uZSB0aGVuIHRoZSByZXN1
bHQgaXMganNVbmRlZmluZWQoKS4KLSAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gU2V0dGVyKSB7
Ci0gICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwgR2V0dGVyU2V0dGVyOjpvZmZzZXRPZlNl
dHRlcigpKSwKLSAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigKLSAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGxvYWRlZFZhbHVlR1BSLCBHZXR0ZXJTZXR0ZXI6
Om9mZnNldE9mR2V0dGVyKCkpLAotICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCByZXR1cm5V
bmRlZmluZWQgPSBqaXQuYnJhbmNoVGVzdFB0cigKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Olplcm8sIGxvYWRlZFZhbHVlR1BSKTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVy
T2ZSZWdzRm9yQ2FsbCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgbnVtYmVy
T2ZQYXJhbWV0ZXJzOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2Fs
bCA9Ci0gICAgICAgICAgICAgICAgbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3Rl
cikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGFs
aWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9Ci0gICAgICAgICAgICAgICAgV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwp
OwotCi0gICAgICAgICAgICBqaXQuc3ViUHRyKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCi0gICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVz
cygKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAot
ICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSkpOwotCi0gICAgICAgICAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihudW1iZXJPZlBhcmFtZXRlcnMpLAotICAgICAgICAg
ICAgICAgIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSk7Ci0KLSAgICAgICAgICAgIGpp
dC5zdG9yZUNlbGwoCi0gICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIsIGNhbGxlZUZyYW1l
LndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwot
Ci0gICAgICAgICAgICBqaXQuc3RvcmVDZWxsKAotICAgICAgICAgICAgICAgIGJhc2VHUFIsCi0g
ICAgICAgICAgICAgICAgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudCgwKS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKLQotICAgICAgICAgICAg
aWYgKG1fdHlwZSA9PSBTZXR0ZXIpIHsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgK
LSAgICAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAotICAgICAgICAgICAgICAgICAgICBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMSkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93Q2FzZSA9IGppdC5i
cmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgbG9hZGVkVmFsdWVHUFIsIGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrLAotICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSk7Ci0KLSAgICAgICAgICAgIGZh
c3RQYXRoQ2FsbCA9IGppdC5uZWFyQ2FsbCgpOwotICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBH
ZXR0ZXIpCi0gICAgICAgICAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOwotICAg
ICAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0KLSAgICAgICAgICAgIHNsb3dDYXNl
LmxpbmsoJmppdCk7Ci0gICAgICAgICAgICBqaXQubW92ZShsb2FkZWRWYWx1ZUdQUiwgR1BSSW5m
bzo6cmVnVDApOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICAvLyBXZSAqYWx3
YXlzKiBrbm93IHRoYXQgdGhlIGdldHRlci9zZXR0ZXIsIGlmIG5vbi1udWxsLCBpcyBhIGNlbGwu
Ci0gICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOwotI2VuZGlmCi0gICAgICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9yYXJlRGF0YS0+Y2FsbExpbmtJbmZvLmdl
dCgpKSwgR1BSSW5mbzo6cmVnVDIpOwotICAgICAgICAgICAgc2xvd1BhdGhDYWxsID0gaml0Lm5l
YXJDYWxsKCk7Ci0gICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlcikKLSAgICAgICAgICAg
ICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7Ci0gICAgICAgICAgICBkb25lLmFwcGVu
ZChqaXQuanVtcCgpKTsKLQotICAgICAgICAgICAgcmV0dXJuVW5kZWZpbmVkLmxpbmsoJmppdCk7
Ci0gICAgICAgICAgICBpZiAobV90eXBlID09IEdldHRlcikKLSAgICAgICAgICAgICAgICBqaXQu
bW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCB2YWx1ZVJlZ3MpOwotCi0gICAgICAgICAg
ICBkb25lLmxpbmsoJmppdCk7Ci0KLSAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSAtIHN0YXRlLnByZXNlcnZlZFJldXNlZFJlZ2lzdGVyU3RhdGUubnVtYmVyT2ZC
eXRlc1ByZXNlcnZlZCAtIHNwaWxsU3RhdGUubnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lz
dGVyUHJlc2VydmF0aW9uKSwKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICBi
b29sIGNhbGxIYXNSZXR1cm5WYWx1ZSA9IGlzR2V0dGVyKCk7Ci0gICAgICAgICAgICByZXN0b3Jl
TGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoc3BpbGxTdGF0ZSwgY2FsbEhhc1JldHVyblZh
bHVlKTsKLQotICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAotICAgICAgICAgICAgICAgIFs9
LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1f
cmFyZURhdGEtPmNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgICAg
ICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
KHNsb3dQYXRoQ2FsbCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwobGlua0J1ZmZlci5sb2NhdGlvbk9mKGFkZHJlc3NPZkxpbmtGdW5jdGlvbkNoZWNrKSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0
UGF0aENhbGwpKTsKLQotICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3Ip
LmNvZGUoKSkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgQVNTRVJUKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5cGUgPT0gQ3Vz
dG9tQWNjZXNzb3JHZXR0ZXIgfHwgbV90eXBlID09IEN1c3RvbVZhbHVlU2V0dGVyIHx8IG1fdHlw
ZSA9PSBDdXN0b21BY2Nlc3NvclNldHRlcik7Ci0KLSAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFr
ZSByb29tIGZvciB0aGUgQyBjYWxsIHNvIGFueSBvZiBvdXIgc3RhY2sgc3BpbGxhZ2UgaXNuJ3Qg
b3ZlcndyaXR0ZW4uIEl0J3MKLSAgICAgICAgICAgIC8vIGhhcmQgdG8gdHJhY2sgaWYgc29tZW9u
ZSBkaWQgc3BpbGxhZ2Ugb3Igbm90LCBzbyB3ZSBqdXN0IGFzc3VtZSB0aGF0IHdlIGFsd2F5cyBu
ZWVkCi0gICAgICAgICAgICAvLyB0byBtYWtlIHNvbWUgc3BhY2UgaGVyZS4KLSAgICAgICAgICAg
IGppdC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKLQotICAgICAgICAgICAgLy8gZ2V0dGVy
OiBFbmNvZGVkSlNWYWx1ZSAoKkdldFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgLy8gc2V0dGVyOiB2b2lk
ICgqUHV0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSB0aGlzT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB2YWx1ZSk7Ci0gICAgICAgICAgICAvLyBDdXN0b20gdmFsdWVzIGFyZSBw
YXNzZWQgdGhlIHNsb3RCYXNlICh0aGUgcHJvcGVydHkgaG9sZGVyKSwgY3VzdG9tIGFjY2Vzc29y
cyBhcmUgcGFzc2VkIHRoZSB0aGlzVmF1bGUgKHJlY2lldmVyKS4KLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBSZW1vdmUgdGhpcyBkaWZmZXJlbmNlcyBpbiBjdXN0b20gdmFsdWVzIGFuZCBjdXN0b20g
YWNjZXNzb3JzLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1ODAxNAotICAgICAgICAgICAgR1BSUmVnIGJhc2VGb3JDdXN0b21WYWx1ZSA9
IG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5cGUgPT0gQ3VzdG9tVmFsdWVTZXR0
ZXIgPyBiYXNlRm9yQWNjZXNzR1BSIDogYmFzZUZvckdldEdQUjsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICAgICAgaWYgKG1fdHlwZSA9PSBDdXN0b21WYWx1ZUdldHRlciB8fCBtX3R5cGUg
PT0gQ3VzdG9tQWNjZXNzb3JHZXR0ZXIpIHsKLSAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKAotICAgICAgICAgICAgICAgICAgICBiYXNlRm9yQ3VzdG9tVmFs
dWUsCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihpZGVu
dC5pbXBsKCkpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckN1c3RvbVZhbHVlLCB2YWx1ZVJlZ3MuZ3By
KCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGlmIChtX3R5cGUgPT0gQ3VzdG9tVmFsdWVHZXR0ZXIg
fHwgbV90eXBlID09IEN1c3RvbUFjY2Vzc29yR2V0dGVyKSB7Ci0gICAgICAgICAgICAgICAgaml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgRUFCSV8z
MkJJVF9EVU1NWV9BUkcgYmFzZUZvckN1c3RvbVZhbHVlLAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKLSAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlkZW50LmltcGwoKSkpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKAotICAgICAgICAgICAgICAgICAgICBFQUJJXzMyQklUX0RVTU1ZX0FSRyBiYXNl
Rm9yQ3VzdG9tVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAotICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpLCB2YWx1ZVJlZ3MudGFnR1BSKCkpOwotICAgICAgICAgICAgfQotI2VuZGlm
Ci0gICAgICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2
bS50b3BDYWxsRnJhbWUpOwotCi0gICAgICAgICAgICBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwo
KTsKLSAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAgICAgICAgICBbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKG1fcmFyZURhdGEtPmN1c3RvbUFjY2Vzc29y
Lm9wYXF1ZSkpOwotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBpZiAobV90eXBl
ID09IEN1c3RvbVZhbHVlR2V0dGVyIHx8IG1fdHlwZSA9PSBDdXN0b21BY2Nlc3NvckdldHRlcikK
LSAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7Ci0gICAgICAgICAg
ICBqaXQucmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7Ci0KLSAgICAgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcCBub0V4Y2VwdGlvbiA9Ci0gICAgICAgICAgICAgICAgaml0LmVtaXRFeGNl
cHRpb25DaGVjayhDQ2FsbEhlbHBlcnM6OkludmVydGVkRXhjZXB0aW9uQ2hlY2spOwotCi0gICAg
ICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGxXaXRoVGhy
b3duRXhjZXB0aW9uKHNwaWxsU3RhdGUpOwotICAgICAgICAgICAgc3RhdGUuZW1pdEV4cGxpY2l0
RXhjZXB0aW9uSGFuZGxlcigpOwotICAgICAgICAKLSAgICAgICAgICAgIG5vRXhjZXB0aW9uLmxp
bmsoJmppdCk7Ci0gICAgICAgICAgICBib29sIGNhbGxIYXNSZXR1cm5WYWx1ZSA9IGlzR2V0dGVy
KCk7Ci0gICAgICAgICAgICByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoc3Bp
bGxTdGF0ZSwgY2FsbEhhc1JldHVyblZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBzdGF0ZS5z
dWNjZWVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYXNlIFJlcGxhY2U6IHsK
LSAgICAgICAgaWYgKEluZmVycmVkVHlwZSogdHlwZSA9IHN0cnVjdHVyZSgpLT5pbmZlcnJlZFR5
cGVGb3IoaWRlbnQuaW1wbCgpKSkgewotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAg
ICAgICAgICAgZGF0YUxvZygiSGF2ZSB0eXBlOiAiLCB0eXBlLT5kZXNjcmlwdG9yKCksICJcbiIp
OwotICAgICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKAotICAgICAgICAgICAg
ICAgIGppdC5icmFuY2hJZk5vdFR5cGUodmFsdWVSZWdzLCBzY3JhdGNoR1BSLCB0eXBlLT5kZXNj
cmlwdG9yKCkpKTsKLSAgICAgICAgfSBlbHNlIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0
YUxvZygiRG9uJ3QgaGF2ZSB0eXBlLlxuIik7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNJbmxp
bmVPZmZzZXQobV9vZmZzZXQpKSB7Ci0gICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKLSAgICAg
ICAgICAgICAgICB2YWx1ZVJlZ3MsCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKAotICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAotICAgICAgICAgICAgICAgICAgICBK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKwotICAgICAgICAgICAgICAgICAgICBv
ZmZzZXRJbklubGluZVN0b3JhZ2UobV9vZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKLSAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCi0g
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgICAg
ICBzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShtX29mZnNldCkgKiBzaXplb2YoSlNWYWx1
ZSkpKTsKLSAgICAgICAgfQotICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBjYXNlIFRyYW5zaXRpb246IHsKLSAgICAgICAgLy8gQWNjZXNzQ2Fz
ZTo6dHJhbnNpdGlvbigpIHNob3VsZCBoYXZlIHJldHVybmVkIG51bGwgaWYgdGhpcyB3YXNuJ3Qg
dHJ1ZS4KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMg
Pj0gNiB8fCAhc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgfHwgc3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCkpOwotCi0gICAgICAgIGlmIChJbmZlcnJlZFR5cGUqIHR5cGUgPSBuZXdTdHJ1Y3R1cmUoKS0+
aW5mZXJyZWRUeXBlRm9yKGlkZW50LmltcGwoKSkpIHsKLSAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQotICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhdmUgdHlwZTogIiwgdHlwZS0+ZGVzY3JpcHRv
cigpLCAiXG4iKTsKLSAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRSZXBhdGNoLmFwcGVuZCgKLSAg
ICAgICAgICAgICAgICBqaXQuYnJhbmNoSWZOb3RUeXBlKHZhbHVlUmVncywgc2NyYXRjaEdQUiwg
dHlwZS0+ZGVzY3JpcHRvcigpKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmVyYm9zZSkKLSAgICAg
ICAgICAgIGRhdGFMb2coIkRvbid0IGhhdmUgdHlwZS5cbiIpOwotICAgICAgICAKLSAgICAgICAg
Ly8gTk9URTogVGhpcyBsb2dpYyBpcyBkdXBsaWNhdGVkIGluIEFjY2Vzc0Nhc2U6OmRvZXNDYWxs
cygpLiBJdCdzIGltcG9ydGFudCB0aGF0IGRvZXNDYWxscygpIGtub3dzCi0gICAgICAgIC8vIGV4
YWN0bHkgd2hlbiB0aGlzIHdvdWxkIG1ha2UgY2FsbHMuCi0gICAgICAgIGJvb2wgYWxsb2NhdGlu
ZyA9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpOwotICAgICAgICBib29sIHJlYWxsb2NhdGluZyA9IGFsbG9jYXRp
bmcgJiYgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgICAgIGJvb2wgYWxs
b2NhdGluZ0lubGluZSA9IGFsbG9jYXRpbmcgJiYgIXN0cnVjdHVyZSgpLT5jb3VsZEhhdmVJbmRl
eGluZ0hlYWRlcigpOwotCi0gICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0
b3Ioc3R1YkluZm8ucGF0Y2gudXNlZFJlZ2lzdGVycyk7Ci0gICAgICAgIGFsbG9jYXRvci5sb2Nr
KGJhc2VHUFIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGFsbG9jYXRvci5sb2Nr
KHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZVRhZ0dQUikpOwotI2VuZGlm
Ci0gICAgICAgIGFsbG9jYXRvci5sb2NrKHZhbHVlUmVncyk7Ci0gICAgICAgIGFsbG9jYXRvci5s
b2NrKHNjcmF0Y2hHUFIpOwotCi0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IEludmFsaWRH
UFJSZWc7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IEludmFsaWRHUFJSZWc7Ci0gICAg
ICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICBzY3JhdGNoR1BSMiA9IGFs
bG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIzID0g
YWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICB9Ci0KLSAgICAgICAgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0g
ICAgICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0
LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2Fs
bCk7Ci0gICAgICAgIAotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwot
Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNC
ZWVuSW52YWxpZGF0ZWQoKSk7Ci0KLSAgICAgICAgaWYgKGFsbG9jYXRpbmcpIHsKLSAgICAgICAg
ICAgIHNpemVfdCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkg
KiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhbGxvY2F0
aW5nSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3Ig
PSB2bS5hdXhpbGlhcnlTcGFjZS5hbGxvY2F0b3JGb3IobmV3U2l6ZSk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgaWYgKCFhbGxvY2F0b3IpIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gWXVjaywgdGhpcyBjYXNlIHdvdWxkIHN1Y2shCi0gICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChqaXQuanVtcCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGFsbG9jYXRvciksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgICAgICBqaXQuZW1pdEFs
bG9jYXRlKHNjcmF0Y2hHUFIsIGFsbG9jYXRvciwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBz
bG93UGF0aCk7Ci0gICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpZiAocmVhbGxvY2F0aW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEhh
bmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgcmVhbGxvY2F0aW5nIChpLmUuIHRoZSBvbGQgc3Ry
dWN0dXJlL2J1dHRlcmZseQotICAgICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGhhZCBvdXQt
b2YtbGluZSBwcm9wZXJ0eSBzdG9yYWdlKS4KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7Ci0gICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIgPSBuZXcg
c3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBvbGQgc3RvcmFnZSwKLSAgICAgICAgICAgICAgICAgICAg
Ly8gc2NyYXRjaEdQUjIgPSBhdmFpbGFibGUKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6ZTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2NyYXRjaEdQUjMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5zdG9yZVB0cigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BS
MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCArIHNpemVv
ZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yIChz
aXplX3Qgb2Zmc2V0ID0gb2xkU2l6ZTsgb2Zmc2V0IDwgbmV3U2l6ZTsgb2Zmc2V0ICs9IHNpemVv
Zih2b2lkKikpCi0gICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoMCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCAtc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9p
ZCopKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBIYW5kbGUg
dGhlIGNhc2Ugd2hlcmUgd2UgYXJlIGFsbG9jYXRpbmcgb3V0LW9mLWxpbmUgdXNpbmcgYW4gb3Bl
cmF0aW9uLgotICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJhUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZTsKLSAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KGJhc2VH
UFIpOwotICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQodmFsdWVS
ZWdzKTsKLSAgICAgICAgICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUg
c3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGV4
dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaml0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4
Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJpdHMoKSksCi0gICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBqaXQubWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKCFyZWFsbG9jYXRpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAg
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlR1BSKTsKLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25D
YWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAot
ICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DYWxsLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGdW5jdGlvblB0cihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZl
UHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9s
ZCBzdHJ1Y3R1cmUvYnV0dGVyZmx5Ci0gICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFk
IG91dC1vZi1saW5lIHByb3BlcnR5IHN0b3JhZ2UpLgotICAgICAgICAgICAgICAgICAgICBqaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgYmFz
ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVl
KSkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICAgICAgICAgICAg
ICBqaXQuYWRkTGlua1Rhc2soCi0gICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblJlYWxs
b2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBqaXQucmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7Ci0gICAgICAgICAgICAg
ICAgaml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBub0V4Y2VwdGlv
biA9Ci0gICAgICAgICAgICAgICAgICAgIGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxw
ZXJzOjpJbnZlcnRlZEV4Y2VwdGlvbkNoZWNrKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBzdGF0ZS5yZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGxXaXRoVGhy
b3duRXhjZXB0aW9uKHNwaWxsU3RhdGUpOwotICAgICAgICAgICAgICAgIHN0YXRlLmVtaXRFeHBs
aWNpdEV4Y2VwdGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBub0V4Y2VwdGlvbi5saW5rKCZqaXQpOwotICAgICAgICAgICAgICAgIHN0YXRlLnJlc3RvcmVM
aXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRlKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc0lubGluZU9mZnNldChtX29mZnNldCkpIHsKLSAg
ICAgICAgICAgIGppdC5zdG9yZVZhbHVlKAotICAgICAgICAgICAgICAgIHZhbHVlUmVncywKLSAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAg
IGJhc2VHUFIsCi0gICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSArCi0gICAgICAgICAgICAgICAgICAgIG9mZnNldEluSW5saW5lU3RvcmFnZShtX29m
ZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGlmICghYWxsb2NhdGluZykKLSAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRj
aEdQUik7Ci0gICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKLSAgICAgICAgICAgICAgICB2YWx1
ZVJlZ3MsCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IG9mZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAg
ICAgLy8gV2Ugc2V0IHRoZSBuZXcgYnV0dGVyZmx5IGFuZCB0aGUgc3RydWN0dXJlIGxhc3QuIERv
aW5nIGl0IHRoaXMgd2F5IGVuc3VyZXMgdGhhdAotICAgICAgICAgICAgLy8gd2hhdGV2ZXIgd2Ug
aGFkIGRvbmUgdXAgdG8gdGhpcyBwb2ludCBpcyBmb3Jnb3R0ZW4gaWYgd2UgY2hvb3NlIHRvIGJy
YW5jaCB0byBzbG93Ci0gICAgICAgICAgICAvLyBwYXRoLgotICAgICAgICAgICAgaml0Lm51a2VT
dHJ1Y3R1cmVBbmRTdG9yZUJ1dHRlcmZseShzY3JhdGNoR1BSLCBiYXNlR1BSKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgdWludDMyX3Qgc3RydWN0dXJlQml0cyA9IGJpdHdpc2VfY2Fz
dDx1aW50MzJfdD4obmV3U3RydWN0dXJlKCktPmlkKCkpOwotICAgICAgICBqaXQuc3RvcmUzMigK
LSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0cnVjdHVyZUJpdHMpLAot
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSkpOwotCi0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0
ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwotICAgICAgICBzdGF0ZS5zdWNjZWVk
KCk7Ci0gICAgICAgIAotICAgICAgICAvLyBXZSB3aWxsIGhhdmUgYSBzbG93IHBhdGggaWYgd2Ug
d2VyZSBhbGxvY2F0aW5nIHdpdGhvdXQgdGhlIGhlbHAgb2YgYW4gb3BlcmF0aW9uLgotICAgICAg
ICBpZiAoYWxsb2NhdGluZ0lubGluZSkgewotICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5kaWRS
ZXVzZVJlZ2lzdGVycygpKSB7Ci0gICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsK
LSAgICAgICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGlu
ZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdu
b3JlLmFwcGVuZChqaXQuanVtcCgpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKHNsb3dQYXRoKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzbG93UGF0aC5lbXB0eSgpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGNhc2UgQXJyYXlMZW5ndGg6IHsKLSAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRj
aEdQUik7Ci0gICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKAotICAgICAgICAgICAg
aml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgIGppdC5ib3hJbnQzMihzY3JhdGNoR1BS
LCB2YWx1ZVJlZ3MpOwotICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBjYXNlIFN0cmluZ0xlbmd0aDogewotICAgICAgICBqaXQubG9hZDMyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSks
IHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwotICAgICAgICBqaXQuYm94SW50MzIodmFsdWVSZWdz
LnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzKTsKLSAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIEludHJpbnNpY0dldHRlcjog
ewotICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCgpKSk7Ci0KLSAg
ICAgICAgLy8gV2UgbmVlZCB0byBlbnN1cmUgdGhlIGdldHRlciB2YWx1ZSBkb2VzIG5vdCBtb3Zl
IGZyb20gdW5kZXIgdXMuIE5vdGUgdGhhdCBHZXR0ZXJTZXR0ZXJzCi0gICAgICAgIC8vIGFyZSBp
bW11dGFibGUgc28gd2UganVzdCBuZWVkIHRvIHdhdGNoIHRoZSBwcm9wZXJ0eSBub3QgYW55IHZh
bHVlIGluc2lkZSBpdC4KLSAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlOwotICAgICAg
ICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQotICAgICAgICAgICAgY3VyclN0cnVjdHVy
ZSA9IHN0cnVjdHVyZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdXJyU3RydWN0dXJl
ID0gbV9jb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vYmplY3QoKS0+c3RydWN0dXJl
KCk7Ci0gICAgICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxh
Y2VtZW50cyh2bSwgb2Zmc2V0KCkpOwotCi0gICAgICAgIGVtaXRJbnRyaW5zaWNHZXR0ZXIoc3Rh
dGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2FzZSBEaXJlY3RBcmd1bWVudHNM
ZW5ndGg6Ci0gICAgY2FzZSBTY29wZWRBcmd1bWVudHNMZW5ndGg6Ci0gICAgY2FzZSBNZWdhbW9y
cGhpY0xvYWQ6Ci0gICAgICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgaGFuZGxlZCBieSBnZW5lcmF0
ZVdpdGhHdWFyZCgpLCBzaW5jZSB0aGUgZ3VhcmQgaXMgcGFydCBvZiB0aGUKLSAgICAgICAgLy8g
YWxnb3JpdGhtLiBXZSBjYW4gYmUgc3VyZSB0aGF0IG5vYm9keSB3aWxsIGNhbGwgZ2VuZXJhdGUo
KSBkaXJlY3RseSBmb3IgdGhlc2Ugc2luY2UgdGhleQotICAgICAgICAvLyBhcmUgbm90IGd1YXJk
ZWQgYnkgc3RydWN0dXJlIGNoZWNrcy4KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0K
LQotdm9pZCBBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0dGVyKEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZSYgc3RhdGUsIEdQUlJlZyBiYXNlRm9yR2V0R1BSKQotewotICAgIENDYWxsSGVscGVycyYgaml0
ID0gKnN0YXRlLmppdDsKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSAqc3RhdGUu
c3R1YkluZm87Ci0gICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gc3RhdGUudmFsdWVSZWdzOwot
ICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGUuYmFzZUdQUjsKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHN0YXRlLnNjcmF0Y2hHUFI7Ci0KLSAgICAvLyBXZSBjb25zdHJ1Y3QgdGhlIGVudmlyb25t
ZW50IHRoYXQgY2FuIGV4ZWN1dGUgdGhlIERPTUpJVDo6UGF0Y2hwb2ludCBoZXJlLgotICAgIFJl
ZjxET01KSVQ6OkNhbGxET01HZXR0ZXJQYXRjaHBvaW50PiBwYXRjaHBvaW50ID0gbV9yYXJlRGF0
YS0+ZG9tSklULT5jYWxsRE9NR2V0dGVyKCk7Ci0KLSAgICBWZWN0b3I8R1BSUmVnPiBncFNjcmF0
Y2g7Ci0gICAgVmVjdG9yPEZQUlJlZz4gZnBTY3JhdGNoOwotICAgIFZlY3RvcjxET01KSVQ6OlZh
bHVlPiByZWdzOwotCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcihzdHVi
SW5mby5wYXRjaC51c2VkUmVnaXN0ZXJzKTsKLSAgICBhbGxvY2F0b3IubG9jayhiYXNlR1BSKTsK
LSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGFsbG9jYXRvci5sb2NrKHN0YXRpY19jYXN0PEdQ
UlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZVRhZ0dQUikpOwotI2VuZGlmCi0gICAgYWxsb2NhdG9y
LmxvY2sodmFsdWVSZWdzKTsKLSAgICBhbGxvY2F0b3IubG9jayhzY3JhdGNoR1BSKTsKLQotICAg
IEdQUlJlZyBwYXJhbUJhc2VHUFIgPSBJbnZhbGlkR1BSUmVnOwotICAgIEdQUlJlZyBwYXJhbUds
b2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgSlNWYWx1ZVJlZ3MgcGFyYW1WYWx1
ZVJlZ3MgPSB2YWx1ZVJlZ3M7Ci0gICAgR1BSUmVnIHJlbWFpbmluZ1NjcmF0Y2hHUFIgPSBJbnZh
bGlkR1BSUmVnOwotCi0gICAgLy8gdmFsdWVSZWdzIGFuZCBiYXNlRm9yR2V0R1BSIG1heSBiZSB0
aGUgc2FtZS4gRm9yIGV4YW1wbGUsIGluIEJhc2VsaW5lIEpJVCwgd2UgcGFzcyB0aGUgc2FtZSBy
ZWdUMCBmb3IgYmFzZUdQUiBhbmQgdmFsdWVSZWdzLgotICAgIC8vIEluIEZUTCwgdGhlcmUgaXMg
bm8gY29uc3RyYWludCB0aGF0IHRoZSBiYXNlRm9yR2V0R1BSIGludGVyZmVyZXMgd2l0aCB0aGUg
cmVzdWx0LiBUbyBtYWtlIGltcGxlbWVudGF0aW9uIHNpbXBsZSBpbgotICAgIC8vIERPTUpJVDo6
UGF0Y2hwb2ludCwgRE9NSklUOjpQYXRjaHBvaW50IGFzc3VtZXMgdGhhdCByZXN1bHQgcmVnaXN0
ZXJzIGFsd2F5cyBlYXJseSBpbnRlcmZlcmUgd2l0aCBpbnB1dCByZWdpc3RlcnMsIGluIHRoaXMg
Y2FzZSwKLSAgICAvLyBiYXNlRm9yR2V0R1BSLiBTbyB3ZSBtb3ZlIGJhc2VGb3JHZXRHUFIgdG8g
dGhlIG90aGVyIHJlZ2lzdGVyIGlmIGJhc2VGb3JHZXRHUFIgPT0gdmFsdWVSZWdzLgotICAgIGlm
IChiYXNlRm9yR2V0R1BSICE9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpIHsKLSAgICAgICAgcGFy
YW1CYXNlR1BSID0gYmFzZUZvckdldEdQUjsKLSAgICAgICAgaWYgKCFwYXRjaHBvaW50LT5yZXF1
aXJlR2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgcmVtYWluaW5nU2NyYXRjaEdQUiA9IHNjcmF0
Y2hHUFI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcmFtR2xvYmFsT2JqZWN0R1BSID0g
c2NyYXRjaEdQUjsKLSAgICB9IGVsc2UgewotICAgICAgICBqaXQubW92ZSh2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgcGFyYW1CYXNlR1BSID0gc2NyYXRjaEdQ
UjsKLSAgICAgICAgaWYgKHBhdGNocG9pbnQtPnJlcXVpcmVHbG9iYWxPYmplY3QpCi0gICAgICAg
ICAgICBwYXJhbUdsb2JhbE9iamVjdEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIo
KTsKLSAgICB9Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0Rm9yRE9NSklUID0g
c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpOwotCi0gICAgcmVncy5hcHBlbmQocGFyYW1WYWx1
ZVJlZ3MpOwotICAgIHJlZ3MuYXBwZW5kKHBhcmFtQmFzZUdQUik7Ci0gICAgaWYgKHBhdGNocG9p
bnQtPnJlcXVpcmVHbG9iYWxPYmplY3QpIHsKLSAgICAgICAgQVNTRVJUKHBhcmFtR2xvYmFsT2Jq
ZWN0R1BSICE9IEludmFsaWRHUFJSZWcpOwotICAgICAgICByZWdzLmFwcGVuZChET01KSVQ6OlZh
bHVlKHBhcmFtR2xvYmFsT2JqZWN0R1BSLCBnbG9iYWxPYmplY3RGb3JET01KSVQpKTsKLSAgICB9
Ci0KLSAgICBpZiAocGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKSB7Ci0gICAgICAg
IHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBpZiAocmVtYWluaW5nU2NyYXRjaEdQUiAhPSBJbnZh
bGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICBncFNjcmF0Y2guYXBwZW5kKHJlbWFpbmluZ1NjcmF0
Y2hHUFIpOwotICAgICAgICAgICAgKytpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoOyBpIDwg
cGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzOyArK2kpCi0gICAgICAgICAgICBncFNj
cmF0Y2guYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKSk7Ci0gICAgfQotCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lz
dGVyczsgKytpKQotICAgICAgICBmcFNjcmF0Y2guYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZVNj
cmF0Y2hGUFIoKSk7Ci0KLSAgICAvLyBMZXQncyBzdG9yZSB0aGUgcmV1c2VkIHJlZ2lzdGVycyB0
byB0aGUgc3RhY2suIEFmdGVyIHRoYXQsIHdlIGNhbiB1c2UgYWxsb2NhdGVkIHNjcmF0Y2ggcmVn
aXN0ZXJzLgotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJlc2VydmVkU3RhdGUgcHJl
c2VydmVkU3RhdGUgPQotICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNC
eVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6
U3BhY2VGb3JDQ2FsbCk7Ci0KLSAgICBpZiAodmVyYm9zZSkgewotICAgICAgICBkYXRhTG9nKCJi
YXNlR1BSID0gIiwgYmFzZUdQUiwgIlxuIik7Ci0gICAgICAgIGRhdGFMb2coInZhbHVlUmVncyA9
ICIsIHZhbHVlUmVncywgIlxuIik7Ci0gICAgICAgIGRhdGFMb2coInNjcmF0Y2hHUFIgPSAiLCBz
Y3JhdGNoR1BSLCAiXG4iKTsKLSAgICAgICAgZGF0YUxvZygicGFyYW1CYXNlR1BSID0gIiwgcGFy
YW1CYXNlR1BSLCAiXG4iKTsKLSAgICAgICAgaWYgKHBhcmFtR2xvYmFsT2JqZWN0R1BSICE9IElu
dmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBkYXRhTG9nKCJwYXJhbUdsb2JhbE9iamVjdEdQUiA9
ICIsIHBhcmFtR2xvYmFsT2JqZWN0R1BSLCAiXG4iKTsKLSAgICAgICAgZGF0YUxvZygicGFyYW1W
YWx1ZVJlZ3MgPSAiLCBwYXJhbVZhbHVlUmVncywgIlxuIik7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnM7ICsraSkKLSAg
ICAgICAgICAgIGRhdGFMb2coImdwU2NyYXRjaFsiLCBpLCAiXSA9ICIsIGdwU2NyYXRjaFtpXSwg
IlxuIik7Ci0gICAgfQotCi0gICAgaWYgKHBhdGNocG9pbnQtPnJlcXVpcmVHbG9iYWxPYmplY3Qp
Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmpl
Y3RGb3JET01KSVQpLCBwYXJhbUdsb2JhbE9iamVjdEdQUik7Ci0KLSAgICAvLyBXZSBqdXN0IHNw
aWxsIHRoZSByZWdpc3RlcnMgdXNlZCBpbiBET01KSVQ6OlBhdGNocG9pbnQgaGVyZS4gRm9yIG5v
dCBzcGlsbGVkIHJlZ2lzdGVycyBoZXJlIGV4cGxpY2l0bHksCi0gICAgLy8gdGhleSBtdXN0IGJl
IGluIHRoZSB1c2VkIHJlZ2lzdGVyIHNldCBwYXNzZWQgYnkgdGhlIGNhbGxlcnMgKEJhc2VsaW5l
LCBERkcsIGFuZCBGVEwpIGlmIHRoZXkgbmVlZCB0byBiZSBrZXB0LgotICAgIC8vIFNvbWUgcmVn
aXN0ZXJzIGNhbiBiZSBsb2NrZWQsIGJ1dCBub3QgaW4gdGhlIHVzZWQgcmVnaXN0ZXIgc2V0LiBG
b3IgZXhhbXBsZSwgdGhlIGNhbGxlciBjb3VsZCBtYWtlIGJhc2VHUFIKLSAgICAvLyBzYW1lIHRv
IHZhbHVlUmVncywgYW5kIG5vdCBpbmNsdWRlIGl0IGluIHRoZSB1c2VkIHJlZ2lzdGVycyBzaW5j
ZSBpdCB3aWxsIGJlIGNoYW5nZWQuCi0gICAgUmVnaXN0ZXJTZXQgcmVnaXN0ZXJzVG9TcGlsbEZv
ckNDYWxsOwotICAgIGZvciAoYXV0byYgdmFsdWUgOiByZWdzKSB7Ci0gICAgICAgIERPTUpJVDo6
UmVnIHJlZyA9IHZhbHVlLnJlZygpOwotICAgICAgICBpZiAocmVnLmlzSlNWYWx1ZVJlZ3MoKSkK
LSAgICAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVnLmpzVmFsdWVSZWdz
KCkpOwotICAgICAgICBlbHNlIGlmIChyZWcuaXNHUFIoKSkKLSAgICAgICAgICAgIHJlZ2lzdGVy
c1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVnLmdwcigpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChyZWcuZnByKCkpOwotICAgIH0KLSAgICBm
b3IgKEdQUlJlZyByZWcgOiBncFNjcmF0Y2gpCi0gICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JD
Q2FsbC5zZXQocmVnKTsKLSAgICBmb3IgKEZQUlJlZyByZWcgOiBmcFNjcmF0Y2gpCi0gICAgICAg
IHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVnKTsKLSAgICByZWdpc3RlcnNUb1NwaWxs
Rm9yQ0NhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6cmVnaXN0ZXJzVG9Ob3RTYXZlRm9yQ0NhbGwo
KSk7Ci0KLSAgICBET01KSVRBY2Nlc3NDYXNlUGF0Y2hwb2ludFBhcmFtcyBwYXJhbXMoV1RGTW92
ZShyZWdzKSwgV1RGTW92ZShncFNjcmF0Y2gpLCBXVEZNb3ZlKGZwU2NyYXRjaCkpOwotICAgIHBh
dGNocG9pbnQtPmdlbmVyYXRvcigpLT5ydW4oaml0LCBwYXJhbXMpOwotICAgIGFsbG9jYXRvci5y
ZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwotICAg
IHN0YXRlLnN1Y2NlZWQoKTsKLQotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9u
cyA9IHBhcmFtcy5lbWl0U2xvd1BhdGhDYWxscyhzdGF0ZSwgcmVnaXN0ZXJzVG9TcGlsbEZvckND
YWxsLCBqaXQpOwotICAgIGlmICghZXhjZXB0aW9ucy5lbXB0eSgpKSB7Ci0gICAgICAgIGV4Y2Vw
dGlvbnMubGluaygmaml0KTsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3Rl
cnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7Ci0gICAgICAgIHN0YXRlLmVtaXRFeHBs
aWNpdEV4Y2VwdGlvbkhhbmRsZXIoKTsKLSAgICB9Ci19CiAKIFBvbHltb3JwaGljQWNjZXNzOjpQ
b2x5bW9ycGhpY0FjY2VzcygpIHsgfQogUG9seW1vcnBoaWNBY2Nlc3M6On5Qb2x5bW9ycGhpY0Fj
Y2VzcygpIHsgfQpAQCAtMTc1NiwzMiArMzk4LDYgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQ
b2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSgKICAgICBtX2xpc3QucmVzaXplKGRzdEluZGV4
KTsKICAgICAKICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiSW4gcmVnZW5lcmF0
ZTogY2FzZXM6ICIsIGxpc3REdW1wKGNhc2VzKSwgIlxuIik7Ci0gICAgCi0gICAgLy8gTm93IHRo
YXQgd2UndmUgcmVtb3ZlZCBvYnZpb3VzbHkgdW5uZWNlc3NhcnkgY2FzZXMsIHdlIGNhbiBjaGVj
ayBpZiB0aGUgbWVnYW1vcnBoaWMgbG9hZAotICAgIC8vIG9wdGltaXphdGlvbiBpcyBhcHBsaWNh
YmxlLiBOb3RlIHRoYXQgd2UgYmFzaWNhbGx5IHR1bmUgbWVnYW1vcnBoaWNMb2FkQ29zdCBhY2Nv
cmRpbmcgdG8gY29kZQotICAgIC8vIHNpemUuIEl0IHdvdWxkIGJlIGZhc3RlciB0byBqdXN0IGFs
bG93IG1vcmUgcmVwYXRjaGluZyB3aXRoIG1hbnkgbG9hZCBjYXNlcywgYW5kIGF2b2lkIHRoZQot
ICAgIC8vIG1lZ2Ftb3JwaGljTG9hZCBvcHRpbWl6YXRpb24sIGlmIHdlIGhhZCBpbmZpbml0ZSBl
eGVjdXRhYmxlIG1lbW9yeS4KLSAgICBpZiAoY2FzZXMuc2l6ZSgpID49IE9wdGlvbnM6Om1heEFj
Y2Vzc1ZhcmlhbnRMaXN0U2l6ZSgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIG51bVNlbGZMb2FkcyA9
IDA7Ci0gICAgICAgIGZvciAoYXV0byYgbmV3Q2FzZSA6IGNhc2VzKSB7Ci0gICAgICAgICAgICBp
ZiAobmV3Q2FzZS0+Y2FuQmVSZXBsYWNlZEJ5TWVnYW1vcnBoaWNMb2FkKCkpCi0gICAgICAgICAg
ICAgICAgbnVtU2VsZkxvYWRzKys7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChu
dW1TZWxmTG9hZHMgPj0gT3B0aW9uczo6bWVnYW1vcnBoaWNMb2FkQ29zdCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoYXV0byBtZWdhID0gQWNjZXNzQ2FzZTo6bWVnYW1vcnBoaWNMb2FkKHZtLCBjb2Rl
QmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgY2FzZXMucmVtb3ZlQWxsTWF0Y2hpbmcoCi0gICAg
ICAgICAgICAgICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+JiBuZXdDYXNl
KSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdDYXNlLT5jYW5C
ZVJlcGxhY2VkQnlNZWdhbW9ycGhpY0xvYWQoKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFdURk1vdmUobWVn
YSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICBkYXRhTG9nKCJPcHRpbWl6ZWQgY2FzZXM6ICIsIGxpc3REdW1wKGNhc2Vz
KSwgIlxuIik7CiAgICAgCiAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSdyZSBjb252aW5jZWQgdGhh
dCAnY2FzZXMnIGNvbnRhaW5zIHRoZSBjYXNlcyB0aGF0IHdlIHdhbnQgdG8gSklUIG5vdyBhbmQg
d2UKQEAgLTE5NzgsOSArNTk0LDYgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZSkKICAgICBjYXNlIEFjY2Vzc0Nhc2U6Okxv
YWQ6CiAgICAgICAgIG91dC5wcmludCgiTG9hZCIpOwogICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBBY2Nlc3NDYXNlOjpNZWdhbW9ycGhpY0xvYWQ6Ci0gICAgICAgIG91dC5wcmludCgiTWVnYW1v
cnBoaWNMb2FkIik7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEFjY2Vzc0Nhc2U6OlRyYW5z
aXRpb246CiAgICAgICAgIG91dC5wcmludCgiVHJhbnNpdGlvbiIpOwogICAgICAgICByZXR1cm47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vz
cy5oCmluZGV4IDZmNzAxYzVmYWY5ZjFjM2MwNzYwYTAzNzNmMzFlNjg3ZjNlYTEwNmQuLmQxODUy
YzdiNTQ1M2QxZTFlNTU0MDlhMmJhMGU0YjhmOGFkOGU4OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCkBAIC0yNyw2ICsyNyw3
IEBACiAKICNpZiBFTkFCTEUoSklUKQogCisjaW5jbHVkZSAiQWNjZXNzQ2FzZS5oIgogI2luY2x1
ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUg
IkpTRnVuY3Rpb25JbmxpbmVzLmgiCkBAIC00NywyNzcgKzQ4LDYgQEAgY2xhc3MgU3RydWN0dXJl
U3R1YkluZm87CiBjbGFzcyBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm87CiBjbGFzcyBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I7CiAKLXN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU7
Ci0KLS8vIEFuIEFjY2Vzc0Nhc2UgZGVzY3JpYmVzIG9uZSBvZiB0aGUgY2FzZXMgb2YgYSBQb2x5
bW9ycGhpY0FjY2Vzcy4gQSBQb2x5bW9ycGhpY0FjY2VzcyByZXByZXNlbnRzIGEKLS8vIHBsYW5u
ZWQgKHRvIGdlbmVyYXRlIGluIGZ1dHVyZSkgb3IgZ2VuZXJhdGVkIHN0dWIgZm9yIHNvbWUgaW5s
aW5lIGNhY2hlLiBUaGF0IHN0dWIgY29udGFpbnMgZmFzdAotLy8gcGF0aCBjb2RlIGZvciBzb21l
IGZpbml0ZSBudW1iZXIgb2YgZmFzdCBjYXNlcywgZWFjaCBkZXNjcmliZWQgYnkgYW4gQWNjZXNz
Q2FzZSBvYmplY3QuCi0vLwotLy8gQW4gQWNjZXNzQ2FzZSBvYmplY3QgaGFzIGEgbGlmZWN5Y2xl
IHRoYXQgcHJvY2VlZHMgdGhyb3VnaCBzZXZlcmFsIHN0YXRlcy4gTm90ZSB0aGF0IHRoZSBzdGF0
ZXMKLS8vIG9mIEFjY2Vzc0Nhc2UgaGF2ZSBhIGxvdCB0byBkbyB3aXRoIHRoZSBnbG9iYWwgZWZm
ZWN0IGVwb2NoICh3ZSdsbCBzYXkgZXBvY2ggZm9yIHNob3J0KS4gVGhpcyBpcwotLy8gYSBzaW1w
bGUgd2F5IG9mIHJlYXNvbmluZyBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIHN5c3RlbSBvdXRzaWRl
IHRoaXMgQWNjZXNzQ2FzZS4gQW55IG9ic2VydmFibGUKLS8vIGVmZmVjdCAtIGxpa2Ugc3Rvcmlu
ZyB0byBhIHByb3BlcnR5LCBjaGFuZ2luZyBhbiBvYmplY3QncyBzdHJ1Y3R1cmUsIGV0Yy4gLSBp
bmNyZW1lbnRzIHRoZSBlcG9jaC4KLS8vIFRoZSBzdGF0ZXMgYXJlOgotLy8KLS8vIFByaW1vcmRp
YWw6ICAgVGhpcyBpcyBhbiBBY2Nlc3NDYXNlIHRoYXQgd2FzIGp1c3QgYWxsb2NhdGVkLiBJdCBk
b2VzIG5vdCBjb3JyZXNwb25kIHRvIGFueSBhY3R1YWwKLS8vICAgICAgICAgICAgICAgY29kZSBh
bmQgaXQgaXMgbm90IG93bmVkIGJ5IGFueSBQb2x5bW9ycGhpY0FjY2Vzcy4gSW4gdGhpcyBzdGF0
ZSwgdGhlIEFjY2Vzc0Nhc2UKLS8vICAgICAgICAgICAgICAgYXNzdW1lcyB0aGF0IGl0IGlzIGlu
IHRoZSBzYW1lIGVwb2NoIGFzIHdoZW4gaXQgd2FzIGNyZWF0ZWQuIFRoaXMgaXMgaW1wb3J0YW50
Ci0vLyAgICAgICAgICAgICAgIGJlY2F1c2UgaXQgbWF5IG1ha2UgY2xhaW1zIGFib3V0IGl0c2Vs
ZiAoIkkgcmVwcmVzZW50IGEgdmFsaWQgY2FzZSBzbyBsb25nIGFzIHlvdQotLy8gICAgICAgICAg
ICAgICByZWdpc3RlciBhIHdhdGNocG9pbnQgb24gdGhpcyBzZXQiKSB0aGF0IGNvdWxkIGJlIGNv
bnRyYWRpY3RlZCBieSBzb21lIG91dHNpZGUKLS8vICAgICAgICAgICAgICAgZWZmZWN0cyAobGlr
ZSBmaXJpbmcgYW5kIGRlbGV0aW5nIHRoZSB3YXRjaHBvaW50IHNldCBpbiBxdWVzdGlvbikuIFRo
aXMgaXMgYWxzbyB0aGUKLS8vICAgICAgICAgICAgICAgc3RhdGUgdGhhdCBhbiBBY2Nlc3NDYXNl
IGlzIGluIHdoZW4gaXQgaXMgY2xvbmVkIChBY2Nlc3NDYXNlOjpjbG9uZSgpKS4KLS8vCi0vLyBD
b21taXR0ZWQ6ICAgIFRoaXMgaGFwcGVucyBhcyBzb29uIGFzIHNvbWUgUG9seW1vcnBoaWNBY2Nl
c3MgdGFrZXMgb3duZXJzaGlwIG9mIHRoaXMgQWNjZXNzQ2FzZS4KLS8vICAgICAgICAgICAgICAg
SW4gdGhpcyBzdGF0ZSwgdGhlIEFjY2Vzc0Nhc2Ugbm8gbG9uZ2VyIGFzc3VtZXMgYW55dGhpbmcg
YWJvdXQgdGhlIGVwb2NoLiBUbwotLy8gICAgICAgICAgICAgICBhY2NvbXBsaXNoIHRoaXMsIFBv
bHltb3JwaGljQWNjZXNzIGNhbGxzIEFjY2Vzc0Nhc2U6OmNvbW1pdCgpLiBUaGlzIG11c3QgYmUg
ZG9uZQotLy8gICAgICAgICAgICAgICBkdXJpbmcgdGhlIHNhbWUgZXBvY2ggd2hlbiB0aGUgQWNj
ZXNzQ2FzZSB3YXMgY3JlYXRlZCwgZWl0aGVyIGJ5IHRoZSBjbGllbnQgb3IgYnkKLS8vICAgICAg
ICAgICAgICAgY2xvbmUoKS4gV2hlbiBjcmVhdGVkIGJ5IHRoZSBjbGllbnQsIGNvbW1pdHRpbmcg
ZHVyaW5nIHRoZSBzYW1lIGVwb2NoIHdvcmtzIGJlY2F1c2UKLS8vICAgICAgICAgICAgICAgd2Ug
Y2FuIGJlIHN1cmUgdGhhdCB3aGF0ZXZlciB3YXRjaHBvaW50IHNldHMgdGhleSBzcG9rZSBvZiBh
cmUgc3RpbGwgdmFsaWQuIFdoZW4KLS8vICAgICAgICAgICAgICAgY3JlYXRlZCBieSBjbG9uZSgp
LCB3ZSBjYW4gYmUgc3VyZSB0aGF0IHRoZSBzZXQgaXMgc3RpbGwgdmFsaWQgYmVjYXVzZSB0aGUg
b3JpZ2luYWwKLS8vICAgICAgICAgICAgICAgb2YgdGhlIGNsb25lIHN0aWxsIGhhcyB3YXRjaHBv
aW50cyBvbiBpdC4KLS8vCi0vLyBHZW5lcmF0ZWQ6ICAgIFRoaXMgaXMgdGhlIHN0YXRlIHdoZW4g
dGhlIFBvbHltb3JwaGljQWNjZXNzIGdlbmVyYXRlcyBjb2RlIGZvciB0aGlzIGNhc2UgYnkKLS8v
ICAgICAgICAgICAgICAgY2FsbGluZyBBY2Nlc3NDYXNlOjpnZW5lcmF0ZSgpIG9yIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlV2l0aEd1YXJkKCkuIEF0IHRoaXMgcG9pbnQKLS8vICAgICAgICAgICAgICAg
dGhlIGNhc2Ugb2JqZWN0IHdpbGwgaGF2ZSBzb21lIGV4dHJhIHN0dWZmIGluIGl0LCBsaWtlIHBv
c3NpYmx5IHRoZSBDYWxsTGlua0luZm8KLS8vICAgICAgICAgICAgICAgb2JqZWN0IGFzc29jaWF0
ZWQgd2l0aCB0aGUgaW5saW5lIGNhY2hlLgotLy8gICAgICAgICAgICAgICBGSVhNRTogTW92aW5n
IGludG8gdGhlIEdlbmVyYXRlZCBzdGF0ZSBzaG91bGQgbm90IG11dGF0ZSB0aGUgQWNjZXNzQ2Fz
ZSBvYmplY3Qgb3IKLS8vICAgICAgICAgICAgICAgcHV0IG1vcmUgc3R1ZmYgaW50byBpdC4gSWYg
d2UgZml4IHRoaXMsIHRoZW4gd2UgY2FuIGdldCByaWQgb2YgQWNjZXNzQ2FzZTo6Y2xvbmUoKS4K
LS8vICAgICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NjQ1NgotLy8KLS8vIEFuIEFjY2Vzc0Nhc2UgbWF5IGJlIGRlc3Ryb3llZCB3aGlsZSBpbiBh
bnkgb2YgdGhlc2Ugc3RhdGVzLgotLy8KLS8vIFdlIHdpbGwgc29tZXRpbWVzIGJ1ZmZlciBjb21t
aXR0ZWQgQWNjZXNzQ2FzZXMgaW4gdGhlIFBvbHltb3JwaGljQWNjZXNzIG9iamVjdCBiZWZvcmUg
Z2VuZXJhdGluZwotLy8gY29kZS4gVGhpcyBhbGxvd3MgdXMgdG8gb25seSByZWdlbmVyYXRlIG9u
Y2Ugd2UndmUgYWNjdW11bGF0ZWQgKGhvcGVmdWxseSkgbW9yZSB0aGFuIG9uZSBuZXcKLS8vIEFj
Y2Vzc0Nhc2UuCi1jbGFzcyBBY2Nlc3NDYXNlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShB
Y2Nlc3NDYXNlKTsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBl
bnVtIEFjY2Vzc1R5cGUgOiB1aW50OF90IHsKLSAgICAgICAgTG9hZCwKLSAgICAgICAgTWVnYW1v
cnBoaWNMb2FkLAotICAgICAgICBUcmFuc2l0aW9uLAotICAgICAgICBSZXBsYWNlLAotICAgICAg
ICBNaXNzLAotICAgICAgICBHZXRHZXR0ZXIsCi0gICAgICAgIEdldHRlciwKLSAgICAgICAgU2V0
dGVyLAotICAgICAgICBDdXN0b21WYWx1ZUdldHRlciwKLSAgICAgICAgQ3VzdG9tQWNjZXNzb3JH
ZXR0ZXIsCi0gICAgICAgIEN1c3RvbVZhbHVlU2V0dGVyLAotICAgICAgICBDdXN0b21BY2Nlc3Nv
clNldHRlciwKLSAgICAgICAgSW50cmluc2ljR2V0dGVyLAotICAgICAgICBJbkhpdCwKLSAgICAg
ICAgSW5NaXNzLAotICAgICAgICBBcnJheUxlbmd0aCwKLSAgICAgICAgU3RyaW5nTGVuZ3RoLAot
ICAgICAgICBEaXJlY3RBcmd1bWVudHNMZW5ndGgsCi0gICAgICAgIFNjb3BlZEFyZ3VtZW50c0xl
bmd0aAotICAgIH07Ci0gICAgCi0gICAgZW51bSBTdGF0ZSA6IHVpbnQ4X3QgewotICAgICAgICBQ
cmltb3JkaWFsLAotICAgICAgICBDb21taXR0ZWQsCi0gICAgICAgIEdlbmVyYXRlZAotICAgIH07
Ci0KLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHRyeUdldCgKLSAgICAg
ICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0
dXJlKiwKLSAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQoKSwKLSAgICAgICAgYm9vbCB2aWFQcm94eSA9IGZhbHNlLAot
ICAgICAgICBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0ID0gbnVsbHB0cik7Ci0KLSAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGdldCgKLSAgICAgICAgVk0mLCBKU0Nl
bGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwKLSAgICAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQoKSwKLSAgICAgICAgYm9vbCB2aWFQcm94eSA9IGZhbHNlLAotICAgICAgICBXYXRj
aHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0ID0gbnVsbHB0ciwKLSAgICAgICAgUHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmMgPSBudWxscHRyLAotICAgICAgICBKU09iamVjdCogY3VzdG9tU2xvdEJh
c2UgPSBudWxscHRyLAotICAgICAgICBET01KSVQ6OkdldHRlclNldHRlciogPSBudWxscHRyKTsK
LSAgICAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG1lZ2Ftb3JwaGlj
TG9hZChWTSYsIEpTQ2VsbCogb3duZXIpOwotICAgIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gcmVwbGFjZShWTSYsIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSosIFBy
b3BlcnR5T2Zmc2V0KTsKLQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
dHJhbnNpdGlvbigKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0LAotICAgICAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCgpKTsKLQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gc2V0
dGVyKAotICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFN0cnVjdHVyZSos
IFByb3BlcnR5T2Zmc2V0LAotICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYsIFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jID0gbnVsbHB0ciwKLSAgICAgICAgSlNP
YmplY3QqIGN1c3RvbVNsb3RCYXNlID0gbnVsbHB0cik7Ci0KLSAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IGluKAotICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vz
c1R5cGUsIFN0cnVjdHVyZSosCi0gICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwotCi0gICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBnZXRMZW5ndGgoVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nl
c3NUeXBlKTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGdldEludHJp
bnNpYyhWTSYsIEpTQ2VsbCogb3duZXIsIEpTRnVuY3Rpb24qIGludHJpbnNpYywgUHJvcGVydHlP
ZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jik7Ci0g
ICAgCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBmcm9tU3RydWN0dXJl
U3R1YkluZm8oVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotCi0gICAg
fkFjY2Vzc0Nhc2UoKTsKLSAgICAKLSAgICBBY2Nlc3NUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KLSAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0K
LSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQot
ICAgIGJvb2wgdmlhUHJveHkoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0
YS0+dmlhUHJveHkgOiBmYWxzZTsgfQotICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX3R5cGUgPT0gVHJhbnNpdGlvbikKLSAgICAgICAg
ICAgIHJldHVybiBtX3N0cnVjdHVyZS0+cHJldmlvdXNJRCgpOwotICAgICAgICByZXR1cm4gbV9z
dHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgfQotICAgIGJvb2wgZ3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2so
KSBjb25zdDsKLQotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHJhbnNpdGlvbik7Ci0gICAgICAgIHJldHVybiBtX3N0
cnVjdHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KLSAgICBK
U0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlvbigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQodHlwZSgpID09IEludHJpbnNpY0dldHRlciAmJiBtX3JhcmVEYXRhKTsKLSAgICAgICAgcmV0
dXJuIG1fcmFyZURhdGEtPmludHJpbnNpY0Z1bmN0aW9uLmdldCgpOwotICAgIH0KLSAgICBJbnRy
aW5zaWMgaW50cmluc2ljKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbnRyaW5zaWNG
dW5jdGlvbigpLT5pbnRyaW5zaWMoKTsKLSAgICB9Ci0KLSAgICBET01KSVQ6OkdldHRlclNldHRl
ciogZG9tSklUKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKLSAg
ICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPmRvbUpJVDsKLSAgICB9Ci0KLSAgICBXYXRjaHBvaW50
U2V0KiBhZGRpdGlvbmFsU2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3JhcmVE
YXRhID8gbV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldC5nZXQoKSA6IG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+Y3VzdG9tU2xvdEJhc2UuZ2V0KCkgOiBudWxs
cHRyOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3Q7Ci0KLSAg
ICAvLyBJZiB5b3Ugc3VwcGx5IHRoZSBvcHRpb25hbCB2ZWN0b3IsIHRoaXMgd2lsbCBhcHBlbmQg
dGhlIHNldCBvZiBjZWxscyB0aGF0IHRoaXMgd2lsbCBuZWVkIHRvIGtlZXAgYWxpdmUKLSAgICAv
LyBwYXN0IHRoZSBjYWxsLgotICAgIGJvb2wgZG9lc0NhbGxzKFZlY3RvcjxKU0NlbGwqPiogY2Vs
bHNUb01hcmsgPSBudWxscHRyKSBjb25zdDsKLQotICAgIGJvb2wgaXNHZXR0ZXIoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKLSAgICAgICAgY2FzZSBHZXR0ZXI6Ci0g
ICAgICAgIGNhc2UgQ3VzdG9tVmFsdWVHZXR0ZXI6Ci0gICAgICAgIGNhc2UgQ3VzdG9tQWNjZXNz
b3JHZXR0ZXI6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoaXMg
Y2FuIHJldHVybiBudWxsIGV2ZW4gZm9yIGEgZ2V0dGVyL3NldHRlciwgaWYgaXQgaGFzbid0IGJl
ZW4gZ2VuZXJhdGVkIHlldC4gVGhhdCdzCi0gICAgLy8gYWN0dWFsbHkgc29tZXdoYXQgbGlrZWx5
IGJlY2F1c2Ugb2YgaG93IHdlIGRvIGJ1ZmZlcmluZyBvZiBuZXcgY2FzZXMuCi0gICAgQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8oKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX3JhcmVE
YXRhKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBtX3JhcmVE
YXRhLT5jYWxsTGlua0luZm8uZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIC8vIElzIGl0IHN0aWxs
IHBvc3NpYmxlIGZvciB0aGlzIGNhc2UgdG8gZXZlciBiZSB0YWtlbj8gIE11c3QgY2FsbCB0aGlz
IGFzIGEgcHJlcmVxdWlzaXRlIGZvcgotICAgIC8vIGNhbGxpbmcgZ2VuZXJhdGUoKSBhbmQgZnJp
ZW5kcy4gIElmIHRoaXMgcmV0dXJucyB0cnVlLCB0aGVuIHlvdSBjYW4gY2FsbCBnZW5lcmF0ZSgp
LiAgSWYKLSAgICAvLyB0aGlzIHJldHVybnMgZmFsc2UsIHRoZW4gZ2VuZXJhdGUoKSB3aWxsIGNy
YXNoLiAgWW91IG11c3QgY2FsbCBnZW5lcmF0ZSgpIGluIHRoZSBzYW1lIGVwb2NoCi0gICAgLy8g
YXMgd2hlbiB5b3UgY2FsbGVkIGNvdWxkU3RpbGxTdWNjZWVkKCkuCi0gICAgYm9vbCBjb3VsZFN0
aWxsU3VjY2VlZCgpIGNvbnN0OwotICAgIAotICAgIHN0YXRpYyBib29sIGNhbkVtaXRJbnRyaW5z
aWNHZXR0ZXIoSlNGdW5jdGlvbiosIFN0cnVjdHVyZSopOwotCi0gICAgYm9vbCBjYW5CZVJlcGxh
Y2VkQnlNZWdhbW9ycGhpY0xvYWQoKSBjb25zdDsKLQotICAgIC8vIElmIHRoaXMgbWV0aG9kIHJl
dHVybnMgdHJ1ZSwgdGhlbiBpdCdzIGEgZ29vZCBpZGVhIHRvIHJlbW92ZSAnb3RoZXInIGZyb20g
dGhlIGFjY2VzcyBvbmNlICd0aGlzJwotICAgIC8vIGlzIGFkZGVkLiBUaGlzIG1ldGhvZCBhc3N1
bWVzIHRoYXQgaW4gY2FzZSBvZiBjb250cmFkaWN0aW9ucywgJ3RoaXMnIHJlcHJlc2VudHMgYSBu
ZXdlciwgYW5kIHNvCi0gICAgLy8gbW9yZSB1c2VmdWwsIHRydXRoLiBUaGlzIG1ldGhvZCBjYW4g
YmUgY29uc2VydmF0aXZlOyBpdCB3aWxsIHJldHVybiBmYWxzZSB3aGVuIGl0IGRvdWJ0LgotICAg
IGJvb2wgY2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcikgY29uc3Q7Ci0KLSAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAgIGZy
aWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgZnJpZW5kIGNsYXNzIFBvbHltb3JwaGljQWNjZXNz
OwotCi0gICAgQWNjZXNzQ2FzZSgpOwotCi0gICAgYm9vbCB2aXNpdFdlYWsoVk0mKSBjb25zdDsK
LSAgICBib29sIHByb3BhZ2F0ZVRyYW5zaXRpb25zKFNsb3RWaXNpdG9yJikgY29uc3Q7Ci0gICAg
Ci0gICAgLy8gRklYTUU6IFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBvZiBob3cgQWNjZXNzQ2Fz
ZSBwdXRzIHBvc3QtZ2VuZXJhdGlvbiB0aGluZ3MgaW50byBpdHNlbGYuCi0gICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ1NgotICAgIHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBjbG9uZSgpIGNvbnN0OwotICAgIAotICAgIC8vIFBlcmZvcm0gYW55
IGFjdGlvbiB0aGF0IG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBlcG9j
aCBpbiB3aGljaCB0aGUgY2FzZQotICAgIC8vIHdhcyBjcmVhdGVkLiBSZXR1cm5zIGEgc2V0IG9m
IHdhdGNocG9pbnQgc2V0cyB0aGF0IHdpbGwgbmVlZCB0byBiZSB3YXRjaGVkLgotICAgIFZlY3Rv
cjxXYXRjaHBvaW50U2V0KiwgMj4gY29tbWl0KFZNJiwgY29uc3QgSWRlbnRpZmllciYpOwotCi0g
ICAgLy8gRmFsbCB0aHJvdWdoIG9uIHN1Y2Nlc3MuIFR3byBraW5kcyBvZiBmYWlsdXJlcyBhcmUg
c3VwcG9ydGVkOiBmYWxsLXRocm91Z2gsIHdoaWNoIG1lYW5zIHRoYXQgd2UKLSAgICAvLyBzaG91
bGQgdHJ5IGEgZGlmZmVyZW50IGNhc2U7IGFuZCBmYWlsdXJlLCB3aGljaCBtZWFucyB0aGF0IHRo
aXMgd2FzIHRoZSByaWdodCBjYXNlIGJ1dCBpdCBuZWVkcwotICAgIC8vIGhlbHAgZnJvbSB0aGUg
c2xvdyBwYXRoLgotICAgIHZvaWQgZ2VuZXJhdGVXaXRoR3VhcmQoQWNjZXNzR2VuZXJhdGlvblN0
YXRlJiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWxsVGhyb3VnaCk7Ci0KLSAgICAvLyBG
YWxsIHRocm91Z2ggb24gc3VjY2VzcywgYWRkIGEganVtcCB0byB0aGUgZmFpbHVyZSBsaXN0IG9u
IGZhaWx1cmUuCi0gICAgdm9pZCBnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmKTsKLSAg
ICAKLSAgICB2b2lkIGdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmKTsKLSAgICB2
b2lkIGVtaXRJbnRyaW5zaWNHZXR0ZXIoQWNjZXNzR2VuZXJhdGlvblN0YXRlJik7Ci0gICAgdm9p
ZCBlbWl0RE9NSklUR2V0dGVyKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYsIEdQUlJlZyBiYXNlRm9y
R2V0R1BSKTsKLSAgICAKLSAgICBBY2Nlc3NUeXBlIG1fdHlwZSB7IExvYWQgfTsKLSAgICBTdGF0
ZSBtX3N0YXRlIHsgUHJpbW9yZGlhbCB9OwotICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0IHsg
aW52YWxpZE9mZnNldCB9OwotCi0gICAgLy8gVXN1YWxseSB0aGlzIGlzIHRoZSBzdHJ1Y3R1cmUg
dGhhdCB3ZSBleHBlY3QgdGhlIGJhc2Ugb2JqZWN0IHRvIGhhdmUuIEJ1dCwgdGhpcyBpcyB0aGUg
Km5ldyoKLSAgICAvLyBzdHJ1Y3R1cmUgZm9yIGEgdHJhbnNpdGlvbiBhbmQgd2UgcmVseSBvbiB0
aGUgZmFjdCB0aGF0IGl0IGhhcyBhIHN0cm9uZyByZWZlcmVuY2UgdG8gdGhlIG9sZAotICAgIC8v
IHN0cnVjdHVyZS4gRm9yIHByb3hpZXMsIHRoaXMgaXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgb2Jq
ZWN0IGJlaGluZCB0aGUgcHJveHkuCi0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1
Y3R1cmU7Ci0KLSAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsK
LQotICAgIGNsYXNzIFJhcmVEYXRhIHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci0gICAgcHVibGljOgotICAgICAgICBSYXJlRGF0YSgpCi0gICAgICAgICAgICA6IHZpYVByb3h5
KGZhbHNlKQotICAgICAgICAgICAgLCBkb21KSVQobnVsbHB0cikKLSAgICAgICAgewotICAgICAg
ICAgICAgY3VzdG9tQWNjZXNzb3Iub3BhcXVlID0gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgYm9vbCB2aWFQcm94eTsKLSAgICAgICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+
IGFkZGl0aW9uYWxTZXQ7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBs
aXZlIGluIHRoZSBzdHViIHJvdXRpbmUgb2JqZWN0LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NDU2Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua0luZm8+IGNhbGxMaW5rSW5mbzsKLSAgICAgICAgdW5pb24gewotICAgICAgICAg
ICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyOwotICAgICAgICAgICAgUHV0UHJv
cGVydHlTbG90OjpQdXRWYWx1ZUZ1bmMgc2V0dGVyOwotICAgICAgICAgICAgdm9pZCogb3BhcXVl
OwotICAgICAgICB9IGN1c3RvbUFjY2Vzc29yOwotICAgICAgICBXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+IGN1c3RvbVNsb3RCYXNlOwotICAgICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gaW50
cmluc2ljRnVuY3Rpb247Ci0gICAgICAgIERPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVQ7Ci0g
ICAgfTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKLX07Ci0K
IGNsYXNzIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgewogcHVibGljOgogICAgIGVudW0gS2luZCB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJveHlhYmxlQWNj
ZXNzQ2FzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJveHlhYmxlQWNj
ZXNzQ2FzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjM4NzljNGRlNGNkZDQ5YmJmMzgyODQyYzNhNGFkNTI0
NmU3MWI1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qcm94eWFibGVBY2Nlc3NDYXNlLmNwcApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlByb3h5YWJsZUFjY2Vzc0Nhc2UuaCIKKworI2lmIEVOQUJMRShKSVQpCisKK25hbWVz
cGFjZSBKU0MgeworCitQcm94eWFibGVBY2Nlc3NDYXNlOjpQcm94eWFibGVBY2Nlc3NDYXNlKFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0LCBib29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRp
dGlvbmFsU2V0KQorICAgIDogQmFzZSh2bSwgb3duZXIsIGFjY2Vzc1R5cGUsIG9mZnNldCwgc3Ry
dWN0dXJlLCBjb25kaXRpb25TZXQpCisgICAgLCBtX3ZpYVByb3h5KHZpYVByb3h5KQorICAgICwg
bV9hZGRpdGlvbmFsU2V0KGFkZGl0aW9uYWxTZXQpCit7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQs
IGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQpCit7CisgICAgQVNT
RVJUKHR5cGUgPT0gTG9hZCB8fCB0eXBlID09IE1pc3MgfHwgdHlwZSA9PSBHZXRHZXR0ZXIpOwor
ICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4obmV3IFByb3h5YWJsZUFjY2Vz
c0Nhc2Uodm0sIG93bmVyLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCB2
aWFQcm94eSwgYWRkaXRpb25hbFNldCkpOworfQorCitQcm94eWFibGVBY2Nlc3NDYXNlOjp+UHJv
eHlhYmxlQWNjZXNzQ2FzZSgpCit7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBQ
cm94eWFibGVBY2Nlc3NDYXNlOjpjbG9uZSgpIGNvbnN0Cit7CisgICAgc3RkOjp1bmlxdWVfcHRy
PFByb3h5YWJsZUFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgUHJveHlhYmxlQWNjZXNzQ2FzZSgqdGhp
cykpOworICAgIHJlc3VsdC0+cmVzZXRTdGF0ZSgpOworICAgIHJldHVybiBXVEZNb3ZlKHJlc3Vs
dCk7Cit9CisKK3ZvaWQgUHJveHlhYmxlQWNjZXNzQ2FzZTo6ZHVtcEltcGwoUHJpbnRTdHJlYW0m
IG91dCwgQ29tbWFQcmludGVyJiBjb21tYSkgY29uc3QKK3sKKyAgICBCYXNlOjpkdW1wSW1wbChv
dXQsIGNvbW1hKTsKKyAgICBvdXQucHJpbnQoY29tbWEsICJ2aWFQcm94eSA9ICIsIHZpYVByb3h5
KCkpOworICAgIG91dC5wcmludChjb21tYSwgImFkZGl0aW9uYWxTZXQgPSAiLCBSYXdQb2ludGVy
KGFkZGl0aW9uYWxTZXQoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHJveHlhYmxlQWNjZXNzQ2FzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1By
b3h5YWJsZUFjY2Vzc0Nhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NzhiZTIyMjg1NzkzMGE0NTcyN2I0YWU0
NzRkOTJkMWE5Njk1Y2EwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1Byb3h5YWJsZUFjY2Vzc0Nhc2UuaApAQCAtMCwwICsxLDU5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQWNjZXNzQ2FzZS5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgUHJveHlhYmxlQWNjZXNzQ2FzZSA6IHB1YmxpYyBBY2Nlc3NDYXNlIHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIEFjY2Vzc0Nhc2UgQmFzZTsKKworICAgIGJvb2wgdmlhUHJveHko
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3ZpYVByb3h5OyB9CisgICAgV2F0Y2hwb2ludFNl
dCogYWRkaXRpb25hbFNldCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYWRkaXRpb25hbFNl
dC5nZXQoKTsgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBjcmVh
dGUoVk0mLCBKU0NlbGwqLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQoKSwKKyAgICAgICAgYm9vbCB2aWFQcm94eSA9IGZhbHNlLCBXYXRjaHBvaW50U2V0KiBh
ZGRpdGlvbmFsU2V0ID0gbnVsbHB0cik7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFt
JiwgQ29tbWFQcmludGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB+UHJveHlhYmxlQWNjZXNz
Q2FzZSgpOworCitwcm90ZWN0ZWQ6CisgICAgUHJveHlhYmxlQWNjZXNzQ2FzZShWTSYsIEpTQ2Vs
bCosIEFjY2Vzc1R5cGUsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0
aW9uYWxTZXQpOworCitwcml2YXRlOgorICAgIGJvb2wgbV92aWFQcm94eTsKKyAgICBSZWZQdHI8
V2F0Y2hwb2ludFNldD4gbV9hZGRpdGlvbmFsU2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCmluZGV4IGZjMGE0NzJkYjJiZTUwODk1OTUwNGNjYjgx
NmRlNmNiZDVmNTE4NDEuLmZkYWRmNzAyMmFkM2RjZTM1YTYzYzc5MWY2OTI3MzIwMWE1NTM0NzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5j
cHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUg
IkNvbXBsZXhHZXRTdGF0dXMuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgi
CiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5o
IgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKQEAgLTIyNyw3ICsyMjgsNyBAQCBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKICAgICAgICAgICAgICAgICBj
YXNlIENvbXBsZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKICAgICAgICAgICAgICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyA9CiAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBhY2Nlc3Mu
Y2FsbExpbmtJbmZvKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvID0gYWNjZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY2FsbExp
bmtJbmZvKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsTGlua1N0YXR1cyA9IENh
bGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2tlciwgcHJvZmlsZWRCbG9jaywgKmNhbGxMaW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCmluZGV4IDM4ZTVjZWY5MjM3YTA4NmI2YjQ2MWZm
ZGYzOWY5YWQ0NGNlZTdiNjUuLjcwYjc2N2M1NzczODU5ZGFjMjAzOGM0OTE1OWFhMDUzOGRlMjgx
ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcApAQCAtMjE2LDggKzIxNiw4IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86
OnJlc2V0KENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIH0KIAogICAgIHN3aXRjaCAoYWNjZXNz
VHlwZSkgewotICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHVyZToKLSAgICAgICAgcmVzZXRHZXRC
eUlEKGNvZGVCbG9jaywgKnRoaXMsIEdldEJ5SURLaW5kOjpQdXJlKTsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OlRyeUdldDoKKyAgICAgICAgcmVzZXRHZXRCeUlEKGNvZGVCbG9jaywgKnRoaXMsIEdl
dEJ5SURLaW5kOjpUcnkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6Okdl
dDoKICAgICAgICAgcmVzZXRHZXRCeUlEKGNvZGVCbG9jaywgKnRoaXMsIEdldEJ5SURLaW5kOjpO
b3JtYWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAppbmRleCAzOWI3MjFmMTRiMGUwNzQ0M2MwY2UyMDZiZmI4MTc3MTg5YTM2MDY0
Li5iMDkxZTIxNTdhNjQzMTI2Y2FiMGY3ZGVjNGVjODkxZjYwZWMxNzBjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaApAQCAtNDcs
NyArNDcsNyBAQCBjbGFzcyBQb2x5bW9ycGhpY0FjY2VzczsKIAogZW51bSBjbGFzcyBBY2Nlc3NU
eXBlIDogaW50OF90IHsKICAgICBHZXQsCi0gICAgR2V0UHVyZSwKKyAgICBUcnlHZXQsCiAgICAg
UHV0LAogICAgIEluCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAppbmRleCA3NjVjM2I0ODhkYzIyNzQxMmI1MzEyYTA1MzVmZWI2YzEyN2Q2
YTIzLi44ODJjOWUwMWZlNDdhOTc1NjRmODQxOTQ0OWY0NDA4Y2I4ODc0YmYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtNDUzMSw3
ICs0NTMxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1p
dCkKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1f
ZGZnQ29kZUJsb2NrLAogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fc3R1Yklu
Zm9zLCBtX2RmZ1N0dWJJbmZvcywKICAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigp
LCB1aWQpOwotICAgICAgICAgICAgQWNjZXNzVHlwZSB0eXBlID0gb3BfdHJ5X2dldF9ieV9pZCA9
PSBvcGNvZGVJRCA/IEFjY2Vzc1R5cGU6OkdldFB1cmUgOiBBY2Nlc3NUeXBlOjpHZXQ7CisgICAg
ICAgICAgICBBY2Nlc3NUeXBlIHR5cGUgPSBvcF90cnlfZ2V0X2J5X2lkID09IG9wY29kZUlEID8g
QWNjZXNzVHlwZTo6VHJ5R2V0IDogQWNjZXNzVHlwZTo6R2V0OwogCiAgICAgICAgICAgICB1bnNp
Z25lZCBvcGNvZGVMZW5ndGggPSBvcGNvZGVJRCA9PSBvcF90cnlfZ2V0X2J5X2lkID8gT1BDT0RF
X0xFTkdUSChvcF90cnlfZ2V0X2J5X2lkKSA6IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApp
bmRleCAwZDhhNGYwNmRkMGMwNGQ3Y2ZmNjVkOTUxNGRlZDljNWNiNDlmZjU2Li4wOTIxOWQxZDdi
YTliY2RiZTUzNzEwYTEzNDI2MmI2ODU4ZjczOThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMTAwNiw3ICsxMDA2LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRyeUdldEJ5SWQoTm9kZSogbm9kZSkKIAogICAgICAg
ICBiYXNlLnVzZSgpOwogCi0gICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBiYXNlUmVncywgcmVzdWx0UmVncywgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBKSVRD
b21waWxlcjo6SnVtcCgpLCBOZWVkVG9TcGlsbCwgQWNjZXNzVHlwZTo6R2V0UHVyZSk7CisgICAg
ICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBiYXNlUmVncywgcmVzdWx0
UmVncywgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBKSVRDb21waWxlcjo6SnVtcCgpLCBOZWVk
VG9TcGlsbCwgQWNjZXNzVHlwZTo6VHJ5R2V0KTsKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdFJlZ3MsIG5vZGUsIERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KTsKICAgICAgICAgYnJlYWs7CkBAIC0xMDIzLDcgKzEwMjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlVHJ5R2V0QnlJZChOb2RlKiBub2RlKQogCiAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZVJlZ3MpOwogCi0gICAg
ICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBiYXNlUmVncywgcmVzdWx0
UmVncywgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsLCBOZWVkVG9TcGlsbCwgQWNj
ZXNzVHlwZTo6R2V0UHVyZSk7CisgICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBiYXNlUmVncywgcmVzdWx0UmVncywgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBu
b3RDZWxsLCBOZWVkVG9TcGlsbCwgQWNjZXNzVHlwZTo6VHJ5R2V0KTsKIAogICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUsIERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5DYWxs
ZWRFeHBsaWNpdGx5KTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggOGYwMGYxY2NjZjRjNGQzYjE3Y2ExY2UzMDVk
NTVhZjAyNDliMTk2Yy4uNjQyMGU2N2RlMjdkY2Y3N2NhOWJmMWU5Y2ZlZjhiYjVmYWUwNWI4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAt
NjI2LDcgKzYyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb21waWxlUHV0U3RydWN0dXJl
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUcnlHZXRCeUlkOgotICAgICAg
ICAgICAgY29tcGlsZUdldEJ5SWQoQWNjZXNzVHlwZTo6R2V0UHVyZSk7CisgICAgICAgICAgICBj
b21waWxlR2V0QnlJZChBY2Nlc3NUeXBlOjpUcnlHZXQpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgR2V0QnlJZDoKICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CkBAIC0yODE0
LDcgKzI4MTQsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEJ5SWQoQWNj
ZXNzVHlwZSB0eXBlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHR5cGUgPT0gQWNjZXNzVHlwZTo6
R2V0IHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6R2V0UHVyZSk7CisgICAgICAgIEFTU0VSVCh0eXBl
ID09IEFjY2Vzc1R5cGU6OkdldCB8fCB0eXBlID09IEFjY2Vzc1R5cGU6OlRyeUdldCk7CiAgICAg
ICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBD
ZWxsVXNlOiB7CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKGdldEJ5SWQobG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKSwgdHlwZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9JbnRyaW5zaWNFbWl0dGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSW50cmlu
c2ljRW1pdHRlci5jcHAKaW5kZXggYzgyYjhhM2RiMmYyYjY4YzM3NDNiOTU0N2ZhNWNkNzNkMzA4
YzlkOC4uNGZiN2E1OTA5ZGRkNWFmYzJjNTQxZDJhM2IyZWJhYTJjZDc3NzQ3NiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JbnRyaW5zaWNFbWl0dGVyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ludHJpbnNpY0VtaXR0ZXIuY3BwCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgi
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSW50cmluc2ljR2V0dGVyQWNjZXNz
Q2FzZS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiSlNDSlNW
YWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCkBAIC00OCw3ICs0OSw3
IEBAIHR5cGVkZWYgQ0NhbGxIZWxwZXJzOjpJbW1QdHIgSW1tUHRyOwogdHlwZWRlZiBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW02NCBUcnVzdGVkSW1tNjQ7CiB0eXBlZGVmIENDYWxsSGVscGVyczo6
SW1tNjQgSW1tNjQ7CiAKLWJvb2wgQWNjZXNzQ2FzZTo6Y2FuRW1pdEludHJpbnNpY0dldHRlcihK
U0Z1bmN0aW9uKiBnZXR0ZXIsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorYm9vbCBJbnRyaW5zaWNH
ZXR0ZXJBY2Nlc3NDYXNlOjpjYW5FbWl0SW50cmluc2ljR2V0dGVyKEpTRnVuY3Rpb24qIGdldHRl
ciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAKICAgICBzd2l0Y2ggKGdldHRlci0+aW50cmlu
c2ljKCkpIHsKQEAgLTY4LDcgKzY5LDcgQEAgYm9vbCBBY2Nlc3NDYXNlOjpjYW5FbWl0SW50cmlu
c2ljR2V0dGVyKEpTRnVuY3Rpb24qIGdldHRlciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUKICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIEFjY2Vzc0Nhc2U6OmVtaXRJ
bnRyaW5zaWNHZXR0ZXIoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKK3ZvaWQgSW50cmlu
c2ljR2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdEludHJpbnNpY0dldHRlcihBY2Nlc3NHZW5lcmF0aW9u
U3RhdGUmIHN0YXRlKQogewogICAgIENDYWxsSGVscGVycyYgaml0ID0gKnN0YXRlLmppdDsKICAg
ICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBzdGF0ZS52YWx1ZVJlZ3M7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCBhOWIyNGU4MTE3OGVmZmNkYzFi
ODNkNGIwMWM2ZTgzOTlmNzVhZTU4Li5hMWQ0ZTczNTFiMjYyMmZmZDAwYzFkZGNhNDY0MDZlMjhh
NGEwNmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
QEAgLTIxMSw3ICsyMTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blRyeUdldEJ5SWRPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdAogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgaWYgKHN0dWJJbmZv
LT5jb25zaWRlckNhY2hpbmcoZXhlYy0+Y29kZUJsb2NrKCksIGJhc2VWYWx1ZS5zdHJ1Y3R1cmVP
ck51bGwoKSkgJiYgIXNsb3QuaXNUYWludGVkQnlPcGFxdWVPYmplY3QoKSAmJiAoc2xvdC5pc0Nh
Y2hlYWJsZVZhbHVlKCkgfHwgc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpIHx8IHNsb3QuaXNVbnNl
dCgpKSkKLSAgICAgICAgcmVwYXRjaEdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBpZGVudCwgc2xv
dCwgKnN0dWJJbmZvLCBHZXRCeUlES2luZDo6UHVyZSk7CisgICAgICAgIHJlcGF0Y2hHZXRCeUlE
KGV4ZWMsIGJhc2VWYWx1ZSwgaWRlbnQsIHNsb3QsICpzdHViSW5mbywgR2V0QnlJREtpbmQ6OlRy
eSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNsb3QuZ2V0UHVyZVJlc3VsdCgpKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAK
aW5kZXggOGRjZjQ5Y2UwMTEyYmQ0NzAwODI4NGNjMmUwYjE4MjUwZTc2NjE4Zi4uYmZmNTM2MDhk
N2E1NDBjOTQ4NjEzNmFlODNkNWU4YzBjZmExNzVkYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTU3OSw3ICs1NzksNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9m
ZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
aWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFj
Y2Vzc1R5cGU6OkdldFB1cmUpOworICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6VHJ5R2V0KTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggNWYxNGU5MDZi
Y2MxMTlhOThiNGYxZWMxNGY2MDVmODM5ZWI5Yzc0Yy4uYmMzNGIzMDAwN2UzZjNiYzEzOGVlNzUw
ZjcwNTI0YTkxMmMwZjdjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCkBAIC01OTQsNyArNTk0LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KGN1cnJlbnRJbnN0cnVjdGlv
biksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgaWRl
bnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0UHVyZSk7CisgICAgICAgIGlkZW50LT5pbXBs
KCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEFjY2Vzc1R5cGU6OlRyeUdldCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmluZGV4IDI4
ZWY3YzY1NmJhNzgzYTg0MDA4MWQ2NmU4MWUzZjkyZTgwMjhjNTMuLmQyZmI2MDQzYjc5ZjVjZGMx
YjFjZDhlN2I4ZTUzMGU5OTEwNDdhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcApAQCAtMzksOCArMzksMTAgQEAKICNpbmNsdWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkdldHRlclNldHRl
ci5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlckFjY2Vzc0Nhc2UuaCIKICNpbmNsdWRlICJJQ1N0
YXRzLmgiCiAjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVkZSAiSW50cmluc2ljR2V0
dGVyQWNjZXNzQ2FzZS5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpJVElubGluZXMu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC0xNzYsMTggKzE3OCwxOCBAQCBzdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBiYXNlVmFsdWUsIGNvbgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgY29kZUJsb2NrLCBB
Y2Nlc3NDYXNlOjpBcnJheUxlbmd0aCk7CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2Fz
ZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoKTsKICAgICAg
ICAgfSBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpCi0gICAgICAgICAgICBuZXdDYXNl
ID0gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlN0cmlu
Z0xlbmd0aCk7CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBj
b2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0aCk7CiAgICAgICAgIGVsc2UgaWYgKERp
cmVjdEFyZ3VtZW50cyogYXJndW1lbnRzID0ganNEeW5hbWljQ2FzdDxEaXJlY3RBcmd1bWVudHMq
Pih2bSwgYmFzZVZhbHVlKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBvdmVycmlk
ZXMsIHRoZW4gd2UgY2FuIGhhbmRsZSB0aGlzIGFzIGEgbm9ybWFsIHByb3BlcnR5IGxvYWQhIEd1
YXJkaW5nCiAgICAgICAgICAgICAvLyB0aGlzIHdpdGggc3VjaCBhIGNoZWNrIGVuYWJsZXMgdXMg
dG8gYWRkIGFuIElDIGNhc2UgZm9yIHRoYXQgbG9hZCBpZiBuZWVkZWQuCiAgICAgICAgICAgICBp
ZiAoIWFyZ3VtZW50cy0+b3ZlcnJvZGVUaGluZ3MoKSkKLSAgICAgICAgICAgICAgICBuZXdDYXNl
ID0gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkRpcmVj
dEFyZ3VtZW50c0xlbmd0aCk7CisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6
OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpEaXJlY3RBcmd1bWVudHNMZW5ndGgp
OwogICAgICAgICB9IGVsc2UgaWYgKFNjb3BlZEFyZ3VtZW50cyogYXJndW1lbnRzID0ganNEeW5h
bWljQ2FzdDxTY29wZWRBcmd1bWVudHMqPih2bSwgYmFzZVZhbHVlKSkgewogICAgICAgICAgICAg
Ly8gRGl0dG8uCiAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+b3ZlcnJvZGVUaGluZ3MoKSkK
LSAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBjb2Rl
QmxvY2ssIEFjY2Vzc0Nhc2U6OlNjb3BlZEFyZ3VtZW50c0xlbmd0aCk7CisgICAgICAgICAgICAg
ICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNl
OjpTY29wZWRBcmd1bWVudHNMZW5ndGgpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMjY3
LDcgKzI2OSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uCiAgICAgICAgIGlmIChzbG90Lmlz
Q2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5kb21KSVQoKSkKICAgICAgICAgICAgIGRvbUpJVCA9
IHNsb3QuZG9tSklUKCk7CiAKLSAgICAgICAgaWYgKGtpbmQgPT0gR2V0QnlJREtpbmQ6OlB1cmUp
IHsKKyAgICAgICAgaWYgKGtpbmQgPT0gR2V0QnlJREtpbmQ6OlRyeSkgewogICAgICAgICAgICAg
QWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlOwogICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNo
ZWFibGVWYWx1ZSgpKQogICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpMb2FkOwpA
QCAtMjc4LDI3ICsyODAsMjggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0
QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb24KICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCi0g
ICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6dHJ5R2V0KHZtLCBjb2RlQmxvY2ssIHR5
cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHks
IHNsb3Qud2F0Y2hwb2ludFNldCgpKTsKLSAgICAgICAgfSBlbHNlIGlmICghbG9hZFRhcmdldEZy
b21Qcm94eSAmJiBnZXR0ZXIgJiYgQWNjZXNzQ2FzZTo6Y2FuRW1pdEludHJpbnNpY0dldHRlcihn
ZXR0ZXIsIHN0cnVjdHVyZSkpCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0
SW50cmluc2ljKHZtLCBjb2RlQmxvY2ssIGdldHRlciwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgc3Ry
dWN0dXJlLCBjb25kaXRpb25TZXQpOworICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFj
Y2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwg
Y29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSk7
CisgICAgICAgIH0gZWxzZSBpZiAoIWxvYWRUYXJnZXRGcm9tUHJveHkgJiYgZ2V0dGVyICYmIElu
dHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OmNhbkVtaXRJbnRyaW5zaWNHZXR0ZXIoZ2V0dGVyLCBz
dHJ1Y3R1cmUpKQorICAgICAgICAgICAgbmV3Q2FzZSA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nh
c2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBzbG90LmNhY2hlZE9mZnNldCgpLCBzdHJ1Y3R1cmUs
IGNvbmRpdGlvblNldCwgZ2V0dGVyKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBY2Nl
c3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJs
ZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkxvYWQ7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChzbG90LmlzVW5zZXQoKSkKLSAgICAgICAgICAgICAgICB0eXBlID0g
QWNjZXNzQ2FzZTo6TWlzczsKLSAgICAgICAgICAgIGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVH
ZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6R2V0dGVyOwotICAg
ICAgICAgICAgZWxzZSBpZiAoc2xvdC5hdHRyaWJ1dGVzKCkgJiBDdXN0b21BY2Nlc3NvcikKLSAg
ICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JHZXR0ZXI7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3Rv
bVZhbHVlR2V0dGVyOwotCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0KAot
ICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHR5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBj
b25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksCi0gICAgICAgICAgICAgICAgc2xvdC53
YXRjaHBvaW50U2V0KCksIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IHNsb3QuY3VzdG9tR2V0
dGVyKCkgOiBudWxscHRyLAotICAgICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVDdXN0b20o
KSA/IHNsb3Quc2xvdEJhc2UoKSA6IG51bGxwdHIsCi0gICAgICAgICAgICAgICAgZG9tSklUKTsK
KyAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSB8fCBzbG90LmlzVW5zZXQo
KSkgeworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIGNvZGVCbG9jaywgc2xvdC5pc1Vuc2V0KCkgPyBBY2Nlc3NDYXNlOjpNaXNzIDogQWNj
ZXNzQ2FzZTo6TG9hZCwKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNv
bmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCkpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NU
eXBlIHR5cGU7CisgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkK
KyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkdldHRlcjsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChzbG90LmF0dHJpYnV0ZXMoKSAmIEN1c3RvbUFjY2Vzc29yKQorICAg
ICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JHZXR0ZXI7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNz
Q2FzZTo6Q3VzdG9tVmFsdWVHZXR0ZXI7CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0
dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAgICAgICAgICAgICB2bSwgY29k
ZUJsb2NrLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0
RnJvbVByb3h5LAorICAgICAgICAgICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQoKSwgc2xv
dC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gc2xvdC5jdXN0b21HZXR0ZXIoKSA6IG51bGxwdHIsCisg
ICAgICAgICAgICAgICAgICAgIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IHNsb3Quc2xvdEJh
c2UoKSA6IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgIGRvbUpJVCk7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM4Niw3ICszODksNyBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNl
VmFsdWUsIFN0cgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnJlcGxhY2Uodm0sIGNvZGVCbG9jaywgc3RydWN0dXJl
LCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNl
OjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6UmVwbGFjZSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSwgc3RydWN0dXJlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VS
VChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KTsKIApAQCAtNDE5
LDcgKzQyMiw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RyCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBuZXdD
YXNlID0gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbih2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIG5l
d1N0cnVjdHVyZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQpOworICAgICAgICAgICAgbmV3Q2FzZSA9
IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBvZmZzZXQsIHN0cnVjdHVyZSwgbmV3
U3RydWN0dXJlLCBjb25kaXRpb25TZXQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChzbG90
LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKSB7CiAgICAg
ICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKQEAgLTQzMyw3ICs0MzYsNyBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBiYXNlVmFsdWUsIFN0cgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nh
c2U6OnNldHRlcigKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
OjpjcmVhdGUoCiAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgc2xvdC5pc0N1c3RvbUFj
Y2Vzc29yKCkgPyBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRlciA6IEFjY2Vzc0Nhc2U6
OkN1c3RvbVZhbHVlU2V0dGVyLCBzdHJ1Y3R1cmUsIGludmFsaWRPZmZzZXQsIGNvbmRpdGlvblNl
dCwKICAgICAgICAgICAgICAgICBzbG90LmN1c3RvbVNldHRlcigpLCBzbG90LmJhc2UoKSk7CiAg
ICAgICAgIH0gZWxzZSB7CkBAIC00NTAsNyArNDUzLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBT
dHIKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG9mZnNldCA9IHNsb3QuY2Fj
aGVkT2Zmc2V0KCk7CiAKLSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpzZXR0ZXIo
CisgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAog
ICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlNldHRlciwgc3RydWN0
dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNldCk7CiAgICAgICAgIH0KICAgICB9CkBAIC01MTMsOCAr
NTE2LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKIAogICAgIExP
R19JQygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBp
ZGVudCkpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nl
c3NDYXNlOjppbigKLSAgICAgICAgdm0sIGNvZGVCbG9jaywgd2FzRm91bmQgPyBBY2Nlc3NDYXNl
OjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgc3RydWN0dXJlLCBjb25kaXRpb25TZXQpOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3Jl
YXRlKAorICAgICAgICB2bSwgY29kZUJsb2NrLCB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6OkluSGl0
IDogQWNjZXNzQ2FzZTo6SW5NaXNzLCBpbnZhbGlkT2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCk7CiAKICAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdCA9IHN0dWJJbmZvLmFk
ZEFjY2Vzc0Nhc2UoY29kZUJsb2NrLCBpZGVudCwgV1RGTW92ZShuZXdDYXNlKSk7CiAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCmluZGV4IGUxNzY3Njg2OTExMjNkMmFjMWU3NjAz
ZmJjZTEwMzNmZGVmZTkwODIuLjUyYTA2MGNlNGQ1ZTVmNzJjMTgzYjVjNzBkMWNhZjFmZjg1MDQ1
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCkBAIC0zNiw3ICszNiw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiBlbnVtIGNsYXNzIEdldEJ5SURLaW5kIHsKICAgICBOb3JtYWwsCi0g
ICAgUHVyZQorICAgIFRyeQogfTsKIAogdm9pZCByZXBhdGNoR2V0QnlJRChFeGVjU3RhdGUqLCBK
U1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJl
U3R1YkluZm8mLCBHZXRCeUlES2luZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmgKaW5kZXggNTgzMTg4ODM0NTM0MDIzZTczZDdjMGJkMzBlMWJiOTcxODlkOTlmZS4uYmJk
NzA5NjJhYWViNzk0NWEzNzk1ODZmNzEwNGFkODdiYzQ3ZTU0OSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtMjI4LDcgKzIyOCw2IEBAIHR5cGVkZWYgY29uc3Qg
Y2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgY2xvYmJlckFsbFJlZ3NJbkZUTElDU2xv
d1BhdGgsICFBU1NFUlRfRElTQUJMRUQsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwg
dXNlQWNjZXNzSW5saW5pbmcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYodW5zaWdu
ZWQsIG1heEFjY2Vzc1ZhcmlhbnRMaXN0U2l6ZSwgOCwgTm9ybWFsLCBudWxscHRyKSBcCi0gICAg
dih1bnNpZ25lZCwgbWVnYW1vcnBoaWNMb2FkQ29zdCwgOTk5LCBOb3JtYWwsIG51bGxwdHIpIC8q
IFRoaXMgdXNlZCB0byBiZSAxMCwgYnV0IHdlJ3JlIHRlbXBvcmFyaWx5IHRlc3Rpbmcgd2hhdCBo
YXBwZW5zIHdoZW4gdGhlIGZlYXR1cmUgaXMgZGlzYWJsZWQuICovXAogICAgIHYoYm9vbCwgdXNl
UG9seXZhcmlhbnREZXZpcnR1YWxpemF0aW9uLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KGJvb2wsIHVzZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcsIHRydWUsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoYm9vbCwgdXNlUG9seW1vcnBoaWNDYWxsSW5saW5pbmcsIHRydWUsIE5v
cm1hbCwgbnVsbHB0cikgXAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>