<?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>62880</bug_id>
          
          <creation_ts>2011-06-17 10:47:42 -0700</creation_ts>
          <short_desc>Remove run-bindings-tests</short_desc>
          <delta_ts>2011-06-20 11:31:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>eric</cc>
    
    <cc>pilgrim</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>422717</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-17 10:47:42 -0700</bug_when>
    <thetext>Remove run-bindings-tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422721</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-17 10:49:20 -0700</bug_when>
    <thetext>Has it been folded into something else? or is it just dead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422728</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-17 10:56:15 -0700</bug_when>
    <thetext>The results files are out of date and I don&apos;t think we&apos;ve gotten any value out of the test suite.  It seemed like a good idea at the time, but I think now that I was wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422729</commentid>
    <comment_count>3</comment_count>
      <attachid>97619</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-17 10:56:44 -0700</bug_when>
    <thetext>Created attachment 97619
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422733</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-17 11:00:23 -0700</bug_when>
    <thetext>Odd.  I still think this is a good idea for people wanting to change the generator.  But I may just be clinging to false hopes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422739</commentid>
    <comment_count>5</comment_count>
      <attachid>97619</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-17 11:02:15 -0700</bug_when>
    <thetext>Comment on attachment 97619
Patch

I love these tests. They are very helpful to me any time I am changing the binding scripts to make sure I didn’t break platforms other than the ones I am testing on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422747</commentid>
    <comment_count>6</comment_count>
      <attachid>97619</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-17 11:05:48 -0700</bug_when>
    <thetext>Comment on attachment 97619
Patch

Ok.  If you find them useful we should keep them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422749</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-17 11:08:55 -0700</bug_when>
    <thetext>Why don&apos;t we just run them on a buildbot?  Then they&apos;d stop breaking (which seems to make Adam sad), and yet stay around and be useful (which seems to make Darin happy). :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422771</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-17 11:20:10 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Why don&apos;t we just run them on a buildbot?  Then they&apos;d stop breaking (which seems to make Adam sad), and yet stay around and be useful (which seems to make Darin happy). :)

That&apos;s probably a good idea.  They&apos;re insanely fast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423799</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-20 11:31:49 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Why don&apos;t we just run them on a buildbot?  Then they&apos;d stop breaking (which seems to make Adam sad), and yet stay around and be useful (which seems to make Darin happy). :)
&gt; 
&gt; That&apos;s probably a good idea.  They&apos;re insanely fast.

Done.  Bug 63001.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97619</attachid>
            <date>2011-06-17 10:56:44 -0700</date>
            <delta_ts>2011-06-17 11:05:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62880-20110617105642.patch</filename>
            <type>text/plain</type>
            <size>525345</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5MTQyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODcgQEAKKzIwMTEtMDYtMTcgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW1vdmUgcnVuLWJpbmRpbmdzLXRlc3RzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Mjg4MAorCisgICAgICAgIFRoZXNl
IHRlc3RzIGhhdmVuJ3QgYmVlbiB2ZXJ5IHN1Y2Nlc3NmdWwuICBUaGVpciBtYWludGFpbmNlIGNv
c3Qgc2VlbXMKKyAgICAgICAgdG8gb3V0LXdlaWdoIHRoZSB2YWx1ZSB0aGV5IHByb3ZpZGUuICBU
aGUgcmVhbCB0ZXN0IHN1aXRlIHdlIGNhcmUgYWJvdXQKKyAgICAgICAgaXMgb3VyIGFjdHVhbCBJ
REwgZmlsZXMgYW55d2F5LiAgV2UncmUgYmV0dGVyIG9mZiB3aXRob3V0IHRoaXMgZXh0cmEKKyAg
ICAgICAgd2VpZ2h0LgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0OiBSZW1vdmVk
LgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFA6IFJlbW92ZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0Q2FsbGJhY2suY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdENhbGxi
YWNrLmg6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJE
T01UZXN0SW50ZXJmYWNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvQ1BQL1dlYkRPTVRlc3RJbnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9DUFAvV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0OiBSZW1vdmVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxs
YmFjay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmg6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RJbnRlcmZhY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlUHJpdmF0
ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0ZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RPYmouY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RPYmouaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqUHJpdmF0ZS5oOiBSZW1vdmVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0ZS5o
OiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUzogUmVtb3ZlZC4K
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFj
ay5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bnRlcmZhY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmg6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
OiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RD
YWxsYmFjay5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3RDYWxsYmFjay5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvT2JqQy9ET01UZXN0Q2FsbGJhY2tJbnRlcm5hbC5oOiBSZW1vdmVkLgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RJbnRlcmZhY2UuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0SW50ZXJmYWNlLm1t
OiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RJ
bnRlcmZhY2VJbnRlcm5hbC5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9PYmpDL0RPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmg6IFJlbW92ZWQuCisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIubW06IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJJbnRlcm5hbC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tOiBSZW1vdmVk
LgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmpJbnRlcm5h
bC5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLm1tOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VJbnRlcm5hbC5oOiBSZW1vdmVk
LgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2FsbGJhY2suaWRsOiBSZW1v
dmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SW50ZXJmYWNlLmlkbDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0T2JqLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5pZGw6IFJlbW92ZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4OiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmg6IFJlbW92ZWQuCisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5o
OiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oOiBSZW1vdmVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmg6IFJlbW92ZWQu
CisKIDIwMTEtMDYtMTcgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QGdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdENhbGxiYWNrLmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdENhbGxiYWNrLmlkbAkocmV2
aXNpb24gODkxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dENhbGxiYWNrLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtc3RyQXJnLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRXN0ckFyZywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIFRoaXMgSURMIGZpbGUgaXMgZm9yIHRlc3RpbmcgdGhlIGJpbmRpbmdzIGNvZGUgZ2VuZXJh
dG9yIHdpdGggYW4gaW50ZXJmYWNlCi0vLyB0aGF0IGhhcyB0aGUgIkNhbGxiYWNrIiBhdHRyaWJ1
dGUgYW5kIGZvciB0cmFja2luZyBjaGFuZ2VzIGluIGl0cyBvdXB1dC4KLW1vZHVsZSB0ZXN0IHsK
LSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1EQVRBQkFTRSwKLSAgICAgICAg
Q2FsbGJhY2sKLSAgICBdIFRlc3RDYWxsYmFjayB7Ci0gICAgICBib29sZWFuIGNhbGxiYWNrV2l0
aE5vUGFyYW0oKTsKLSAgICAgIGJvb2xlYW4gY2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oaW4gQ2xh
c3MxIGNsYXNzMVBhcmFtKTsKLSAgICAgIGJvb2xlYW4gY2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0o
aW4gQ2xhc3MyIGNsYXNzMlBhcmFtLCBpbiBET01TdHJpbmcgc3RyQXJnKTsKLSAgICAgIGxvbmcg
Y2FsbGJhY2tXaXRoTm9uQm9vbFJldHVyblR5cGUoaW4gQ2xhc3MzIGNsYXNzM1BhcmFtKTsKLSAg
ICAgIFtDdXN0b21dIGxvbmcgY3VzdG9tQ2FsbGJhY2soaW4gQ2xhc3M1IGNsYXNzNVBhcmFtLCBp
biBDbGFzczYgY2xhc3M2UGFyYW0pOwotICAgICAgYm9vbGVhbiBjYWxsYmFja1dpdGhTdHJpbmdM
aXN0KGluIERPTVN0cmluZ0xpc3QgbGlzdFBhcmFtKTsKLSAgICB9OwotfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RJbnRlcmZhY2UuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SW50ZXJmYWNl
LmlkbAkocmV2aXNpb24gODkxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdEludGVyZmFjZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXN0ckFyZywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVzdHJBcmcsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBUaGlzIElETCBmaWxlIGlzIGZvciB0ZXN0aW5nIHRoZSBiaW5kaW5ncyBj
b2RlIGdlbmVyYXRvciBhbmQgZm9yIHRyYWNraW5nCi0vLyBjaGFuZ2VzIGluIGl0cyBvdXB1dC4K
LW1vZHVsZSB0ZXN0IHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1Db25k
aXRpb24xfENvbmRpdGlvbjIsCi0gICAgICAgIENhbkJlQ29uc3RydWN0ZWQsCi0gICAgICAgIENh
bGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKLSAgICBdIFRlc3RJbnRlcmZhY2UgewotICAg
IH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5pZGwJKHJldmlz
aW9uIDg5MTQyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzMiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIFRoaXMgSURMIGZpbGUgaXMgZm9yIHRlc3Rpbmcg
dGhlIGJpbmRpbmdzIGNvZGUgZ2VuZXJhdG9yIHdpdGggYW4gaW50ZXJmYWNlCi0vLyB0aGF0IGhh
cyBtZXRob2RzIHJlY2VpdmluZyBhIHBhcmFtZXRlciBvZiB0aGUgdHlwZSBNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLgotbW9kdWxlIHRlc3QgewotICAgIGludGVyZmFjZSBUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lciB7Ci0gICAgICAgIHZvaWQgbWV0aG9kKGluIE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXIgbGlzdGVuZXIpOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCShyZXZpc2lvbiA4OTE0MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAkod29ya2luZyBjb3B5
KQpAQCAtMSwxNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zdHJBcmcsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFc3RyQXJnLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gVGhpcyBJREwgZmlsZSBpcyBmb3IgdGVz
dGluZyB0aGUgYmluZGluZ3MgY29kZSBnZW5lcmF0b3IgYW5kIGZvciB0cmFja2luZwotLy8gY2hh
bmdlcyBpbiBpdHMgb3VwdXQuCi1tb2R1bGUgdGVzdCB7Ci0gICAgaW50ZXJmYWNlIFRlc3RPYmog
ewotICAgICAgICAvLyBBdHRyaWJ1dGVzCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25n
ICAgICAgICAgICAgcmVhZE9ubHlJbnRBdHRyOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nICAgICAgIHJlYWRPbmx5U3RyaW5nQXR0cjsKLSAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIFRlc3RPYmogICAgICAgICByZWFkT25seVRlc3RPYmpBdHRyOwotICAgICAgICBhdHRy
aWJ1dGUgc2hvcnQgICAgICAgICAgICAgICAgICAgIHNob3J0QXR0cjsKLSAgICAgICAgYXR0cmli
dXRlIHVuc2lnbmVkIHNob3J0ICAgICAgICAgICB1bnNpZ25lZFNob3J0QXR0cjsKLSAgICAgICAg
YXR0cmlidXRlIGxvbmcgICAgICAgICAgICAgICAgICAgICBpbnRBdHRyOwotICAgICAgICBhdHRy
aWJ1dGUgbG9uZyBsb25nICAgICAgICAgICAgICAgIGxvbmdMb25nQXR0cjsKLSAgICAgICAgYXR0
cmlidXRlIHVuc2lnbmVkIGxvbmcgbG9uZyAgICAgICB1bnNpZ25lZExvbmdMb25nQXR0cjsKLSAg
ICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgICAgICAgICBzdHJpbmdBdHRyOwotICAg
ICAgICBhdHRyaWJ1dGUgVGVzdE9iaiAgICAgICAgICAgICAgICAgIHRlc3RPYmpBdHRyOwotCi0g
ICAgICAgIEpTLCBWOAotICAgICAgICAvLyBXS191Y2ZpcnN0LCBXS19sY2ZpcnN0IGV4Y2VwdGlv
bmFsIGNhc2VzLgotICAgICAgICBhdHRyaWJ1dGUgVGVzdE9iaiAgICAgICAgICAgICAgICAgIFhN
TE9iakF0dHI7Ci0gICAgICAgIGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAgICAgICAgICAgY3Jl
YXRlOwotCi0gICAgICAgIC8vIFJlZmxlY3RlZCBET00gYXR0cmlidXRlcwotICAgICAgICBhdHRy
aWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyByZWZsZWN0ZWRTdHJpbmdBdHRyOwotICAgICAgICBh
dHRyaWJ1dGUgW1JlZmxlY3RdIGxvbmcgcmVmbGVjdGVkSW50ZWdyYWxBdHRyOwotICAgICAgICBh
dHRyaWJ1dGUgW1JlZmxlY3RdIHVuc2lnbmVkIGxvbmcgcmVmbGVjdGVkVW5zaWduZWRJbnRlZ3Jh
bEF0dHI7Ci0gICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gYm9vbGVhbiByZWZsZWN0ZWRCb29s
ZWFuQXR0cjsKLSAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0LCBVUkxdIERPTVN0cmluZyByZWZs
ZWN0ZWRVUkxBdHRyOwotICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3QsIE5vbkVtcHR5LCBVUkxd
IERPTVN0cmluZyByZWZsZWN0ZWROb25FbXB0eVVSTEF0dHI7Ci0gICAgICAgIGF0dHJpYnV0ZSBb
UmVmbGVjdD1jdXN0b21Db250ZW50U3RyaW5nQXR0cl0gRE9NU3RyaW5nIHJlZmxlY3RlZFN0cmlu
Z0F0dHI7Ci0gICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdD1jdXN0b21Db250ZW50SW50ZWdyYWxB
dHRyXSBsb25nIHJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cjsKLSAgICAgICAgYXR0cmlidXRl
IFtSZWZsZWN0PWN1c3RvbUNvbnRlbnRCb29sZWFuQXR0cl0gYm9vbGVhbiByZWZsZWN0ZWRDdXN0
b21Cb29sZWFuQXR0cjsKLSAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0PWN1c3RvbUNvbnRlbnRV
UkxBdHRyLCBVUkxdIERPTVN0cmluZyByZWZsZWN0ZWRDdXN0b21VUkxBdHRyOwotICAgICAgICBh
dHRyaWJ1dGUgW1JlZmxlY3Q9Y3VzdG9tQ29udGVudE5vbkVtcHR5VVJMQXR0ciwgTm9uRW1wdHks
IFVSTF0gRE9NU3RyaW5nIHJlZmxlY3RlZEN1c3RvbU5vbkVtcHR5VVJMQXR0cjsKLQotICAgICAg
ICAvLyBNZXRob2RzCi0gICAgICAgIHZvaWQgICAgdm9pZE1ldGhvZCgpOwotICAgICAgICB2b2lk
ICAgIHZvaWRNZXRob2RXaXRoQXJncyhpbiBsb25nIGludEFyZywgaW4gRE9NU3RyaW5nIHN0ckFy
ZywgaW4gVGVzdE9iaiBvYmpBcmcpOwotICAgICAgICBsb25nICAgIGludE1ldGhvZCgpOwotICAg
ICAgICBsb25nICAgIGludE1ldGhvZFdpdGhBcmdzKGluIGxvbmcgaW50QXJnLCBpbiBET01TdHJp
bmcgc3RyQXJnLCBpbiBUZXN0T2JqIG9iakFyZyk7Ci0gICAgICAgIFRlc3RPYmogb2JqTWV0aG9k
KCk7Ci0gICAgICAgIFRlc3RPYmogb2JqTWV0aG9kV2l0aEFyZ3MoaW4gbG9uZyBpbnRBcmcsIGlu
IERPTVN0cmluZyBzdHJBcmcsIGluIFRlc3RPYmogb2JqQXJnKTsKLQotICAgICAgICBbUmVxdWly
ZXNBbGxBcmd1bWVudHNdIFRlc3RPYmogbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyhpbiBET01T
dHJpbmcgc3RyQXJnLCBpbiBUZXN0T2JqIG9iakFyZyk7Ci0gICAgICAgIFtSZXF1aXJlc0FsbEFy
Z3VtZW50cz1SYWlzZV0gVGVzdE9iaiBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dz
KGluIERPTVN0cmluZyBzdHJBcmcsIGluIFRlc3RPYmogb2JqQXJnKQotICAgICAgICAgICAgcmFp
c2VzKERPTUV4Y2VwdGlvbik7Ci0KLSAgICAgICAgdm9pZCBzZXJpYWxpemVkVmFsdWUoaW4gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlIHNlcmlhbGl6ZWRBcmcpOwotICAgICAgICB2b2lkIGlkYktleShp
biBJREJLZXkga2V5KTsKLSAgICAgICAgdm9pZCBvcHRpb25zT2JqZWN0KGluIE9wdGlvbnNPYmpl
Y3Qgb28sIGluIFtPcHRpb25hbF0gT3B0aW9uc09iamVjdCBvb28pOwotCi0gICAgICAgIC8vIEV4
Y2VwdGlvbnMKLSAgICAgICAgdm9pZCBtZXRob2RXaXRoRXhjZXB0aW9uKCkgcmFpc2VzKERPTUV4
Y2VwdGlvbik7Ci0gICAgICAgIGF0dHJpYnV0ZSBsb25nIGF0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
IGdldHRlciByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgYXR0cmlidXRlIGxvbmcgYXR0
cldpdGhTZXR0ZXJFeGNlcHRpb24gc2V0dGVyIHJhaXNlcyhET01FeGNlcHRpb24pOwotICAgICAg
ICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIGdldHRl
ciByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBzdHJp
bmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbiBzZXR0ZXIgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0K
LSAgICAgICAgLy8gJ0N1c3RvbScgZXh0ZW5kZWQgYXR0cmlidXRlCi0gICAgICAgIGF0dHJpYnV0
ZSBbQ3VzdG9tXSBsb25nICAgICAgICAgICAgY3VzdG9tQXR0cjsKLSAgICAgICAgW0N1c3RvbV0g
dm9pZCBjdXN0b21NZXRob2QoKTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCBjdXN0b21NZXRob2RX
aXRoQXJncyhpbiBsb25nIGludEFyZywgaW4gRE9NU3RyaW5nIHN0ckFyZywgaW4gVGVzdE9iaiBv
YmpBcmcpOwotCi0gICAgICAgIFtDdXN0b21Bcmd1bWVudEhhbmRsaW5nXSB2b2lkIGN1c3RvbUFy
Z3NBbmRFeGNlcHRpb24oaW4gbG9nIGludEFyZykKLSAgICAgICAgICAgIHJhaXNlcyhET01FeGNl
cHRpb24pOwotCi0gICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlw
ZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3Rl
bmVyLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVy
ZSk7Ci0gICAgICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3Rl
bmVyLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2Fw
dHVyZSk7Ci0KLSAgICAgICAgLy8gJ0NhbGxXaXRoJyBleHRlbmRlZCBhdHRyaWJ1dGUKLSAgICAg
ICAgW0NhbGxXaXRoPUR5bmFtaWNGcmFtZV0gdm9pZCB3aXRoRHluYW1pY0ZyYW1lKCk7Ci0gICAg
ICAgIFtDYWxsV2l0aD1EeW5hbWljRnJhbWVdIHZvaWQgd2l0aER5bmFtaWNGcmFtZUFuZEFyZyhp
biBsb25nIGludEFyZyk7Ci0gICAgICAgIFtDYWxsV2l0aD1EeW5hbWljRnJhbWVdIHZvaWQgd2l0
aER5bmFtaWNGcmFtZUFuZE9wdGlvbmFsQXJnKGluIGxvbmcgaW50QXJnLCBpbiBbT3B0aW9uYWxd
IGxvbmcgb3B0aW9uYWxBcmcpOwotICAgICAgICBbTmVlZHNVc2VyR2VzdHVyZUNoZWNrLCBDYWxs
V2l0aD1EeW5hbWljRnJhbWVdIHZvaWQgd2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlKGlu
IGxvbmcgaW50QXJnKTsKLSAgICAgICAgW05lZWRzVXNlckdlc3R1cmVDaGVjaywgQ2FsbFdpdGg9
RHluYW1pY0ZyYW1lXSB2b2lkIHdpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZUFTQUQoaW4g
bG9uZyBpbnRBcmcsIGluIFtPcHRpb25hbF0gbG9uZyBvcHRpb25hbEFyZyk7Ci0gICAgICAgIFtD
YWxsV2l0aD1TY3JpcHRTdGF0ZV0gdm9pZCB3aXRoU2NyaXB0U3RhdGVWb2lkKCk7Ci0gICAgICAg
IFtDYWxsV2l0aD1TY3JpcHRTdGF0ZV0gVGVzdE9iaiB3aXRoU2NyaXB0U3RhdGVPYmooKTsKLSAg
ICAgICAgW0NhbGxXaXRoPVNjcmlwdFN0YXRlXSB2b2lkIHdpdGhTY3JpcHRTdGF0ZVZvaWRFeGNl
cHRpb24oKQotICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxs
V2l0aD1TY3JpcHRTdGF0ZV0gVGVzdE9iaiB3aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oKQot
ICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3Jp
cHRFeGVjdXRpb25Db250ZXh0XSB2b2lkIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0K
LSAgICAgICAgLy8gJ09wdGlvbmFsJyBleHRlbmRlZCBhdHRyaWJ1dGUKLSAgICAgICAgdm9pZCAg
ICBtZXRob2RXaXRoT3B0aW9uYWxBcmcoaW4gW09wdGlvbmFsXSBsb25nIG9wdCk7Ci0gICAgICAg
IHZvaWQgICAgbWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcoaW4gbG9uZyBu
b25PcHQsIGluIFtPcHRpb25hbF0gbG9uZyBvcHQpOwotICAgICAgICB2b2lkICAgIG1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhpbiBsb25nIG5vbk9wdCwgaW4gW09w
dGlvbmFsXSBsb25nIG9wdDEsIGluIGxvbmcgb3B0Mik7Ci0KLSNpZiBkZWZpbmVkKFRFU1RJTkdf
VjgpIHx8IGRlZmluZWQoVEVTVElOR19KUykKLSAgICAgICAgLy8gJ0NhbGxiYWNrJyBleHRlbmRl
ZCBhdHRyaWJ1dGUKLSAgICAgICAgdm9pZCAgICBtZXRob2RXaXRoQ2FsbGJhY2tBcmcoaW4gW0Nh
bGxiYWNrXSBUZXN0Q2FsbGJhY2sgY2FsbGJhY2spOwotICAgICAgICB2b2lkICAgIG1ldGhvZFdp
dGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKGluIGxvbmcgbm9uQ2FsbGJhY2ssIGluIFtD
YWxsYmFja10gVGVzdENhbGxiYWNrIGNhbGxiYWNrKTsKLSAgICAgICAgdm9pZCAgICBtZXRob2RX
aXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBUZXN0Q2Fs
bGJhY2sgY2FsbGJhY2spOwotI2VuZGlmCi0KLSAgICAgICAgLy8gJ0NvbnZlcnRTY3JpcHRTdHJp
bmcnIGV4dGVuZGVkIGF0dHJpYnV0ZQotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0NvbnZl
cnRTY3JpcHRTdHJpbmddIERPTVN0cmluZyBzY3JpcHRTdHJpbmdBdHRyOwotCi0gICAgICAgIC8v
ICdDb25kaXRpb25hbCcgZXh0ZW5kZWQgYXR0cmlidXRlCi0gICAgICAgIGF0dHJpYnV0ZSBbQ29u
ZGl0aW9uYWw9Q29uZGl0aW9uMV0gbG9uZyBjb25kaXRpb25hbEF0dHIxOwotICAgICAgICBhdHRy
aWJ1dGUgW0NvbmRpdGlvbmFsPUNvbmRpdGlvbjEmQ29uZGl0aW9uMl0gbG9uZyBjb25kaXRpb25h
bEF0dHIyOwotICAgICAgICBhdHRyaWJ1dGUgW0NvbmRpdGlvbmFsPUNvbmRpdGlvbjF8Q29uZGl0
aW9uMl0gbG9uZyBjb25kaXRpb25hbEF0dHIzOwotCi0jaWYgZGVmaW5lZChURVNUSU5HX1Y4KSB8
fCBkZWZpbmVkKFRFU1RJTkdfSlMpCi0gICAgICAgIC8vIE92ZXJsb2FkcwotICAgICAgICB2b2lk
ICAgIG92ZXJsb2FkZWRNZXRob2QoaW4gVGVzdE9iaiBvYmpBcmcsIGluIERPTVN0cmluZyBzdHJB
cmcpOwotICAgICAgICB2b2lkICAgIG92ZXJsb2FkZWRNZXRob2QoaW4gVGVzdE9iaiBvYmpBcmcs
IGluIFtPcHRpb25hbF0gbG9uZyBpbnRBcmcpOwotICAgICAgICB2b2lkICAgIG92ZXJsb2FkZWRN
ZXRob2QoaW4gRE9NU3RyaW5nIHN0ckFyZyk7Ci0gICAgICAgIHZvaWQgICAgb3ZlcmxvYWRlZE1l
dGhvZChpbiBsb25nIGludEFyZyk7Ci0gICAgICAgIHZvaWQgICAgb3ZlcmxvYWRlZE1ldGhvZChp
biBbQ2FsbGJhY2tdIFRlc3RDYWxsYmFjayBjYWxsYmFjayk7Ci0jZW5kaWYKLQotICAgICAgICAv
LyBDbGFzcyBtZXRob2RzIHdpdGhpbiBKYXZhU2NyaXB0IChsaWtlIHdoYXQncyB1c2VkIGZvciBJ
REJLZXlSYW5nZSkuCi0gICAgICAgIFtDbGFzc01ldGhvZF0gdm9pZCBjbGFzc01ldGhvZCgpOwot
ICAgICAgICBbQ2xhc3NNZXRob2RdIGxvbmcgY2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoaW4gW09w
dGlvbmFsXSBsb25nIGFyZyk7Ci0KLSNpZiBkZWZpbmVkKFRFU1RJTkdfVjgpCi0gICAgICAgIC8v
ICdFbmFibGVkQXRSdW50aW1lJyBtZXRob2RzIGFuZCBhdHRyaWJ1dGVzLgotICAgICAgICBbRW5h
YmxlZEF0UnVudGltZV0gdm9pZCBlbmFibGVkQXRSdW50aW1lTWV0aG9kMShpbiBpbnQgaW50QXJn
KTsKLSAgICAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9RmVhdHVyZU5hbWVdIHZvaWQgZW5hYmxlZEF0
UnVudGltZU1ldGhvZDIoaW4gaW50IGludEFyZyk7Ci0gICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxl
ZEF0UnVudGltZV0gbG9uZyBlbmFibGVkQXRSdW50aW1lQXR0cjE7Ci0gICAgICAgIGF0dHJpYnV0
ZSBbRW5hYmxlZEF0UnVudGltZT1GZWF0dXJlTmFtZV0gbG9uZyBlbmFibGVkQXRSdW50aW1lQXR0
cjI7Ci0jZW5kaWYKLQotICAgICAgICAvLyBPYmplY3RpdmVDIHJlc2VydmVkIHdvcmRzLgotICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyAgICAgIGRlc2NyaXB0aW9uOwotICAgICAgICBh
dHRyaWJ1dGUgbG9uZyAgICAgICAgICAgICAgIGlkOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGhhc2g7Ci0KLSAgICAgICAgLy8gQ2hlY2sgY29uc3RhbnRzIGFuZCBlbnVt
cy4KLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ09OU1RfVkFMVUVfMCA9IDA7Ci0gICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENPTlNUX1ZBTFVFXzEgPSAxOwotICAgICAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCBDT05TVF9WQUxVRV8yID0gMjsKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgQ09OU1RfVkFMVUVfNCA9IDQ7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
IENPTlNUX1ZBTFVFXzggPSA4OwotICAgICAgICBjb25zdCBzaG9ydCBDT05TVF9WQUxVRV85ID0g
LTE7Ci0gICAgICAgIGNvbnN0IERPTVN0cmluZyBDT05TVF9WQUxVRV8xMCA9ICJteSBjb25zdGFu
dCBzdHJpbmciOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT05TVF9WQUxVRV8xMSA9
IDB4ZmZmZmZmZmY7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENPTlNUX1ZBTFVFXzEy
ID0gMHgwMTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ09OU1RfVkFMVUVfMTMgPSAw
WDIwOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT05TVF9WQUxVRV8xNCA9IDB4MWFi
YzsKLSAgICB9OwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlLmlkbAkocmV2aXNpb24gODkxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXN0ckFyZywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gVGhpcyBJREwg
ZmlsZSBpcyBmb3IgdGVzdGluZyB0aGUgYmluZGluZ3MgY29kZSBnZW5lcmF0b3IgYW5kIGZvciB0
cmFja2luZwotLy8gY2hhbmdlcyBpbiBpdHMgb3VwdXQuCi1tb2R1bGUgdGVzdCB7Ci0gICAgaW50
ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9Q29uZGl0aW9uMXxDb25kaXRpb24yLAotICAg
IF0gVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSB7Ci0gICAgICAgIC8vIFRoZSBj
YXNlIG9mIGEgc2luZ2xlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBhdHRyaWJ1dGUgaXMgYSBiaXQg
b2YgYQotICAgICAgICAvLyBzcGVjaWFsIGNhc2UuCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdmFsdWU7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdENhbGxiYWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RDYWxsYmFjay5jcHAJKHJldmlzaW9uIDg5MTQyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0Q2FsbGJhY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDEzOCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotCi0jaW5jbHVkZSAiV2ViRE9NVGVzdENh
bGxiYWNrLmgiCi0KLSNpbmNsdWRlICJDbGFzczEuaCIKLSNpbmNsdWRlICJDbGFzczIuaCIKLSNp
bmNsdWRlICJDbGFzczMuaCIKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCi0jaW5jbHVkZSAi
S1VSTC5oIgotI2luY2x1ZGUgIlRlc3RDYWxsYmFjay5oIgotI2luY2x1ZGUgIldlYkRPTUNsYXNz
MS5oIgotI2luY2x1ZGUgIldlYkRPTUNsYXNzMi5oIgotI2luY2x1ZGUgIldlYkRPTUNsYXNzMy5o
IgotI2luY2x1ZGUgIldlYkRPTURPTVN0cmluZ0xpc3QuaCIKLSNpbmNsdWRlICJXZWJET01TdHJp
bmcuaCIKLSNpbmNsdWRlICJXZWJFeGNlcHRpb25IYW5kbGVyLmgiCi0jaW5jbHVkZSAid3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLQotc3RydWN0IFdlYkRPTVRlc3RDYWxsYmFjazo6V2ViRE9NVGVzdENhbGxi
YWNrUHJpdmF0ZSB7Ci0gICAgV2ViRE9NVGVzdENhbGxiYWNrUHJpdmF0ZShXZWJDb3JlOjpUZXN0
Q2FsbGJhY2sqIG9iamVjdCA9IDApCi0gICAgICAgIDogaW1wbChvYmplY3QpCi0gICAgewotICAg
IH0KLQotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0Q2FsbGJhY2s+IGltcGw7Ci19OwotCi1XZWJE
T01UZXN0Q2FsbGJhY2s6OldlYkRPTVRlc3RDYWxsYmFjaygpCi0gICAgOiBXZWJET01PYmplY3Qo
KQotICAgICwgbV9pbXBsKDApCi17Ci19Ci0KLVdlYkRPTVRlc3RDYWxsYmFjazo6V2ViRE9NVGVz
dENhbGxiYWNrKFdlYkNvcmU6OlRlc3RDYWxsYmFjayogaW1wbCkKLSAgICA6IFdlYkRPTU9iamVj
dCgpCi0gICAgLCBtX2ltcGwobmV3IFdlYkRPTVRlc3RDYWxsYmFja1ByaXZhdGUoaW1wbCkpCi17
Ci19Ci0KLVdlYkRPTVRlc3RDYWxsYmFjazo6V2ViRE9NVGVzdENhbGxiYWNrKGNvbnN0IFdlYkRP
TVRlc3RDYWxsYmFjayYgY29weSkKLSAgICA6IFdlYkRPTU9iamVjdCgpCi17Ci0gICAgbV9pbXBs
ID0gY29weS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdENhbGxiYWNrUHJpdmF0ZShjb3B5LmltcGwo
KSkgOiAwOwotfQotCi1XZWJET01UZXN0Q2FsbGJhY2smIFdlYkRPTVRlc3RDYWxsYmFjazo6b3Bl
cmF0b3I9KGNvbnN0IFdlYkRPTVRlc3RDYWxsYmFjayYgY29weSkKLXsKLSAgICBkZWxldGUgbV9p
bXBsOwotICAgIG1faW1wbCA9IGNvcHkuaW1wbCgpID8gbmV3IFdlYkRPTVRlc3RDYWxsYmFja1By
aXZhdGUoY29weS5pbXBsKCkpIDogMDsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVdlYkNvcmU6
OlRlc3RDYWxsYmFjayogV2ViRE9NVGVzdENhbGxiYWNrOjppbXBsKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5pbXBsLmdldCgpIDogMDsKLX0KLQotV2ViRE9NVGVzdENh
bGxiYWNrOjp+V2ViRE9NVGVzdENhbGxiYWNrKCkKLXsKLSAgICBkZWxldGUgbV9pbXBsOwotICAg
IG1faW1wbCA9IDA7Ci19Ci0KLWJvb2wgV2ViRE9NVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhO
b1BhcmFtKCkKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIGltcGwoKS0+Y2FsbGJhY2tXaXRoTm9QYXJhbSgpOwotfQotCi1ib29sIFdlYkRP
TVRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oY29uc3QgV2ViRE9NQ2xhc3Mx
JiBjbGFzczFQYXJhbSkKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIGltcGwoKS0+Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0odG9XZWJDb3Jl
KGNsYXNzMVBhcmFtKSk7Ci19Ci0KLWJvb2wgV2ViRE9NVGVzdENhbGxiYWNrOjpjYWxsYmFja1dp
dGhDbGFzczJQYXJhbShjb25zdCBXZWJET01DbGFzczImIGNsYXNzMlBhcmFtLCBjb25zdCBXZWJE
T01TdHJpbmcmIHN0ckFyZykKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIGltcGwoKS0+Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0odG9XZWJD
b3JlKGNsYXNzMlBhcmFtKSwgc3RyQXJnKTsKLX0KLQotaW50IFdlYkRPTVRlc3RDYWxsYmFjazo6
Y2FsbGJhY2tXaXRoTm9uQm9vbFJldHVyblR5cGUoY29uc3QgV2ViRE9NQ2xhc3MzJiBjbGFzczNQ
YXJhbSkKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1
cm4gaW1wbCgpLT5jYWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZSh0b1dlYkNvcmUoY2xhc3Mz
UGFyYW0pKTsKLX0KLQotYm9vbCBXZWJET01UZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aFN0cmlu
Z0xpc3QoY29uc3QgV2ViRE9NRE9NU3RyaW5nTGlzdCYgbGlzdFBhcmFtKQotewotICAgIGlmICgh
aW1wbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gaW1wbCgpLT5jYWxs
YmFja1dpdGhTdHJpbmdMaXN0KHRvV2ViQ29yZShsaXN0UGFyYW0pKTsKLX0KLQotV2ViQ29yZTo6
VGVzdENhbGxiYWNrKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdENhbGxiYWNrJiB3cmFwcGVy
KQotewotICAgIHJldHVybiB3cmFwcGVyLmltcGwoKTsKLX0KLQotV2ViRE9NVGVzdENhbGxiYWNr
IHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RDYWxsYmFjayogdmFsdWUpCi17Ci0gICAgcmV0dXJuIFdl
YkRPTVRlc3RDYWxsYmFjayh2YWx1ZSk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0Up
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRl
c3RDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9DUFAvV2ViRE9NVGVzdENhbGxiYWNrLmgJKHJldmlzaW9uIDg5MTQyKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0Q2FsbGJhY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2Vp
bmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJET01U
ZXN0Q2FsbGJhY2tfaAotI2RlZmluZSBXZWJET01UZXN0Q2FsbGJhY2tfaAotCi0jaWYgRU5BQkxF
KERBVEFCQVNFKQotCi0jaW5jbHVkZSA8V2ViRE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViRE9N
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFRlc3RDYWxsYmFjazsKLX07
Ci0KLWNsYXNzIFdlYkRPTUNsYXNzMTsKLWNsYXNzIFdlYkRPTUNsYXNzMjsKLWNsYXNzIFdlYkRP
TUNsYXNzMzsKLWNsYXNzIFdlYkRPTUNsYXNzNTsKLWNsYXNzIFdlYkRPTUNsYXNzNjsKLWNsYXNz
IFdlYkRPTURPTVN0cmluZ0xpc3Q7Ci0KLWNsYXNzIFdlYkRPTVRlc3RDYWxsYmFjayA6IHB1Ymxp
YyBXZWJET01PYmplY3QgewotcHVibGljOgotICAgIFdlYkRPTVRlc3RDYWxsYmFjaygpOwotICAg
IGV4cGxpY2l0IFdlYkRPTVRlc3RDYWxsYmFjayhXZWJDb3JlOjpUZXN0Q2FsbGJhY2sqKTsKLSAg
ICBXZWJET01UZXN0Q2FsbGJhY2soY29uc3QgV2ViRE9NVGVzdENhbGxiYWNrJik7Ci0gICAgV2Vi
RE9NVGVzdENhbGxiYWNrJiBvcGVyYXRvcj0oY29uc3QgV2ViRE9NVGVzdENhbGxiYWNrJik7Ci0g
ICAgdmlydHVhbCB+V2ViRE9NVGVzdENhbGxiYWNrKCk7Ci0KLSAgICBib29sIGNhbGxiYWNrV2l0
aE5vUGFyYW0oKTsKLSAgICBib29sIGNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKGNvbnN0IFdlYkRP
TUNsYXNzMSYgY2xhc3MxUGFyYW0pOwotICAgIGJvb2wgY2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0o
Y29uc3QgV2ViRE9NQ2xhc3MyJiBjbGFzczJQYXJhbSwgY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJB
cmcpOwotICAgIGludCBjYWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZShjb25zdCBXZWJET01D
bGFzczMmIGNsYXNzM1BhcmFtKTsKLSAgICBpbnQgY3VzdG9tQ2FsbGJhY2soY29uc3QgV2ViRE9N
Q2xhc3M1JiBjbGFzczVQYXJhbSwgY29uc3QgV2ViRE9NQ2xhc3M2JiBjbGFzczZQYXJhbSk7Ci0g
ICAgYm9vbCBjYWxsYmFja1dpdGhTdHJpbmdMaXN0KGNvbnN0IFdlYkRPTURPTVN0cmluZ0xpc3Qm
IGxpc3RQYXJhbSk7Ci0KLSAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2sqIGltcGwoKSBjb25zdDsK
LQotcHJvdGVjdGVkOgotICAgIHN0cnVjdCBXZWJET01UZXN0Q2FsbGJhY2tQcml2YXRlOwotICAg
IFdlYkRPTVRlc3RDYWxsYmFja1ByaXZhdGUqIG1faW1wbDsKLX07Ci0KLVdlYkNvcmU6OlRlc3RD
YWxsYmFjayogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RDYWxsYmFjayYpOwotV2ViRE9NVGVz
dENhbGxiYWNrIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RDYWxsYmFjayopOwotCi0jZW5kaWYKLSNl
bmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0SW50ZXJm
YWNlLmNwcAkocmV2aXNpb24gODkxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDg3ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCi0gKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0KLSNpbmNsdWRlICJX
ZWJET01UZXN0SW50ZXJmYWNlLmgiCi0KLSNpbmNsdWRlICJUZXN0SW50ZXJmYWNlLmgiCi0jaW5j
bHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLXN0cnVjdCBXZWJET01UZXN0SW50ZXJmYWNlOjpXZWJE
T01UZXN0SW50ZXJmYWNlUHJpdmF0ZSB7Ci0gICAgV2ViRE9NVGVzdEludGVyZmFjZVByaXZhdGUo
V2ViQ29yZTo6VGVzdEludGVyZmFjZSogb2JqZWN0ID0gMCkKLSAgICAgICAgOiBpbXBsKG9iamVj
dCkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RJbnRlcmZhY2U+IGlt
cGw7Ci19OwotCi1XZWJET01UZXN0SW50ZXJmYWNlOjpXZWJET01UZXN0SW50ZXJmYWNlKCkKLSAg
ICA6IFdlYkRPTU9iamVjdCgpCi0gICAgLCBtX2ltcGwoMCkKLXsKLX0KLQotV2ViRE9NVGVzdElu
dGVyZmFjZTo6V2ViRE9NVGVzdEludGVyZmFjZShXZWJDb3JlOjpUZXN0SW50ZXJmYWNlKiBpbXBs
KQotICAgIDogV2ViRE9NT2JqZWN0KCkKLSAgICAsIG1faW1wbChuZXcgV2ViRE9NVGVzdEludGVy
ZmFjZVByaXZhdGUoaW1wbCkpCi17Ci19Ci0KLVdlYkRPTVRlc3RJbnRlcmZhY2U6OldlYkRPTVRl
c3RJbnRlcmZhY2UoY29uc3QgV2ViRE9NVGVzdEludGVyZmFjZSYgY29weSkKLSAgICA6IFdlYkRP
TU9iamVjdCgpCi17Ci0gICAgbV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdElu
dGVyZmFjZVByaXZhdGUoY29weS5pbXBsKCkpIDogMDsKLX0KLQotV2ViRE9NVGVzdEludGVyZmFj
ZSYgV2ViRE9NVGVzdEludGVyZmFjZTo6b3BlcmF0b3I9KGNvbnN0IFdlYkRPTVRlc3RJbnRlcmZh
Y2UmIGNvcHkpCi17Ci0gICAgZGVsZXRlIG1faW1wbDsKLSAgICBtX2ltcGwgPSBjb3B5LmltcGwo
KSA/IG5ldyBXZWJET01UZXN0SW50ZXJmYWNlUHJpdmF0ZShjb3B5LmltcGwoKSkgOiAwOwotICAg
IHJldHVybiAqdGhpczsKLX0KLQotV2ViQ29yZTo6VGVzdEludGVyZmFjZSogV2ViRE9NVGVzdElu
dGVyZmFjZTo6aW1wbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+aW1w
bC5nZXQoKSA6IDA7Ci19Ci0KLVdlYkRPTVRlc3RJbnRlcmZhY2U6On5XZWJET01UZXN0SW50ZXJm
YWNlKCkKLXsKLSAgICBkZWxldGUgbV9pbXBsOwotICAgIG1faW1wbCA9IDA7Ci19Ci0KLVdlYkNv
cmU6OlRlc3RJbnRlcmZhY2UqIHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0SW50ZXJmYWNlJiB3
cmFwcGVyKQotewotICAgIHJldHVybiB3cmFwcGVyLmltcGwoKTsKLX0KLQotV2ViRE9NVGVzdElu
dGVyZmFjZSB0b1dlYktpdChXZWJDb3JlOjpUZXN0SW50ZXJmYWNlKiB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gV2ViRE9NVGVzdEludGVyZmFjZSh2YWx1ZSk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
Q29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RJbnRlcmZhY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RJ
bnRlcmZhY2UuaAkocmV2aXNpb24gODkxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWls
LmNvbT4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJET01UZXN0SW50ZXJmYWNlX2gKLSNkZWZp
bmUgV2ViRE9NVGVzdEludGVyZmFjZV9oCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5B
QkxFKENvbmRpdGlvbjIpCi0KLSNpbmNsdWRlIDxXZWJET01PYmplY3QuaD4KLSNpbmNsdWRlIDxX
ZWJET01TdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgVGVzdEludGVyZmFj
ZTsKLX07Ci0KLQotY2xhc3MgV2ViRE9NVGVzdEludGVyZmFjZSA6IHB1YmxpYyBXZWJET01PYmpl
Y3QgewotcHVibGljOgotICAgIFdlYkRPTVRlc3RJbnRlcmZhY2UoKTsKLSAgICBleHBsaWNpdCBX
ZWJET01UZXN0SW50ZXJmYWNlKFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqKTsKLSAgICBXZWJET01U
ZXN0SW50ZXJmYWNlKGNvbnN0IFdlYkRPTVRlc3RJbnRlcmZhY2UmKTsKLSAgICBXZWJET01UZXN0
SW50ZXJmYWNlJiBvcGVyYXRvcj0oY29uc3QgV2ViRE9NVGVzdEludGVyZmFjZSYpOwotICAgIHZp
cnR1YWwgfldlYkRPTVRlc3RJbnRlcmZhY2UoKTsKLQotCi0gICAgV2ViQ29yZTo6VGVzdEludGVy
ZmFjZSogaW1wbCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgc3RydWN0IFdlYkRPTVRlc3RJ
bnRlcmZhY2VQcml2YXRlOwotICAgIFdlYkRPTVRlc3RJbnRlcmZhY2VQcml2YXRlKiBtX2ltcGw7
Ci19OwotCi1XZWJDb3JlOjpUZXN0SW50ZXJmYWNlKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVz
dEludGVyZmFjZSYpOwotV2ViRE9NVGVzdEludGVyZmFjZSB0b1dlYktpdChXZWJDb3JlOjpUZXN0
SW50ZXJmYWNlKik7Ci0KLSNlbmRpZgotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMikKLQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0NQUC9XZWJET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDg5MTQyKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTIgKzAsMCBAQAotLyoKLSAqIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJET01UZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lci5oIgotCi0jaW5jbHVkZSAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oIgot
I2luY2x1ZGUgIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiV2ViRE9N
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oIgotI2luY2x1ZGUgIldlYkV4Y2VwdGlvbkhhbmRsZXIu
aCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1z
dHJ1Y3QgV2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OldlYkRPTVRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyUHJpdmF0ZSB7Ci0gICAgV2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJQcml2YXRlKFdlYkNvcmU6OlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBvYmplY3Qg
PSAwKQotICAgICAgICA6IGltcGwob2JqZWN0KQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
V2ViQ29yZTo6VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+IGltcGw7Ci19OwotCi1XZWJET01U
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6V2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXIoKQotICAgIDogV2ViRE9NT2JqZWN0KCkKLSAgICAsIG1faW1wbCgwKQotewotfQotCi1XZWJE
T01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6V2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIoV2ViQ29yZTo6VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGltcGwpCi0gICAgOiBX
ZWJET01PYmplY3QoKQotICAgICwgbV9pbXBsKG5ldyBXZWJET01UZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lclByaXZhdGUoaW1wbCkpCi17Ci19Ci0KLVdlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyOjpXZWJET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihjb25zdCBXZWJET01UZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciYgY29weSkKLSAgICA6IFdlYkRPTU9iamVjdCgpCi17Ci0g
ICAgbV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJQcml2YXRlKGNvcHkuaW1wbCgpKSA6IDA7Ci19Ci0KLVdlYkRPTVRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyJiBXZWJET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6b3BlcmF0b3I9
KGNvbnN0IFdlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyJiBjb3B5KQotewotICAgIGRl
bGV0ZSBtX2ltcGw7Ci0gICAgbV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJQcml2YXRlKGNvcHkuaW1wbCgpKSA6IDA7Ci0gICAgcmV0dXJu
ICp0aGlzOwotfQotCi1XZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogV2ViRE9N
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmltcGwoKSBjb25zdAotewotICAgIHJldHVybiBt
X2ltcGwgPyBtX2ltcGwtPmltcGwuZ2V0KCkgOiAwOwotfQotCi1XZWJET01UZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcjo6fldlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKCkKLXsKLSAg
ICBkZWxldGUgbV9pbXBsOwotICAgIG1faW1wbCA9IDA7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXI6Om1ldGhvZChjb25zdCBXZWJET01NZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyJiBsaXN0ZW5lcikKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaW1wbCgpLT5tZXRob2QodG9XZWJDb3JlKGxpc3RlbmVyKSk7Ci19Ci0KLVdlYkNvcmU6
OlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXImIHdyYXBwZXIpCi17Ci0gICAgcmV0dXJuIHdyYXBwZXIuaW1w
bCgpOwotfQotCi1XZWJET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciB0b1dlYktpdChXZWJD
b3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogdmFsdWUpCi17Ci0gICAgcmV0dXJuIFdl
YkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKHZhbHVlKTsKLX0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvQ1BQL1dlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgJKHJldmlzaW9uIDg5
MTQyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01U
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgotICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaWZuZGVmIFdlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyX2gKLSNk
ZWZpbmUgV2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJfaAotCi0jaW5jbHVkZSA8V2Vi
RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViRE9NU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLWNsYXNzIFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOwotfTsKLQotY2xhc3MgV2Vi
RE9NTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjsKLQotY2xhc3MgV2ViRE9NVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIgOiBwdWJsaWMgV2ViRE9NT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBXZWJET01U
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcigpOwotICAgIGV4cGxpY2l0IFdlYkRPTVRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyKFdlYkNvcmU6OlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKik7
Ci0gICAgV2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIoY29uc3QgV2ViRE9NVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXImKTsKLSAgICBXZWJET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lciYgb3BlcmF0b3I9KGNvbnN0IFdlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyJik7
Ci0gICAgdmlydHVhbCB+V2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIoKTsKLQotICAg
IHZvaWQgbWV0aG9kKGNvbnN0IFdlYkRPTU1lZGlhUXVlcnlMaXN0TGlzdGVuZXImIGxpc3RlbmVy
KTsKLQotICAgIFdlYkNvcmU6OlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBpbXBsKCkgY29u
c3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBzdHJ1Y3QgV2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJQcml2YXRlOwotICAgIFdlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0
ZSogbV9pbXBsOwotfTsKLQotV2ViQ29yZTo6VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIHRv
V2ViQ29yZShjb25zdCBXZWJET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciYpOwotV2ViRE9N
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIgdG9XZWJLaXQoV2ViQ29yZTo6VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIqKTsKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAJKHJl
dmlzaW9uIDg5MTQyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQ
UC9XZWJET01UZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4MzQgKzAsMCBAQAotLyoK
LSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
LSAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJET01UZXN0
T2JqLmgiCi0KLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLSNp
bmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiT3B0aW9uc09iamVjdC5oIgotI2luY2x1ZGUgIlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIlRlc3RPYmouaCIKLSNpbmNsdWRlICJX
ZWJET01JREJLZXkuaCIKLSNpbmNsdWRlICJXZWJET01PcHRpb25zT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiV2ViRE9NU3RyaW5nLmgiCi0jaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgotI2lu
Y2x1ZGUgIldlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJ3dGYvdGV4dC9BdG9t
aWNTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotCi1zdHJ1Y3QgV2ViRE9NVGVzdE9iajo6V2ViRE9NVGVzdE9ialByaXZhdGUgewotICAg
IFdlYkRPTVRlc3RPYmpQcml2YXRlKFdlYkNvcmU6OlRlc3RPYmoqIG9iamVjdCA9IDApCi0gICAg
ICAgIDogaW1wbChvYmplY3QpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxXZWJDb3JlOjpU
ZXN0T2JqPiBpbXBsOwotfTsKLQotV2ViRE9NVGVzdE9iajo6V2ViRE9NVGVzdE9iaigpCi0gICAg
OiBXZWJET01PYmplY3QoKQotICAgICwgbV9pbXBsKDApCi17Ci19Ci0KLVdlYkRPTVRlc3RPYmo6
OldlYkRPTVRlc3RPYmooV2ViQ29yZTo6VGVzdE9iaiogaW1wbCkKLSAgICA6IFdlYkRPTU9iamVj
dCgpCi0gICAgLCBtX2ltcGwobmV3IFdlYkRPTVRlc3RPYmpQcml2YXRlKGltcGwpKQotewotfQot
Ci1XZWJET01UZXN0T2JqOjpXZWJET01UZXN0T2JqKGNvbnN0IFdlYkRPTVRlc3RPYmomIGNvcHkp
Ci0gICAgOiBXZWJET01PYmplY3QoKQotewotICAgIG1faW1wbCA9IGNvcHkuaW1wbCgpID8gbmV3
IFdlYkRPTVRlc3RPYmpQcml2YXRlKGNvcHkuaW1wbCgpKSA6IDA7Ci19Ci0KLVdlYkRPTVRlc3RP
YmomIFdlYkRPTVRlc3RPYmo6Om9wZXJhdG9yPShjb25zdCBXZWJET01UZXN0T2JqJiBjb3B5KQot
ewotICAgIGRlbGV0ZSBtX2ltcGw7Ci0gICAgbV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcgV2Vi
RE9NVGVzdE9ialByaXZhdGUoY29weS5pbXBsKCkpIDogMDsKLSAgICByZXR1cm4gKnRoaXM7Ci19
Ci0KLVdlYkNvcmU6OlRlc3RPYmoqIFdlYkRPTVRlc3RPYmo6OmltcGwoKSBjb25zdAotewotICAg
IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmltcGwuZ2V0KCkgOiAwOwotfQotCi1XZWJET01UZXN0
T2JqOjp+V2ViRE9NVGVzdE9iaigpCi17Ci0gICAgZGVsZXRlIG1faW1wbDsKLSAgICBtX2ltcGwg
PSAwOwotfQotCi1pbnQgV2ViRE9NVGVzdE9iajo6cmVhZE9ubHlJbnRBdHRyKCkgY29uc3QKLXsK
LSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gaW1wbCgp
LT5yZWFkT25seUludEF0dHIoKTsKLX0KLQotV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RPYmo6OnJl
YWRPbmx5U3RyaW5nQXR0cigpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJl
dHVybiBXZWJET01TdHJpbmcoKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXVEY6
OlN0cmluZyY+KGltcGwoKS0+cmVhZE9ubHlTdHJpbmdBdHRyKCkpOwotfQotCi1XZWJET01UZXN0
T2JqIFdlYkRPTVRlc3RPYmo6OnJlYWRPbmx5VGVzdE9iakF0dHIoKSBjb25zdAotewotICAgIGlm
ICghaW1wbCgpKQotICAgICAgICByZXR1cm4gV2ViRE9NVGVzdE9iaigpOwotCi0gICAgcmV0dXJu
IHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+cmVhZE9ubHlUZXN0T2JqQXR0cigpKSk7Ci19
Ci0KLXNob3J0IFdlYkRPTVRlc3RPYmo6OnNob3J0QXR0cigpIGNvbnN0Ci17Ci0gICAgaWYgKCFp
bXBsKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGltcGwoKS0+c2hvcnRBdHRy
KCk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6c2V0U2hvcnRBdHRyKHNob3J0IG5ld1Nob3J0
QXR0cikKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgp
LT5zZXRTaG9ydEF0dHIobmV3U2hvcnRBdHRyKTsKLX0KLQotdW5zaWduZWQgc2hvcnQgV2ViRE9N
VGVzdE9iajo6dW5zaWduZWRTaG9ydEF0dHIoKSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBpbXBsKCktPnVuc2lnbmVkU2hvcnRBdHRy
KCk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6c2V0VW5zaWduZWRTaG9ydEF0dHIodW5zaWdu
ZWQgc2hvcnQgbmV3VW5zaWduZWRTaG9ydEF0dHIpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+c2V0VW5zaWduZWRTaG9ydEF0dHIobmV3VW5zaWdu
ZWRTaG9ydEF0dHIpOwotfQotCi1pbnQgV2ViRE9NVGVzdE9iajo6aW50QXR0cigpIGNvbnN0Ci17
Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGltcGwo
KS0+aW50QXR0cigpOwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6OnNldEludEF0dHIoaW50IG5l
d0ludEF0dHIpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlt
cGwoKS0+c2V0SW50QXR0cihuZXdJbnRBdHRyKTsKLX0KLQotbG9uZyBsb25nIFdlYkRPTVRlc3RP
Ymo6OmxvbmdMb25nQXR0cigpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIGltcGwoKS0+bG9uZ0xvbmdBdHRyKCk7Ci19Ci0KLXZvaWQg
V2ViRE9NVGVzdE9iajo6c2V0TG9uZ0xvbmdBdHRyKGxvbmcgbG9uZyBuZXdMb25nTG9uZ0F0dHIp
Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+c2V0
TG9uZ0xvbmdBdHRyKG5ld0xvbmdMb25nQXR0cik7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgbG9uZyBX
ZWJET01UZXN0T2JqOjp1bnNpZ25lZExvbmdMb25nQXR0cigpIGNvbnN0Ci17Ci0gICAgaWYgKCFp
bXBsKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGltcGwoKS0+dW5zaWduZWRM
b25nTG9uZ0F0dHIoKTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjpzZXRVbnNpZ25lZExvbmdM
b25nQXR0cih1bnNpZ25lZCBsb25nIGxvbmcgbmV3VW5zaWduZWRMb25nTG9uZ0F0dHIpCi17Ci0g
ICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+c2V0VW5zaWdu
ZWRMb25nTG9uZ0F0dHIobmV3VW5zaWduZWRMb25nTG9uZ0F0dHIpOwotfQotCi1XZWJET01TdHJp
bmcgV2ViRE9NVGVzdE9iajo6c3RyaW5nQXR0cigpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkp
Ci0gICAgICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBXVEY6OlN0cmluZyY+KGltcGwoKS0+c3RyaW5nQXR0cigpKTsKLX0KLQotdm9pZCBX
ZWJET01UZXN0T2JqOjpzZXRTdHJpbmdBdHRyKGNvbnN0IFdlYkRPTVN0cmluZyYgbmV3U3RyaW5n
QXR0cikKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgp
LT5zZXRTdHJpbmdBdHRyKG5ld1N0cmluZ0F0dHIpOwotfQotCi1XZWJET01UZXN0T2JqIFdlYkRP
TVRlc3RPYmo6OnRlc3RPYmpBdHRyKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAg
ICAgcmV0dXJuIFdlYkRPTVRlc3RPYmooKTsKLQotICAgIHJldHVybiB0b1dlYktpdChXVEY6Omdl
dFB0cihpbXBsKCktPnRlc3RPYmpBdHRyKCkpKTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjpz
ZXRUZXN0T2JqQXR0cihjb25zdCBXZWJET01UZXN0T2JqJiBuZXdUZXN0T2JqQXR0cikKLXsKLSAg
ICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5zZXRUZXN0T2Jq
QXR0cih0b1dlYkNvcmUobmV3VGVzdE9iakF0dHIpKTsKLX0KLQotV2ViRE9NVGVzdE9iaiBXZWJE
T01UZXN0T2JqOjpYTUxPYmpBdHRyKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAg
ICAgcmV0dXJuIFdlYkRPTVRlc3RPYmooKTsKLQotICAgIHJldHVybiB0b1dlYktpdChXVEY6Omdl
dFB0cihpbXBsKCktPnhtbE9iakF0dHIoKSkpOwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6OnNl
dFhNTE9iakF0dHIoY29uc3QgV2ViRE9NVGVzdE9iaiYgbmV3WE1MT2JqQXR0cikKLXsKLSAgICBp
ZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5zZXRYTUxPYmpBdHRy
KHRvV2ViQ29yZShuZXdYTUxPYmpBdHRyKSk7Ci19Ci0KLWJvb2wgV2ViRE9NVGVzdE9iajo6Y3Jl
YXRlKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIGltcGwoKS0+aXNDcmVhdGUoKTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2Jq
OjpzZXRDcmVhdGUoYm9vbCBuZXdDcmVhdGUpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGltcGwoKS0+c2V0Q3JlYXRlKG5ld0NyZWF0ZSk7Ci19Ci0KLVdlYkRP
TVN0cmluZyBXZWJET01UZXN0T2JqOjpyZWZsZWN0ZWRTdHJpbmdBdHRyKCkgY29uc3QKLXsKLSAg
ICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIFdlYkRPTVN0cmluZygpOwotCi0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdURjo6U3RyaW5nJj4oaW1wbCgpLT5nZXRBdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0cikpOwotfQotCi12b2lk
IFdlYkRPTVRlc3RPYmo6OnNldFJlZmxlY3RlZFN0cmluZ0F0dHIoY29uc3QgV2ViRE9NU3RyaW5n
JiBuZXdSZWZsZWN0ZWRTdHJpbmdBdHRyKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpbXBsKCktPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZHN0cmluZ2F0dHJBdHRyLCBuZXdSZWZsZWN0ZWRTdHJpbmdBdHRyKTsKLX0KLQotaW50
IFdlYkRPTVRlc3RPYmo6OnJlZmxlY3RlZEludGVncmFsQXR0cigpIGNvbnN0Ci17Ci0gICAgaWYg
KCFpbXBsKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGltcGwoKS0+Z2V0SW50
ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJB
dHRyKTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjpzZXRSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIo
aW50IG5ld1JlZmxlY3RlZEludGVncmFsQXR0cikKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIsIG5ld1JlZmxlY3RlZEludGVncmFs
QXR0cik7Ci19Ci0KLXVuc2lnbmVkIFdlYkRPTVRlc3RPYmo6OnJlZmxlY3RlZFVuc2lnbmVkSW50
ZWdyYWxBdHRyKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIHVu
c2lnbmVkKCk7Ci0KLSAgICByZXR1cm4gaW1wbCgpLT5nZXRVbnNpZ25lZEludGVncmFsQXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRy
KTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjpzZXRSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFs
QXR0cih1bnNpZ25lZCBuZXdSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cikKLXsKLSAgICBp
ZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5zZXRVbnNpZ25lZElu
dGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRl
Z3JhbGF0dHJBdHRyLCBuZXdSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cik7Ci19Ci0KLWJv
b2wgV2ViRE9NVGVzdE9iajo6cmVmbGVjdGVkQm9vbGVhbkF0dHIoKSBjb25zdAotewotICAgIGlm
ICghaW1wbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gaW1wbCgpLT5o
YXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIp
OwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6OnNldFJlZmxlY3RlZEJvb2xlYW5BdHRyKGJvb2wg
bmV3UmVmbGVjdGVkQm9vbGVhbkF0dHIpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGltcGwoKS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0ciwgbmV3UmVmbGVjdGVkQm9vbGVhbkF0dHIpOwot
fQotCi1XZWJET01TdHJpbmcgV2ViRE9NVGVzdE9iajo6cmVmbGVjdGVkVVJMQXR0cigpIGNvbnN0
Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKLQot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXVEY6OlN0cmluZyY+KGltcGwoKS0+Z2V0VVJM
QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIpKTsKLX0K
LQotdm9pZCBXZWJET01UZXN0T2JqOjpzZXRSZWZsZWN0ZWRVUkxBdHRyKGNvbnN0IFdlYkRPTVN0
cmluZyYgbmV3UmVmbGVjdGVkVVJMQXR0cikKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaW1wbCgpLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpy
ZWZsZWN0ZWR1cmxhdHRyQXR0ciwgbmV3UmVmbGVjdGVkVVJMQXR0cik7Ci19Ci0KLVdlYkRPTVN0
cmluZyBXZWJET01UZXN0T2JqOjpyZWZsZWN0ZWROb25FbXB0eVVSTEF0dHIoKSBjb25zdAotewot
ICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7Ci0KLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV1RGOjpTdHJpbmcmPihpbXBsKCktPmdldE5vbkVtcHR5
VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkbm9uZW1wdHl1cmxhdHRy
QXR0cikpOwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6OnNldFJlZmxlY3RlZE5vbkVtcHR5VVJM
QXR0cihjb25zdCBXZWJET01TdHJpbmcmIG5ld1JlZmxlY3RlZE5vbkVtcHR5VVJMQXR0cikKLXsK
LSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5zZXRBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRub25lbXB0eXVybGF0dHJBdHRyLCBu
ZXdSZWZsZWN0ZWROb25FbXB0eVVSTEF0dHIpOwotfQotCi1XZWJET01TdHJpbmcgV2ViRE9NVGVz
dE9iajo6cmVmbGVjdGVkU3RyaW5nQXR0cigpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0g
ICAgICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBXVEY6OlN0cmluZyY+KGltcGwoKS0+Z2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyKSk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9i
ajo6c2V0UmVmbGVjdGVkU3RyaW5nQXR0cihjb25zdCBXZWJET01TdHJpbmcmIG5ld1JlZmxlY3Rl
ZFN0cmluZ0F0dHIpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGltcGwoKS0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0
cmluZ0F0dHJBdHRyLCBuZXdSZWZsZWN0ZWRTdHJpbmdBdHRyKTsKLX0KLQotaW50IFdlYkRPTVRl
c3RPYmo6OnJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cigpIGNvbnN0Ci17Ci0gICAgaWYgKCFp
bXBsKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGltcGwoKS0+Z2V0SW50ZWdy
YWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRy
QXR0cik7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6c2V0UmVmbGVjdGVkQ3VzdG9tSW50ZWdy
YWxBdHRyKGludCBuZXdSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIpCi17Ci0gICAgaWYgKCFp
bXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+c2V0SW50ZWdyYWxBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0ciwgbmV3
UmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKTsKLX0KLQotYm9vbCBXZWJET01UZXN0T2JqOjpy
ZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0cigpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBpbXBsKCktPmhhc0F0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIpOwotfQotCi12
b2lkIFdlYkRPTVRlc3RPYmo6OnNldFJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyKGJvb2wgbmV3
UmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGltcGwoKS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIsIG5ld1JlZmxlY3RlZEN1c3RvbUJv
b2xlYW5BdHRyKTsKLX0KLQotV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RPYmo6OnJlZmxlY3RlZEN1
c3RvbVVSTEF0dHIoKSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4g
V2ViRE9NU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV1RGOjpTdHJp
bmcmPihpbXBsKCktPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNv
bnRlbnRVUkxBdHRyQXR0cikpOwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6OnNldFJlZmxlY3Rl
ZEN1c3RvbVVSTEF0dHIoY29uc3QgV2ViRE9NU3RyaW5nJiBuZXdSZWZsZWN0ZWRDdXN0b21VUkxB
dHRyKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCkt
PnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0
ciwgbmV3UmVmbGVjdGVkQ3VzdG9tVVJMQXR0cik7Ci19Ci0KLVdlYkRPTVN0cmluZyBXZWJET01U
ZXN0T2JqOjpyZWZsZWN0ZWRDdXN0b21Ob25FbXB0eVVSTEF0dHIoKSBjb25zdAotewotICAgIGlm
ICghaW1wbCgpKQotICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgV1RGOjpTdHJpbmcmPihpbXBsKCktPmdldE5vbkVtcHR5VVJMQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudE5vbkVtcHR5VVJMQXR0ckF0
dHIpKTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjpzZXRSZWZsZWN0ZWRDdXN0b21Ob25FbXB0
eVVSTEF0dHIoY29uc3QgV2ViRE9NU3RyaW5nJiBuZXdSZWZsZWN0ZWRDdXN0b21Ob25FbXB0eVVS
TEF0dHIpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwo
KS0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudE5vbkVtcHR5
VVJMQXR0ckF0dHIsIG5ld1JlZmxlY3RlZEN1c3RvbU5vbkVtcHR5VVJMQXR0cik7Ci19Ci0KLWlu
dCBXZWJET01UZXN0T2JqOjphdHRyV2l0aEdldHRlckV4Y2VwdGlvbigpIGNvbnN0Ci17Ci0gICAg
aWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgaW50IHJlc3VsdCA9IGltcGwoKS0+YXR0cldpdGhHZXR0ZXJFeGNl
cHRpb24oZWMpOwotICAgIHdlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0
aW9uQ29kZT4oZWMpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFdlYkRPTVRlc3RP
Ymo6OnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGludCBuZXdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbikKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLT5zZXRBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbihuZXdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiwgZWMpOwotICAgIHdlYkRPTVJhaXNl
RXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0aW9uQ29kZT4oZWMpKTsKLX0KLQotaW50IFdl
YkRPTVRlc3RPYmo6OmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkgY29uc3QKLXsKLSAgICBpZiAo
IWltcGwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gaW1wbCgpLT5hdHRyV2l0
aFNldHRlckV4Y2VwdGlvbigpOwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6OnNldEF0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uKGludCBuZXdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbikKLXsKLSAgICBp
ZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgaW1wbCgpLT5zZXRBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihuZXdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbiwgZWMpOwotICAgIHdlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nh
c3Q8V2ViRE9NRXhjZXB0aW9uQ29kZT4oZWMpKTsKLX0KLQotV2ViRE9NU3RyaW5nIFdlYkRPTVRl
c3RPYmo6OnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKCkgY29uc3QKLXsKLSAgICBpZiAo
IWltcGwoKSkKLSAgICAgICAgcmV0dXJuIFdlYkRPTVN0cmluZygpOwotCi0gICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViRE9NU3RyaW5nIHJlc3VsdCA9IGltcGwoKS0+
c3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpOwotICAgIHdlYkRPTVJhaXNlRXJyb3Io
c3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0aW9uQ29kZT4oZWMpKTsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgV1RGOjpTdHJpbmcmPihyZXN1bHQpOwotfQotCi12b2lkIFdlYkRPTVRlc3RP
Ymo6OnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGNvbnN0IFdlYkRPTVN0cmluZyYg
bmV3U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24pCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IGltcGwoKS0+c2V0U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24obmV3U3RyaW5nQXR0cldp
dGhHZXR0ZXJFeGNlcHRpb24sIGVjKTsKLSAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0
PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7Ci19Ci0KLVdlYkRPTVN0cmluZyBXZWJET01UZXN0
T2JqOjpzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFp
bXBsKCkpCi0gICAgICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKLQotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBXVEY6OlN0cmluZyY+KGltcGwoKS0+c3RyaW5nQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb24oKSk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6c2V0U3RyaW5nQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb24oY29uc3QgV2ViRE9NU3RyaW5nJiBuZXdTdHJpbmdBdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbikKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLT5zZXRTdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbihuZXdTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbiwgZWMp
OwotICAgIHdlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0aW9uQ29kZT4o
ZWMpKTsKLX0KLQotV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RPYmo6OnNjcmlwdFN0cmluZ0F0dHIo
KSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5n
KCk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV1RGOjpTdHJpbmcmPihpbXBsKCkt
PnNjcmlwdFN0cmluZ0F0dHIoKSk7Ci19Ci0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLWludCBX
ZWJET01UZXN0T2JqOjpjb25kaXRpb25hbEF0dHIxKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gaW1wbCgpLT5jb25kaXRpb25hbEF0
dHIxKCk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6c2V0Q29uZGl0aW9uYWxBdHRyMShpbnQg
bmV3Q29uZGl0aW9uYWxBdHRyMSkKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaW1wbCgpLT5zZXRDb25kaXRpb25hbEF0dHIxKG5ld0NvbmRpdGlvbmFsQXR0cjEp
OwotfQotCi0jZW5kaWYKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlv
bjIpCi1pbnQgV2ViRE9NVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyMigpIGNvbnN0Ci17Ci0gICAg
aWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGltcGwoKS0+Y29u
ZGl0aW9uYWxBdHRyMigpOwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6OnNldENvbmRpdGlvbmFs
QXR0cjIoaW50IG5ld0NvbmRpdGlvbmFsQXR0cjIpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+c2V0Q29uZGl0aW9uYWxBdHRyMihuZXdDb25kaXRp
b25hbEF0dHIyKTsKLX0KLQotI2VuZGlmCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJM
RShDb25kaXRpb24yKQotaW50IFdlYkRPTVRlc3RPYmo6OmNvbmRpdGlvbmFsQXR0cjMoKSBjb25z
dAotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBp
bXBsKCktPmNvbmRpdGlvbmFsQXR0cjMoKTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjpzZXRD
b25kaXRpb25hbEF0dHIzKGludCBuZXdDb25kaXRpb25hbEF0dHIzKQotewotICAgIGlmICghaW1w
bCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCktPnNldENvbmRpdGlvbmFsQXR0cjMo
bmV3Q29uZGl0aW9uYWxBdHRyMyk7Ci19Ci0KLSNlbmRpZgotaW50IFdlYkRPTVRlc3RPYmo6OmRl
c2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICByZXR1cm4gaW1wbCgpLT5kZXNjcmlwdGlvbigpOwotfQotCi1pbnQgV2ViRE9NVGVz
dE9iajo6aWQoKSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHJldHVybiBpbXBsKCktPmlkKCk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6c2V0
SWQoaW50IG5ld0lkKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpbXBsKCktPnNldElkKG5ld0lkKTsKLX0KLQotV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RPYmo6
Omhhc2goKSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gV2ViRE9N
U3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV1RGOjpTdHJpbmcmPihp
bXBsKCktPmhhc2goKSk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6dm9pZE1ldGhvZCgpCi17
Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+dm9pZE1l
dGhvZCgpOwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6OnZvaWRNZXRob2RXaXRoQXJncyhpbnQg
aW50QXJnLCBjb25zdCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYg
b2JqQXJnKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbXBs
KCktPnZvaWRNZXRob2RXaXRoQXJncyhpbnRBcmcsIHN0ckFyZywgdG9XZWJDb3JlKG9iakFyZykp
OwotfQotCi1pbnQgV2ViRE9NVGVzdE9iajo6aW50TWV0aG9kKCkKLXsKLSAgICBpZiAoIWltcGwo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gaW1wbCgpLT5pbnRNZXRob2QoKTsK
LX0KLQotaW50IFdlYkRPTVRlc3RPYmo6OmludE1ldGhvZFdpdGhBcmdzKGludCBpbnRBcmcsIGNv
bnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcpCi17
Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGltcGwo
KS0+aW50TWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJBcmcsIHRvV2ViQ29yZShvYmpBcmcpKTsK
LX0KLQotV2ViRE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjpvYmpNZXRob2QoKQotewotICAgIGlm
ICghaW1wbCgpKQotICAgICAgICByZXR1cm4gV2ViRE9NVGVzdE9iaigpOwotCi0gICAgcmV0dXJu
IHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+b2JqTWV0aG9kKCkpKTsKLX0KLQotV2ViRE9N
VGVzdE9iaiBXZWJET01UZXN0T2JqOjpvYmpNZXRob2RXaXRoQXJncyhpbnQgaW50QXJnLCBjb25z
dCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKQotewot
ICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gV2ViRE9NVGVzdE9iaigpOwotCi0gICAg
cmV0dXJuIHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+b2JqTWV0aG9kV2l0aEFyZ3MoaW50
QXJnLCBzdHJBcmcsIHRvV2ViQ29yZShvYmpBcmcpKSkpOwotfQotCi1XZWJET01UZXN0T2JqIFdl
YkRPTVRlc3RPYmo6Om1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MoY29uc3QgV2ViRE9NU3RyaW5n
JiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZykKLXsKLSAgICBpZiAoIWltcGwo
KSkKLSAgICAgICAgcmV0dXJuIFdlYkRPTVRlc3RPYmooKTsKLQotICAgIHJldHVybiB0b1dlYktp
dChXVEY6OmdldFB0cihpbXBsKCktPm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3Moc3RyQXJnLCB0
b1dlYkNvcmUob2JqQXJnKSkpKTsKLX0KLQotV2ViRE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjpt
ZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKGNvbnN0IFdlYkRPTVN0cmluZyYgc3Ry
QXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0g
ICAgICAgIHJldHVybiBXZWJET01UZXN0T2JqKCk7Ci0KLSAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBXZWJET01UZXN0T2JqIHJlc3VsdCA9IHRvV2ViS2l0KFdURjo6Z2V0
UHRyKGltcGwoKS0+bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhzdHJBcmcsIHRv
V2ViQ29yZShvYmpBcmcpLCBlYykpKTsKLSAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0
PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9p
ZCBXZWJET01UZXN0T2JqOjpzZXJpYWxpemVkVmFsdWUoY29uc3QgV2ViRE9NU3RyaW5nJiBzZXJp
YWxpemVkQXJnKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
bXBsKCktPnNlcmlhbGl6ZWRWYWx1ZShXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZShXVEY6OlN0cmluZyhzZXJpYWxpemVkQXJnKSkpOwotfQotCi12b2lkIFdlYkRPTVRlc3RP
Ymo6OmlkYktleShjb25zdCBXZWJET01JREJLZXkmIGtleSkKLXsKLSAgICBpZiAoIWltcGwoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5pZGJLZXkodG9XZWJDb3JlKGtleSkpOwot
fQotCi12b2lkIFdlYkRPTVRlc3RPYmo6Om9wdGlvbnNPYmplY3QoY29uc3QgV2ViRE9NT3B0aW9u
c09iamVjdCYgb28sIGNvbnN0IFdlYkRPTU9wdGlvbnNPYmplY3QmIG9vbykKLXsKLSAgICBpZiAo
IWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5vcHRpb25zT2JqZWN0KHRv
V2ViQ29yZShvbyksIHRvV2ViQ29yZShvb28pKTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjpt
ZXRob2RXaXRoRXhjZXB0aW9uKCkKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLT5tZXRo
b2RXaXRoRXhjZXB0aW9uKGVjKTsKLSAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdl
YkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6YWRkRXZl
bnRMaXN0ZW5lcihjb25zdCBXZWJET01TdHJpbmcmIHR5cGUsIGNvbnN0IFdlYkRPTUV2ZW50TGlz
dGVuZXImIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0b1dl
YkNvcmUobGlzdGVuZXIpLCB1c2VDYXB0dXJlKTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjpy
ZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IFdlYkRPTVN0cmluZyYgdHlwZSwgY29uc3QgV2ViRE9N
RXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKLXsKLSAgICBpZiAoIWlt
cGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVy
KHR5cGUsIHRvV2ViQ29yZShsaXN0ZW5lciksIHVzZUNhcHR1cmUpOwotfQotCi12b2lkIFdlYkRP
TVRlc3RPYmo6OndpdGhEeW5hbWljRnJhbWUoKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpbXBsKCktPndpdGhEeW5hbWljRnJhbWUoKTsKLX0KLQotdm9pZCBX
ZWJET01UZXN0T2JqOjp3aXRoRHluYW1pY0ZyYW1lQW5kQXJnKGludCBpbnRBcmcpCi17Ci0gICAg
aWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+d2l0aER5bmFtaWNG
cmFtZUFuZEFyZyhpbnRBcmcpOwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6OndpdGhEeW5hbWlj
RnJhbWVBbmRPcHRpb25hbEFyZyhpbnQgaW50QXJnLCBpbnQgb3B0aW9uYWxBcmcpCi17Ci0gICAg
aWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+d2l0aER5bmFtaWNG
cmFtZUFuZE9wdGlvbmFsQXJnKGludEFyZywgb3B0aW9uYWxBcmcpOwotfQotCi12b2lkIFdlYkRP
TVRlc3RPYmo6OndpdGhTY3JpcHRTdGF0ZVZvaWQoKQotewotICAgIGlmICghaW1wbCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCktPndpdGhTY3JpcHRTdGF0ZVZvaWQoKTsKLX0KLQot
V2ViRE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjp3aXRoU2NyaXB0U3RhdGVPYmooKQotewotICAg
IGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gV2ViRE9NVGVzdE9iaigpOwotCi0gICAgcmV0
dXJuIHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+d2l0aFNjcmlwdFN0YXRlT2JqKCkpKTsK
LX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjp3aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKCkK
LXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLT53aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0
aW9uKGVjKTsKLSAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlv
bkNvZGU+KGVjKSk7Ci19Ci0KLVdlYkRPTVRlc3RPYmogV2ViRE9NVGVzdE9iajo6d2l0aFNjcmlw
dFN0YXRlT2JqRXhjZXB0aW9uKCkKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJu
IFdlYkRPTVRlc3RPYmooKTsKLQotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIFdlYkRPTVRlc3RPYmogcmVzdWx0ID0gdG9XZWJLaXQoV1RGOjpnZXRQdHIoaW1wbCgpLT53
aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oZWMpKSk7Ci0gICAgd2ViRE9NUmFpc2VFcnJvcihz
dGF0aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKQot
ewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCktPndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6bWV0aG9k
V2l0aE9wdGlvbmFsQXJnKGludCBvcHQpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGltcGwoKS0+bWV0aG9kV2l0aE9wdGlvbmFsQXJnKG9wdCk7Ci19Ci0KLXZv
aWQgV2ViRE9NVGVzdE9iajo6bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmco
aW50IG5vbk9wdCwgaW50IG9wdCkKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaW1wbCgpLT5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhu
b25PcHQsIG9wdCk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6bWV0aG9kV2l0aE5vbk9wdGlv
bmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKGludCBub25PcHQsIGludCBvcHQxLCBpbnQgb3B0MikK
LXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5tZXRo
b2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3Mobm9uT3B0LCBvcHQxLCBvcHQy
KTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjpjbGFzc01ldGhvZCgpCi17Ci0gICAgaWYgKCFp
bXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+Y2xhc3NNZXRob2QoKTsKLX0K
LQotaW50IFdlYkRPTVRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKGludCBhcmcpCi17
Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGltcGwo
KS0+Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoYXJnKTsKLX0KLQotV2ViQ29yZTo6VGVzdE9iaiog
dG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RPYmomIHdyYXBwZXIpCi17Ci0gICAgcmV0dXJuIHdy
YXBwZXIuaW1wbCgpOwotfQotCi1XZWJET01UZXN0T2JqIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RP
YmoqIHZhbHVlKQotewotICAgIHJldHVybiBXZWJET01UZXN0T2JqKHZhbHVlKTsKLX0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAv
V2ViRE9NVGVzdE9iai5oCShyZXZpc2lvbiA4OTE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDE3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWls
LmNvbT4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJET01UZXN0T2JqX2gKLSNkZWZpbmUgV2Vi
RE9NVGVzdE9ial9oCi0KLSNpbmNsdWRlIDxXZWJET01PYmplY3QuaD4KLSNpbmNsdWRlIDxXZWJE
T01TdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgVGVzdE9iajsKLX07Ci0K
LWNsYXNzIFdlYkRPTUV2ZW50TGlzdGVuZXI7Ci1jbGFzcyBXZWJET01JREJLZXk7Ci1jbGFzcyBX
ZWJET01PcHRpb25zT2JqZWN0OwotY2xhc3MgV2ViRE9NU3RyaW5nOwotY2xhc3MgV2ViRE9NVGVz
dE9iajsKLQotY2xhc3MgV2ViRE9NVGVzdE9iaiA6IHB1YmxpYyBXZWJET01PYmplY3QgewotcHVi
bGljOgotICAgIFdlYkRPTVRlc3RPYmooKTsKLSAgICBleHBsaWNpdCBXZWJET01UZXN0T2JqKFdl
YkNvcmU6OlRlc3RPYmoqKTsKLSAgICBXZWJET01UZXN0T2JqKGNvbnN0IFdlYkRPTVRlc3RPYmom
KTsKLSAgICBXZWJET01UZXN0T2JqJiBvcGVyYXRvcj0oY29uc3QgV2ViRE9NVGVzdE9iaiYpOwot
ICAgIHZpcnR1YWwgfldlYkRPTVRlc3RPYmooKTsKLQotICAgIGVudW0gewotICAgICAgICBXRUJE
T01fQ09OU1RfVkFMVUVfMCA9IDAsCi0gICAgICAgIFdFQkRPTV9DT05TVF9WQUxVRV8xID0gMSwK
LSAgICAgICAgV0VCRE9NX0NPTlNUX1ZBTFVFXzIgPSAyLAotICAgICAgICBXRUJET01fQ09OU1Rf
VkFMVUVfNCA9IDQsCi0gICAgICAgIFdFQkRPTV9DT05TVF9WQUxVRV84ID0gOCwKLSAgICAgICAg
V0VCRE9NX0NPTlNUX1ZBTFVFXzkgPSAtMSwKLSAgICAgICAgV0VCRE9NX0NPTlNUX1ZBTFVFXzEw
ID0gIm15IGNvbnN0YW50IHN0cmluZyIsCi0gICAgICAgIFdFQkRPTV9DT05TVF9WQUxVRV8xMSA9
IDB4ZmZmZmZmZmYsCi0gICAgICAgIFdFQkRPTV9DT05TVF9WQUxVRV8xMiA9IDB4MDEsCi0gICAg
ICAgIFdFQkRPTV9DT05TVF9WQUxVRV8xMyA9IDBYMjAsCi0gICAgICAgIFdFQkRPTV9DT05TVF9W
QUxVRV8xNCA9IDB4MWFiYwotICAgIH07Ci0KLSAgICBpbnQgcmVhZE9ubHlJbnRBdHRyKCkgY29u
c3Q7Ci0gICAgV2ViRE9NU3RyaW5nIHJlYWRPbmx5U3RyaW5nQXR0cigpIGNvbnN0OwotICAgIFdl
YkRPTVRlc3RPYmogcmVhZE9ubHlUZXN0T2JqQXR0cigpIGNvbnN0OwotICAgIHNob3J0IHNob3J0
QXR0cigpIGNvbnN0OwotICAgIHZvaWQgc2V0U2hvcnRBdHRyKHNob3J0KTsKLSAgICB1bnNpZ25l
ZCBzaG9ydCB1bnNpZ25lZFNob3J0QXR0cigpIGNvbnN0OwotICAgIHZvaWQgc2V0VW5zaWduZWRT
aG9ydEF0dHIodW5zaWduZWQgc2hvcnQpOwotICAgIGludCBpbnRBdHRyKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRJbnRBdHRyKGludCk7Ci0gICAgbG9uZyBsb25nIGxvbmdMb25nQXR0cigpIGNvbnN0
OwotICAgIHZvaWQgc2V0TG9uZ0xvbmdBdHRyKGxvbmcgbG9uZyk7Ci0gICAgdW5zaWduZWQgbG9u
ZyBsb25nIHVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRVbnNpZ25l
ZExvbmdMb25nQXR0cih1bnNpZ25lZCBsb25nIGxvbmcpOwotICAgIFdlYkRPTVN0cmluZyBzdHJp
bmdBdHRyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdHJpbmdBdHRyKGNvbnN0IFdlYkRPTVN0cmlu
ZyYpOwotICAgIFdlYkRPTVRlc3RPYmogdGVzdE9iakF0dHIoKSBjb25zdDsKLSAgICB2b2lkIHNl
dFRlc3RPYmpBdHRyKGNvbnN0IFdlYkRPTVRlc3RPYmomKTsKLSAgICBXZWJET01UZXN0T2JqIFhN
TE9iakF0dHIoKSBjb25zdDsKLSAgICB2b2lkIHNldFhNTE9iakF0dHIoY29uc3QgV2ViRE9NVGVz
dE9iaiYpOwotICAgIGJvb2wgY3JlYXRlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDcmVhdGUoYm9v
bCk7Ci0gICAgV2ViRE9NU3RyaW5nIHJlZmxlY3RlZFN0cmluZ0F0dHIoKSBjb25zdDsKLSAgICB2
b2lkIHNldFJlZmxlY3RlZFN0cmluZ0F0dHIoY29uc3QgV2ViRE9NU3RyaW5nJik7Ci0gICAgaW50
IHJlZmxlY3RlZEludGVncmFsQXR0cigpIGNvbnN0OwotICAgIHZvaWQgc2V0UmVmbGVjdGVkSW50
ZWdyYWxBdHRyKGludCk7Ci0gICAgdW5zaWduZWQgcmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0
dHIoKSBjb25zdDsKLSAgICB2b2lkIHNldFJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKHVu
c2lnbmVkKTsKLSAgICBib29sIHJlZmxlY3RlZEJvb2xlYW5BdHRyKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRSZWZsZWN0ZWRCb29sZWFuQXR0cihib29sKTsKLSAgICBXZWJET01TdHJpbmcgcmVmbGVj
dGVkVVJMQXR0cigpIGNvbnN0OwotICAgIHZvaWQgc2V0UmVmbGVjdGVkVVJMQXR0cihjb25zdCBX
ZWJET01TdHJpbmcmKTsKLSAgICBXZWJET01TdHJpbmcgcmVmbGVjdGVkTm9uRW1wdHlVUkxBdHRy
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRSZWZsZWN0ZWROb25FbXB0eVVSTEF0dHIoY29uc3QgV2Vi
RE9NU3RyaW5nJik7Ci0gICAgV2ViRE9NU3RyaW5nIHJlZmxlY3RlZFN0cmluZ0F0dHIoKSBjb25z
dDsKLSAgICB2b2lkIHNldFJlZmxlY3RlZFN0cmluZ0F0dHIoY29uc3QgV2ViRE9NU3RyaW5nJik7
Ci0gICAgaW50IHJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cigpIGNvbnN0OwotICAgIHZvaWQg
c2V0UmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKGludCk7Ci0gICAgYm9vbCByZWZsZWN0ZWRD
dXN0b21Cb29sZWFuQXR0cigpIGNvbnN0OwotICAgIHZvaWQgc2V0UmVmbGVjdGVkQ3VzdG9tQm9v
bGVhbkF0dHIoYm9vbCk7Ci0gICAgV2ViRE9NU3RyaW5nIHJlZmxlY3RlZEN1c3RvbVVSTEF0dHIo
KSBjb25zdDsKLSAgICB2b2lkIHNldFJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoY29uc3QgV2ViRE9N
U3RyaW5nJik7Ci0gICAgV2ViRE9NU3RyaW5nIHJlZmxlY3RlZEN1c3RvbU5vbkVtcHR5VVJMQXR0
cigpIGNvbnN0OwotICAgIHZvaWQgc2V0UmVmbGVjdGVkQ3VzdG9tTm9uRW1wdHlVUkxBdHRyKGNv
bnN0IFdlYkRPTVN0cmluZyYpOwotICAgIGludCBhdHRyV2l0aEdldHRlckV4Y2VwdGlvbigpIGNv
bnN0OwotICAgIHZvaWQgc2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oaW50KTsKLSAgICBpbnQg
YXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSBjb25zdDsKLSAgICB2b2lkIHNldEF0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uKGludCk7Ci0gICAgV2ViRE9NU3RyaW5nIHN0cmluZ0F0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbihjb25zdCBXZWJET01TdHJpbmcmKTsKLSAgICBXZWJET01TdHJpbmcgc3RyaW5nQXR0cldp
dGhTZXR0ZXJFeGNlcHRpb24oKSBjb25zdDsKLSAgICB2b2lkIHNldFN0cmluZ0F0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uKGNvbnN0IFdlYkRPTVN0cmluZyYpOwotICAgIGludCBjdXN0b21BdHRyKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRDdXN0b21BdHRyKGludCk7Ci0gICAgV2ViRE9NU3RyaW5nIHNj
cmlwdFN0cmluZ0F0dHIoKSBjb25zdDsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLSAgICBpbnQg
Y29uZGl0aW9uYWxBdHRyMSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29uZGl0aW9uYWxBdHRyMShp
bnQpOwotI2VuZGlmCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24y
KQotICAgIGludCBjb25kaXRpb25hbEF0dHIyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb25kaXRp
b25hbEF0dHIyKGludCk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpCi0gICAgaW50IGNvbmRpdGlvbmFsQXR0cjMoKSBjb25zdDsKLSAgICB2b2lk
IHNldENvbmRpdGlvbmFsQXR0cjMoaW50KTsKLSNlbmRpZgotICAgIGludCBkZXNjcmlwdGlvbigp
IGNvbnN0OwotICAgIGludCBpZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0SWQoaW50KTsKLSAgICBX
ZWJET01TdHJpbmcgaGFzaCgpIGNvbnN0OwotCi0gICAgdm9pZCB2b2lkTWV0aG9kKCk7Ci0gICAg
dm9pZCB2b2lkTWV0aG9kV2l0aEFyZ3MoaW50IGludEFyZywgY29uc3QgV2ViRE9NU3RyaW5nJiBz
dHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7Ci0gICAgaW50IGludE1ldGhvZCgp
OwotICAgIGludCBpbnRNZXRob2RXaXRoQXJncyhpbnQgaW50QXJnLCBjb25zdCBXZWJET01TdHJp
bmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKLSAgICBXZWJET01UZXN0
T2JqIG9iak1ldGhvZCgpOwotICAgIFdlYkRPTVRlc3RPYmogb2JqTWV0aG9kV2l0aEFyZ3MoaW50
IGludEFyZywgY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmom
IG9iakFyZyk7Ci0gICAgV2ViRE9NVGVzdE9iaiBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzKGNv
bnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcpOwot
ICAgIFdlYkRPTVRlc3RPYmogbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhjb25z
dCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKLSAg
ICB2b2lkIHNlcmlhbGl6ZWRWYWx1ZShjb25zdCBXZWJET01TdHJpbmcmIHNlcmlhbGl6ZWRBcmcp
OwotICAgIHZvaWQgaWRiS2V5KGNvbnN0IFdlYkRPTUlEQktleSYga2V5KTsKLSAgICB2b2lkIG9w
dGlvbnNPYmplY3QoY29uc3QgV2ViRE9NT3B0aW9uc09iamVjdCYgb28sIGNvbnN0IFdlYkRPTU9w
dGlvbnNPYmplY3QmIG9vbyk7Ci0gICAgdm9pZCBtZXRob2RXaXRoRXhjZXB0aW9uKCk7Ci0gICAg
dm9pZCBjdXN0b21NZXRob2QoKTsKLSAgICB2b2lkIGN1c3RvbU1ldGhvZFdpdGhBcmdzKGludCBp
bnRBcmcsIGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBv
YmpBcmcpOwotICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJET01TdHJpbmcmIHR5
cGUsIGNvbnN0IFdlYkRPTUV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUp
OwotICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJET01TdHJpbmcmIHR5cGUs
IGNvbnN0IFdlYkRPTUV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpOwot
ICAgIHZvaWQgd2l0aER5bmFtaWNGcmFtZSgpOwotICAgIHZvaWQgd2l0aER5bmFtaWNGcmFtZUFu
ZEFyZyhpbnQgaW50QXJnKTsKLSAgICB2b2lkIHdpdGhEeW5hbWljRnJhbWVBbmRPcHRpb25hbEFy
ZyhpbnQgaW50QXJnLCBpbnQgb3B0aW9uYWxBcmcpOwotICAgIHZvaWQgd2l0aER5bmFtaWNGcmFt
ZUFuZFVzZXJHZXN0dXJlKGludCBpbnRBcmcpOwotICAgIHZvaWQgd2l0aER5bmFtaWNGcmFtZUFu
ZFVzZXJHZXN0dXJlQVNBRChpbnQgaW50QXJnLCBpbnQgb3B0aW9uYWxBcmcpOwotICAgIHZvaWQg
d2l0aFNjcmlwdFN0YXRlVm9pZCgpOwotICAgIFdlYkRPTVRlc3RPYmogd2l0aFNjcmlwdFN0YXRl
T2JqKCk7Ci0gICAgdm9pZCB3aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKCk7Ci0gICAgV2Vi
RE9NVGVzdE9iaiB3aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oKTsKLSAgICB2b2lkIHdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgdm9pZCBtZXRob2RXaXRoT3B0aW9uYWxBcmco
aW50IG9wdCk7Ci0gICAgdm9pZCBtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFy
ZyhpbnQgbm9uT3B0LCBpbnQgb3B0KTsKLSAgICB2b2lkIG1ldGhvZFdpdGhOb25PcHRpb25hbEFy
Z0FuZFR3b09wdGlvbmFsQXJncyhpbnQgbm9uT3B0LCBpbnQgb3B0MSwgaW50IG9wdDIpOwotICAg
IHZvaWQgY2xhc3NNZXRob2QoKTsKLSAgICBpbnQgY2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoaW50
IGFyZyk7Ci0KLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpbXBsKCkgY29uc3Q7Ci0KLXByb3RlY3Rl
ZDoKLSAgICBzdHJ1Y3QgV2ViRE9NVGVzdE9ialByaXZhdGU7Ci0gICAgV2ViRE9NVGVzdE9ialBy
aXZhdGUqIG1faW1wbDsKLX07Ci0KLVdlYkNvcmU6OlRlc3RPYmoqIHRvV2ViQ29yZShjb25zdCBX
ZWJET01UZXN0T2JqJik7Ci1XZWJET01UZXN0T2JqIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RPYmoq
KTsKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
Q1BQL1dlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHJldmlzaW9uIDg5MTQyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5NiArMCww
IEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgotICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxF
KENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotCi0jaW5jbHVkZSAiV2ViRE9NVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIgotCi0jaW5jbHVkZSAiU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5oIgotI2luY2x1ZGUgIldlYkV4Y2VwdGlvbkhhbmRsZXIuaCIKLSNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1zdHJ1Y3QgV2ViRE9NVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6V2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVByaXZhdGUgewotICAgIFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VQcml2YXRlKFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UqIG9iamVjdCA9IDApCi0gICAgICAgIDogaW1wbChvYmplY3QpCi0gICAgewotICAgIH0K
LQotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
PiBpbXBsOwotfTsKLQotV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6
V2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSgpCi0gICAgOiBXZWJET01P
YmplY3QoKQotICAgICwgbV9pbXBsKDApCi17Ci19Ci0KLVdlYkRPTVRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2U6OldlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wbCkKLSAg
ICA6IFdlYkRPTU9iamVjdCgpCi0gICAgLCBtX2ltcGwobmV3IFdlYkRPTVRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2YXRlKGltcGwpKQotewotfQotCi1XZWJET01UZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlKGNvbnN0IFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UmIGNvcHkpCi0gICAgOiBXZWJET01PYmplY3QoKQotewotICAgIG1faW1wbCA9IGNvcHkuaW1w
bCgpID8gbmV3IFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2YXRl
KGNvcHkuaW1wbCgpKSA6IDA7Ci19Ci0KLVdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UmIFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6Om9wZXJh
dG9yPShjb25zdCBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiBjb3B5
KQotewotICAgIGRlbGV0ZSBtX2ltcGw7Ci0gICAgbV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcg
V2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByaXZhdGUoY29weS5pbXBs
KCkpIDogMDsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVdlYkNvcmU6OlRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UqIFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2U6OmltcGwoKSBjb25zdAotewotICAgIHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmltcGwu
Z2V0KCkgOiAwOwotfQotCi1XZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Ojp+V2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSgpCi17Ci0gICAgZGVs
ZXRlIG1faW1wbDsKLSAgICBtX2ltcGwgPSAwOwotfQotCi1XZWJET01TdHJpbmcgV2ViRE9NVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6dmFsdWUoKSBjb25zdAotewotICAgIGlm
ICghaW1wbCgpKQotICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4g
aW1wbCgpLT52YWx1ZSgpLT50b1N0cmluZygpOwotfQotCi1XZWJDb3JlOjpUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYgd3JhcHBlcikKLXsKLSAgICByZXR1cm4gd3JhcHBlci5p
bXBsKCk7Ci19Ci0KLVdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgdG9X
ZWJLaXQoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uo
dmFsdWUpOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25k
aXRpb24yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9X
ZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgJKHJldmlzaW9uIDg5MTQyKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpZm5kZWYgV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZV9oCi0jZGVm
aW5lIFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VfaAotCi0jaWYgRU5B
QkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotCi0jaW5jbHVkZSA8V2ViRE9N
T2JqZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViRE9NU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLWNsYXNzIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U7Ci19OwotCi1jbGFz
cyBXZWJET01TdHJpbmc7Ci0KLWNsYXNzIFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UgOiBwdWJsaWMgV2ViRE9NT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBXZWJET01UZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKCk7Ci0gICAgZXhwbGljaXQgV2ViRE9NVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZShXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKik7Ci0gICAgV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZShjb25zdCBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Jik7Ci0gICAgV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYgb3BlcmF0
b3I9KGNvbnN0IFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmKTsKLSAg
ICB2aXJ0dWFsIH5XZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKCk7Ci0K
LSAgICBXZWJET01TdHJpbmcgdmFsdWUoKSBjb25zdDsKLQotICAgIFdlYkNvcmU6OlRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcGwoKSBjb25zdDsKLQotcHJvdGVjdGVkOgot
ICAgIHN0cnVjdCBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0
ZTsKLSAgICBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0ZSog
bV9pbXBsOwotfTsKLQotV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UmKTsKLVdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgdG9XZWJLaXQo
V2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSopOwotCi0jZW5kaWYK
LSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcAkocmV2aXNpb24g
ODkxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIzNSArMCwwIEBA
Ci0vKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotCi0jaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlICJET01PYmplY3RD
YWNoZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJKU01haW5UaHJl
YWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJUZXN0Q2FsbGJhY2suaCIKLSNpbmNsdWRlICJXZWJL
aXRET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgi
Ci0jaW5jbHVkZSAid2Via2l0L1dlYktpdERPTUNsYXNzMS5oIgotI2luY2x1ZGUgIndlYmtpdC9X
ZWJLaXRET01DbGFzczFQcml2YXRlLmgiCi0jaW5jbHVkZSAid2Via2l0L1dlYktpdERPTUNsYXNz
Mi5oIgotI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01DbGFzczJQcml2YXRlLmgiCi0jaW5jbHVk
ZSAid2Via2l0L1dlYktpdERPTUNsYXNzMy5oIgotI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01D
bGFzczNQcml2YXRlLmgiCi0jaW5jbHVkZSAid2Via2l0L1dlYktpdERPTURPTVN0cmluZ0xpc3Qu
aCIKLSNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NRE9NU3RyaW5nTGlzdFByaXZhdGUuaCIKLSNp
bmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmgiCi0jaW5jbHVkZSAid2Via2l0
L1dlYktpdERPTVRlc3RDYWxsYmFja1ByaXZhdGUuaCIKLSNpbmNsdWRlICJ3ZWJraXRkZWZpbmVz
LmgiCi0jaW5jbHVkZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKLSNpbmNsdWRlICJ3ZWJraXRt
YXJzaGFsLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotICAgIAotV2ViS2l0RE9NVGVzdENhbGxi
YWNrKiBraXQoV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBvYmopCi17Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwob2JqLCAwKTsKLQotICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNo
ZTo6Z2V0KG9iaikpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRET01UZXN0Q2Fs
bGJhY2sqPihyZXQpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RDYWxs
YmFjayo+KERPTU9iamVjdENhY2hlOjpwdXQob2JqLCBXZWJLaXQ6OndyYXBUZXN0Q2FsbGJhY2so
b2JqKSkpOwotfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0IC8vCi0KLWdib29sZWFuCi13
ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9ub19wYXJhbShXZWJLaXRET01U
ZXN0Q2FsbGJhY2sqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6
OlRlc3RDYWxsYmFjayAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2Jvb2xlYW4g
cmVzID0gaXRlbS0+Y2FsbGJhY2tXaXRoTm9QYXJhbSgpOwotICAgIHJldHVybiByZXM7Ci19Ci0K
LWdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9jbGFzczFw
YXJhbShXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsIFdlYktpdERPTUNsYXNzMSogY2xhc3Mx
cGFyYW0pCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFj
ayAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
Y2xhc3MxcGFyYW0sIDApOwotICAgIFdlYkNvcmU6OkNsYXNzMSAqIGNvbnZlcnRlZF9jbGFzczFw
YXJhbSA9IE5VTEw7Ci0gICAgaWYgKGNsYXNzMXBhcmFtICE9IE5VTEwpIHsKLSAgICAgICAgY29u
dmVydGVkX2NsYXNzMXBhcmFtID0gV2ViS2l0Ojpjb3JlKGNsYXNzMXBhcmFtKTsKLSAgICAgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoY29udmVydGVkX2NsYXNzMXBhcmFtLCAwKTsKLSAgICB9Ci0g
ICAgZ2Jvb2xlYW4gcmVzID0gaXRlbS0+Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oY29udmVydGVk
X2NsYXNzMXBhcmFtKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1nYm9vbGVhbgotd2Via2l0X2Rv
bV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfY2xhc3MycGFyYW0oV2ViS2l0RE9NVGVzdENh
bGxiYWNrKiBzZWxmLCBXZWJLaXRET01DbGFzczIqIGNsYXNzMnBhcmFtLCBjb25zdCBnY2hhciog
c3RyX2FyZykKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxi
YWNrICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChjbGFzczJwYXJhbSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyX2FyZywgMCk7
Ci0gICAgV2ViQ29yZTo6Q2xhc3MyICogY29udmVydGVkX2NsYXNzMnBhcmFtID0gTlVMTDsKLSAg
ICBpZiAoY2xhc3MycGFyYW0gIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfY2xhc3MycGFy
YW0gPSBXZWJLaXQ6OmNvcmUoY2xhc3MycGFyYW0pOwotICAgICAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChjb252ZXJ0ZWRfY2xhc3MycGFyYW0sIDApOwotICAgIH0KLSAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJfYXJnKTsKLSAgICBn
Ym9vbGVhbiByZXMgPSBpdGVtLT5jYWxsYmFja1dpdGhDbGFzczJQYXJhbShjb252ZXJ0ZWRfY2xh
c3MycGFyYW0sIGNvbnZlcnRlZF9zdHJfYXJnKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1nbG9u
Zwotd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfbm9uX2Jvb2xfcmV0dXJu
X3R5cGUoV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBXZWJLaXRET01DbGFzczMqIGNsYXNz
M3BhcmFtKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0Q2FsbGJh
Y2sgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KGNsYXNzM3BhcmFtLCAwKTsKLSAgICBXZWJDb3JlOjpDbGFzczMgKiBjb252ZXJ0ZWRfY2xhc3Mz
cGFyYW0gPSBOVUxMOwotICAgIGlmIChjbGFzczNwYXJhbSAhPSBOVUxMKSB7Ci0gICAgICAgIGNv
bnZlcnRlZF9jbGFzczNwYXJhbSA9IFdlYktpdDo6Y29yZShjbGFzczNwYXJhbSk7Ci0gICAgICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRlZF9jbGFzczNwYXJhbSwgMCk7Ci0gICAgfQot
ICAgIGdsb25nIHJlcyA9IGl0ZW0tPmNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBlKGNvbnZl
cnRlZF9jbGFzczNwYXJhbSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotZ2Jvb2xlYW4KLXdlYmtp
dF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX3N0cmluZ19saXN0KFdlYktpdERPTVRl
c3RDYWxsYmFjayogc2VsZiwgV2ViS2l0RE9NRE9NU3RyaW5nTGlzdCogbGlzdF9wYXJhbSkKLXsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChsaXN0X3BhcmFt
LCAwKTsKLSAgICBXZWJDb3JlOjpET01TdHJpbmdMaXN0ICogY29udmVydGVkX2xpc3RfcGFyYW0g
PSBOVUxMOwotICAgIGlmIChsaXN0X3BhcmFtICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVk
X2xpc3RfcGFyYW0gPSBXZWJLaXQ6OmNvcmUobGlzdF9wYXJhbSk7Ci0gICAgICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKGNvbnZlcnRlZF9saXN0X3BhcmFtLCAwKTsKLSAgICB9Ci0gICAgZ2Jvb2xl
YW4gcmVzID0gaXRlbS0+Y2FsbGJhY2tXaXRoU3RyaW5nTGlzdChjb252ZXJ0ZWRfbGlzdF9wYXJh
bSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RD
YWxsYmFjaywgd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNU
KQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBjb3JlKFdl
YktpdERPTVRlc3RDYWxsYmFjayogcmVxdWVzdCkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChyZXF1ZXN0LCAwKTsKLQotICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogY29yZU9iamVjdCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RDYWxsYmFjayo+KFdFQktJVF9ET01fT0JKRUNUKHJl
cXVlc3QpLT5jb3JlT2JqZWN0KTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0
LCAwKTsKLQotICAgIHJldHVybiBjb3JlT2JqZWN0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLWVudW0gewotICAgIFBST1BfMCwKLX07Ci0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90
ZXN0X2NhbGxiYWNrX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJLaXRET01P
YmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpOwotICAgIAotICAg
IGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7Ci0gICAgICAgIFdlYkNvcmU6OlRlc3RDYWxs
YmFjayogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RDYWxsYmFjayAqPihk
b21fb2JqZWN0LT5jb3JlT2JqZWN0KTsKLQotICAgICAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hl
Ojpmb3JnZXQoY29yZU9iamVjdCk7Ci0gICAgICAgIGNvcmVPYmplY3QtPmRlcmVmKCk7Ci0KLSAg
ICAgICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7Ci0gICAgfQotCi0gICAgR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX3BhcmVudF9jbGFzcyktPmZpbmFsaXpl
KG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19zZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUqIHZh
bHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNw
ZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLQotc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X2NhbGxiYWNrX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bf
aWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0
LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotCi1zdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0
KQotewotCi0gICAgaWYgKEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19w
YXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCkKLSAgICAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X2RvbV90ZXN0X2NhbGxiYWNrX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9iamVjdCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jbGFzc19pbml0KFdlYktp
dERPTVRlc3RDYWxsYmFja0NsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNz
ICpnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZmluYWxpemU7Ci0g
ICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tf
c2V0X3Byb3BlcnR5OwotICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV90ZXN0X2NhbGxiYWNrX2dldF9wcm9wZXJ0eTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVj
dGVkID0gd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NvbnN0cnVjdGVkOwotCi0KLQotfQotCi1z
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfaW5pdChXZWJLaXRET01UZXN0Q2Fs
bGJhY2sqIHJlcXVlc3QpCi17Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVz
dENhbGxiYWNrKiB3cmFwVGVzdENhbGxiYWNrKFdlYkNvcmU6OlRlc3RDYWxsYmFjayogY29yZU9i
amVjdCkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKLQotICAg
IC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBi
ZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0
ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0g
ICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KLSAgICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsK
LQotICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLKGdfb2JqZWN0X25ldyhXRUJL
SVRfVFlQRV9ET01fVEVTVF9DQUxMQkFDSywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgTlVMTCkpOwotfQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0jZW5kaWYgLyogRU5BQkxFKERBVEFCQVNFKSAqLwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmgJKHJldmlzaW9uIDg5MTQy
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdENhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAg
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0g
ICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3RDYWxsYmFja19oCi0jZGVm
aW5lIFdlYktpdERPTVRlc3RDYWxsYmFja19oCi0KLSNpbmNsdWRlICJ3ZWJraXQvd2Via2l0ZG9t
ZGVmaW5lcy5oIgotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dl
YmtpdGRlZmluZXMuaD4KLSNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NT2JqZWN0LmgiCi0KLQot
R19CRUdJTl9ERUNMUwotI2RlZmluZSBXRUJLSVRfVFlQRV9ET01fVEVTVF9DQUxMQkFDSyAgICAg
ICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VC
S0lUX0RPTV9URVNUX0NBTExCQUNLKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0RPTV9URVNUX0NBTExCQUNLLCBXZWJLaXRET01U
ZXN0Q2FsbGJhY2spKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ0FMTEJBQ0tfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9N
X1RFU1RfQ0FMTEJBQ0ssIFdlYktpdERPTVRlc3RDYWxsYmFja0NsYXNzKQotI2RlZmluZSBXRUJL
SVRfRE9NX0lTX1RFU1RfQ0FMTEJBQ0sob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfRE9NX1RFU1RfQ0FMTEJBQ0spKQotI2RlZmluZSBX
RUJLSVRfRE9NX0lTX1RFU1RfQ0FMTEJBQ0tfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfQ0FMTEJBQ0spKQotI2RlZmlu
ZSBXRUJLSVRfRE9NX1RFU1RfQ0FMTEJBQ0tfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfQ0FMTEJBQ0ssIFdlYktp
dERPTVRlc3RDYWxsYmFja0NsYXNzKSkKLQotc3RydWN0IF9XZWJLaXRET01UZXN0Q2FsbGJhY2sg
ewotICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Ci19OwotCi1zdHJ1Y3QgX1dl
YktpdERPTVRlc3RDYWxsYmFja0NsYXNzIHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJl
bnRfY2xhc3M7Ci19OwotCi1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3RfY2FsbGJh
Y2tfZ2V0X3R5cGUgKHZvaWQpOwotCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfZG9tX3Rl
c3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9ub19wYXJhbShXZWJLaXRET01UZXN0Q2FsbGJhY2sq
IHNlbGYpOwotCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tf
Y2FsbGJhY2tfd2l0aF9jbGFzczFwYXJhbShXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsIFdl
YktpdERPTUNsYXNzMSogY2xhc3MxcGFyYW0pOwotCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJr
aXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9jbGFzczJwYXJhbShXZWJLaXRET01U
ZXN0Q2FsbGJhY2sqIHNlbGYsIFdlYktpdERPTUNsYXNzMiogY2xhc3MycGFyYW0sIGNvbnN0IGdj
aGFyKiBzdHJfYXJnKTsKLQotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X2NhbGxi
YWNrX2NhbGxiYWNrX3dpdGhfbm9uX2Jvb2xfcmV0dXJuX3R5cGUoV2ViS2l0RE9NVGVzdENhbGxi
YWNrKiBzZWxmLCBXZWJLaXRET01DbGFzczMqIGNsYXNzM3BhcmFtKTsKLQotV0VCS0lUX0FQSSBn
Ym9vbGVhbgotd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfc3RyaW5nX2xp
c3QoV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBXZWJLaXRET01ET01TdHJpbmdMaXN0KiBs
aXN0X3BhcmFtKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RDYWxs
YmFja19oICovCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2tQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxi
YWNrUHJpdmF0ZS5oCShyZXZpc2lvbiA4OTE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFja1ByaXZhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwzOSArMCwwIEBACi0vKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNp
Zm5kZWYgV0VCX0tJVF9ET01fVEVTVF9DQUxMQkFDS19QUklWQVRFX0gKLSNkZWZpbmUgV0VCX0tJ
VF9ET01fVEVTVF9DQUxMQkFDS19QUklWQVRFX0gKLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+
Ci0jaW5jbHVkZSA8d2Via2l0L1dlYktpdERPTU9iamVjdC5oPgotI2luY2x1ZGUgIlRlc3RDYWxs
YmFjay5oIgotbmFtZXNwYWNlIFdlYktpdCB7Ci0gICAgV2ViS2l0RE9NVGVzdENhbGxiYWNrICoK
LSAgICB3cmFwVGVzdENhbGxiYWNrKFdlYkNvcmU6OlRlc3RDYWxsYmFjayAqY29yZU9iamVjdCk7
Ci0KLSAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2sgKgotICAgIGNvcmUoV2ViS2l0RE9NVGVzdENh
bGxiYWNrICpyZXF1ZXN0KTsKLQotICAgIFdlYktpdERPTVRlc3RDYWxsYmFjayoKLSAgICBraXQo
V2ViQ29yZTo6VGVzdENhbGxiYWNrKiBub2RlKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvKiBXRUJfS0lUX0RPTV9URVNUX0NBTExCQUNLX1BSSVZBVEVfSCAqLwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZS5jcHAJKHJldmlzaW9uIDg5
MTQyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdEludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTUxICswLDAgQEAK
LS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjIpCi0KLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgotI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgotI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIlRlc3RJbnRl
cmZhY2UuaCIKLSNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiZ29iamVj
dC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3RJ
bnRlcmZhY2UuaCIKLSNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZh
dGUuaCIKLSNpbmNsdWRlICJ3ZWJraXRkZWZpbmVzLmgiCi0jaW5jbHVkZSAid2Via2l0Z2xvYmFs
c3ByaXZhdGUuaCIKLSNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCi0KLW5hbWVzcGFjZSBXZWJL
aXQgewotICAgIAotV2ViS2l0RE9NVGVzdEludGVyZmFjZSoga2l0KFdlYkNvcmU6OlRlc3RJbnRl
cmZhY2UqIG9iaikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmosIDApOwotCi0gICAg
aWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RJbnRlcmZhY2UqPihyZXQpOwotCi0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RJbnRlcmZhY2UqPihET01PYmplY3RDYWNoZTo6
cHV0KG9iaiwgV2ViS2l0Ojp3cmFwVGVzdEludGVyZmFjZShvYmopKSk7Ci19Ci0gICAgCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQgLy8KLQotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RJbnRl
cmZhY2UsIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2UsIFdFQktJVF9UWVBFX0RPTV9PQkpFQ1Qp
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJDb3JlOjpUZXN0SW50ZXJmYWNlKiBjb3JlKFdl
YktpdERPTVRlc3RJbnRlcmZhY2UqIHJlcXVlc3QpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwocmVxdWVzdCwgMCk7Ci0KLSAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlKiBjb3JlT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEludGVyZmFjZSo+KFdFQktJVF9ET01fT0JKRUNU
KHJlcXVlc3QpLT5jb3JlT2JqZWN0KTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2Jq
ZWN0LCAwKTsKLQotICAgIHJldHVybiBjb3JlT2JqZWN0OwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLWVudW0gewotICAgIFBST1BfMCwKLX07Ci0KLQotc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X2ludGVyZmFjZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0
RE9NT2JqZWN0KiBkb21fb2JqZWN0ID0gV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KTsKLSAgICAK
LSAgICBpZiAoZG9tX29iamVjdC0+Y29yZU9iamVjdCkgewotICAgICAgICBXZWJDb3JlOjpUZXN0
SW50ZXJmYWNlKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEludGVyZmFj
ZSAqPihkb21fb2JqZWN0LT5jb3JlT2JqZWN0KTsKLQotICAgICAgICBXZWJLaXQ6OkRPTU9iamVj
dENhY2hlOjpmb3JnZXQoY29yZU9iamVjdCk7Ci0gICAgICAgIGNvcmVPYmplY3QtPmRlcmVmKCk7
Ci0KLSAgICAgICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7Ci0gICAgfQotCi0gICAg
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJm
YWNlX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBkZWZhdWx0
OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
X2lkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotCi1zdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBzd2l0Y2ggKHByb3BfaWQp
IHsKLSAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQot
Ci1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2NvbnN0cnVjdGVkKEdPYmpl
Y3QqIG9iamVjdCkKLXsKLQotICAgIGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rf
aW50ZXJmYWNlX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKQotICAgICAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVk
KG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfY2xh
c3NfaW5pdChXZWJLaXRET01UZXN0SW50ZXJmYWNlQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAg
ICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFz
cyk7Ci0gICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9pbnRlcmZh
Y2VfZmluYWxpemU7Ci0gICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9t
X3Rlc3RfaW50ZXJmYWNlX3NldF9wcm9wZXJ0eTsKLSAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9w
ZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X3Byb3BlcnR5OwotICAgIGdvYmpl
Y3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2NvbnN0cnVj
dGVkOwotCi0KLQotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2lu
aXQoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogcmVxdWVzdCkKLXsKLX0KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci1XZWJLaXRET01UZXN0SW50ZXJmYWNlKiB3cmFwVGVzdEludGVyZmFjZShXZWJDb3Jl
OjpUZXN0SW50ZXJmYWNlKiBjb3JlT2JqZWN0KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KGNvcmVPYmplY3QsIDApOwotCi0gICAgLyogV2UgY2FsbCByZWYoKSByYXRoZXIgdGhhbiB1c2lu
ZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUgYSBDKysgb2JqZWN0
Ci0gICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4gIFNlZSB0aGUgZmlu
YWxpemUoKSBjb2RlIGZvciB0aGUKLSAgICAgKiBtYXRjaGluZyBkZXJlZigpLgotICAgICAqLwot
ICAgIGNvcmVPYmplY3QtPnJlZigpOwotCi0gICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfSU5U
RVJGQUNFKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ET01fVEVTVF9JTlRFUkZBQ0UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIs
IGNvcmVPYmplY3QsIE5VTEwpKTsKLX0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotI2VuZGlmIC8q
IEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRl
cmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLmgJKHJldmlzaW9uIDg5MTQyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotKi8KLQotI2lmbmRlZiBXZWJLaXRET01UZXN0SW50ZXJmYWNlX2gKLSNkZWZpbmUg
V2ViS2l0RE9NVGVzdEludGVyZmFjZV9oCi0KLSNpbmNsdWRlICJ3ZWJraXQvd2Via2l0ZG9tZGVm
aW5lcy5oIgotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtp
dGRlZmluZXMuaD4KLSNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NT2JqZWN0LmgiCi0KLQotR19C
RUdJTl9ERUNMUwotI2RlZmluZSBXRUJLSVRfVFlQRV9ET01fVEVTVF9JTlRFUkZBQ0UgICAgICAg
ICAgICAod2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJL
SVRfRE9NX1RFU1RfSU5URVJGQUNFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0RPTV9URVNUX0lOVEVSRkFDRSwgV2ViS2l0RE9N
VGVzdEludGVyZmFjZSkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9JTlRFUkZBQ0VfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVf
RE9NX1RFU1RfSU5URVJGQUNFLCBXZWJLaXRET01UZXN0SW50ZXJmYWNlQ2xhc3MpCi0jZGVmaW5l
IFdFQktJVF9ET01fSVNfVEVTVF9JTlRFUkZBQ0Uob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfRE9NX1RFU1RfSU5URVJGQUNFKSkKLSNk
ZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0lOVEVSRkFDRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9ET01fVEVTVF9JTlRFUkZBQ0Up
KQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfSU5URVJGQUNFX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0RPTV9URVNUX0lOVEVS
RkFDRSwgV2ViS2l0RE9NVGVzdEludGVyZmFjZUNsYXNzKSkKLQotc3RydWN0IF9XZWJLaXRET01U
ZXN0SW50ZXJmYWNlIHsKLSAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOwotfTsK
LQotc3RydWN0IF9XZWJLaXRET01UZXN0SW50ZXJmYWNlQ2xhc3MgewotICAgIFdlYktpdERPTU9i
amVjdENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLVdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9k
b21fdGVzdF9pbnRlcmZhY2VfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5k
aWYgLyogV2ViS2l0RE9NVGVzdEludGVyZmFjZV9oICovCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlUHJpdmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2VQcml2YXRlLmgJKHJldmlzaW9uIDg5MTQyKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdEludGVyZmFjZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzOSArMCwwIEBACi0v
KgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgV0VCX0tJVF9ET01fVEVTVF9JTlRFUkZB
Q0VfUFJJVkFURV9ICi0jZGVmaW5lIFdFQl9LSVRfRE9NX1RFU1RfSU5URVJGQUNFX1BSSVZBVEVf
SAotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJraXQvV2ViS2l0RE9N
T2JqZWN0Lmg+Ci0jaW5jbHVkZSAiVGVzdEludGVyZmFjZS5oIgotbmFtZXNwYWNlIFdlYktpdCB7
Ci0gICAgV2ViS2l0RE9NVGVzdEludGVyZmFjZSAqCi0gICAgd3JhcFRlc3RJbnRlcmZhY2UoV2Vi
Q29yZTo6VGVzdEludGVyZmFjZSAqY29yZU9iamVjdCk7Ci0KLSAgICBXZWJDb3JlOjpUZXN0SW50
ZXJmYWNlICoKLSAgICBjb3JlKFdlYktpdERPTVRlc3RJbnRlcmZhY2UgKnJlcXVlc3QpOwotCi0g
ICAgV2ViS2l0RE9NVGVzdEludGVyZmFjZSoKLSAgICBraXQoV2ViQ29yZTo6VGVzdEludGVyZmFj
ZSogbm9kZSk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLyogV0VCX0tJVF9E
T01fVEVTVF9JTlRFUkZBQ0VfUFJJVkFURV9IICovCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCShyZXZp
c2lvbiA4OTE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwxNDggKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUu
aCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmgiCi0jaW5jbHVkZSAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCIKLSNpbmNs
dWRlICJXZWJLaXRET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4
U3RyaW5nLmgiCi0jaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyLmgiCi0jaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKLSNpbmNsdWRlICJ3
ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgotI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0gICAgCi1XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
cioga2l0KFdlYkNvcmU6OlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBvYmopCi17Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqLCAwKTsKLQotICAgIGlmIChncG9pbnRlciByZXQgPSBE
T01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJL
aXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcio+KHJldCk7Ci0KLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqPihET01PYmplY3RD
YWNoZTo6cHV0KG9iaiwgV2ViS2l0Ojp3cmFwVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIob2Jq
KSkpOwotfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0IC8vCi0KLQotR19ERUZJTkVfVFlQ
RShXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciwgd2Via2l0X2RvbV90ZXN0X21l
ZGlhX3F1ZXJ5X2xpc3RfbGlzdGVuZXIsIFdFQktJVF9UWVBFX0RPTV9PQkpFQ1QpCi0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1XZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogY29y
ZShXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogcmVxdWVzdCkKLXsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChyZXF1ZXN0LCAwKTsKLQotICAgIFdlYkNvcmU6OlRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29y
ZU9iamVjdCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7Ci0KLSAg
ICByZXR1cm4gY29yZU9iamVjdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci1lbnVtIHsK
LSAgICBQUk9QXzAsCi19OwotCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9tZWRpYV9x
dWVyeV9saXN0X2xpc3RlbmVyX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJL
aXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpOwotICAg
IAotICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7Ci0gICAgICAgIFdlYkNvcmU6OlRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIgKj4oZG9tX29iamVjdC0+Y29yZU9iamVjdCk7
Ci0KLSAgICAgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KGNvcmVPYmplY3QpOwot
ICAgICAgICBjb3JlT2JqZWN0LT5kZXJlZigpOwotCi0gICAgICAgIGRvbV9vYmplY3QtPmNvcmVP
YmplY3QgPSBOVUxMOwotICAgIH0KLQotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVz
dF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVj
dCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xp
c3RlbmVyX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBkZWZh
dWx0OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wX2lkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotCi1zdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3Rlc3RfbWVkaWFfcXVlcnlfbGlzdF9saXN0ZW5lcl9nZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci19Ci0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X21lZGlhX3F1
ZXJ5X2xpc3RfbGlzdGVuZXJfY29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQotewotCi0gICAg
aWYgKEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3Rl
bmVyX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKQotICAgICAgICBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfZG9tX3Rlc3RfbWVkaWFfcXVlcnlfbGlzdF9saXN0ZW5lcl9wYXJlbnRfY2xhc3MpLT5j
b25zdHJ1Y3RlZChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfbWVk
aWFfcXVlcnlfbGlzdF9saXN0ZW5lcl9jbGFzc19pbml0KFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3MgKmdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ29iamVjdENs
YXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVy
X2ZpbmFsaXplOwotICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90
ZXN0X21lZGlhX3F1ZXJ5X2xpc3RfbGlzdGVuZXJfc2V0X3Byb3BlcnR5OwotICAgIGdvYmplY3RD
bGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X21lZGlhX3F1ZXJ5X2xpc3RfbGlz
dGVuZXJfZ2V0X3Byb3BlcnR5OwotICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJr
aXRfZG9tX3Rlc3RfbWVkaWFfcXVlcnlfbGlzdF9saXN0ZW5lcl9jb25zdHJ1Y3RlZDsKLQotCi0K
LX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X21lZGlhX3F1ZXJ5X2xpc3RfbGlzdGVu
ZXJfaW5pdChXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogcmVxdWVzdCkKLXsK
LX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lciogd3JhcFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKFdlYkNvcmU6OlRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyKiBjb3JlT2JqZWN0KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KGNvcmVPYmplY3QsIDApOwotCi0gICAgLyogV2UgY2FsbCByZWYoKSByYXRoZXIgdGhhbiB1c2lu
ZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUgYSBDKysgb2JqZWN0
Ci0gICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4gIFNlZSB0aGUgZmlu
YWxpemUoKSBjb2RlIGZvciB0aGUKLSAgICAgKiBtYXRjaGluZyBkZXJlZigpLgotICAgICAqLwot
ICAgIGNvcmVPYmplY3QtPnJlZigpOwotCi0gICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfTUVE
SUFfUVVFUllfTElTVF9MSVNURU5FUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1Rf
TUVESUFfUVVFUllfTElTVF9MSVNURU5FUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgTlVMTCkpOwotfQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgJKHJldmlzaW9uIDg5MTQyKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MSArMCww
IEBACi0vKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgV2ViS2l0RE9NVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXJfaAotI2RlZmluZSBXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lcl9oCi0KLSNpbmNsdWRlICJ3ZWJraXQvd2Via2l0ZG9tZGVmaW5lcy5oIgotI2luY2x1
ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KLSNp
bmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NT2JqZWN0LmgiCi0KLQotR19CRUdJTl9ERUNMUwotI2Rl
ZmluZSBXRUJLSVRfVFlQRV9ET01fVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSICAgICAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX2dldF90eXBl
KCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSKG9i
aikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9U
WVBFX0RPTV9URVNUX01FRElBX1FVRVJZX0xJU1RfTElTVEVORVIsIFdlYktpdERPTVRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX01FRElBX1FVRVJZ
X0xJU1RfTElTVEVORVJfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfTUVESUFfUVVFUllfTElTVF9MSVNURU5FUiwg
V2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDbGFzcykKLSNkZWZpbmUgV0VCS0lU
X0RPTV9JU19URVNUX01FRElBX1FVRVJZX0xJU1RfTElTVEVORVIob2JqKSAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfRE9NX1RFU1RfTUVESUFf
UVVFUllfTElTVF9MSVNURU5FUikpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9NRURJQV9R
VUVSWV9MSVNUX0xJU1RFTkVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgIFdFQktJVF9UWVBFX0RPTV9URVNUX01FRElBX1FVRVJZX0xJU1RfTElTVEVORVIp
KQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfTUVESUFfUVVFUllfTElTVF9MSVNURU5FUl9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQ
RV9ET01fVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSLCBXZWJLaXRET01UZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lckNsYXNzKSkKLQotc3RydWN0IF9XZWJLaXRET01UZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lciB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKLX07
Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDbGFzcyB7Ci0g
ICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotV0VCS0lUX0FQSSBH
VHlwZQotd2Via2l0X2RvbV90ZXN0X21lZGlhX3F1ZXJ5X2xpc3RfbGlzdGVuZXJfZ2V0X3R5cGUg
KHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJfaCAqLwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcml2YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcml2YXRlLmgJKHJldmlz
aW9uIDg5MTQyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcml2YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVm
IFdFQl9LSVRfRE9NX1RFU1RfTUVESUFfUVVFUllfTElTVF9MSVNURU5FUl9QUklWQVRFX0gKLSNk
ZWZpbmUgV0VCX0tJVF9ET01fVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSX1BSSVZBVEVf
SAotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJraXQvV2ViS2l0RE9N
T2JqZWN0Lmg+Ci0jaW5jbHVkZSAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCIKLW5hbWVz
cGFjZSBXZWJLaXQgewotICAgIFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyICoK
LSAgICB3cmFwVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIoV2ViQ29yZTo6VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIgKmNvcmVPYmplY3QpOwotCi0gICAgV2ViQ29yZTo6VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIgKgotICAgIGNvcmUoV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIgKnJlcXVlc3QpOwotCi0gICAgV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXIqCi0gICAga2l0KFdlYkNvcmU6OlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBub2RlKTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvKiBXRUJfS0lUX0RPTV9URVNUX01F
RElBX1FVRVJZX0xJU1RfTElTVEVORVJfUFJJVkFURV9IICovCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0T2JqLmNwcAkocmV2aXNpb24gODkxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxODA3ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lu
Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgIkRPTU9iamVj
dENhY2hlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgotI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIlRlc3RP
YmouaCIKLSNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiZ29iamVjdC9D
b252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5jbHVkZSAid2Via2l0L1dlYktpdERPTUlEQktleS5o
IgotI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01JREJLZXlQcml2YXRlLmgiCi0jaW5jbHVkZSAi
d2Via2l0L1dlYktpdERPTU9wdGlvbnNPYmplY3QuaCIKLSNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0
RE9NT3B0aW9uc09iamVjdFByaXZhdGUuaCIKLSNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZVByaXZhdGUuaCIKLSNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NVGVzdE9i
ai5oIgotI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01UZXN0T2JqUHJpdmF0ZS5oIgotI2luY2x1
ZGUgIndlYmtpdGRlZmluZXMuaCIKLSNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgot
I2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0gICAgCi1X
ZWJLaXRET01UZXN0T2JqKiBraXQoV2ViQ29yZTo6VGVzdE9iaiogb2JqKQotewotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2Jq
ZWN0Q2FjaGU6OmdldChvYmopKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0RE9N
VGVzdE9iaio+KHJldCk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NVGVzdE9i
aio+KERPTU9iamVjdENhY2hlOjpwdXQob2JqLCBXZWJLaXQ6OndyYXBUZXN0T2JqKG9iaikpKTsK
LX0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdCAvLwotCi12b2lkCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX3ZvaWRfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgaXRlbS0+dm9pZE1ldGhvZCgpOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3Zv
aWRfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBpbnRfYXJn
LCBjb25zdCBnY2hhciogc3RyX2FyZywgV2ViS2l0RE9NVGVzdE9iaiogb2JqX2FyZykKLXsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHN0cl9hcmcpOwotICAgIGdfcmV0dXJuX2lmX2Zh
aWwob2JqX2FyZyk7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3N0cl9hcmcgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgoc3RyX2FyZyk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZlcnRl
ZF9vYmpfYXJnID0gTlVMTDsKLSAgICBpZiAob2JqX2FyZyAhPSBOVUxMKSB7Ci0gICAgICAgIGNv
bnZlcnRlZF9vYmpfYXJnID0gV2ViS2l0Ojpjb3JlKG9ial9hcmcpOwotICAgICAgICBnX3JldHVy
bl9pZl9mYWlsKGNvbnZlcnRlZF9vYmpfYXJnKTsKLSAgICB9Ci0gICAgaXRlbS0+dm9pZE1ldGhv
ZFdpdGhBcmdzKGludF9hcmcsIGNvbnZlcnRlZF9zdHJfYXJnLCBjb252ZXJ0ZWRfb2JqX2FyZyk7
Ci19Ci0KLWdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2ludF9tZXRob2QoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzID0gaXRlbS0+aW50
TWV0aG9kKCk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9v
YmpfaW50X21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgaW50
X2FyZywgY29uc3QgZ2NoYXIqIHN0cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9ial9hcmcpCi17
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0cl9hcmcsIDApOwot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9ial9hcmcsIDApOwotICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZF9zdHJfYXJnID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cl9hcmcpOwotICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfb2JqX2FyZyA9IE5VTEw7Ci0gICAgaWYgKG9ial9h
cmcgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfb2JqX2FyZyA9IFdlYktpdDo6Y29yZShv
YmpfYXJnKTsKLSAgICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29udmVydGVkX29ial9hcmcs
IDApOwotICAgIH0KLSAgICBnbG9uZyByZXMgPSBpdGVtLT5pbnRNZXRob2RXaXRoQXJncyhpbnRf
YXJnLCBjb252ZXJ0ZWRfc3RyX2FyZywgY29udmVydGVkX29ial9hcmcpOwotICAgIHJldHVybiBy
ZXM7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRo
b2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChz
ZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPm9iak1ldGhv
ZCgpKTsKLSAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQo
KSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21f
dGVzdF9vYmpfb2JqX21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xv
bmcgaW50X2FyZywgY29uc3QgZ2NoYXIqIHN0cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9ial9h
cmcpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0cl9hcmcs
IDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9ial9hcmcsIDApOwotICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZF9zdHJfYXJnID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cl9hcmcpOwot
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfb2JqX2FyZyA9IE5VTEw7Ci0gICAgaWYg
KG9ial9hcmcgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfb2JqX2FyZyA9IFdlYktpdDo6
Y29yZShvYmpfYXJnKTsKLSAgICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29udmVydGVkX29i
al9hcmcsIDApOwotICAgIH0KLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVz
ID0gV1RGOjpnZXRQdHIoaXRlbS0+b2JqTWV0aG9kV2l0aEFyZ3MoaW50X2FyZywgY29udmVydGVk
X3N0cl9hcmcsIGNvbnZlcnRlZF9vYmpfYXJnKSk7Ci0gICAgV2ViS2l0RE9NVGVzdE9iaiogcmVz
ID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLVdlYktp
dERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF90aGF0X3JlcXVpcmVzX2Fs
bF9hcmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJfYXJnLCBXZWJL
aXRET01UZXN0T2JqKiBvYmpfYXJnKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzdHJfYXJnLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmpfYXJn
LCAwKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOChzdHJfYXJnKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX29ial9h
cmcgPSBOVUxMOwotICAgIGlmIChvYmpfYXJnICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVk
X29ial9hcmcgPSBXZWJLaXQ6OmNvcmUob2JqX2FyZyk7Ci0gICAgICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGNvbnZlcnRlZF9vYmpfYXJnLCAwKTsKLSAgICB9Ci0gICAgUGFzc1JlZlB0cjxXZWJD
b3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPm1ldGhvZFRoYXRSZXF1aXJl
c0FsbEFyZ3MoY29udmVydGVkX3N0cl9hcmcsIGNvbnZlcnRlZF9vYmpfYXJnKSk7Ci0gICAgV2Vi
S2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVy
biByZXM7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF90aGF0X3JlcXVpcmVzX2FsbF9hcmdzX2FuZF90aHJvd3MoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHN0cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9ial9hcmcsIEdFcnJv
ciAqKmVycm9yKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChz
dHJfYXJnLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmpfYXJnLCAwKTsKLSAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJf
YXJnKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX29ial9hcmcgPSBOVUxMOwot
ICAgIGlmIChvYmpfYXJnICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX29ial9hcmcgPSBX
ZWJLaXQ6OmNvcmUob2JqX2FyZyk7Ci0gICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZl
cnRlZF9vYmpfYXJnLCAwKTsKLSAgICB9Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRy
KGl0ZW0tPm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoY29udmVydGVkX3N0cl9h
cmcsIGNvbnZlcnRlZF9vYmpfYXJnLCBlYykpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjOwotICAgICAgICBXZWJDb3JlOjpn
ZXRFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24oZWMsIGVjZGVzYyk7Ci0gICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNk
ZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0gICAgV2ViS2l0RE9NVGVzdE9iaiogcmVz
ID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQK
LXdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZShXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHNlcmlhbGl6ZWRfYXJnKQotewot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VyaWFsaXplZF9hcmcpOwotICAgIFdlYkNv
cmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF9zZXJpYWxpemVkX2FyZyA9IE5V
TEw7Ci0gICAgaWYgKHNlcmlhbGl6ZWRfYXJnICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVk
X3NlcmlhbGl6ZWRfYXJnID0gV2ViS2l0Ojpjb3JlKHNlcmlhbGl6ZWRfYXJnKTsKLSAgICAgICAg
Z19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcpOwotICAgIH0KLSAgICBp
dGVtLT5zZXJpYWxpemVkVmFsdWUoY29udmVydGVkX3NlcmlhbGl6ZWRfYXJnKTsKLX0KLQotdm9p
ZAotd2Via2l0X2RvbV90ZXN0X29ial9pZGJfa2V5KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdl
YktpdERPTUlEQktleSoga2V5KQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoa2V5
KTsKLSAgICBXZWJDb3JlOjpJREJLZXkgKiBjb252ZXJ0ZWRfa2V5ID0gTlVMTDsKLSAgICBpZiAo
a2V5ICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX2tleSA9IFdlYktpdDo6Y29yZShrZXkp
OwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9rZXkpOwotICAgIH0KLSAgICBp
dGVtLT5pZGJLZXkoY29udmVydGVkX2tleSk7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9v
Ympfb3B0aW9uc19vYmplY3QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NT3B0aW9u
c09iamVjdCogb28sIFdlYktpdERPTU9wdGlvbnNPYmplY3QqIG9vbykKLXsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKG9vKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKG9vbyk7Ci0gICAg
V2ViQ29yZTo6T3B0aW9uc09iamVjdCAqIGNvbnZlcnRlZF9vbyA9IE5VTEw7Ci0gICAgaWYgKG9v
ICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX29vID0gV2ViS2l0Ojpjb3JlKG9vKTsKLSAg
ICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfb28pOwotICAgIH0KLSAgICBXZWJDb3Jl
OjpPcHRpb25zT2JqZWN0ICogY29udmVydGVkX29vbyA9IE5VTEw7Ci0gICAgaWYgKG9vbyAhPSBO
VUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF9vb28gPSBXZWJLaXQ6OmNvcmUob29vKTsKLSAgICAg
ICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfb29vKTsKLSAgICB9Ci0gICAgaXRlbS0+b3B0
aW9uc09iamVjdChjb252ZXJ0ZWRfb28sIGNvbnZlcnRlZF9vb28pOwotfQotCi12b2lkCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBHRXJyb3IgKiplcnJvcikKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBpdGVtLT5tZXRob2RXaXRoRXhjZXB0aW9uKGVjKTsKLSAgICBpZiAo
ZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYzsK
LSAgICAgICAgV2ViQ29yZTo6Z2V0RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uKGVjLCBlY2Rlc2Mp
OwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotfQotCi12
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfZHluYW1pY19mcmFtZShXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPndpdGhEeW5hbWljRnJhbWUoKTsKLX0K
LQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial93aXRoX2R5bmFtaWNfZnJhbWVfYW5kX2FyZyhX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBpbnRfYXJnKQotewotICAgIGdfcmV0dXJuX2lm
X2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0
ZW0tPndpdGhEeW5hbWljRnJhbWVBbmRBcmcoaW50X2FyZyk7Ci19Ci0KLXZvaWQKLXdlYmtpdF9k
b21fdGVzdF9vYmpfd2l0aF9keW5hbWljX2ZyYW1lX2FuZF9vcHRpb25hbF9hcmcoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ2xvbmcgaW50X2FyZywgZ2xvbmcgb3B0aW9uYWxfYXJnKQotewotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIGl0ZW0tPndpdGhEeW5hbWljRnJhbWVBbmRPcHRpb25hbEFyZyhpbnRfYXJnLCBv
cHRpb25hbF9hcmcpOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfZHluYW1p
Y19mcmFtZV9hbmRfdXNlcl9nZXN0dXJlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIGlu
dF9hcmcsIGdib29sZWFuIGlzVXNlckdlc3R1cmUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChz
ZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+d2l0
aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlKGludF9hcmcsIGZhbHNlKTsKLX0KLQotdm9pZAot
d2Via2l0X2RvbV90ZXN0X29ial93aXRoX2R5bmFtaWNfZnJhbWVfYW5kX3VzZXJfZ2VzdHVyZV9h
c2FkKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIGludF9hcmcsIGdsb25nIG9wdGlvbmFs
X2FyZywgZ2Jvb2xlYW4gaXNVc2VyR2VzdHVyZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNl
bGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT53aXRo
RHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmVBU0FEKGludF9hcmcsIG9wdGlvbmFsX2FyZywgZmFs
c2UpOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3Zv
aWQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYp
OwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3Jl
OjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT53aXRoU2Ny
aXB0U3RhdGVWb2lkKCk7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX3dpdGhfc2NyaXB0X3N0YXRlX29iaihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RG
OjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdFN0YXRlT2JqKCkpOwotICAgIFdlYktpdERPTVRlc3RP
YmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQot
Ci12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3ZvaWRfZXhjZXB0
aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPndpdGhTY3JpcHRT
dGF0ZVZvaWRFeGNlcHRpb24oZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjOwotICAgICAgICBXZWJDb3JlOjpnZXRFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24oZWMsIGVjZGVzYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xp
dGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNv
ZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX29ial9leGNlcHRpb24oV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
c2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9i
aj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT53aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24o
ZWMpKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGVjZGVzYzsKLSAgICAgICAgV2ViQ29yZTo6Z2V0RXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uKGVjLCBlY2Rlc2MpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1
YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7
Ci0gICAgfQotICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdl
dCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dp
dGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLX0KLQotdm9p
ZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9hcmcoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ2xvbmcgb3B0KQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPm1ldGhvZFdp
dGhPcHRpb25hbEFyZyhvcHQpOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX25vbl9vcHRpb25hbF9hcmdfYW5kX29wdGlvbmFsX2FyZyhXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBnbG9uZyBub25fb3B0LCBnbG9uZyBvcHQpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFp
bChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+
bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uX29wdCwgb3B0KTsKLX0K
LQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9ub25fb3B0aW9uYWxfYXJn
X2FuZF90d29fb3B0aW9uYWxfYXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBub25f
b3B0LCBnbG9uZyBvcHQxLCBnbG9uZyBvcHQyKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vs
Zik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPm1ldGhv
ZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhub25fb3B0LCBvcHQxLCBvcHQy
KTsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9jbGFzc19tZXRob2QoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5jbGFzc01ldGhvZCgpOwotfQot
Ci1nbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9jbGFzc19tZXRob2Rfd2l0aF9vcHRpb25hbChX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBhcmcpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IGdsb25nIHJlcyA9IGl0ZW0tPmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKGFyZyk7Ci0gICAgcmV0
dXJuIHJlczsKLX0KLQotZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9p
bnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBn
bG9uZyByZXMgPSBpdGVtLT5yZWFkT25seUludEF0dHIoKTsKLSAgICByZXR1cm4gcmVzOwotfQot
Ci1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9zdHJpbmdfYXR0cihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVz
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5yZWFkT25seVN0cmluZ0F0dHIoKSk7Ci0gICAg
cmV0dXJuIHJlczsKLX0KLQotV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3JlYWRfb25seV90ZXN0X29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBX
VEY6OmdldFB0cihpdGVtLT5yZWFkT25seVRlc3RPYmpBdHRyKCkpOwotICAgIFdlYktpdERPTVRl
c3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwot
fQotCi1nc2hvcnQKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Nob3J0X2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3Nob3J0IHJlcyA9IGl0ZW0t
PnNob3J0QXR0cigpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Nob3J0IHZhbHVl
KQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldFNob3J0QXR0cih2YWx1ZSk7Ci19Ci0KLWd1c2hv
cnQKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Vuc2lnbmVkX3Nob3J0X2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3VzaG9ydCByZXMgPSBpdGVt
LT51bnNpZ25lZFNob3J0QXR0cigpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3Vuc2lnbmVkX3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgZ3VzaG9ydCB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRVbnNpZ25lZFNo
b3J0QXR0cih2YWx1ZSk7Ci19Ci0KLWdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9pbnRf
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9u
ZyByZXMgPSBpdGVtLT5pbnRBdHRyKCk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Vi
a2l0X2RvbV90ZXN0X29ial9zZXRfaW50X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xv
bmcgdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0SW50QXR0cih2YWx1ZSk7Ci19Ci0K
LWdpbnQ2NAotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2ludDY0IHJlcyA9IGl0ZW0t
PmxvbmdMb25nQXR0cigpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdpbnQ2
NCB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRMb25nTG9uZ0F0dHIodmFsdWUpOwot
fQotCi1ndWludDY0Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF91bnNpZ25lZF9sb25nX2xvbmdf
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBndWlu
dDY0IHJlcyA9IGl0ZW0tPnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCk7Ci0gICAgcmV0dXJuIHJlczsK
LX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3VpbnQ2NCB2YWx1ZSkKLXsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBpdGVtLT5zZXRVbnNpZ25lZExvbmdMb25nQXR0cih2YWx1ZSk7Ci19Ci0KLWdjaGFyKgotd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
LXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+c3RyaW5nQXR0cigpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRTdHJpbmdBdHRyKGNvbnZlcnRlZF92YWx1ZSk7Ci19Ci0K
LVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF90ZXN0X29ial9hdHRy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2Vs
ZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT50ZXN0T2JqQXR0
cigpKTsKLSAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQo
KSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
dGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2
YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKLSAgICBpZiAodmFsdWUgIT0g
TlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOwot
ICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7Ci0gICAgfQotICAgIGl0
ZW0tPnNldFRlc3RPYmpBdHRyKGNvbnZlcnRlZF92YWx1ZSk7Ci19Ci0KLVdlYktpdERPTVRlc3RP
YmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF94bWxfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0
T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPnhtbE9iakF0dHIoKSk7Ci0gICAgV2ViS2l0
RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiBy
ZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3htbF9vYmpfYXR0cihXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSkKLXsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogY29u
dmVydGVkX3ZhbHVlID0gTlVMTDsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCkgewotICAgICAgICBj
b252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOwotICAgICAgICBnX3JldHVybl9p
Zl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7Ci0gICAgfQotICAgIGl0ZW0tPnNldFhNTE9iakF0dHIo
Y29udmVydGVkX3ZhbHVlKTsKLX0KLQotZ2Jvb2xlYW4KLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X2NyZWF0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBn
Ym9vbGVhbiByZXMgPSBpdGVtLT5pc0NyZWF0ZSgpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NyZWF0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRDcmVhdGUodmFsdWUp
OwotfQotCi1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9zdHJpbmdf
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hh
ciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRBdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0cikpOwotICAgIHJldHVybiByZXM7Ci19
Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3Zh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0ciwgY29udmVydGVk
X3ZhbHVlKTsKLX0KLQotZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9p
bnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGdsb25nIHJlcyA9IGl0ZW0tPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0cik7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQot
dm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2ludGVncmFsX2F0dHIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFp
bChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+
c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3Jh
bGF0dHJBdHRyLCB2YWx1ZSk7Ci19Ci0KLWd1bG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
cmVmbGVjdGVkX3Vuc2lnbmVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
LXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3Vsb25nIHJlcyA9IGl0ZW0tPmdldFVuc2lnbmVkSW50
ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVn
cmFsYXR0ckF0dHIpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X3JlZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGd1bG9uZyB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRVbnNpZ25l
ZEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRp
bnRlZ3JhbGF0dHJBdHRyLCB2YWx1ZSk7Ci19Ci0KLWdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGdib29sZWFuIHJlcyA9IGl0ZW0tPmhhc0F0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0cik7Ci0gICAgcmV0dXJu
IHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2Jvb2xl
YW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKLXsKLSAgICBn
X3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVm
bGVjdGVkYm9vbGVhbmF0dHJBdHRyLCB2YWx1ZSk7Ci19Ci0KLWdjaGFyKgotd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfcmVmbGVjdGVkX3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJB
dHRyKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfcmVmbGVjdGVkX3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUp
OwotICAgIGl0ZW0tPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVy
bGF0dHJBdHRyLCBjb252ZXJ0ZWRfdmFsdWUpOwotfQotCi1nY2hhcioKLXdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3JlZmxlY3RlZF9ub25fZW1wdHlfdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+Z2V0Tm9uRW1wdHlVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpy
ZWZsZWN0ZWRub25lbXB0eXVybGF0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9p
ZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX25vbl9lbXB0eV91cmxfYXR0cihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3Zh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRub25lbXB0eXVybGF0dHJBdHRyLCBjb252
ZXJ0ZWRfdmFsdWUpOwotfQotCi1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxl
Y3RlZF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIpKTsKLSAg
ICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0
ZWRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAg
aXRlbS0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmlu
Z0F0dHJBdHRyLCBjb252ZXJ0ZWRfdmFsdWUpOwotfQotCi1nbG9uZwotd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfcmVmbGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJlcyA9IGl0ZW0tPmdldEludGVn
cmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0
ckF0dHIpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBnbG9uZyB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRJbnRlZ3JhbEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyLCB2YWx1
ZSk7Ci19Ci0KLWdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3Vz
dG9tX2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBnYm9vbGVhbiByZXMgPSBpdGVtLT5oYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyKTsKLSAgICByZXR1cm4gcmVzOwotfQot
Ci12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfY3VzdG9tX2Jvb2xlYW5f
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKLXsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9t
Q29udGVudEJvb2xlYW5BdHRyQXR0ciwgdmFsdWUpOwotfQotCi1nY2hhcioKLXdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29u
dGVudFVSTEF0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV91cmxfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxm
KTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3ZhbHVlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIsIGNvbnZlcnRlZF92YWx1ZSk7Ci19Ci0K
LWdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX2N1c3RvbV9ub25fZW1w
dHlfdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0Tm9uRW1wdHlVUkxB
dHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Tm9uRW1wdHlVUkxBdHRy
QXR0cikpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X3JlZmxlY3RlZF9jdXN0b21fbm9uX2VtcHR5X3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYp
OwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3Jl
OjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOwotICAgIGl0ZW0tPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnROb25FbXB0eVVSTEF0dHJBdHRyLCBjb252ZXJ0ZWRfdmFsdWUp
OwotfQotCi1nbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX2dldHRlcl9l
eGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCi17Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGdsb25n
IHJlcyA9IGl0ZW0tPmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKTsKLSAgICBpZiAoZWMpIHsK
LSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYzsKLSAgICAg
ICAgV2ViQ29yZTo6Z2V0RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uKGVjLCBlY2Rlc2MpOwotICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJL
SVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBy
ZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9nZXR0ZXJf
ZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlLCBHRXJyb3IgKipl
cnJvcikKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBpdGVtLT5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbih2YWx1ZSwgZWMpOwotICAgIGlmIChl
YykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjOwot
ICAgICAgICBXZWJDb3JlOjpnZXRFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24oZWMsIGVjZGVzYyk7
Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmco
IldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci19Ci0KLWds
b25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMg
PSBpdGVtLT5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpOwotICAgIHJldHVybiByZXM7Ci19Ci0K
LXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9u
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlLCBHRXJyb3IgKiplcnJvcikKLXsK
LSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpdGVtLT5z
ZXRBdHRyV2l0aFNldHRlckV4Y2VwdGlvbih2YWx1ZSwgZWMpOwotICAgIGlmIChlYykgewotICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjOwotICAgICAgICBX
ZWJDb3JlOjpnZXRFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24oZWMsIGVjZGVzYyk7Ci0gICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci19Ci0KLWdjaGFyKgotd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBnY2hhciogcmVzID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykp
OwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0
cmluZ19hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgaXRlbS0+c2V0U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oY29udmVy
dGVkX3ZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2M7Ci0gICAgICAgIFdlYkNvcmU6OmdldEV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbihlYywgZWNkZXNjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChl
cnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNk
ZXNjLm5hbWUpOwotICAgIH0KLX0KLQotZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9z
dHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
LXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+c3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7Ci0gICAgcmV0dXJuIHJlczsK
LX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0
ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwg
R0Vycm9yICoqZXJyb3IpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpdGVtLT5z
ZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihjb252ZXJ0ZWRfdmFsdWUsIGVjKTsKLSAg
ICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVj
ZGVzYzsKLSAgICAgICAgV2ViQ29yZTo6Z2V0RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uKGVjLCBl
Y2Rlc2MpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQot
fQotCi1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3NjcmlwdF9zdHJpbmdfYXR0cihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVz
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zY3JpcHRTdHJpbmdBdHRyKCkpOwotICAgIHJl
dHVybiByZXM7Ci19Ci0KLWdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25h
bF9hdHRyMShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotI2lmIEVOQUJMRShDb25kaXRpb24x
KQotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMgPSBpdGVtLT5jb25kaXRpb25hbEF0dHIx
KCk7Ci0gICAgcmV0dXJuIHJlczsKLSNlbHNlCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGdsb25n
PigwKTsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KLX0KLQotdm9pZAotd2Via2l0
X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0cjEoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgZ2xvbmcgdmFsdWUpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCi0gICAgZ19yZXR1cm5f
aWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
aXRlbS0+c2V0Q29uZGl0aW9uYWxBdHRyMSh2YWx1ZSk7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRp
dGlvbjEpICovCi19Ci0KLWdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25h
bF9hdHRyMihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotI2lmIEVOQUJMRShDb25kaXRpb24x
KSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAw
KTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzID0g
aXRlbS0+Y29uZGl0aW9uYWxBdHRyMigpOwotICAgIHJldHVybiByZXM7Ci0jZWxzZQotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxnbG9uZz4oMCk7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEp
ICYmIEVOQUJMRShDb25kaXRpb24yKSAqLwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3NldF9jb25kaXRpb25hbF9hdHRyMihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1
ZSkKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAg
Z19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgaXRlbS0+c2V0Q29uZGl0aW9uYWxBdHRyMih2YWx1ZSk7Ci0jZW5kaWYgLyogRU5B
QkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLwotfQotCi1nbG9uZwotd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0aW9uYWxfYXR0cjMoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJlcyA9IGl0ZW0tPmNvbmRpdGlvbmFsQXR0cjMoKTsK
LSAgICByZXR1cm4gcmVzOwotI2Vsc2UKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDAp
OwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8K
LX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0cjMoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlv
bjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldENvbmRpdGlv
bmFsQXR0cjModmFsdWUpOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMikgKi8KLX0KLQotZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2Rlc2Ny
aXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGds
b25nIHJlcyA9IGl0ZW0tPmRlc2NyaXB0aW9uKCk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotZ2xv
bmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2lkKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJlcyA9IGl0ZW0tPmlkKCk7Ci0gICAgcmV0dXJu
IHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfaWQoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0SWQodmFs
dWUpOwotfQotCi1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2hhc2goV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlcyA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+aGFzaCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi0KLUdf
REVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdE9iaiwgd2Via2l0X2RvbV90ZXN0X29iaiwgV0VCS0lU
X1RZUEVfRE9NX09CSkVDVCkKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYkNvcmU6OlRlc3RP
YmoqIGNvcmUoV2ViS2l0RE9NVGVzdE9iaiogcmVxdWVzdCkKLXsKLSAgICBnX3JldHVybl92YWxf
aWZfZmFpbChyZXF1ZXN0LCAwKTsKLQotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNvcmVPYmplY3Qg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0T2JqKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVz
dCktPmNvcmVPYmplY3QpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDAp
OwotCi0gICAgcmV0dXJuIGNvcmVPYmplY3Q7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
ZW51bSB7Ci0gICAgUFJPUF8wLAotICAgIFBST1BfUkVBRF9PTkxZX0lOVF9BVFRSLAotICAgIFBS
T1BfUkVBRF9PTkxZX1NUUklOR19BVFRSLAotICAgIFBST1BfUkVBRF9PTkxZX1RFU1RfT0JKX0FU
VFIsCi0gICAgUFJPUF9TSE9SVF9BVFRSLAotICAgIFBST1BfVU5TSUdORURfU0hPUlRfQVRUUiwK
LSAgICBQUk9QX0lOVF9BVFRSLAotICAgIFBST1BfTE9OR19MT05HX0FUVFIsCi0gICAgUFJPUF9V
TlNJR05FRF9MT05HX0xPTkdfQVRUUiwKLSAgICBQUk9QX1NUUklOR19BVFRSLAotICAgIFBST1Bf
VEVTVF9PQkpfQVRUUiwKLSAgICBQUk9QX1hNTF9PQkpfQVRUUiwKLSAgICBQUk9QX0NSRUFURSwK
LSAgICBQUk9QX1JFRkxFQ1RFRF9TVFJJTkdfQVRUUiwKLSAgICBQUk9QX1JFRkxFQ1RFRF9JTlRF
R1JBTF9BVFRSLAotICAgIFBST1BfUkVGTEVDVEVEX1VOU0lHTkVEX0lOVEVHUkFMX0FUVFIsCi0g
ICAgUFJPUF9SRUZMRUNURURfQk9PTEVBTl9BVFRSLAotICAgIFBST1BfUkVGTEVDVEVEX1VSTF9B
VFRSLAotICAgIFBST1BfUkVGTEVDVEVEX05PTl9FTVBUWV9VUkxfQVRUUiwKLSAgICBQUk9QX1JF
RkxFQ1RFRF9TVFJJTkdfQVRUUiwKLSAgICBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fSU5URUdSQUxf
QVRUUiwKLSAgICBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fQk9PTEVBTl9BVFRSLAotICAgIFBST1Bf
UkVGTEVDVEVEX0NVU1RPTV9VUkxfQVRUUiwKLSAgICBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fTk9O
X0VNUFRZX1VSTF9BVFRSLAotICAgIFBST1BfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT04sCi0g
ICAgUFJPUF9BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTiwKLSAgICBQUk9QX1NUUklOR19BVFRS
X1dJVEhfR0VUVEVSX0VYQ0VQVElPTiwKLSAgICBQUk9QX1NUUklOR19BVFRSX1dJVEhfU0VUVEVS
X0VYQ0VQVElPTiwKLSAgICBQUk9QX0NVU1RPTV9BVFRSLAotICAgIFBST1BfU0NSSVBUX1NUUklO
R19BVFRSLAotI2lmIEVOQUJMRShDb25kaXRpb24xKQotICAgIFBST1BfQ09ORElUSU9OQUxfQVRU
UjEsCi0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCi0jaWYgRU5BQkxFKENvbmRpdGlv
bjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotICAgIFBST1BfQ09ORElUSU9OQUxfQVRUUjIsCi0j
ZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLwotI2lm
IEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBQUk9QX0NPTkRJ
VElPTkFMX0FUVFIzLAotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMikgKi8KLSAgICBQUk9QX0RFU0NSSVBUSU9OLAotICAgIFBST1BfSUQsCi0gICAgUFJP
UF9IQVNILAotfTsKLQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2ZpbmFsaXpl
KEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJLaXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBX
RUJLSVRfRE9NX09CSkVDVChvYmplY3QpOwotICAgIAotICAgIGlmIChkb21fb2JqZWN0LT5jb3Jl
T2JqZWN0KSB7Ci0gICAgICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNvcmVPYmplY3QgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpUZXN0T2JqICo+KGRvbV9vYmplY3QtPmNvcmVPYmplY3QpOwotCi0gICAg
ICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChjb3JlT2JqZWN0KTsKLSAgICAgICAg
Y29yZU9iamVjdC0+ZGVyZWYoKTsKLQotICAgICAgICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0ID0g
TlVMTDsKLSAgICB9Ci0KLSAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Bh
cmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwg
Y29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCi17Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYktpdERPTVRlc3RPYmoqIHNlbGYg
PSBXRUJLSVRfRE9NX1RFU1RfT0JKKG9iamVjdCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogY29y
ZVNlbGYgPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAg
Y2FzZSBQUk9QX1VOU0lHTkVEX1NIT1JUX0FUVFI6Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+
c2V0VW5zaWduZWRTaG9ydEF0dHIoKGdfdmFsdWVfZ2V0X3VzaG9ydCh2YWx1ZSkpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9JTlRfQVRUUjoKLSAgICB7Ci0gICAgICAg
IGNvcmVTZWxmLT5zZXRJbnRBdHRyKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1VOU0lHTkVEX0xPTkdfTE9OR19BVFRSOgot
ICAgIHsKLSAgICAgICAgY29yZVNlbGYtPnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKChnX3ZhbHVl
X2dldF91aW50NjQodmFsdWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBS
T1BfU1RSSU5HX0FUVFI6Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0U3RyaW5nQXR0cihX
VEY6OlN0cmluZzo6ZnJvbVVURjgoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSkpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0NSRUFURToKLSAgICB7Ci0gICAgICAgIGNv
cmVTZWxmLT5zZXRDcmVhdGUoKGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1NUUklOR19BVFRSOgotICAg
IHsKLSAgICAgICAgY29yZVNlbGYtPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZHN0cmluZ2F0dHJBdHRyLCBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JF
RkxFQ1RFRF9JTlRFR1JBTF9BVFRSOgotICAgIHsKLSAgICAgICAgY29yZVNlbGYtPnNldEludGVn
cmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0
ciwgKGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIFBST1BfUkVGTEVDVEVEX1VOU0lHTkVEX0lOVEVHUkFMX0FUVFI6Ci0gICAgewotICAg
ICAgICBjb3JlU2VsZi0+c2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0ciwgKGdfdmFsdWVfZ2V0X3Vs
b25nKHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxF
Q1RFRF9CT09MRUFOX0FUVFI6Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0Qm9vbGVhbkF0
dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0ciwgKGdf
dmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIFBST1BfUkVGTEVDVEVEX1VSTF9BVFRSOgotICAgIHsKLSAgICAgICAgY29yZVNlbGYtPnNl
dEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyLCBXVEY6
OlN0cmluZzo6ZnJvbVVURjgoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSkpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9OT05fRU1QVFlfVVJMX0FUVFI6
Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6cmVmbGVjdGVkbm9uZW1wdHl1cmxhdHRyQXR0ciwgV1RGOjpTdHJpbmc6OmZyb21VVEY4KGdf
dmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FUVFI6Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+
c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJB
dHRyLCBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSkpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fSU5U
RUdSQUxfQVRUUjoKLSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRJbnRlZ3JhbEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyLCAoZ192
YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
UFJPUF9SRUZMRUNURURfQ1VTVE9NX0JPT0xFQU5fQVRUUjoKLSAgICB7Ci0gICAgICAgIGNvcmVT
ZWxmLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVu
dEJvb2xlYW5BdHRyQXR0ciwgKGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9VUkxfQVRUUjoK
LSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIsIFdURjo6U3RyaW5nOjpmcm9tVVRGOChnX3ZhbHVl
X2dldF9zdHJpbmcodmFsdWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBS
T1BfUkVGTEVDVEVEX0NVU1RPTV9OT05fRU1QVFlfVVJMX0FUVFI6Ci0gICAgewotICAgICAgICBj
b3JlU2VsZi0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudE5v
bkVtcHR5VVJMQXR0ckF0dHIsIFdURjo6U3RyaW5nOjpmcm9tVVRGOChnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfQVRUUl9X
SVRIX0dFVFRFUl9FWENFUFRJT046Ci0gICAgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICAgICAgY29yZVNlbGYtPnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
KChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgUFJPUF9BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTjoKLSAgICB7Ci0gICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBjb3JlU2VsZi0+c2V0QXR0
cldpdGhTZXR0ZXJFeGNlcHRpb24oKGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKSwgZWMpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVS
X0VYQ0VQVElPTjoKLSAgICB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgICAgICBjb3JlU2VsZi0+c2V0U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oV1RG
OjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpLCBlYyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFJfV0lUSF9TRVRURVJf
RVhDRVBUSU9OOgotICAgIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihXVEY6
OlN0cmluZzo6ZnJvbVVURjgoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSksIGVjKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotI2lmIEVOQUJMRShDb25kaXRpb24xKQotICAgIGNhc2UgUFJPUF9D
T05ESVRJT05BTF9BVFRSMToKLSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRDb25kaXRpb25h
bEF0dHIxKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEp
ICYmIEVOQUJMRShDb25kaXRpb24yKQotICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9BVFRSMjoK
LSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRDb25kaXRpb25hbEF0dHIyKChnX3ZhbHVlX2dl
dF9sb25nKHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYgLyogRU5BQkxF
KENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLwotI2lmIEVOQUJMRShDb25kaXRp
b24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBjYXNlIFBST1BfQ09ORElUSU9OQUxfQVRU
UjM6Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0Q29uZGl0aW9uYWxBdHRyMygoZ192YWx1
ZV9nZXRfbG9uZyh2YWx1ZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmIC8qIEVO
QUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLSAgICBjYXNlIFBST1Bf
SUQ6Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0SWQoKGdfdmFsdWVfZ2V0X2xvbmcodmFs
dWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJLaXRET01UZXN0T2JqKiBzZWxmID0gV0VCS0lUX0RPTV9U
RVNUX09CSihvYmplY3QpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNvcmVTZWxmID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9SRUFE
X09OTFlfSU5UX0FUVFI6Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBj
b3JlU2VsZi0+cmVhZE9ubHlJbnRBdHRyKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBQUk9QX1JFQURfT05MWV9TVFJJTkdfQVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPnJlYWRPbmx5
U3RyaW5nQXR0cigpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVB
RF9PTkxZX1RFU1RfT0JKX0FUVFI6Ci0gICAgewotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVz
dE9iaj4gcHRyID0gY29yZVNlbGYtPnJlYWRPbmx5VGVzdE9iakF0dHIoKTsKLSAgICAgICAgZ192
YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9TSE9SVF9BVFRSOgotICAgIHsKLSAgICAgICAg
Z192YWx1ZV9zZXRfaW50KHZhbHVlLCBjb3JlU2VsZi0+c2hvcnRBdHRyKCkpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1VOU0lHTkVEX1NIT1JUX0FUVFI6Ci0gICAgewot
ICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCBjb3JlU2VsZi0+dW5zaWduZWRTaG9ydEF0
dHIoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfSU5UX0FUVFI6Ci0g
ICAgewotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+aW50QXR0cigp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9MT05HX0xPTkdfQVRUUjoK
LSAgICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2ludDY0KHZhbHVlLCBjb3JlU2VsZi0+bG9uZ0xv
bmdBdHRyKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1VOU0lHTkVE
X0xPTkdfTE9OR19BVFRSOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVl
LCBjb3JlU2VsZi0+dW5zaWduZWRMb25nTG9uZ0F0dHIoKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFI6Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5zdHJpbmdBdHRy
KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9URVNUX09CSl9BVFRS
OgotICAgIHsKLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVTZWxm
LT50ZXN0T2JqQXR0cigpOwotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktp
dDo6a2l0KHB0ci5nZXQoKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9Q
X1hNTF9PQkpfQVRUUjoKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBw
dHIgPSBjb3JlU2VsZi0+eG1sT2JqQXR0cigpOwotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3Qo
dmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBQUk9QX0NSRUFURToKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4o
dmFsdWUsIGNvcmVTZWxmLT5pc0NyZWF0ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FUVFI6Ci0gICAgewotICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5nZXRBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0cikpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfSU5URUdSQUxfQVRU
UjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5nZXRJ
bnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0
ckF0dHIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURf
VU5TSUdORURfSU5URUdSQUxfQVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X3Vsb25n
KHZhbHVlLCBjb3JlU2VsZi0+Z2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0cikpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9CT09MRUFOX0FUVFI6Ci0gICAg
ewotICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBjb3JlU2VsZi0+aGFzQXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1VSTF9BVFRSOgotICAg
IHsKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmlu
Zyhjb3JlU2VsZi0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVk
dXJsYXR0ckF0dHIpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVG
TEVDVEVEX05PTl9FTVBUWV9VUkxfQVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPmdldE5vbkVtcHR5VVJM
QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkbm9uZW1wdHl1cmxhdHRyQXR0
cikpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfU1RS
SU5HX0FUVFI6Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252
ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5nZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9JTlRFR1JBTF9BVFRSOgotICAgIHsKLSAg
ICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmdldEludGVncmFsQXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0JP
T0xFQU5fQVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIGNv
cmVTZWxmLT5oYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9v
bGVhbkF0dHJBdHRyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVG
TEVDVEVEX0NVU1RPTV9VUkxfQVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPmdldFVSTEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0cikpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQ1VTVE9NX05PTl9FTVBUWV9V
UkxfQVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZl
cnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPmdldE5vbkVtcHR5VVJMQXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudE5vbkVtcHR5VVJMQXR0ckF0dHIpKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT046
Ci0gICAgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAg
Z192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
KGVjKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfQVRUUl9XSVRIX1NF
VFRFUl9FWENFUFRJT046Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBj
b3JlU2VsZi0+YXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFJfV0lUSF9HRVRURVJfRVhDRVBUSU9OOgotICAg
IHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPnN0cmlu
Z0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTjoKLSAgICB7Ci0g
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29y
ZVNlbGYtPnN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgUFJPUF9TQ1JJUFRfU1RSSU5HX0FUVFI6Ci0gICAgewotICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxm
LT5zY3JpcHRTdHJpbmdBdHRyKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2lmIEVOQUJM
RShDb25kaXRpb24xKQotICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9BVFRSMToKLSAgICB7Ci0g
ICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5jb25kaXRpb25hbEF0dHIx
KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEp
ICovCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotICAgIGNh
c2UgUFJPUF9DT05ESVRJT05BTF9BVFRSMjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xv
bmcodmFsdWUsIGNvcmVTZWxmLT5jb25kaXRpb25hbEF0dHIyKCkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24y
KSAqLwotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBj
YXNlIFBST1BfQ09ORElUSU9OQUxfQVRUUjM6Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF9s
b25nKHZhbHVlLCBjb3JlU2VsZi0+Y29uZGl0aW9uYWxBdHRyMygpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MikgKi8KLSAgICBjYXNlIFBST1BfREVTQ1JJUFRJT046Ci0gICAgewotICAgICAgICBnX3ZhbHVl
X3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+ZGVzY3JpcHRpb24oKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIFBST1BfSUQ6Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF9s
b25nKHZhbHVlLCBjb3JlU2VsZi0+aWQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIFBST1BfSEFTSDoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPmhhc2goKSkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19
Ci0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9jb25zdHJ1Y3RlZChHT2JqZWN0
KiBvYmplY3QpCi17Ci0KLSAgICBpZiAoR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X29i
al9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCkKLSAgICAgICAgR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X2RvbV90ZXN0X29ial9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZChvYmplY3QpOwotfQot
Ci1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVz
dE9iakNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzICpnb2JqZWN0Q2xh
c3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdvYmplY3RDbGFzcy0+Zmlu
YWxpemUgPSB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2ZpbmFsaXplOwotICAgIGdvYmplY3RDbGFzcy0+
c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcHJvcGVydHk7Ci0gICAgZ29i
amVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wcm9wZXJ0
eTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdGVkID0gd2Via2l0X2RvbV90ZXN0X29ial9j
b25zdHJ1Y3RlZDsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVj
dENsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9SRUFEX09O
TFlfSU5UX0FUVFIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFt
X3NwZWNfbG9uZygicmVhZC1vbmx5LWludC1hdHRyIiwgLyogbmFtZSAqLwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpf
cmVhZC1vbmx5LWludC1hdHRyIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtb25s
eSAgZ2xvbmcgVGVzdE9iai5yZWFkLW9ubHktaW50LWF0dHIiLCAvKiBsb25nZXIgLSBjb3VsZCBk
byB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NSU5MT05HLCAvKiBtaW4g
Ki8KLUdfTUFYTE9ORywgLyogbWF4ICovCi0wLCAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOwotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVj
dENsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9SRUFEX09O
TFlfU1RSSU5HX0FUVFIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKCJyZWFkLW9ubHktc3RyaW5nLWF0dHIiLCAvKiBuYW1lICovCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0
ZXN0X29ial9yZWFkLW9ubHktc3RyaW5nLWF0dHIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAicmVhZC1vbmx5ICBnY2hhciogVGVzdE9iai5yZWFkLW9ubHktc3RyaW5nLWF0dHIiLCAvKiBs
b25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIs
IC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0gICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUk9QX1JFQURfT05MWV9URVNUX09CSl9BVFRSLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgicmVhZC1vbmx5
LXRlc3Qtb2JqLWF0dHIiLCAvKiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9yZWFkLW9ubHktdGVzdC1v
YmotYXR0ciIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLW9ubHkgIFdlYktpdERP
TVRlc3RPYmoqIFRlc3RPYmoucmVhZC1vbmx5LXRlc3Qtb2JqLWF0dHIiLCAvKiBsb25nZXIgLSBj
b3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVf
RE9NX1RFU1RfT0JKLCAvKiBnb2JqZWN0IHR5cGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1NIT1JUX0FUVFIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50KCJzaG9ydC1h
dHRyIiwgLyogbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfc2hvcnQtYXR0ciIsIC8qIHNob3J0IGRlc2Ny
aXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJyZWFkLXdyaXRlICBnc2hvcnQgVGVzdE9iai5zaG9ydC1hdHRyIiwgLyog
bG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdf
TUlOSU5ULCAvKiBtaW4gKi8KLUdfTUFYSU5ULCAvKiBtYXggKi8KLTAsIC8qIGRlZmF1bHQgKi8K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoZ29iamVjdENsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJPUF9VTlNJR05FRF9TSE9SVF9BVFRSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoInVuc2lnbmVkLXNob3J0LWF0dHIiLCAvKiBuYW1l
ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ0ZXN0X29ial91bnNpZ25lZC1zaG9ydC1hdHRyIiwgLyogc2hvcnQgZGVzY3JpcHRp
b24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInJlYWQtd3JpdGUgIGd1c2hvcnQgVGVzdE9iai51bnNpZ25lZC1zaG9ydC1hdHRy
IiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICov
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIC8qIG1pbiAqLwotR19NQVhVSU5UMTYsIC8qIG1heCAqLwotMCwgLyogZGVmYXVsdCAq
LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUk9QX0lOVF9BVFRSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z19wYXJhbV9zcGVjX2xvbmcoImludC1hdHRyIiwgLyogbmFtZSAqLwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfaW50
LWF0dHIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2xvbmcgVGVz
dE9iai5pbnQtYXR0ciIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mg
c3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHX01JTkxPTkcsIC8qIG1pbiAqLwotR19NQVhMT05HLCAvKiBtYXgg
Ki8KLTAsIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9MT05HX0xPTkdfQVRUUiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19pbnQ2NCgibG9uZy1sb25nLWF0
dHIiLCAvKiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9sb25nLWxvbmctYXR0ciIsIC8qIHNob3J0IGRl
c2NyaXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBnaW50NjQgVGVzdE9iai5sb25nLWxvbmctYXR0
ciIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAq
LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHX01JTklOVDY0LCAvKiBtaW4gKi8KLUdfTUFYSU5UNjQsIC8qIG1heCAqLwotMCwgLyog
ZGVmYXVsdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0gICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUk9QX1VOU0lHTkVEX0xPTkdfTE9OR19BVFRSLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgidW5zaWduZWQtbG9u
Zy1sb25nLWF0dHIiLCAvKiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial91bnNpZ25lZC1sb25nLWxvbmct
YXR0ciIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBndWludDY0IFRl
c3RPYmoudW5zaWduZWQtbG9uZy1sb25nLWF0dHIiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRo
IHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLyogbWluICovCi1HX01BWFVJTlQ2
NCwgLyogbWluICovCi0wLCAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfU1RSSU5HX0FUVFIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJzdHJp
bmctYXR0ciIsIC8qIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX3N0cmluZy1hdHRyIiwgLyogc2hvcnQg
ZGVzY3JpcHRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIGdjaGFyKiBUZXN0T2JqLnN0cmluZy1hdHRy
IiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICov
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIiLCAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLSAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfVEVTVF9PQkpfQVRUUiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoInRlc3Qtb2JqLWF0
dHIiLCAvKiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial90ZXN0LW9iai1hdHRyIiwgLyogc2hvcnQgZGVz
Y3JpcHRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIFdlYktpdERPTVRlc3RPYmoqIFRlc3RPYmoudGVz
dC1vYmotYXR0ciIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1
ZmYgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ET01fVEVTVF9PQkosIC8qIGdvYmplY3QgdHlwZSAq
LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUk9QX1hNTF9PQkpfQVRUUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdfcGFyYW1fc3BlY19vYmplY3QoInhtbC1vYmotYXR0ciIsIC8qIG5hbWUgKi8KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRl
c3Rfb2JqX3htbC1vYmotYXR0ciIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdy
aXRlICBXZWJLaXRET01UZXN0T2JqKiBUZXN0T2JqLnhtbC1vYmotYXR0ciIsIC8qIGxvbmdlciAt
IGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQ
RV9ET01fVEVTVF9PQkosIC8qIGdvYmplY3QgdHlwZSAqLwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3Ms
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0NSRUFURSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKCJjcmVh
dGUiLCAvKiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9jcmVhdGUiLCAvKiBzaG9ydCBkZXNjcmlwdGlv
biAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAicmVhZC13cml0ZSAgZ2Jvb2xlYW4gVGVzdE9iai5jcmVhdGUiLCAvKiBsb25nZXIg
LSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsIC8q
IGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FUVFIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJyZWZsZWN0ZWQtc3Ry
aW5nLWF0dHIiLCAvKiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9yZWZsZWN0ZWQtc3RyaW5nLWF0dHIi
LCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2NoYXIqIFRlc3RPYmou
cmVmbGVjdGVkLXN0cmluZy1hdHRyIiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4
dHJhIGRvYyBzdHVmZiBoZXJlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmpl
Y3RDbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfUkVGTEVD
VEVEX0lOVEVHUkFMX0FUVFIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
X3BhcmFtX3NwZWNfbG9uZygicmVmbGVjdGVkLWludGVncmFsLWF0dHIiLCAvKiBuYW1lICovCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ0ZXN0X29ial9yZWZsZWN0ZWQtaW50ZWdyYWwtYXR0ciIsIC8qIHNob3J0IGRlc2NyaXB0aW9u
ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJyZWFkLXdyaXRlICBnbG9uZyBUZXN0T2JqLnJlZmxlY3RlZC1pbnRlZ3JhbC1hdHRy
IiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICov
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdfTUlOTE9ORywgLyogbWluICovCi1HX01BWExPTkcsIC8qIG1heCAqLwotMCwgLyogZGVm
YXVsdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0gICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUk9QX1JFRkxFQ1RFRF9VTlNJR05FRF9JTlRFR1JBTF9BVFRSLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKCJyZWZsZWN0
ZWQtdW5zaWduZWQtaW50ZWdyYWwtYXR0ciIsIC8qIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX3JlZmxl
Y3RlZC11bnNpZ25lZC1pbnRlZ3JhbC1hdHRyIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InJlYWQtd3JpdGUgIGd1bG9uZyBUZXN0T2JqLnJlZmxlY3RlZC11bnNpZ25lZC1pbnRlZ3JhbC1h
dHRyIiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJl
ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIC8qIG1pbiAqLwotR19NQVhVTE9ORywgLyogbWF4ICovCi0wLCAvKiBkZWZhdWx0
ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLSAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBST1BfUkVGTEVDVEVEX0JPT0xFQU5fQVRUUiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKCJyZWZsZWN0ZWQtYm9vbGVhbi1h
dHRyIiwgLyogbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfcmVmbGVjdGVkLWJvb2xlYW4tYXR0ciIsIC8q
IHNob3J0IGRlc2NyaXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBnYm9vbGVhbiBUZXN0T2JqLnJl
ZmxlY3RlZC1ib29sZWFuLWF0dHIiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0
cmEgZG9jIHN0dWZmIGhlcmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOwotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29i
amVjdENsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9SRUZM
RUNURURfVVJMX0FUVFIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKCJyZWZsZWN0ZWQtdXJsLWF0dHIiLCAvKiBuYW1lICovCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0
X29ial9yZWZsZWN0ZWQtdXJsLWF0dHIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVh
ZC13cml0ZSAgZ2NoYXIqIFRlc3RPYmoucmVmbGVjdGVkLXVybC1hdHRyIiwgLyogbG9uZ2VyIC0g
Y291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAvKiBkZWZh
dWx0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLSAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBST1BfUkVGTEVDVEVEX05PTl9FTVBUWV9VUkxfQVRUUiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoInJlZmxlY3RlZC1u
b24tZW1wdHktdXJsLWF0dHIiLCAvKiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9yZWZsZWN0ZWQtbm9u
LWVtcHR5LXVybC1hdHRyIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtd3JpdGUg
IGdjaGFyKiBUZXN0T2JqLnJlZmxlY3RlZC1ub24tZW1wdHktdXJsLWF0dHIiLCAvKiBsb25nZXIg
LSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsIC8qIGRl
ZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FUVFIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJyZWZsZWN0ZWQtc3RyaW5n
LWF0dHIiLCAvKiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9yZWZsZWN0ZWQtc3RyaW5nLWF0dHIiLCAv
KiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2NoYXIqIFRlc3RPYmoucmVm
bGVjdGVkLXN0cmluZy1hdHRyIiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJh
IGRvYyBzdHVmZiBoZXJlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIiLCAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RD
bGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfUkVGTEVDVEVE
X0NVU1RPTV9JTlRFR1JBTF9BVFRSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ19wYXJhbV9zcGVjX2xvbmcoInJlZmxlY3RlZC1jdXN0b20taW50ZWdyYWwtYXR0ciIsIC8q
IG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInRlc3Rfb2JqX3JlZmxlY3RlZC1jdXN0b20taW50ZWdyYWwtYXR0ciIsIC8q
IHNob3J0IGRlc2NyaXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBnbG9uZyBUZXN0T2JqLnJlZmxl
Y3RlZC1jdXN0b20taW50ZWdyYWwtYXR0ciIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29t
ZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01JTkxPTkcsIC8qIG1pbiAqLwotR19NQVhM
T05HLCAvKiBtYXggKi8KLTAsIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOwotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9SRUZMRUNURURfQ1VTVE9N
X0JPT0xFQU5fQVRUUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFy
YW1fc3BlY19ib29sZWFuKCJyZWZsZWN0ZWQtY3VzdG9tLWJvb2xlYW4tYXR0ciIsIC8qIG5hbWUg
Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInRlc3Rfb2JqX3JlZmxlY3RlZC1jdXN0b20tYm9vbGVhbi1hdHRyIiwgLyogc2hvcnQg
ZGVzY3JpcHRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIGdib29sZWFuIFRlc3RPYmoucmVmbGVjdGVk
LWN1c3RvbS1ib29sZWFuLWF0dHIiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0
cmEgZG9jIHN0dWZmIGhlcmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOwotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29i
amVjdENsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9SRUZM
RUNURURfQ1VTVE9NX1VSTF9BVFRSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygicmVmbGVjdGVkLWN1c3RvbS11cmwtYXR0ciIsIC8qIG5h
bWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInRlc3Rfb2JqX3JlZmxlY3RlZC1jdXN0b20tdXJsLWF0dHIiLCAvKiBzaG9ydCBk
ZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2NoYXIqIFRlc3RPYmoucmVmbGVjdGVkLWN1
c3RvbS11cmwtYXR0ciIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mg
c3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiIiwgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3Ms
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1JFRkxFQ1RFRF9DVVNU
T01fTk9OX0VNUFRZX1VSTF9BVFRSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygicmVmbGVjdGVkLWN1c3RvbS1ub24tZW1wdHktdXJsLWF0
dHIiLCAvKiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9yZWZsZWN0ZWQtY3VzdG9tLW5vbi1lbXB0eS11
cmwtYXR0ciIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBnY2hhciog
VGVzdE9iai5yZWZsZWN0ZWQtY3VzdG9tLW5vbi1lbXB0eS11cmwtYXR0ciIsIC8qIGxvbmdlciAt
IGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwgLyogZGVm
YXVsdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0gICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUk9QX0FUVFJfV0lUSF9HRVRURVJfRVhDRVBUSU9OLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoImF0dHItd2l0aC1nZXR0
ZXItZXhjZXB0aW9uIiwgLyogbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfYXR0ci13aXRoLWdldHRlci1l
eGNlcHRpb24iLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2xvbmcg
VGVzdE9iai5hdHRyLXdpdGgtZ2V0dGVyLWV4Y2VwdGlvbiIsIC8qIGxvbmdlciAtIGNvdWxkIGRv
IHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01JTkxPTkcsIC8qIG1pbiAq
LwotR19NQVhMT05HLCAvKiBtYXggKi8KLTAsIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOwotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVj
dENsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9BVFRSX1dJ
VEhfU0VUVEVSX0VYQ0VQVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdfcGFyYW1fc3BlY19sb25nKCJhdHRyLXdpdGgtc2V0dGVyLWV4Y2VwdGlvbiIsIC8qIG5hbWUg
Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInRlc3Rfb2JqX2F0dHItd2l0aC1zZXR0ZXItZXhjZXB0aW9uIiwgLyogc2hvcnQgZGVz
Y3JpcHRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIGdsb25nIFRlc3RPYmouYXR0ci13aXRoLXNldHRl
ci1leGNlcHRpb24iLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0
dWZmIGhlcmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR19NSU5MT05HLCAvKiBtaW4gKi8KLUdfTUFYTE9ORywgLyogbWF4ICov
Ci0wLCAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLSAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBST1BfU1RSSU5HX0FUVFJfV0lUSF9HRVRURVJfRVhDRVBU
SU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygic3RyaW5nLWF0dHItd2l0aC1nZXR0ZXItZXhjZXB0aW9uIiwgLyogbmFtZSAqLwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
dGVzdF9vYmpfc3RyaW5nLWF0dHItd2l0aC1nZXR0ZXItZXhjZXB0aW9uIiwgLyogc2hvcnQgZGVz
Y3JpcHRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIGdjaGFyKiBUZXN0T2JqLnN0cmluZy1hdHRyLXdp
dGgtZ2V0dGVyLWV4Y2VwdGlvbiIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRy
YSBkb2Mgc3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiIiwgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0
Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1NUUklOR19B
VFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoInN0cmluZy1hdHRyLXdpdGgtc2V0dGVyLWV4Y2Vw
dGlvbiIsIC8qIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX3N0cmluZy1hdHRyLXdpdGgtc2V0dGVyLWV4
Y2VwdGlvbiIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBnY2hhciog
VGVzdE9iai5zdHJpbmctYXR0ci13aXRoLXNldHRlci1leGNlcHRpb24iLCAvKiBsb25nZXIgLSBj
b3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsIC8qIGRlZmF1
bHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJPUF9TQ1JJUFRfU1RSSU5HX0FUVFIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJzY3JpcHQtc3RyaW5nLWF0dHIiLCAv
KiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJ0ZXN0X29ial9zY3JpcHQtc3RyaW5nLWF0dHIiLCAvKiBzaG9ydCBkZXNj
cmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAicmVhZC1vbmx5ICBnY2hhciogVGVzdE9iai5zY3JpcHQtc3RyaW5nLWF0
dHIiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUg
Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIiIsIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0jaWYg
RU5BQkxFKENvbmRpdGlvbjEpCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShn
b2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0NP
TkRJVElPTkFMX0FUVFIxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19w
YXJhbV9zcGVjX2xvbmcoImNvbmRpdGlvbmFsLWF0dHIxIiwgLyogbmFtZSAqLwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9v
YmpfY29uZGl0aW9uYWwtYXR0cjEiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13
cml0ZSAgZ2xvbmcgVGVzdE9iai5jb25kaXRpb25hbC1hdHRyMSIsIC8qIGxvbmdlciAtIGNvdWxk
IGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01JTkxPTkcsIC8qIG1p
biAqLwotR19NQVhMT05HLCAvKiBtYXggKi8KLTAsIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAqLwotI2lmIEVO
QUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBST1BfQ09ORElUSU9OQUxfQVRUUjIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygiY29uZGl0aW9uYWwtYXR0cjIiLCAv
KiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJ0ZXN0X29ial9jb25kaXRpb25hbC1hdHRyMiIsIC8qIHNob3J0IGRlc2Ny
aXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJyZWFkLXdyaXRlICBnbG9uZyBUZXN0T2JqLmNvbmRpdGlvbmFsLWF0dHIy
IiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICov
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdfTUlOTE9ORywgLyogbWluICovCi1HX01BWExPTkcsIC8qIG1heCAqLwotMCwgLyogZGVm
YXVsdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0jZW5kaWYgLyogRU5BQkxFKENv
bmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLwotI2lmIEVOQUJMRShDb25kaXRpb24x
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KGdvYmplY3RDbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
T1BfQ09ORElUSU9OQUxfQVRUUjMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3BhcmFtX3NwZWNfbG9uZygiY29uZGl0aW9uYWwtYXR0cjMiLCAvKiBuYW1lICovCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0
ZXN0X29ial9jb25kaXRpb25hbC1hdHRyMyIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJy
ZWFkLXdyaXRlICBnbG9uZyBUZXN0T2JqLmNvbmRpdGlvbmFsLWF0dHIzIiwgLyogbG9uZ2VyIC0g
Y291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUlOTE9ORywg
LyogbWluICovCi1HX01BWExPTkcsIC8qIG1heCAqLwotMCwgLyogZGVmYXVsdCAqLwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVO
QUJMRShDb25kaXRpb24yKSAqLwotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
Z29iamVjdENsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9E
RVNDUklQVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1f
c3BlY19sb25nKCJkZXNjcmlwdGlvbiIsIC8qIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX2Rlc2NyaXB0
aW9uIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtb25seSAgZ2xvbmcgVGVzdE9i
ai5kZXNjcmlwdGlvbiIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mg
c3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHX01JTkxPTkcsIC8qIG1pbiAqLwotR19NQVhMT05HLCAvKiBtYXgg
Ki8KLTAsIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0gICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0lELAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoImlkIiwgLyogbmFtZSAqLwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9v
YmpfaWQiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2xvbmcgVGVz
dE9iai5pZCIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYg
aGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHX01JTkxPTkcsIC8qIG1pbiAqLwotR19NQVhMT05HLCAvKiBtYXggKi8KLTAs
IC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJPUF9IQVNILAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygiaGFzaCIsIC8qIG5hbWUgKi8KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rf
b2JqX2hhc2giLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC1vbmx5ICBnY2hhciog
VGVzdE9iai5oYXNoIiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBz
dHVmZiBoZXJlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIiLCAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOwotCi0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9pbml0KFdlYktp
dERPTVRlc3RPYmoqIHJlcXVlc3QpCi17Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0
RE9NVGVzdE9iaiogd3JhcFRlc3RPYmooV2ViQ29yZTo6VGVzdE9iaiogY29yZU9iamVjdCkKLXsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKLQotICAgIC8qIFdlIGNh
bGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdl
IGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVj
dCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0gICAgICogbWF0
Y2hpbmcgZGVyZWYoKS4KLSAgICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsKLQotICAgIHJl
dHVybiAgV0VCS0lUX0RPTV9URVNUX09CSihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RF
U1RfT0JKLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
Y29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7Ci19Ci19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgJKHJldmlzaW9uIDg5MTQyKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMxOCArMCwwIEBACi0vKgotICAgIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAgICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSovCi0KLSNpZm5kZWYgV2ViS2l0RE9NVGVzdE9ial9oCi0jZGVmaW5lIFdlYktpdERP
TVRlc3RPYmpfaAotCi0jaW5jbHVkZSAid2Via2l0L3dlYmtpdGRvbWRlZmluZXMuaCIKLSNpbmNs
dWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+Ci0j
aW5jbHVkZSAid2Via2l0L1dlYktpdERPTU9iamVjdC5oIgotCi0KLUdfQkVHSU5fREVDTFMKLSNk
ZWZpbmUgV0VCS0lUX1RZUEVfRE9NX1RFU1RfT0JKICAgICAgICAgICAgKHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX09CSihvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9ET01f
VEVTVF9PQkosIFdlYktpdERPTVRlc3RPYmopKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JK
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJ
VF9UWVBFX0RPTV9URVNUX09CSiwgV2ViS2l0RE9NVGVzdE9iakNsYXNzKQotI2RlZmluZSBXRUJL
SVRfRE9NX0lTX1RFU1RfT0JKKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9UWVBFX0RPTV9URVNUX09CSikpCi0jZGVmaW5lIFdFQktJVF9ET01f
SVNfVEVTVF9PQkpfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfT0JKKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX09C
Sl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJL
SVRfVFlQRV9ET01fVEVTVF9PQkosIFdlYktpdERPTVRlc3RPYmpDbGFzcykpCi0KLXN0cnVjdCBf
V2ViS2l0RE9NVGVzdE9iaiB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsK
LX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdE9iakNsYXNzIHsKLSAgICBXZWJLaXRET01PYmpl
Y3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF90eXBlICh2b2lkKTsKLQotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX3ZvaWRfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi1XRUJLSVRf
QVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRob2Rfd2l0aF9hcmdzKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIGludF9hcmcsIGNvbnN0IGdjaGFyKiBzdHJfYXJnLCBX
ZWJLaXRET01UZXN0T2JqKiBvYmpfYXJnKTsKLQotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2Rv
bV90ZXN0X29ial9pbnRfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi1XRUJLSVRf
QVBJIGdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2ludF9tZXRob2Rfd2l0aF9hcmdzKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIGludF9hcmcsIGNvbnN0IGdjaGFyKiBzdHJfYXJnLCBX
ZWJLaXRET01UZXN0T2JqKiBvYmpfYXJnKTsKLQotV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2Jq
Kgotd2Via2l0X2RvbV90ZXN0X29ial9vYmpfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
OwotCi1XRUJLSVRfQVBJIFdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX29i
al9tZXRob2Rfd2l0aF9hcmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIGludF9hcmcs
IGNvbnN0IGdjaGFyKiBzdHJfYXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpfYXJnKTsKLQotV0VC
S0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2RfdGhh
dF9yZXF1aXJlc19hbGxfYXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciog
c3RyX2FyZywgV2ViS2l0RE9NVGVzdE9iaiogb2JqX2FyZyk7Ci0KLVdFQktJVF9BUEkgV2ViS2l0
RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3RoYXRfcmVxdWlyZXNfYWxs
X2FyZ3NfYW5kX3Rocm93cyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3Ry
X2FyZywgV2ViS2l0RE9NVGVzdE9iaiogb2JqX2FyZywgR0Vycm9yICoqZXJyb3IpOwotCi1XRUJL
SVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHNlcmlhbGl6
ZWRfYXJnKTsKLQotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2lkYl9rZXko
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NSURCS2V5KiBrZXkpOwotCi1XRUJLSVRf
QVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfb3B0aW9uc19vYmplY3QoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgV2ViS2l0RE9NT3B0aW9uc09iamVjdCogb28sIFdlYktpdERPTU9wdGlvbnNP
YmplY3QqIG9vbyk7Ci0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRo
b2Rfd2l0aF9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3Ip
OwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9keW5hbWljX2Zy
YW1lKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9k
b21fdGVzdF9vYmpfd2l0aF9keW5hbWljX2ZyYW1lX2FuZF9hcmcoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgZ2xvbmcgaW50X2FyZyk7Ci0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0
X29ial93aXRoX2R5bmFtaWNfZnJhbWVfYW5kX29wdGlvbmFsX2FyZyhXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBnbG9uZyBpbnRfYXJnLCBnbG9uZyBvcHRpb25hbF9hcmcpOwotCi1XRUJLSVRfQVBJ
IHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9keW5hbWljX2ZyYW1lX2FuZF91c2VyX2dl
c3R1cmUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgaW50X2FyZywgZ2Jvb2xlYW4gaXNV
c2VyR2VzdHVyZSk7Ci0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial93aXRo
X2R5bmFtaWNfZnJhbWVfYW5kX3VzZXJfZ2VzdHVyZV9hc2FkKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGdsb25nIGludF9hcmcsIGdsb25nIG9wdGlvbmFsX2FyZywgZ2Jvb2xlYW4gaXNVc2VyR2Vz
dHVyZSk7Ci0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3Njcmlw
dF9zdGF0ZV92b2lkKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi1XRUJLSVRfQVBJIFdlYktp
dERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX29iaihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3ZvaWRfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIEdFcnJvciAqKmVycm9yKTsKLQotV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgot
d2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV9vYmpfZXhjZXB0aW9uKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKTsKLQotV0VCS0lUX0FQSSB2b2lkCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0KFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpf
bWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG9w
dCk7Ci0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9u
b25fb3B0aW9uYWxfYXJnX2FuZF9vcHRpb25hbF9hcmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Z2xvbmcgbm9uX29wdCwgZ2xvbmcgb3B0KTsKLQotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9vcHRpb25hbF9hcmdfYW5kX3R3b19vcHRpb25hbF9h
cmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG5vbl9vcHQsIGdsb25nIG9wdDEsIGds
b25nIG9wdDIpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfY2xhc3Nf
bWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi1XRUJLSVRfQVBJIGdsb25nCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZF93aXRoX29wdGlvbmFsKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGdsb25nIGFyZyk7Ci0KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3JlYWRfb25seV9pbnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQot
V0VCS0lUX0FQSSBnY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9zdHJp
bmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotV0VCS0lUX0FQSSBXZWJLaXRET01U
ZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X3Rlc3Rfb2JqX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLVdFQktJVF9BUEkgZ3Nob3J0Ci13ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi1XRUJL
SVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Nob3J0X2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ3Nob3J0IHZhbHVlKTsKLQotV0VCS0lUX0FQSSBndXNob3J0Ci13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF91bnNpZ25lZF9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vuc2ln
bmVkX3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3VzaG9ydCB2YWx1ZSk7Ci0K
LVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2ludF9hdHRyKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X2ludF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKTsKLQot
V0VCS0lUX0FQSSBnaW50NjQKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xvbmdfbG9uZ19hdHRy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdpbnQ2
NCB2YWx1ZSk7Ci0KLVdFQktJVF9BUEkgZ3VpbnQ2NAotd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
dW5zaWduZWRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLVdFQktJ
VF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3VpbnQ2NCB2YWx1ZSk7Ci0KLVdFQktJVF9BUEkg
Z2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0
T2JqKiBzZWxmKTsKLQotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9z
dHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwot
Ci1XRUJLSVRfQVBJIFdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF90
ZXN0X29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi1XRUJLSVRfQVBJIHZvaWQK
LXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpOwotCi1XRUJLSVRfQVBJIFdlYktpdERPTVRl
c3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF94bWxfb2JqX2F0dHIoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZik7Ci0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
eG1sX29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIHZh
bHVlKTsKLQotV0VCS0lUX0FQSSBnYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY3Jl
YXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X2NyZWF0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnYm9vbGVhbiB2
YWx1ZSk7Ci0KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZs
ZWN0ZWRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLVdFQktJVF9BUEkg
dm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLVdFQktJVF9BUEkgZ2xv
bmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRyKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGds
b25nIHZhbHVlKTsKLQotV0VCS0lUX0FQSSBndWxvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X3JlZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
OwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF91
bnNpZ25lZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGd1bG9uZyB2YWx1
ZSk7Ci0KLVdFQktJVF9BUEkgZ2Jvb2xlYW4KLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxl
Y3RlZF9ib29sZWFuX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLVdFQktJVF9BUEkg
dm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2Jvb2xlYW5fYXR0cihXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7Ci0KLVdFQktJVF9BUEkgZ2NoYXIq
Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfdXJsX2F0dHIoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZik7Ci0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
cmVmbGVjdGVkX3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7Ci0KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZs
ZWN0ZWRfbm9uX2VtcHR5X3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi1XRUJL
SVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9ub25fZW1wdHlf
dXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQot
V0VCS0lUX0FQSSBnY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9zdHJp
bmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotV0VCS0lUX0FQSSB2b2lkCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBnbG9uZyB2YWx1ZSk7Ci0KLVdFQktJVF9BUEkgZ2Jvb2xlYW4KLXdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3Rl
ZF9jdXN0b21fYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdib29sZWFuIHZh
bHVlKTsKLQotV0VCS0lUX0FQSSBnY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxl
Y3RlZF9jdXN0b21fdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLVdFQktJVF9B
UEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV91cmxfYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwotCi1XRUJLSVRf
QVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX2N1c3RvbV9ub25f
ZW1wdHlfdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLVdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV9ub25fZW1wdHlfdXJs
X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotV0VC
S0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX2dldHRlcl9l
eGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpOwotCi1XRUJL
SVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhj
ZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlLCBHRXJyb3IgKiplcnJv
cik7Ci0KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0dHJfd2l0
aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi1XRUJLSVRfQVBJ
IHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9u
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlLCBHRXJyb3IgKiplcnJvcik7Ci0K
LVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJpbmdfYXR0cl93
aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJy
b3IpOwotCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19h
dHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUsIEdFcnJvciAqKmVycm9yKTsKLQotV0VCS0lUX0FQSSBnY2hhcioKLXdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJL
aXRET01UZXN0T2JqKiBzZWxmKTsKLQotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF9zdHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IgKiplcnJvcik7Ci0KLVdFQktJVF9B
UEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zY3JpcHRfc3RyaW5nX2F0dHIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIxKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi1X
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFsX2F0dHIx
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKTsKLQotV0VCS0lUX0FQSSBnbG9u
Zwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0aW9uYWxfYXR0cjIoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZik7Ci0KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
Y29uZGl0aW9uYWxfYXR0cjIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpOwot
Ci1XRUJLSVRfQVBJIGdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9h
dHRyMyhXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMyhXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBnbG9uZyB2YWx1ZSk7Ci0KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X2Rlc2NyaXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi1XRUJLSVRfQVBJIGds
b25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9pZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsK
LQotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pZChXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSk7Ci0KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9oYXNoKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi1HX0VORF9E
RUNMUwotCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdE9ial9oICovCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqUHJpdmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RPYmpQcml2YXRlLmgJKHJldmlzaW9uIDg5MTQyKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9i
alByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzOSArMCwwIEBACi0vKgotICAgIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAgICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSovCi0KLSNpZm5kZWYgV0VCX0tJVF9ET01fVEVTVF9PQkpfUFJJVkFURV9ICi0jZGVm
aW5lIFdFQl9LSVRfRE9NX1RFU1RfT0JKX1BSSVZBVEVfSAotCi0jaW5jbHVkZSA8Z2xpYi1vYmpl
Y3QuaD4KLSNpbmNsdWRlIDx3ZWJraXQvV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSAiVGVz
dE9iai5oIgotbmFtZXNwYWNlIFdlYktpdCB7Ci0gICAgV2ViS2l0RE9NVGVzdE9iaiAqCi0gICAg
d3JhcFRlc3RPYmooV2ViQ29yZTo6VGVzdE9iaiAqY29yZU9iamVjdCk7Ci0KLSAgICBXZWJDb3Jl
OjpUZXN0T2JqICoKLSAgICBjb3JlKFdlYktpdERPTVRlc3RPYmogKnJlcXVlc3QpOwotCi0gICAg
V2ViS2l0RE9NVGVzdE9iaioKLSAgICBraXQoV2ViQ29yZTo6VGVzdE9iaiogbm9kZSk7Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLyogV0VCX0tJVF9ET01fVEVTVF9PQkpfUFJJ
VkFURV9IICovCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAkocmV2aXNpb24g
ODkxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwxODEgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVk
ZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShDb25k
aXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLQotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRl
LmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIgotI2luY2x1ZGUgIldlYktpdERPTUJpbmRp
bmcuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRl
ICJ3ZWJraXQvV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAid2Vi
a2l0L1dlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVByaXZhdGUuaCIKLSNpbmNsdWRlICJ3
ZWJraXQvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIgotI2lu
Y2x1ZGUgIndlYmtpdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
UHJpdmF0ZS5oIgotI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKLSNpbmNsdWRlICJ3ZWJraXRn
bG9iYWxzcHJpdmF0ZS5oIgotI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0gICAgCi1XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKiBraXQoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogb2Jq
KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7Ci0KLSAgICBpZiAoZ3BvaW50
ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8V2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KHJldCk7
Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSo+KERPTU9iamVjdENhY2hlOjpwdXQob2JqLCBXZWJLaXQ6OndyYXBUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKG9iaikpKTsKLX0KLSAgICAKLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdCAvLwotCi1XZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqCi13ZWJr
aXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF92YWx1ZShX
ZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmKQotewotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT52
YWx1ZSgpKTsKLSAgICBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHJlcyA9IFdlYktp
dDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi0KLUdfREVGSU5FX1RZ
UEUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSwgd2Via2l0X2Rv
bV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZSwgV0VCS0lUX1RZUEVfRE9N
X09CSkVDVCkKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYkNvcmU6OlRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNvcmUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSogcmVxdWVzdCkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChyZXF1
ZXN0LCAwKTsKLQotICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UqIGNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3Qp
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOwotCi0gICAgcmV0dXJu
IGNvcmVPYmplY3Q7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotZW51bSB7Ci0gICAgUFJP
UF8wLAotICAgIFBST1BfVkFMVUUsCi19OwotCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZmluYWxpemUoR09iamVjdCogb2Jq
ZWN0KQotewotICAgIFdlYktpdERPTU9iamVjdCogZG9tX29iamVjdCA9IFdFQktJVF9ET01fT0JK
RUNUKG9iamVjdCk7Ci0gICAgCi0gICAgaWYgKGRvbV9vYmplY3QtPmNvcmVPYmplY3QpIHsKLSAg
ICAgICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY29yZU9i
amVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UgKj4oZG9tX29iamVjdC0+Y29yZU9iamVjdCk7Ci0KLSAgICAgICAgV2ViS2l0OjpET01P
YmplY3RDYWNoZTo6Zm9yZ2V0KGNvcmVPYmplY3QpOwotICAgICAgICBjb3JlT2JqZWN0LT5kZXJl
ZigpOwotCi0gICAgICAgIGRvbV9vYmplY3QtPmNvcmVPYmplY3QgPSBOVUxMOwotICAgIH0KLQot
ICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1
ZV9pbnRlcmZhY2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9z
ZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwg
cHNwZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLQotc3RhdGljIHZvaWQgd2Via2l0
X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZiA9IFdF
QktJVF9ET01fVEVTVF9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0Uob2JqZWN0KTsK
LSAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjb3JlU2Vs
ZiA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNl
IFBST1BfVkFMVUU6Ci0gICAgewotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBwdHIgPSBjb3JlU2VsZi0+dmFsdWUoKTsKLSAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQot
Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9p
bnRlcmZhY2VfY29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQotewotCi0gICAgaWYgKEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZh
Y2VfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQpCi0gICAgICAgIEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfcGFyZW50X2Ns
YXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90
ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9jbGFzc19pbml0KFdlYktpdERP
TVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDbGFzcyogcmVxdWVzdENsYXNzKQot
ewotICAgIEdPYmplY3RDbGFzcyAqZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVz
dENsYXNzKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X3Nl
cmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9maW5hbGl6ZTsKLSAgICBnb2JqZWN0Q2xh
c3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1
ZV9pbnRlcmZhY2Vfc2V0X3Byb3BlcnR5OwotICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5
ID0gd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRf
cHJvcGVydHk7Ci0gICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdF9kb21fdGVz
dF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfY29uc3RydWN0ZWQ7Ci0KLSAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfVkFMVUUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJ2YWx1ZSIsIC8qIG5hbWUgKi8K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInRlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX3ZhbHVlIiwgLyogc2hv
cnQgZGVzY3JpcHRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInJlYWQtb25seSAgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlw
dFZhbHVlKiBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLnZhbHVlIiwgLyogbG9u
Z2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9UWVBFX0RPTV9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRSwgLyogZ29iamVjdCB0eXBlICovCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9pbml0KFdlYktpdERPTVRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHJlcXVlc3QpCi17Ci19Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSogd3JhcFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UoV2ViQ29yZTo6VGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY29yZU9iamVjdCkKLXsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKLQotICAgIC8qIFdlIGNhbGwgcmVmKCkgcmF0
aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdlIGNhbid0IHN0b3Jl
IGEgQysrIG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVjdCBzdHJ1Y3R1cmUu
ICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0gICAgICogbWF0Y2hpbmcgZGVyZWYo
KS4KLSAgICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsKLQotICAgIHJldHVybiAgV0VCS0lU
X0RPTV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRShnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfRE9NX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmpl
Y3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7Ci19Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLSNlbmRp
ZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCShyZXZpc2lvbiA4OTE0MikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NCArMCwwIEBACi0v
KgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VfaAotCi0jaW5jbHVkZSAid2Via2l0L3dlYmtpdGRvbWRlZmluZXMu
aCIKLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZp
bmVzLmg+Ci0jaW5jbHVkZSAid2Via2l0L1dlYktpdERPTU9iamVjdC5oIgotCi0KLUdfQkVHSU5f
REVDTFMKLSNkZWZpbmUgV0VCS0lUX1RZUEVfRE9NX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFM
VUVfSU5URVJGQUNFICAgICAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3Njcmlw
dF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX1NF
UklBTElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRShvYmopICAgICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9ET01fVEVTVF9TRVJJQUxJWkVE
X1NDUklQVF9WQUxVRV9JTlRFUkZBQ0UsIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRf
VkFMVUVfSU5URVJGQUNFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1Qo
KGtsYXNzKSwgIFdFQktJVF9UWVBFX0RPTV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lO
VEVSRkFDRSwgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNsYXNz
KQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5U
RVJGQUNFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdF
QktJVF9UWVBFX0RPTV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRSkpCi0j
ZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZB
Q0VfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lU
X1RZUEVfRE9NX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFKSkKLSNkZWZp
bmUgV0VCS0lUX0RPTV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRV9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQ
RV9ET01fVEVTVF9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0UsIFdlYktpdERPTVRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDbGFzcykpCi0KLXN0cnVjdCBfV2ViS2l0
RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSB7Ci0gICAgV2ViS2l0RE9NT2Jq
ZWN0IHBhcmVudF9pbnN0YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNsYXNzIHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBw
YXJlbnRfY2xhc3M7Ci19OwotCi1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3Rfc2Vy
aWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF90eXBlICh2b2lkKTsKLQotV0VCS0lU
X0FQSSBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqCi13ZWJraXRfZG9tX3Rlc3Rfc2Vy
aWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF92YWx1ZShXZWJLaXRET01UZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmKTsKLQotR19FTkRfREVDTFMKLQotI2Vu
ZGlmIC8qIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VfaCAqLwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByaXZhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0ZS5oCShyZXZpc2lvbiA4
OTE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZu
ZGVmIFdFQl9LSVRfRE9NX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFX1BS
SVZBVEVfSAotI2RlZmluZSBXRUJfS0lUX0RPTV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVF
X0lOVEVSRkFDRV9QUklWQVRFX0gKLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVk
ZSA8d2Via2l0L1dlYktpdERPTU9iamVjdC5oPgotI2luY2x1ZGUgIlRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UuaCIKLW5hbWVzcGFjZSBXZWJLaXQgewotICAgIFdlYktpdERPTVRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKgotICAgIHdyYXBUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UgKmNvcmVPYmplY3QpOwotCi0gICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSAqCi0gICAgY29yZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlICpyZXF1ZXN0KTsKLQotICAgIFdlYktpdERPTVRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UqCi0gICAga2l0KFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UqIG5vZGUpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmIC8qIFdFQl9LSVRfRE9NX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNF
X1BSSVZBVEVfSCAqLwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCShyZXZpc2lvbiA4OTE0MikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFj
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTM0ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotCi0j
aW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2suaCIKLQotI2luY2x1ZGUgIkpTQ2xhc3MxLmgiCi0jaW5j
bHVkZSAiSlNDbGFzczIuaCIKLSNpbmNsdWRlICJKU0RPTVN0cmluZ0xpc3QuaCIKLSNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4K
LSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUpTVGVzdENhbGxiYWNrOjpKU1Rlc3RDYWxsYmFjayhKU09i
amVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgOiBB
Y3RpdmVET01DYWxsYmFjayhnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkK
LSAgICAsIG1fZGF0YShuZXcgSlNDYWxsYmFja0RhdGEoY2FsbGJhY2ssIGdsb2JhbE9iamVjdCkp
Ci17Ci19Ci0KLUpTVGVzdENhbGxiYWNrOjp+SlNUZXN0Q2FsbGJhY2soKQotewotICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0g
ICAgLy8gV2hlbiB0aGUgY29udGV4dCBpcyBkZXN0cm95ZWQsIGFsbCB0YXNrcyB3aXRoIGEgcmVm
ZXJlbmNlIHRvIGEgY2FsbGJhY2sKLSAgICAvLyBzaG91bGQgYmUgZGVsZXRlZC4gU28gaWYgdGhl
IGNvbnRleHQgaXMgMCwgd2UgYXJlIG9uIHRoZSBjb250ZXh0IHRocmVhZC4KLSAgICBpZiAoIWNv
bnRleHQgfHwgY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpCi0gICAgICAgIGRlbGV0ZSBtX2Rh
dGE7Ci0gICAgZWxzZQotICAgICAgICBjb250ZXh0LT5wb3N0VGFzayhEZWxldGVDYWxsYmFja0Rh
dGFUYXNrOjpjcmVhdGUobV9kYXRhKSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fZGF0YSA9IDA7
Ci0jZW5kaWYKLX0KLQotLy8gRnVuY3Rpb25zCi0KLWJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxi
YWNrV2l0aE5vUGFyYW0oKQotewotICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3QodGhp
cyk7Ci0KLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCi0gICAgRXhl
Y1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0KLSAgICBib29sIHJhaXNlZEV4Y2VwdGlvbiA9
IGZhbHNlOwotICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywgJnJhaXNlZEV4Y2VwdGlv
bik7Ci0gICAgcmV0dXJuICFyYWlzZWRFeGNlcHRpb247Ci19Ci0KLWJvb2wgSlNUZXN0Q2FsbGJh
Y2s6OmNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKENsYXNzMSogY2xhc3MxUGFyYW0pCi17Ci0gICAg
aWYgKCFjYW5JbnZva2VDYWxsYmFjaygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFJl
ZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKLQotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7Ci0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJn
czsKLSAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIGNs
YXNzMVBhcmFtKSk7Ci0KLSAgICBib29sIHJhaXNlZEV4Y2VwdGlvbiA9IGZhbHNlOwotICAgIG1f
ZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywgJnJhaXNlZEV4Y2VwdGlvbik7Ci0gICAgcmV0dXJu
ICFyYWlzZWRFeGNlcHRpb247Ci19Ci0KLWJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0
aENsYXNzMlBhcmFtKENsYXNzMiogY2xhc3MyUGFyYW0sIGNvbnN0IFN0cmluZyYgc3RyQXJnKQot
ewotICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3QodGhpcyk7Ci0KLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCi0gICAgRXhlY1N0YXRlKiBleGVjID0gbV9k
YXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBtX2RhdGEtPmdsb2JhbE9iamVj
dCgpLCBjbGFzczJQYXJhbSkpOwotICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIHN0ckFy
ZykpOwotCi0gICAgYm9vbCByYWlzZWRFeGNlcHRpb24gPSBmYWxzZTsKLSAgICBtX2RhdGEtPmlu
dm9rZUNhbGxiYWNrKGFyZ3MsICZyYWlzZWRFeGNlcHRpb24pOwotICAgIHJldHVybiAhcmFpc2Vk
RXhjZXB0aW9uOwotfQotCi1ib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhTdHJpbmdM
aXN0KERPTVN0cmluZ0xpc3QqIGxpc3RQYXJhbSkKLXsKLSAgICBpZiAoIWNhbkludm9rZUNhbGxi
YWNrKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUmVmUHRyPEpTVGVzdENhbGxiYWNr
PiBwcm90ZWN0KHRoaXMpOwotCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKLQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBwZW5k
KHRvSlMoZXhlYywgbV9kYXRhLT5nbG9iYWxPYmplY3QoKSwgbGlzdFBhcmFtKSk7Ci0KLSAgICBi
b29sIHJhaXNlZEV4Y2VwdGlvbiA9IGZhbHNlOwotICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2so
YXJncywgJnJhaXNlZEV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuICFyYWlzZWRFeGNlcHRpb247Ci19
Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5o
CShyZXZpc2lvbiA4OTE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYwICswLDAgQEAKLS8q
Ci0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBKU1Rlc3RDYWxsYmFja19oCi0jZGVmaW5l
IEpTVGVzdENhbGxiYWNrX2gKLQotI2lmIEVOQUJMRShEQVRBQkFTRSkKLQotI2luY2x1ZGUgIkFj
dGl2ZURPTUNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiSlNDYWxsYmFja0RhdGEuaCIKLSNpbmNsdWRl
ICJUZXN0Q2FsbGJhY2suaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEpTVGVzdENhbGxiYWNrIDogcHVibGljIFRlc3RDYWxsYmFjaywg
cHVibGljIEFjdGl2ZURPTUNhbGxiYWNrIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxKU1Rlc3RDYWxsYmFjaz4gY3JlYXRlKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBKU1Rlc3RDYWxsYmFjayhjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KSk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB+SlNUZXN0Q2FsbGJhY2soKTsKLQotICAgIC8vIEZ1bmN0aW9ucwotICAgIHZp
cnR1YWwgYm9vbCBjYWxsYmFja1dpdGhOb1BhcmFtKCk7Ci0gICAgdmlydHVhbCBib29sIGNhbGxi
YWNrV2l0aENsYXNzMVBhcmFtKENsYXNzMSogY2xhc3MxUGFyYW0pOwotICAgIHZpcnR1YWwgYm9v
bCBjYWxsYmFja1dpdGhDbGFzczJQYXJhbShDbGFzczIqIGNsYXNzMlBhcmFtLCBjb25zdCBTdHJp
bmcmIHN0ckFyZyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoZmFsc2UpICAgIHZpcnR1YWwgaW50IGNh
bGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBlKENsYXNzMyogY2xhc3MzUGFyYW0pOwotICAgIHZp
cnR1YWwgaW50IGN1c3RvbUNhbGxiYWNrKENsYXNzNSogY2xhc3M1UGFyYW0sIENsYXNzNiogY2xh
c3M2UGFyYW0pOwotICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhTdHJpbmdMaXN0KERPTVN0
cmluZ0xpc3QqIGxpc3RQYXJhbSk7Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0Q2FsbGJhY2soSlND
OjpKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLSAgICBKU0NhbGxi
YWNrRGF0YSogbV9kYXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKERBVEFCQVNFKQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3Bw
CShyZXZpc2lvbiA4OTE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4NSArMCwwIEBA
Ci0vKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVO
QUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLQotI2luY2x1ZGUgIkpTVGVz
dEludGVyZmFjZS5oIgotCi0jaW5jbHVkZSAiVGVzdEludGVyZmFjZS5oIgotI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1BU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTVGVzdEludGVyZmFjZSk7Ci0KLS8qIEhh
c2ggdGFibGUgKi8KLSNpZiBFTkFCTEUoSklUKQotI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2Vu
ZXJhdG9yKSAsIGdlbmVyYXRvcgotI2Vsc2UKLSNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVy
YXRvcikKLSNlbmRpZgotCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0SW50ZXJm
YWNlVGFibGVWYWx1ZXNbMl0gPQotewotICAgIHsgImNvbnN0cnVjdG9yIiwgRG9udEVudW0gfCBS
ZWFkT25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
Pihqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRP
UigwKSB9LAotICAgIHsgMCwgMCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkgfQotfTsKLQotI3Vu
ZGVmIFRIVU5LX0dFTkVSQVRPUgotc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxl
IEpTVGVzdEludGVyZmFjZVRhYmxlID0geyAyLCAxLCBKU1Rlc3RJbnRlcmZhY2VUYWJsZVZhbHVl
cywgMCB9OwotLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KLSNpZiBFTkFCTEUoSklU
KQotI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKSAsIGdlbmVyYXRvcgotI2Vsc2UK
LSNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikKLSNlbmRpZgotCi1zdGF0aWMgY29u
c3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JUYWJsZVZhbHVlc1sx
XSA9Ci17Ci0gICAgeyAwLCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigwKSB9Ci19OwotCi0jdW5k
ZWYgVEhVTktfR0VORVJBVE9SCi1zdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUg
SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JUYWJsZSA9IHsgMSwgMCwgSlNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3JUYWJsZVZhbHVlcywgMCB9OwotY2xhc3MgSlNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHVibGljOgotICAgIEpTVGVz
dEludGVyZmFjZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpTdHJ1Y3R1cmUqLCBK
U0RPTUdsb2JhbE9iamVjdCopOwotCi0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xv
dChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlT
bG90Jik7Ci0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9y
Jik7Ci0gICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLSAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3VzU2xvdENvdW50LCAmc19p
bmZvKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxl
bWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsK
LSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpT
VGVzdEludGVyZmFjZShKU0M6OkV4ZWNTdGF0ZSopOwotICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1
Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1Y3REYXRhJik7Ci19OwotCi1jb25z
dCBDbGFzc0luZm8gSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvciIsICZET01Db25zdHJ1Y3Rvck9iamVjdDo6c19pbmZvLCAmSlNU
ZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JUYWJsZSwgMCB9OwotCi1KU1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3Rvcjo6SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICA6
IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQotewotICAgIEFT
U0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0SW50ZXJmYWNlUHJvdG90
eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7Ci19
Ci0KLWJvb2wgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQotewotICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNUZXN0SW50ZXJm
YWNlQ29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpTVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLWJvb2wgSlNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNU
ZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpTVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19
Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3I6OmNvbnN0cnVjdEpTVGVzdEludGVyZmFjZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PEpTVGVzdEludGVyZmFj
ZUNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJSZWZlcmVuY2UgZXJyb3IiKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIHN0YXRpY19jYXN0PEpTVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKSwgVGVz
dEludGVyZmFjZTo6Y3JlYXRlKGNvbnRleHQpKSkpOwotfQotCi1Db25zdHJ1Y3RUeXBlIEpTVGVz
dEludGVyZmFjZUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNv
bnN0cnVjdERhdGEpCi17Ci0gICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25z
dHJ1Y3RKU1Rlc3RJbnRlcmZhY2U7Ci0gICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwotfQot
Ci0vKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KLSNpZiBFTkFCTEUoSklUKQotI2RlZmlu
ZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKSAsIGdlbmVyYXRvcgotI2Vsc2UKLSNkZWZpbmUg
VEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikKLSNlbmRpZgotCi1zdGF0aWMgY29uc3QgSGFzaFRh
YmxlVmFsdWUgSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlVGFibGVWYWx1ZXNbMV0gPQotewotICAg
IHsgMCwgMCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkgfQotfTsKLQotI3VuZGVmIFRIVU5LX0dF
TkVSQVRPUgotc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdEludGVy
ZmFjZVByb3RvdHlwZVRhYmxlID0geyAxLCAwLCBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVUYWJs
ZVZhbHVlcywgMCB9OwotY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6
c19pbmZvID0geyAiVGVzdEludGVyZmFjZVByb3RvdHlwZSIsICZKU0M6OkpTT2JqZWN0V2l0aEds
b2JhbE9iamVjdDo6c19pbmZvLCAmSlNUZXN0SW50ZXJmYWNlUHJvdG90eXBlVGFibGUsIDAgfTsK
LQotSlNPYmplY3QqIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZTo6c2VsZihFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVBy
b3RvdHlwZTxKU1Rlc3RJbnRlcmZhY2U+KGV4ZWMsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLWNvbnN0
IENsYXNzSW5mbyBKU1Rlc3RJbnRlcmZhY2U6OnNfaW5mbyA9IHsgIlRlc3RJbnRlcmZhY2UiLCAm
SlNET01XcmFwcGVyOjpzX2luZm8sICZKU1Rlc3RJbnRlcmZhY2VUYWJsZSwgMCB9OwotCi1KU1Rl
c3RJbnRlcmZhY2U6OkpTVGVzdEludGVyZmFjZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxUZXN0SW50ZXJmYWNlPiBpbXBs
KQotICAgIDogSlNET01XcmFwcGVyKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQotICAgICwgbV9p
bXBsKGltcGwpCi17Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLX0KLQotSlNPYmpl
Y3QqIEpTVGVzdEludGVyZmFjZTo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU1Rl
c3RJbnRlcmZhY2VQcm90b3R5cGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIEpT
VGVzdEludGVyZmFjZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSk7Ci19Ci0KLWJvb2wg
SlNUZXN0SW50ZXJmYWNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXMsICZzX2luZm8pOwotICAgIHJldHVybiBnZXRT
dGF0aWNWYWx1ZVNsb3Q8SlNUZXN0SW50ZXJmYWNlLCBCYXNlPihleGVjLCAmSlNUZXN0SW50ZXJm
YWNlVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLWJvb2wgSlNUZXN0SW50
ZXJmYWNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikK
LXsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXMsICZzX2luZm8pOwotICAgIHJl
dHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNUZXN0SW50ZXJmYWNlLCBCYXNlPihleGVj
LCAmSlNUZXN0SW50ZXJmYWNlVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7
Ci19Ci0KLUpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKLXsKLSAgICBKU1Rlc3RJbnRl
cmZhY2UqIGRvbU9iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEludGVyZmFjZSo+KGFzT2JqZWN0
KHNsb3RCYXNlKSk7Ci0gICAgcmV0dXJuIEpTVGVzdEludGVyZmFjZTo6Z2V0Q29uc3RydWN0b3Io
ZXhlYywgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7Ci19Ci0KLUpTVmFsdWUgSlNUZXN0SW50
ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9yPihleGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGds
b2JhbE9iamVjdCkpOwotfQotCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdEludGVyZmFjZSogaW1wbCkK
LXsKLSAgICByZXR1cm4gd3JhcDxKU1Rlc3RJbnRlcmZhY2U+KGV4ZWMsIGdsb2JhbE9iamVjdCwg
aW1wbCk7Ci19Ci0KLVRlc3RJbnRlcmZhY2UqIHRvVGVzdEludGVyZmFjZShKU0M6OkpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLmluaGVyaXRzKCZKU1Rlc3RJbnRlcmZhY2U6OnNf
aW5mbykgPyBzdGF0aWNfY2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihhc09iamVjdCh2YWx1ZSkpLT5p
bXBsKCkgOiAwOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5B
QkxFKENvbmRpdGlvbjIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5oCShyZXZpc2lvbiA4OTE0MikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4MyArMCwwIEBACi0vKgotICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAgICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSovCi0KLSNpZm5kZWYgSlNUZXN0SW50ZXJmYWNlX2gKLSNkZWZpbmUgSlNUZXN0SW50ZXJmYWNl
X2gKLQotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLQotI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0V2l0aEdsb2JhbE9iamVjdC5oPgotI2luY2x1
ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgVGVzdEludGVyZmFjZTsKLQotY2xhc3MgSlNUZXN0SW50ZXJmYWNlIDogcHVibGljIEpT
RE9NV3JhcHBlciB7Ci0gICAgdHlwZWRlZiBKU0RPTVdyYXBwZXIgQmFzZTsKLXB1YmxpYzoKLSAg
ICBKU1Rlc3RJbnRlcmZhY2UoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBh
c3NSZWZQdHI8VGVzdEludGVyZmFjZT4pOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVh
dGVQcm90b3R5cGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3Im
KTsKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotCi0gICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCwgJnNf
aW5mbyk7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBUZXN0SW50ZXJmYWNl
KiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAg
UmVmUHRyPFRlc3RJbnRlcmZhY2U+IG1faW1wbDsKLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwotfTsKLQotSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RJbnRlcmZhY2UqKTsKLVRlc3RJ
bnRlcmZhY2UqIHRvVGVzdEludGVyZmFjZShKU0M6OkpTVmFsdWUpOwotCi1jbGFzcyBKU1Rlc3RJ
bnRlcmZhY2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU09iamVjdFdpdGhHbG9iYWxPYmplY3Qg
ewotICAgIHR5cGVkZWYgSlNDOjpKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgQmFzZTsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZv
OwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNT
bG90Q291bnQsICZzX2luZm8pOwotICAgIH0KLSAgICBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGUo
SlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTT2JqZWN0V2l0aEds
b2JhbE9iamVjdChnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkgeyB9Ci1wcm90
ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3M7Ci19OwotCi0vLyBBdHRyaWJ1dGVzCi0KLUpTQzo6SlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29u
c3QgSlNDOjpJZGVudGlmaWVyJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLQotI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCShyZXZp
c2lvbiA4OTE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTUg
KzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oIgotCi0jaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIk1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ci5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQVNTRVJU
X0NMQVNTX0ZJVFNfSU5fQ0VMTChKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKTsKLQotLyog
SGFzaCB0YWJsZSAqLwotI2lmIEVOQUJMRShKSVQpCi0jZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihn
ZW5lcmF0b3IpICwgZ2VuZXJhdG9yCi0jZWxzZQotI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2Vu
ZXJhdG9yKQotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyVGFibGVWYWx1ZXNbMl0gPQotewotICAgIHsgImNvbnN0cnVjdG9y
IiwgRG9udEVudW0gfCBSZWFkT25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3Ip
LCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7IDAsIDAsIDAsIDAgVEhV
TktfR0VORVJBVE9SKDApIH0KLX07Ci0KLSN1bmRlZiBUSFVOS19HRU5FUkFUT1IKLXN0YXRpYyBK
U0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
VGFibGUgPSB7IDIsIDEsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJUYWJsZVZhbHVlcywg
MCB9OwotLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KLSNpZiBFTkFCTEUoSklUKQot
I2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKSAsIGdlbmVyYXRvcgotI2Vsc2UKLSNk
ZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikKLSNlbmRpZgotCi1zdGF0aWMgY29uc3Qg
SGFzaFRhYmxlVmFsdWUgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yVGFi
bGVWYWx1ZXNbMV0gPQotewotICAgIHsgMCwgMCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkgfQot
fTsKLQotI3VuZGVmIFRIVU5LX0dFTkVSQVRPUgotc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUg
SGFzaFRhYmxlIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvclRhYmxlID0g
eyAxLCAwLCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3JUYWJsZVZhbHVl
cywgMCB9OwotY2xhc3MgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yIDog
cHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBKU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlN0cnVjdHVy
ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9w
ZXJ0eVNsb3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eURlc2Ny
aXB0b3ImKTsKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQs
ICZzX2luZm8pOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6
SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZs
YWdzOwotfTsKLQotY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJD
b25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1
Y3RvciIsICZET01Db25zdHJ1Y3Rvck9iamVjdDo6c19pbmZvLCAmSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lckNvbnN0cnVjdG9yVGFibGUsIDAgfTsKLQotSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lckNvbnN0cnVjdG9yOjpKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKLSAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVjdHVyZSwg
Z2xvYmFsT2JqZWN0KQotewotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0
RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlw
ZSwgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9i
YWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwotfQotCi1ib29sIEpTVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyQ29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvclRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwotfQotCi1ib29sIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgcmV0
dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Q29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJDb25zdHJ1Y3RvclRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwot
fQotCi0vKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KLSNpZiBFTkFCTEUoSklUKQotI2Rl
ZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKSAsIGdlbmVyYXRvcgotI2Vsc2UKLSNkZWZp
bmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikKLSNlbmRpZgotCi1zdGF0aWMgY29uc3QgSGFz
aFRhYmxlVmFsdWUgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZVRhYmxlVmFs
dWVzWzJdID0KLXsKLSAgICB7ICJtZXRob2QiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRw
dHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKSwgKGludHB0cl90KTEgVEhVTktfR0VORVJBVE9S
KDApIH0sCi0gICAgeyAwLCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigwKSB9Ci19OwotCi0jdW5k
ZWYgVEhVTktfR0VORVJBVE9SCi1zdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUg
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZVRhYmxlID0geyAyLCAxLCBKU1Rl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKLWNvbnN0
IENsYXNzSW5mbyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlOjpzX2luZm8g
PSB7ICJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZSIsICZKU0M6OkpTT2JqZWN0
V2l0aEdsb2JhbE9iamVjdDo6c19pbmZvLCAmSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclBy
b3RvdHlwZVRhYmxlLCAwIH07Ci0KLUpTT2JqZWN0KiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyUHJvdG90eXBlOjpzZWxmKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXI+KGV4ZWMsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLWJvb2wgSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Ci17Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxKU09iamVjdD4oZXhlYywgJkpT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGVUYWJsZSwgdGhpcywgcHJvcGVydHlO
YW1lLCBzbG90KTsKLX0KLQotYm9vbCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90
eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsK
LSAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEpTT2JqZWN0PihleGVjLCAm
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZVRhYmxlLCB0aGlzLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCi1jb25zdCBDbGFzc0luZm8gSlNUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcjo6c19pbmZvID0geyAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIiLCAm
SlNET01XcmFwcGVyOjpzX2luZm8sICZKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyVGFibGUs
IDAgfTsKLQotSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6SlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUGFzc1JlZlB0cjxUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4gaW1wbCkKLSAg
ICA6IEpTRE9NV3JhcHBlcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKLSAgICAsIG1faW1wbChp
bXBsKQotewotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci19Ci0KLUpTT2JqZWN0KiBK
U1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpjcmVhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBuZXcgKGV4
ZWMpIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBnbG9iYWxPYmplY3QsIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0
LT5vYmplY3RQcm90b3R5cGUoKSkpOwotfQotCi1ib29sIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXI6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpcywgJnNfaW5mbyk7Ci0gICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVl
U2xvdDxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLCBCYXNlPihleGVjLCAmSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lclRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQot
Ci1ib29sIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpcywgJnNfaW5mbyk7Ci0gICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRv
cjxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLCBCYXNlPihleGVjLCAmSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lclRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwot
fQotCi1KU1ZhbHVlIGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQotewotICAg
IEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGRvbU9iamVjdCA9IHN0YXRpY19jYXN0PEpT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqPihhc09iamVjdChzbG90QmFzZSkpOwotICAgIHJl
dHVybiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpnZXRDb25zdHJ1Y3RvcihleGVjLCBk
b21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKLX0KLQotSlNWYWx1ZSBKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyOjpnZXRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcj4oZXhlYywgc3RhdGljX2Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2QoRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyOjpzX2luZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKLSAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBjYXN0ZWRUaGlz
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcio+KGFzT2JqZWN0KHRo
aXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OnNfaW5mbyk7Ci0gICAgVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Kj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
cj4gbGlzdGVuZXIoTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Y3JlYXRlKFNjcmlwdFZhbHVlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+YXJndW1lbnQoMCkpKSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotCi0gICAgaW1wLT5tZXRob2QobGlzdGVuZXIpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lciogaW1wbCkKLXsKLSAgICByZXR1cm4gd3JhcDxKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyPihleGVjLCBnbG9iYWxPYmplY3QsIGltcGwpOwotfQotCi1UZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lciogdG9UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihKU0M6OkpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLmluaGVyaXRzKCZKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyOjpzX2luZm8pID8gc3RhdGljX2Nhc3Q8SlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lcio+KGFzT2JqZWN0KHZhbHVlKSktPmltcGwoKSA6IDA7Ci19Ci0KLX0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAkocmV2aXNpb24gODkxNDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0g
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgot
ICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
X2gKLSNkZWZpbmUgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcl9oCi0KLSNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9KU09iamVjdFdpdGhHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50
aW1lL09iamVjdFByb3RvdHlwZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOwotCi1jbGFzcyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyIDogcHVibGljIEpTRE9NV3JhcHBlciB7Ci0gICAgdHlwZWRlZiBKU0RPTVdyYXBwZXIg
QmFzZTsKLXB1YmxpYzoKLSAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyPik7Ci0gICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgIHN0YXRp
YyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Ci0KLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3VzU2xvdENvdW50LCAmc19pbmZvKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
KiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAg
UmVmUHRyPFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBtX2ltcGw7Ci1wcm90ZWN0ZWQ6Ci0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKLX07Ci0KLUpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lciopOwotVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIHRvVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIoSlNDOjpKU1ZhbHVlKTsKLQotY2xhc3MgSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTT2JqZWN0V2l0aEdsb2Jh
bE9iamVjdCB7Ci0gICAgdHlwZWRlZiBKU0M6OkpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCBCYXNl
OwotcHVibGljOgotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZWxmKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5m
byBzX2luZm87Ci0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCwg
JnNfaW5mbyk7Ci0gICAgfQotICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5
cGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTT2JqZWN0V2l0
aEdsb2JhbE9iamVjdChnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkgeyB9Ci1w
cm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKLX07
Ci0KLS8vIEZ1bmN0aW9ucwotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kKEpTQzo6RXhl
Y1N0YXRlKik7Ci0vLyBBdHRyaWJ1dGVzCi0KLUpTQzo6SlNWYWx1ZSBqc1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDg5MTQyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTc1MyArMCwwIEBACi0vKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
Ci0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJKU1Rlc3RPYmouaCIKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
LSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgi
Ci0jaW5jbHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVk
ZSAiSlNFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiSlNPcHRpb25zT2JqZWN0LmgiCi0jaW5j
bHVkZSAiSlNUZXN0Q2FsbGJhY2suaCIKLSNpbmNsdWRlICJKU1Rlc3RPYmouaCIKLSNpbmNsdWRl
ICJKU2xvZy5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJTY3JpcHRBcmd1bWVudHMu
aCIKLSNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKLSNpbmNsdWRlICJTY3JpcHRDYWxsU3Rh
Y2tGYWN0b3J5LmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVk
ZSAiVGVzdE9iai5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRlIDxydW50
aW1lL0pTU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUFTU0VSVF9DTEFTU19GSVRTX0lOX0NF
TEwoSlNUZXN0T2JqKTsKLQotLyogSGFzaCB0YWJsZSAqLwotI2lmIEVOQUJMRShKSVQpCi0jZGVm
aW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpICwgZ2VuZXJhdG9yCi0jZWxzZQotI2RlZmlu
ZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKQotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBIYXNo
VGFibGVWYWx1ZSBKU1Rlc3RPYmpUYWJsZVZhbHVlc1szN10gPQotewotICAgIHsgInJlYWRPbmx5
SW50QXR0ciIsIERvbnREZWxldGUgfCBSZWFkT25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpSZWFkT25seUludEF0dHIpLCAoaW50
cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJyZWFkT25seVN0cmluZ0F0dHIi
LCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyKSwgKGludHB0cl90
KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCi0gICAgeyAicmVhZE9ubHlUZXN0T2JqQXR0ciIsIERv
bnREZWxldGUgfCBSZWFkT25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyKSwgKGludHB0cl90KTAg
VEhVTktfR0VORVJBVE9SKDApIH0sCi0gICAgeyAic2hvcnRBdHRyIiwgRG9udERlbGV0ZSwgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpT
aG9ydEF0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqU2hvcnRBdHRyIFRIVU5LX0dFTkVSQVRP
UigwKSB9LAotICAgIHsgInVuc2lnbmVkU2hvcnRBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpVbnNpZ25l
ZFNob3J0QXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0ciBUSFVO
S19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJpbnRBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpJbnRBdHRy
KSwgKGludHB0cl90KXNldEpTVGVzdE9iakludEF0dHIgVEhVTktfR0VORVJBVE9SKDApIH0sCi0g
ICAgeyAibG9uZ0xvbmdBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpMb25nTG9uZ0F0dHIpLCAoaW50cHRy
X3Qpc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsg
InVuc2lnbmVkTG9uZ0xvbmdBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0
ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ciBUSFVOS19HRU5F
UkFUT1IoMCkgfSwKLSAgICB7ICJzdHJpbmdBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpTdHJpbmdBdHRy
KSwgKGludHB0cl90KXNldEpTVGVzdE9ialN0cmluZ0F0dHIgVEhVTktfR0VORVJBVE9SKDApIH0s
Ci0gICAgeyAidGVzdE9iakF0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialRlc3RPYmpBdHRyKSwgKGludHB0
cl90KXNldEpTVGVzdE9ialRlc3RPYmpBdHRyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsg
IlhNTE9iakF0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialhNTE9iakF0dHIpLCAoaW50cHRyX3Qpc2V0SlNU
ZXN0T2JqWE1MT2JqQXR0ciBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJjcmVhdGUiLCBE
b250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmM+KGpzVGVzdE9iakNyZWF0ZSksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpDcmVhdGUgVEhVTktf
R0VORVJBVE9SKDApIH0sCi0gICAgeyAicmVmbGVjdGVkU3RyaW5nQXR0ciIsIERvbnREZWxldGUs
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0
T2JqUmVmbGVjdGVkU3RyaW5nQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRT
dHJpbmdBdHRyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgInJlZmxlY3RlZEludGVncmFs
QXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyKSwgKGludHB0cl90KXNl
dEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0ciBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAg
ICB7ICJyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqUmVmbGVj
dGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqUmVmbGVjdGVk
VW5zaWduZWRJbnRlZ3JhbEF0dHIgVEhVTktfR0VORVJBVE9SKDApIH0sCi0gICAgeyAicmVmbGVj
dGVkQm9vbGVhbkF0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVy
dHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyKSwgKGlu
dHB0cl90KXNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyIFRIVU5LX0dFTkVSQVRPUigw
KSB9LAotICAgIHsgInJlZmxlY3RlZFVSTEF0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialJlZmxlY3RlZFVS
TEF0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ciBUSFVOS19HRU5F
UkFUT1IoMCkgfSwKLSAgICB7ICJyZWZsZWN0ZWROb25FbXB0eVVSTEF0dHIiLCBEb250RGVsZXRl
LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dE9ialJlZmxlY3RlZE5vbkVtcHR5VVJMQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWROb25FbXB0eVVSTEF0dHIgVEhVTktfR0VORVJBVE9SKDApIH0sCi0gICAgeyAicmVmbGVj
dGVkU3RyaW5nQXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ciksIChpbnRw
dHJfdClzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyIFRIVU5LX0dFTkVSQVRPUigwKSB9
LAotICAgIHsgInJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ciIsIERvbnREZWxldGUsIChpbnRw
dHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqUmVm
bGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKSwgKGludHB0cl90KXNldEpTVGVzdE9ialJlZmxlY3Rl
ZEN1c3RvbUludGVncmFsQXR0ciBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJyZWZsZWN0
ZWRDdXN0b21Cb29sZWFuQXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVh
bkF0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIg
VEhVTktfR0VORVJBVE9SKDApIH0sCi0gICAgeyAicmVmbGVjdGVkQ3VzdG9tVVJMQXR0ciIsIERv
bnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RP
YmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgInJl
ZmxlY3RlZEN1c3RvbU5vbkVtcHR5VVJMQXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0
aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqUmVmbGVjdGVkQ3Vz
dG9tTm9uRW1wdHlVUkxBdHRyKSwgKGludHB0cl90KXNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3Rv
bU5vbkVtcHR5VVJMQXR0ciBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJhdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbiIsIERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24pLCAo
aW50cHRyX3Qpc2V0SlNUZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24gVEhVTktfR0VORVJB
VE9SKDApIH0sCi0gICAgeyAiYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iLCBEb250RGVsZXRlLCAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9i
akF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKSwgKGludHB0cl90KXNldEpTVGVzdE9iakF0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgInN0cmluZ0F0dHJX
aXRoR2V0dGVyRXhjZXB0aW9uIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbiksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbiBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJzdHJpbmdBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbiIsIERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24pLCAo
aW50cHRyX3Qpc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24gVEhVTktf
R0VORVJBVE9SKDApIH0sCi0gICAgeyAiY3VzdG9tQXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ3VzdG9t
QXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpDdXN0b21BdHRyIFRIVU5LX0dFTkVSQVRPUigw
KSB9LAotICAgIHsgInNjcmlwdFN0cmluZ0F0dHIiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2Jq
U2NyaXB0U3RyaW5nQXR0ciksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotI2lm
IEVOQUJMRShDb25kaXRpb24xKQotICAgIHsgImNvbmRpdGlvbmFsQXR0cjEiLCBEb250RGVsZXRl
LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjEpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyMSBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSNlbmRpZgotI2lmIEVOQUJMRShDb25kaXRpb24x
KSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICB7ICJjb25kaXRpb25hbEF0dHIyIiwgRG9udERl
bGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKSwgKGludHB0cl90KXNldEpTVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjIgVEhVTktfR0VORVJBVE9SKDApIH0sCi0jZW5kaWYKLSNpZiBFTkFCTEUoQ29uZGl0
aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgeyAiY29uZGl0aW9uYWxBdHRyMyIsIERv
bnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIzIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotI2VuZGlmCi0gICAgeyAiZGVzY3Jp
cHRpb24iLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqRGVzY3JpcHRpb24pLCAoaW50cHRyX3Qp
MCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJpZCIsIERvbnREZWxldGUsIChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqSWQpLCAo
aW50cHRyX3Qpc2V0SlNUZXN0T2JqSWQgVEhVTktfR0VORVJBVE9SKDApIH0sCi0gICAgeyAiaGFz
aCIsIERvbnREZWxldGUgfCBSZWFkT25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5
U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpIYXNoKSwgKGludHB0cl90KTAgVEhVTktfR0VO
RVJBVE9SKDApIH0sCi0gICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSB8IFJlYWRPbmx5LCAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9i
akNvbnN0cnVjdG9yKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCi0gICAgeyAw
LCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigwKSB9Ci19OwotCi0jdW5kZWYgVEhVTktfR0VORVJB
VE9SCi1zdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0T2JqVGFibGUg
PSB7IDEzMywgMTI3LCBKU1Rlc3RPYmpUYWJsZVZhbHVlcywgMCB9OwotLyogSGFzaCB0YWJsZSBm
b3IgY29uc3RydWN0b3IgKi8KLSNpZiBFTkFCTEUoSklUKQotI2RlZmluZSBUSFVOS19HRU5FUkFU
T1IoZ2VuZXJhdG9yKSAsIGdlbmVyYXRvcgotI2Vsc2UKLSNkZWZpbmUgVEhVTktfR0VORVJBVE9S
KGdlbmVyYXRvcikKLSNlbmRpZgotCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0
T2JqQ29uc3RydWN0b3JUYWJsZVZhbHVlc1sxMl0gPQotewotICAgIHsgIkNPTlNUX1ZBTFVFXzAi
LCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ09OU1RfVkFMVUVfMCksIChpbnRwdHJfdCkwIFRI
VU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgIkNPTlNUX1ZBTFVFXzEiLCBEb250RGVsZXRlIHwg
UmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0T2JqQ09OU1RfVkFMVUVfMSksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigw
KSB9LAotICAgIHsgIkNPTlNUX1ZBTFVFXzIiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRw
dHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ09O
U1RfVkFMVUVfMiksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgIkNP
TlNUX1ZBTFVFXzQiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ09OU1RfVkFMVUVfNCksIChp
bnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgIkNPTlNUX1ZBTFVFXzgiLCBE
b250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ09OU1RfVkFMVUVfOCksIChpbnRwdHJfdCkwIFRIVU5L
X0dFTkVSQVRPUigwKSB9LAotICAgIHsgIkNPTlNUX1ZBTFVFXzkiLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0T2JqQ09OU1RfVkFMVUVfOSksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9
LAotICAgIHsgIkNPTlNUX1ZBTFVFXzEwIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5LCAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9iakNPTlNU
X1ZBTFVFXzEwKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCi0gICAgeyAiQ09O
U1RfVkFMVUVfMTEiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ09OU1RfVkFMVUVfMTEpLCAo
aW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJDT05TVF9WQUxVRV8xMiIs
IERvbnREZWxldGUgfCBSZWFkT25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpDT05TVF9WQUxVRV8xMiksIChpbnRwdHJfdCkwIFRI
VU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgIkNPTlNUX1ZBTFVFXzEzIiwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmM+KGpzVGVzdE9iakNPTlNUX1ZBTFVFXzEzKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9S
KDApIH0sCi0gICAgeyAiQ09OU1RfVkFMVUVfMTQiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2Jq
Q09OU1RfVkFMVUVfMTQpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7
IDAsIDAsIDAsIDAgVEhVTktfR0VORVJBVE9SKDApIH0KLX07Ci0KLSN1bmRlZiBUSFVOS19HRU5F
UkFUT1IKLXN0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RPYmpDb25z
dHJ1Y3RvclRhYmxlID0geyAzMywgMzEsIEpTVGVzdE9iakNvbnN0cnVjdG9yVGFibGVWYWx1ZXMs
IDAgfTsKLQotQ09NUElMRV9BU1NFUlQoMCA9PSBUZXN0T2JqOjpDT05TVF9WQUxVRV8wLCBUZXN0
T2JqRW51bUNPTlNUX1ZBTFVFXzBJc1dyb25nVXNlRG9udENoZWNrRW51bXMpOwotQ09NUElMRV9B
U1NFUlQoMSA9PSBUZXN0T2JqOjpDT05TVF9WQUxVRV8xLCBUZXN0T2JqRW51bUNPTlNUX1ZBTFVF
XzFJc1dyb25nVXNlRG9udENoZWNrRW51bXMpOwotQ09NUElMRV9BU1NFUlQoMiA9PSBUZXN0T2Jq
OjpDT05TVF9WQUxVRV8yLCBUZXN0T2JqRW51bUNPTlNUX1ZBTFVFXzJJc1dyb25nVXNlRG9udENo
ZWNrRW51bXMpOwotQ09NUElMRV9BU1NFUlQoNCA9PSBUZXN0T2JqOjpDT05TVF9WQUxVRV80LCBU
ZXN0T2JqRW51bUNPTlNUX1ZBTFVFXzRJc1dyb25nVXNlRG9udENoZWNrRW51bXMpOwotQ09NUElM
RV9BU1NFUlQoOCA9PSBUZXN0T2JqOjpDT05TVF9WQUxVRV84LCBUZXN0T2JqRW51bUNPTlNUX1ZB
TFVFXzhJc1dyb25nVXNlRG9udENoZWNrRW51bXMpOwotQ09NUElMRV9BU1NFUlQoLTEgPT0gVGVz
dE9iajo6Q09OU1RfVkFMVUVfOSwgVGVzdE9iakVudW1DT05TVF9WQUxVRV85SXNXcm9uZ1VzZURv
bnRDaGVja0VudW1zKTsKLUNPTVBJTEVfQVNTRVJUKCJteSBjb25zdGFudCBzdHJpbmciID09IFRl
c3RPYmo6OkNPTlNUX1ZBTFVFXzEwLCBUZXN0T2JqRW51bUNPTlNUX1ZBTFVFXzEwSXNXcm9uZ1Vz
ZURvbnRDaGVja0VudW1zKTsKLUNPTVBJTEVfQVNTRVJUKDB4ZmZmZmZmZmYgPT0gVGVzdE9iajo6
Q09OU1RfVkFMVUVfMTEsIFRlc3RPYmpFbnVtQ09OU1RfVkFMVUVfMTFJc1dyb25nVXNlRG9udENo
ZWNrRW51bXMpOwotQ09NUElMRV9BU1NFUlQoMHgwMSA9PSBUZXN0T2JqOjpDT05TVF9WQUxVRV8x
MiwgVGVzdE9iakVudW1DT05TVF9WQUxVRV8xMklzV3JvbmdVc2VEb250Q2hlY2tFbnVtcyk7Ci1D
T01QSUxFX0FTU0VSVCgwWDIwID09IFRlc3RPYmo6OkNPTlNUX1ZBTFVFXzEzLCBUZXN0T2JqRW51
bUNPTlNUX1ZBTFVFXzEzSXNXcm9uZ1VzZURvbnRDaGVja0VudW1zKTsKLUNPTVBJTEVfQVNTRVJU
KDB4MWFiYyA9PSBUZXN0T2JqOjpDT05TVF9WQUxVRV8xNCwgVGVzdE9iakVudW1DT05TVF9WQUxV
RV8xNElzV3JvbmdVc2VEb250Q2hlY2tFbnVtcyk7Ci0KLWNsYXNzIEpTVGVzdE9iakNvbnN0cnVj
dG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBKU1Rlc3RP
YmpDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9i
YWxPYmplY3QqKTsKLQotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwotICAg
IHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Ci0gICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCwgJnNfaW5mbyk7Ci0g
ICAgfQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJbXBsZW1lbnRzSGFz
SW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7Ci19OwotCi1j
b25zdCBDbGFzc0luZm8gSlNUZXN0T2JqQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RPYmpD
b25zdHJ1Y3RvciIsICZET01Db25zdHJ1Y3Rvck9iamVjdDo6c19pbmZvLCAmSlNUZXN0T2JqQ29u
c3RydWN0b3JUYWJsZSwgMCB9OwotCi1KU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6SlNUZXN0T2JqQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0KQotewotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0g
ICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnBy
b3RvdHlwZSwgSlNUZXN0T2JqUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERv
bnREZWxldGUgfCBSZWFkT25seSk7Ci19Ci0KLWJvb2wgSlNUZXN0T2JqQ29uc3RydWN0b3I6Omdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIHJldHVybiBnZXRTdGF0aWNWYWx1
ZVNsb3Q8SlNUZXN0T2JqQ29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpTVGVzdE9i
akNvbnN0cnVjdG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLWJvb2wg
SlNUZXN0T2JqQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNU
ZXN0T2JqQ29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpTVGVzdE9iakNvbnN0cnVj
dG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KLS8qIEhhc2gg
dGFibGUgZm9yIHByb3RvdHlwZSAqLwotI2lmIEVOQUJMRShKSVQpCi0jZGVmaW5lIFRIVU5LX0dF
TkVSQVRPUihnZW5lcmF0b3IpICwgZ2VuZXJhdG9yCi0jZWxzZQotI2RlZmluZSBUSFVOS19HRU5F
UkFUT1IoZ2VuZXJhdG9yKQotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1s0OF0gPQotewotICAgIHsgIkNPTlNUX1ZBTFVF
XzAiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ09OU1RfVkFMVUVfMCksIChpbnRwdHJfdCkw
IFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgIkNPTlNUX1ZBTFVFXzEiLCBEb250RGVsZXRl
IHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNUZXN0T2JqQ09OU1RfVkFMVUVfMSksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRP
UigwKSB9LAotICAgIHsgIkNPTlNUX1ZBTFVFXzIiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2Jq
Q09OU1RfVkFMVUVfMiksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsg
IkNPTlNUX1ZBTFVFXzQiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ09OU1RfVkFMVUVfNCks
IChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgIkNPTlNUX1ZBTFVFXzgi
LCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ09OU1RfVkFMVUVfOCksIChpbnRwdHJfdCkwIFRI
VU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgIkNPTlNUX1ZBTFVFXzkiLCBEb250RGVsZXRlIHwg
UmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0T2JqQ09OU1RfVkFMVUVfOSksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigw
KSB9LAotICAgIHsgIkNPTlNUX1ZBTFVFXzEwIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5LCAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9iakNP
TlNUX1ZBTFVFXzEwKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCi0gICAgeyAi
Q09OU1RfVkFMVUVfMTEiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ09OU1RfVkFMVUVfMTEp
LCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJDT05TVF9WQUxVRV8x
MiIsIERvbnREZWxldGUgfCBSZWFkT25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5
U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpDT05TVF9WQUxVRV8xMiksIChpbnRwdHJfdCkw
IFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgIkNPTlNUX1ZBTFVFXzEzIiwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmM+KGpzVGVzdE9iakNPTlNUX1ZBTFVFXzEzKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJB
VE9SKDApIH0sCi0gICAgeyAiQ09OU1RfVkFMVUVfMTQiLCBEb250RGVsZXRlIHwgUmVhZE9ubHks
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0
T2JqQ09OU1RfVkFMVUVfMTQpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAg
ICB7ICJ2b2lkTWV0aG9kIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhv
ZCksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgInZvaWRNZXRob2RX
aXRoQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5h
dGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJn
cyksIChpbnRwdHJfdCkzIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgImludE1ldGhvZCIs
IERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0
aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkludE1ldGhvZCksIChpbnRwdHJfdCkwIFRI
VU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgImludE1ldGhvZFdpdGhBcmdzIiwgRG9udERlbGV0
ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uSW50TWV0aG9kV2l0aEFyZ3MpLCAoaW50cHRyX3QpMyBUSFVO
S19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJvYmpNZXRob2QiLCBEb250RGVsZXRlIHwgRnVuY3Rp
b24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PYmpNZXRob2QpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwK
LSAgICB7ICJvYmpNZXRob2RXaXRoQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0
cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk9iak1ldGhvZFdpdGhBcmdzKSwgKGludHB0cl90KTMgVEhVTktfR0VORVJBVE9SKDApIH0sCi0g
ICAgeyAibWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwg
KGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3MpLCAoaW50cHRyX3QpMiBUSFVOS19HRU5F
UkFUT1IoMCkgfSwKLSAgICB7ICJtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzIiwg
RG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rp
b24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0Fu
ZFRocm93cyksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgInNlcmlh
bGl6ZWRWYWx1ZSIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0
PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1
ZSksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgImlkYktleSIsIERv
bnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9u
Pihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbklkYktleSksIChpbnRwdHJfdCkxIFRIVU5LX0dF
TkVSQVRPUigwKSB9LAotICAgIHsgIm9wdGlvbnNPYmplY3QiLCBEb250RGVsZXRlIHwgRnVuY3Rp
b24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PcHRpb25zT2JqZWN0KSwgKGludHB0cl90KTIgVEhVTktfR0VORVJBVE9SKDAp
IH0sCi0gICAgeyAibWV0aG9kV2l0aEV4Y2VwdGlvbiIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwg
KGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24pLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1Io
MCkgfSwKLSAgICB7ICJjdXN0b21NZXRob2QiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRw
dHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25DdXN0b21NZXRob2QpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7
ICJjdXN0b21NZXRob2RXaXRoQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90
KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1
c3RvbU1ldGhvZFdpdGhBcmdzKSwgKGludHB0cl90KTMgVEhVTktfR0VORVJBVE9SKDApIH0sCi0g
ICAgeyAiY3VzdG9tQXJnc0FuZEV4Y2VwdGlvbiIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGlu
dHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkN1c3RvbUFyZ3NBbmRFeGNlcHRpb24pLCAoaW50cHRyX3QpMSBUSFVOS19HRU5FUkFUT1Io
MCkgfSwKLSAgICB7ICJhZGRFdmVudExpc3RlbmVyIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQWRkRXZlbnRMaXN0ZW5lciksIChpbnRwdHJfdCkzIFRIVU5LX0dFTkVSQVRPUigwKSB9
LAotICAgIHsgInJlbW92ZUV2ZW50TGlzdGVuZXIiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChp
bnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25SZW1vdmVFdmVudExpc3RlbmVyKSwgKGludHB0cl90KTMgVEhVTktfR0VORVJBVE9SKDAp
IH0sCi0gICAgeyAid2l0aER5bmFtaWNGcmFtZSIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGlu
dHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbldpdGhEeW5hbWljRnJhbWUpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwK
LSAgICB7ICJ3aXRoRHluYW1pY0ZyYW1lQW5kQXJnIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aER5bmFtaWNGcmFtZUFuZEFyZyksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRP
UigwKSB9LAotICAgIHsgIndpdGhEeW5hbWljRnJhbWVBbmRPcHRpb25hbEFyZyIsIERvbnREZWxl
dGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEeW5hbWljRnJhbWVBbmRPcHRpb25hbEFyZyksIChp
bnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgIndpdGhEeW5hbWljRnJhbWVB
bmRVc2VyR2VzdHVyZSIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19j
YXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEeW5hbWlj
RnJhbWVBbmRVc2VyR2VzdHVyZSksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAot
ICAgIHsgIndpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZUFTQUQiLCBEb250RGVsZXRlIHwg
RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmVBU0FEKSwgKGlu
dHB0cl90KTIgVEhVTktfR0VORVJBVE9SKDApIH0sCi0gICAgeyAid2l0aFNjcmlwdFN0YXRlVm9p
ZCIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1
bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZVZvaWQpLCAo
aW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJ3aXRoU2NyaXB0U3RhdGVP
YmoiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVG
dW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmopLCAo
aW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJ3aXRoU2NyaXB0U3RhdGVW
b2lkRXhjZXB0aW9uIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0
YXRlVm9pZEV4Y2VwdGlvbiksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAg
IHsgIndpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbiIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwg
KGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbiksIChpbnRwdHJfdCkwIFRIVU5LX0dF
TkVSQVRPUigwKSB9LAotICAgIHsgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0IiwgRG9udERl
bGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLCAoaW50
cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJtZXRob2RXaXRoT3B0aW9uYWxB
cmciLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVG
dW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcp
LCAoaW50cHRyX3QpMSBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJtZXRob2RXaXRoTm9u
T3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0
cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKSwgKGludHB0cl90KTIgVEhV
TktfR0VORVJBVE9SKDApIH0sCi0gICAgeyAibWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdv
T3B0aW9uYWxBcmdzIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5v
bk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKSwgKGludHB0cl90KTMgVEhVTktfR0VORVJB
VE9SKDApIH0sCi0gICAgeyAibWV0aG9kV2l0aENhbGxiYWNrQXJnIiwgRG9udERlbGV0ZSB8IEZ1
bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXJnKSwgKGludHB0cl90KTEgVEhVTktf
R0VORVJBVE9SKDApIH0sCi0gICAgeyAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJh
Y2tBcmciLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRp
dmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJh
Y2tBcmdBbmRDYWxsYmFja0FyZyksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAot
ICAgIHsgIm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIiwgRG9udERlbGV0ZSB8IEZ1
bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcpLCAoaW50cHRy
X3QpMSBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJvdmVybG9hZGVkTWV0aG9kIiwgRG9u
dERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+
KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZCksIChpbnRwdHJfdCky
IFRIVU5LX0dFTkVSQVRPUigwKSB9LAotICAgIHsgImNsYXNzTWV0aG9kIiwgRG9udERlbGV0ZSB8
IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2QpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFU
T1IoMCkgfSwKLSAgICB7ICJjbGFzc01ldGhvZFdpdGhPcHRpb25hbCIsIERvbnREZWxldGUgfCBG
dW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKSwgKGludHB0cl90KTEgVEhV
TktfR0VORVJBVE9SKDApIH0sCi0gICAgeyAwLCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigwKSB9
Ci19OwotCi0jdW5kZWYgVEhVTktfR0VORVJBVE9SCi1zdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJM
RSBIYXNoVGFibGUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGUgPSB7IDEzNiwgMTI3LCBKU1Rlc3RP
YmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9OwotY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE9ialBy
b3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE9ialByb3RvdHlwZSIsICZKU0M6OkpTT2JqZWN0V2l0
aEdsb2JhbE9iamVjdDo6c19pbmZvLCAmSlNUZXN0T2JqUHJvdG90eXBlVGFibGUsIDAgfTsKLQot
SlNPYmplY3QqIEpTVGVzdE9ialByb3RvdHlwZTo6c2VsZihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxK
U1Rlc3RPYmo+KGV4ZWMsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLWJvb2wgSlNUZXN0T2JqUHJvdG90
eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICByZXR1cm4gZ2V0U3Rh
dGljUHJvcGVydHlTbG90PEpTVGVzdE9ialByb3RvdHlwZSwgSlNPYmplY3Q+KGV4ZWMsICZKU1Rl
c3RPYmpQcm90b3R5cGVUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKLX0KLQotYm9v
bCBKU1Rlc3RPYmpQcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBnZXRTdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3I8
SlNUZXN0T2JqUHJvdG90eXBlLCBKU09iamVjdD4oZXhlYywgJkpTVGVzdE9ialByb3RvdHlwZVRh
YmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCi1jb25zdCBDbGFzc0lu
Zm8gSlNUZXN0T2JqOjpzX2luZm8gPSB7ICJUZXN0T2JqIiwgJkpTRE9NV3JhcHBlcjo6c19pbmZv
LCAmSlNUZXN0T2JqVGFibGUsIDAgfTsKLQotSlNUZXN0T2JqOjpKU1Rlc3RPYmooU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8
VGVzdE9iaj4gaW1wbCkKLSAgICA6IEpTRE9NV3JhcHBlcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVj
dCkKLSAgICAsIG1faW1wbChpbXBsKQotewotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7
Ci19Ci0KLUpTT2JqZWN0KiBKU1Rlc3RPYmo6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIG5ldyAoZXhl
YykgSlNUZXN0T2JqUHJvdG90eXBlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBK
U1Rlc3RPYmpQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKSwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOwotfQotCi1ib29sIEpTVGVz
dE9iajo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzLCAmc19pbmZvKTsKLSAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVT
bG90PEpTVGVzdE9iaiwgQmFzZT4oZXhlYywgJkpTVGVzdE9ialRhYmxlLCB0aGlzLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwotfQotCi1ib29sIEpTVGVzdE9iajo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzLCAmc19pbmZvKTsKLSAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlwdG9y
PEpTVGVzdE9iaiwgQmFzZT4oZXhlYywgJkpTVGVzdE9ialRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IpOwotfQotCi1KU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5SW50QXR0cihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQotewot
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2Jq
ZWN0KHNsb3RCYXNlKSk7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwotICAgIFRlc3RPYmoqIGlt
cCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5yZWFkT25seUludEF0dHIoKSk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotCi1KU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0cihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQotewotICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0
KHNsb3RCYXNlKSk7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwotICAgIFRlc3RPYmoqIGltcCA9
IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNTdHJpbmcoZXhlYywgaW1wLT5yZWFkT25seVN0cmluZ0F0dHIoKSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotCi1KU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5VGVzdE9iakF0
dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikK
LXsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihh
c09iamVjdChzbG90QmFzZSkpOwotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKLSAgICBUZXN0T2Jq
KiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdU
Rjo6Z2V0UHRyKGltcC0+cmVhZE9ubHlUZXN0T2JqQXR0cigpKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotCi1KU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQotewotICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRl
c3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoaW1wLT5zaG9ydEF0dHIoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi1KU1ZhbHVl
IGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90
QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCi17Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
c3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKLSAgICBVTlVTRURf
UEFSQU0oZXhlYyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPnVu
c2lnbmVkU2hvcnRBdHRyKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLQotSlNWYWx1ZSBq
c1Rlc3RPYmpJbnRBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3Qg
SWRlbnRpZmllciYpCi17Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8
SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7
Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmlt
cGwoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPmludEF0dHIoKSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi1KU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0cihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQotewot
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2Jq
ZWN0KHNsb3RCYXNlKSk7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwotICAgIFRlc3RPYmoqIGlt
cCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5sb25nTG9uZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotCi1KU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCi17Ci0gICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qo
c2xvdEJhc2UpKTsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7Ci0gICAgVGVzdE9iaiogaW1wID0g
c3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc051bWJlcihpbXAtPnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLQotSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCi17Ci0gICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJh
c2UpKTsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGlj
X2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSBqc1N0cmluZyhleGVjLCBpbXAtPnN0cmluZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotCi1KU1ZhbHVlIGpzVGVzdE9ialRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCi17Ci0gICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKLSAg
ICBVTlVTRURfUEFSQU0oZXhlYyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVz
dE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4
ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAtPnRlc3RPYmpB
dHRyKCkpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0KLUpTVmFsdWUganNUZXN0T2JqWE1M
T2JqQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZp
ZXImKQotewotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9i
aio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwotICAgIFRl
c3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgV1RGOjpnZXRQdHIoaW1wLT54bWxPYmpBdHRyKCkpKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi0KLUpTVmFsdWUganNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBz
bG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCi17Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKLSAgICBVTlVT
RURfUEFSQU0oZXhlYyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+
KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1w
LT5pc0NyZWF0ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0KLUpTVmFsdWUganNUZXN0
T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2Us
IGNvbnN0IElkZW50aWZpZXImKQotewotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRp
Y19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7Ci0gICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRU
aGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmcoZXhlYywgaW1wLT5n
ZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0cikp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLQotSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJ
bnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVu
dGlmaWVyJikKLXsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rl
c3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOwotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKLSAg
ICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgp
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+Z2V0SW50ZWdyYWxBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyKSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotCi1KU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVk
SW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRl
bnRpZmllciYpCi17Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNU
ZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7Ci0g
ICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwo
KSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihzdGQ6Om1heCgwLCBpbXAtPmdldElu
dGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRl
Z3JhbGF0dHJBdHRyKSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLQotSlNWYWx1ZSBqc1Rl
c3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJh
c2UsIGNvbnN0IElkZW50aWZpZXImKQotewotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0
YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7Ci0gICAgVU5VU0VEX1BB
UkFNKGV4ZWMpOwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0
ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcC0+aGFz
QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyKSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi1KU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVS
TEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVy
JikKLXsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoq
Pihhc09iamVjdChzbG90QmFzZSkpOwotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKLSAgICBUZXN0
T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nKGV4ZWMsIGltcC0+Z2V0VVJMQXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIpKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi0KLUpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkTm9uRW1wdHlVUkxBdHRyKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCi17Ci0g
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmpl
Y3Qoc2xvdEJhc2UpKTsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7Ci0gICAgVGVzdE9iaiogaW1w
ID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZyhleGVjLCBpbXAtPmdldE5vbkVtcHR5VVJMQXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkbm9uZW1wdHl1cmxhdHRyQXR0cikpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLQotSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRy
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCi17
Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNP
YmplY3Qoc2xvdEJhc2UpKTsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7Ci0gICAgVGVzdE9iaiog
aW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSBqc1N0cmluZyhleGVjLCBpbXAtPmdldEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0cikpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLQotSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKLXsK
LSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09i
amVjdChzbG90QmFzZSkpOwotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKLSAgICBUZXN0T2JqKiBp
bXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0cikpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLQotSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0
cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQot
ewotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFz
T2JqZWN0KHNsb3RCYXNlKSk7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwotICAgIFRlc3RPYmoq
IGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcC0+aGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0cikpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLQotSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCi17Ci0gICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xv
dEJhc2UpKTsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3Rh
dGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1N0cmluZyhleGVjLCBpbXAtPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0cikpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LQotSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Ob25FbXB0eVVSTEF0dHIoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKLXsKLSAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChz
bG90QmFzZSkpOwotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBz
dGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nKGV4ZWMsIGltcC0+Z2V0Tm9uRW1wdHlVUkxBdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Tm9uRW1wdHlVUkxBdHRyQXR0cikpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLQotSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXIm
KQotewotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+
KGFzT2JqZWN0KHNsb3RCYXNlKSk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgVGVz
dE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0g
ICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+YXR0cldpdGhHZXR0ZXJFeGNl
cHRpb24oZWMpKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLQotSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQotewot
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2Jq
ZWN0KHNsb3RCYXNlKSk7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwotICAgIFRlc3RPYmoqIGlt
cCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi0KLUpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJ
ZGVudGlmaWVyJikKLXsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxK
U1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5p
bXBsKCkpOwotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZyhleGVjLCBpbXAtPnN0
cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0KLUpTVmFsdWUganNUZXN0T2JqU3Ry
aW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RC
YXNlLCBjb25zdCBJZGVudGlmaWVyJikKLXsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBz
dGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOwotICAgIFVOVVNFRF9Q
QVJBTShleGVjKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2Fz
dGVkVGhpcy0+aW1wbCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nKGV4ZWMsIGlt
cC0+c3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotCi1KU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKLXsKLSAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOwotICAg
IHJldHVybiBjYXN0ZWRUaGlzLT5jdXN0b21BdHRyKGV4ZWMpOwotfQotCi0KLUpTVmFsdWUganNU
ZXN0T2JqU2NyaXB0U3RyaW5nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2Us
IGNvbnN0IElkZW50aWZpZXImKQotewotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRp
Y19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7Ci0gICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRU
aGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNPd25lZFN0cmluZ09yTnVsbChl
eGVjLCBpbXAtPnNjcmlwdFN0cmluZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCi1KU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjEoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikK
LXsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihh
c09iamVjdChzbG90QmFzZSkpOwotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKLSAgICBUZXN0T2Jq
KiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcC0+Y29uZGl0aW9uYWxBdHRyMSgpKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi0jZW5kaWYKLQotI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBF
TkFCTEUoQ29uZGl0aW9uMikKLUpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQotewotICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0
KHNsb3RCYXNlKSk7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwotICAgIFRlc3RPYmoqIGltcCA9
IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoaW1wLT5jb25kaXRpb25hbEF0dHIyKCkpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKQotSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCi17Ci0gICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJh
c2UpKTsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGlj
X2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihpbXAtPmNvbmRpdGlvbmFsQXR0cjMoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotI2VuZGlmCi0KLUpTVmFsdWUganNUZXN0T2JqRGVzY3JpcHRpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKLXsKLSAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFz
ZSkpOwotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNf
Y2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTnVtYmVyKGltcC0+ZGVzY3JpcHRpb24oKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
Ci1KU1ZhbHVlIGpzVGVzdE9iaklkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwg
Y29uc3QgSWRlbnRpZmllciYpCi17Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKLSAgICBVTlVTRURfUEFSQU0o
ZXhlYyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRo
aXMtPmltcGwoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAtPmlkKCkpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLQotSlNWYWx1ZSBqc1Rlc3RPYmpIYXNoKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCi17Ci0gICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xv
dEJhc2UpKTsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3Rh
dGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1N0cmluZyhleGVjLCBpbXAtPmhhc2goKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotCi1KU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCi17Ci0gICAgSlNUZXN0T2JqKiBkb21PYmpl
Y3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOwotICAgIHJl
dHVybiBKU1Rlc3RPYmo6OmdldENvbnN0cnVjdG9yKGV4ZWMsIGRvbU9iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCkpOwotfQotCi12b2lkIEpTVGVzdE9iajo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCi17Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzLCAmc19pbmZvKTsK
LSAgICBsb29rdXBQdXQ8SlNUZXN0T2JqLCBCYXNlPihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCAmSlNUZXN0T2JqVGFibGUsIHRoaXMsIHNsb3QpOwotfQotCi12b2lkIHNldEpTVGVzdE9ialNo
b3J0QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQotewotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9i
aio+KHRoaXNPYmplY3QpOwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIGltcC0+c2V0U2hvcnRBdHRyKHZhbHVlLnRvSW50
MzIoZXhlYykpOwotfQotCi0KLXZvaWQgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPih0aGlzT2Jq
ZWN0KTsKLSAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKLSAgICBpbXAtPnNldFVuc2lnbmVkU2hvcnRBdHRyKHZhbHVlLnRvVUludDMy
KGV4ZWMpKTsKLX0KLQotCi12b2lkIHNldEpTVGVzdE9iakludEF0dHIoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsKLSAgICBU
ZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsK
LSAgICBpbXAtPnNldEludEF0dHIodmFsdWUudG9JbnQzMihleGVjKSk7Ci19Ci0KLQotdm9pZCBz
ZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0
aWNfY2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsKLSAgICBUZXN0T2JqKiBpbXAgPSBzdGF0
aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBpbXAtPnNldExvbmdM
b25nQXR0cihzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHZhbHVlLnRvSW50ZWdlcihleGVjKSkpOwot
fQotCi0KLXZvaWQgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsKLSAg
ICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgp
KTsKLSAgICBpbXAtPnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmcgbG9uZz4odmFsdWUudG9JbnRlZ2VyKGV4ZWMpKSk7Ci19Ci0KLQotdm9pZCBzZXRKU1Rl
c3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8
SlNUZXN0T2JqKj4odGhpc09iamVjdCk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8
VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgaW1wLT5zZXRTdHJpbmdBdHRyKHVz
dHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSkpOwotfQotCi0KLXZvaWQgc2V0SlNU
ZXN0T2JqVGVzdE9iakF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsKLSAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2Fz
dDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBpbXAtPnNldFRlc3RPYmpBdHRy
KHRvVGVzdE9iaih2YWx1ZSkpOwotfQotCi0KLXZvaWQgc2V0SlNUZXN0T2JqWE1MT2JqQXR0cihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewot
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KHRoaXNP
YmplY3QpOwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRU
aGlzLT5pbXBsKCkpOwotICAgIGltcC0+c2V0WE1MT2JqQXR0cih0b1Rlc3RPYmoodmFsdWUpKTsK
LX0KLQotCi12b2lkIHNldEpTVGVzdE9iakNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOwotICAgIFRlc3RPYmoqIGlt
cCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIGltcC0+
c2V0Q3JlYXRlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7Ci19Ci0KLQotdm9pZCBzZXRKU1Rlc3RP
YmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGlj
X2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgaW1wLT5zZXRBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0ciwgdmFsdWVUb1N0
cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpKTsKLX0KLQotCi12b2lkIHNldEpTVGVzdE9i
alJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRp
Y19jYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRp
Y19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIGltcC0+c2V0SW50ZWdy
YWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRy
LCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKLX0KLQotCi12b2lkIHNldEpTVGVzdE9ialJlZmxlY3Rl
ZFVuc2lnbmVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGlj
X2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgaW1wLT5zZXRVbnNpZ25l
ZEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRp
bnRlZ3JhbGF0dHJBdHRyLCB2YWx1ZS50b1VJbnQzMihleGVjKSk7Ci19Ci0KLQotdm9pZCBzZXRK
U1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOwotICAgIFRlc3RPYmoqIGltcCA9
IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIGltcC0+c2V0
Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRy
QXR0ciwgdmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKLX0KLQotCi12b2lkIHNldEpTVGVzdE9ialJl
ZmxlY3RlZFVSTEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxK
U1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsKLSAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxU
ZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBpbXAtPnNldEF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyLCB2YWx1ZVRvU3RyaW5nV2l0aE51
bGxDaGVjayhleGVjLCB2YWx1ZSkpOwotfQotCi0KLXZvaWQgc2V0SlNUZXN0T2JqUmVmbGVjdGVk
Tm9uRW1wdHlVUkxBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8
SlNUZXN0T2JqKj4odGhpc09iamVjdCk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8
VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgaW1wLT5zZXRBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRub25lbXB0eXVybGF0dHJBdHRyLCB2YWx1ZVRvU3Ry
aW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSkpOwotfQotCi0KLXZvaWQgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19j
YXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19j
YXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIGltcC0+c2V0QXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyLCB2YWx1ZVRv
U3RyaW5nV2l0aE51bGxDaGVjayhleGVjLCB2YWx1ZSkpOwotfQotCi0KLXZvaWQgc2V0SlNUZXN0
T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCk7Ci0gICAgVGVzdE9iaiogaW1w
ID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgaW1wLT5z
ZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRl
Z3JhbEF0dHJBdHRyLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKLX0KLQotCi12b2lkIHNldEpTVGVz
dE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCk7Ci0gICAgVGVzdE9iaiogaW1w
ID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgaW1wLT5z
ZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xl
YW5BdHRyQXR0ciwgdmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKLX0KLQotCi12b2lkIHNldEpTVGVz
dE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBz
dGF0aWNfY2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsKLSAgICBUZXN0T2JqKiBpbXAgPSBz
dGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBpbXAtPnNldEF0
dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0ciwgdmFs
dWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywgdmFsdWUpKTsKLX0KLQotCi12b2lkIHNldEpT
VGVzdE9ialJlZmxlY3RlZEN1c3RvbU5vbkVtcHR5VVJMQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOwotICAgIFRlc3RP
YmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAg
IGltcC0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudE5vbkVt
cHR5VVJMQXR0ckF0dHIsIHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIHZhbHVlKSk7
Ci19Ci0KLQotdm9pZCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3Qp
OwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5p
bXBsKCkpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcC0+c2V0QXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24odmFsdWUudG9JbnQzMihleGVjKSwgZWMpOwotICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7Ci19Ci0KLQotdm9pZCBzZXRKU1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQotewotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9i
aio+KHRoaXNPYmplY3QpOwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlt
cC0+c2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24odmFsdWUudG9JbnQzMihleGVjKSwgZWMpOwot
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci19Ci0KLQotdm9pZCBzZXRKU1Rlc3RPYmpT
dHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOwotICAgIFRlc3RPYmoqIGltcCA9
IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGltcC0+c2V0U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24o
dXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKSwgZWMpOwotICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBlYyk7Ci19Ci0KLQotdm9pZCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0
aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlKQotewotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0
PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0
PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIGltcC0+c2V0U3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24odXN0cmluZ1RvU3Ry
aW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKSwgZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7Ci19Ci0KLQotdm9pZCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRyKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgc3RhdGljX2Nh
c3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCktPnNldEN1c3RvbUF0dHIoZXhlYywgdmFsdWUpOwot
fQotCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLXZvaWQgc2V0SlNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyMShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQotewotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9i
aio+KHRoaXNPYmplY3QpOwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIGltcC0+c2V0Q29uZGl0aW9uYWxBdHRyMSh2YWx1
ZS50b0ludDMyKGV4ZWMpKTsKLX0KLQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkg
JiYgRU5BQkxFKENvbmRpdGlvbjIpCi12b2lkIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPih0aGlz
T2JqZWN0KTsKLSAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVk
VGhpcy0+aW1wbCgpKTsKLSAgICBpbXAtPnNldENvbmRpdGlvbmFsQXR0cjIodmFsdWUudG9JbnQz
MihleGVjKSk7Ci19Ci0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJM
RShDb25kaXRpb24yKQotdm9pZCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCk7
Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmlt
cGwoKSk7Ci0gICAgaW1wLT5zZXRDb25kaXRpb25hbEF0dHIzKHZhbHVlLnRvSW50MzIoZXhlYykp
OwotfQotCi0jZW5kaWYKLQotdm9pZCBzZXRKU1Rlc3RPYmpJZChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOwotICAgIFRlc3RP
YmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAg
IGltcC0+c2V0SWQodmFsdWUudG9JbnQzMihleGVjKSk7Ci19Ci0KLQotSlNWYWx1ZSBKU1Rlc3RP
Ymo6OmdldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0T2JqQ29uc3Ry
dWN0b3I+KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Wb2lkTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0
cygmSlNUZXN0T2JqOjpzX2luZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoq
Pihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGlj
X2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0KLSAgICBpbXAtPnZvaWRNZXRo
b2QoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9p
ZE1ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygm
SlNUZXN0T2JqOjpzX2luZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
KTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihh
c09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nh
c3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgaW50IGludEFyZyhleGVjLT5h
cmd1bWVudCgwKS50b0ludDMyKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgY29u
c3QgU3RyaW5nJiBzdHJBcmcodXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3Ry
aW5nKGV4ZWMpKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFRlc3RPYmoqIG9iakFyZyh0
b1Rlc3RPYmooZXhlYy0+YXJndW1lbnQoMikpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAg
ICBpbXAtPnZvaWRNZXRob2RXaXRoQXJncyhpbnRBcmcsIHN0ckFyZywgb2JqQXJnKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW50TWV0aG9kKEV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFs
dWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQot
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsK
LSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNf
aW5mbyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRo
aXMtPmltcGwoKSk7Ci0KLQotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXAt
PmludE1ldGhvZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci19Ci0K
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25J
bnRNZXRob2RXaXRoQXJncyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMo
JkpTVGVzdE9iajo6c19pbmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4o
YXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19j
YXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIGludCBpbnRBcmcoZXhlYy0+
YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGNv
bnN0IFN0cmluZyYgc3RyQXJnKHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0
cmluZyhleGVjKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBUZXN0T2JqKiBvYmpBcmco
dG9UZXN0T2JqKGV4ZWMtPmFyZ3VtZW50KDIpKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCi0K
LSAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5pbnRNZXRob2RXaXRoQXJn
cyhpbnRBcmcsIHN0ckFyZywgb2JqQXJnKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT2JqTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhl
cml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RP
YmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3Rh
dGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0KLQotICAgIEpTQzo6SlNW
YWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6
OmdldFB0cihpbXAtPm9iak1ldGhvZCgpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT2JqTWV0aG9kV2l0aEFyZ3MoRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1Zh
bHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0
PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKLSAgICBUZXN0T2JqKiBp
bXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBpbnQg
aW50QXJnKGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYykpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKLSAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJn
dW1lbnQoMSkudG9TdHJpbmcoZXhlYykpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVGVz
dE9iaiogb2JqQXJnKHRvVGVzdE9iaihleGVjLT5hcmd1bWVudCgyKSkpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLQotCi0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcC0+b2JqTWV0aG9kV2l0aEFyZ3Mo
aW50QXJnLCBzdHJBcmcsIG9iakFyZykpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzKEV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAo
IXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQotICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0
aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7Ci0gICAgVGVz
dE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0g
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgY29uc3QgU3RyaW5nJiBzdHJBcmcodXN0cmlu
Z1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwotICAgIFRlc3RPYmoqIG9iakFyZyh0b1Rlc3RPYmooZXhlYy0+YXJndW1lbnQo
MSkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLQotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQg
PSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXAt
Pm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3Moc3RyQXJnLCBvYmpBcmcpKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0Fu
ZFRocm93cyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9i
ajo6c19pbmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qo
dGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAm
SlNUZXN0T2JqOjpzX2luZm8pOwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RP
YmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PCAyKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9y
KGV4ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBjb25zdCBTdHJpbmcmIHN0ckFyZyh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYykpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgVGVzdE9i
aiogb2JqQXJnKHRvVGVzdE9iaihleGVjLT5hcmd1bWVudCgxKSkpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKLQotCi0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcC0+bWV0aG9kVGhhdFJlcXVpcmVzQWxs
QXJnc0FuZFRocm93cyhzdHJBcmcsIG9iakFyZywgZWMpKSk7Ci0gICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci19Ci0KLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJp
YWxpemVkVmFsdWUoRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rl
c3RPYmo6OnNfaW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwot
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2Jq
ZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgJkpTVGVzdE9iajo6c19pbmZvKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxU
ZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBzZXJpYWxpemVkQXJnKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgaW1wLT5z
ZXJpYWxpemVkVmFsdWUoc2VyaWFsaXplZEFyZyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbklkYktleShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFs
dWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYyk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8
SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwotICAgIFRlc3RPYmoqIGlt
cCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIFJlZlB0
cjxJREJLZXk+IGtleShjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQo
MCkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBpbXAtPmlkYktleShrZXkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLUVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRpb25zT2JqZWN0
KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RU
aGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2lu
Zm8pKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFs
dWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RP
Ymo6OnNfaW5mbyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgT3B0aW9uc09iamVjdCogb28odG9PcHRpb25zT2JqZWN0
KGV4ZWMtPmFyZ3VtZW50KDApKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgc2l6ZV90
IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKLSAgICBpZiAoYXJnc0NvdW50IDw9
IDEpIHsKLSAgICAgICAgaW1wLT5vcHRpb25zT2JqZWN0KG9vKTsKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICB9Ci0KLSAgICBPcHRpb25zT2JqZWN0
KiBvb28odG9PcHRpb25zT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDEpKSk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotCi0gICAgaW1wLT5vcHRpb25zT2JqZWN0KG9vLCBvb28pOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8p
KQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUp
KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6
OnNfaW5mbyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3Rl
ZFRoaXMtPmltcGwoKSk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0KLSAgICBpbXAtPm1l
dGhvZFdpdGhFeGNlcHRpb24oZWMpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLX0KLQotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhv
ZChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19p
bmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1Zh
bHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0
T2JqOjpzX2luZm8pOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3Vz
dG9tTWV0aG9kKGV4ZWMpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKEV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAg
ICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5jdXN0b21NZXRob2RXaXRoQXJn
cyhleGVjKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25DdXN0b21BcmdzQW5kRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAo
IXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQotICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0
aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7Ci0gICAgVGVz
dE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gc2Ny
aXB0QXJndW1lbnRzKGNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhleGVjLCAxKSk7Ci0gICAgc2l6ZV90
IG1heFN0YWNrU2l6ZSA9IGltcC0+c2hvdWxkQ2FwdHVyZUZ1bGxTdGFja1RyYWNlKCkgPyBTY3Jp
cHRDYWxsU3RhY2s6Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUgOiAxOwotICAgIFJlZlB0cjxT
Y3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhjcmVhdGVTY3JpcHRDYWxsU3RhY2soZXhlYywgbWF4
U3RhY2tTaXplKSk7Ci0gICAgbG9nKiBpbnRBcmcodG9sb2coZXhlYy0+YXJndW1lbnQoMCkpKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBpbXAtPmN1c3RvbUFyZ3NBbmRFeGNlcHRpb24o
aW50QXJnLCBzY3JpcHRBcmd1bWVudHMsIGNhbGxTdGFjaywgZWMpOwotICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmlu
aGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVz
dE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBz
dGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBKU1ZhbHVlIGxp
c3RlbmVyID0gZXhlYy0+YXJndW1lbnQoMSk7Ci0gICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGlt
cC0+YWRkRXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0
ZW5lciksIGNhc3RlZFRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBleGVjLT5hcmd1
bWVudCgyKS50b0Jvb2xlYW4oZXhlYykpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAo
IXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQotICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0
aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7Ci0gICAgVGVz
dE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0g
ICAgSlNWYWx1ZSBsaXN0ZW5lciA9IGV4ZWMtPmFyZ3VtZW50KDEpOwotICAgIGlmICghbGlzdGVu
ZXIuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKLSAgICBpbXAtPnJlbW92ZUV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3RyaW5n
KGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgSlNFdmVudExpc3RlbmVyOjpjcmVh
dGUoYXNPYmplY3QobGlzdGVuZXIpLCBjYXN0ZWRUaGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4
ZWMpKS5nZXQoKSwgZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aER5bmFtaWNGcmFtZShF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZv
KSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVl
KSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2Jq
OjpzX2luZm8pOwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0
ZWRUaGlzLT5pbXBsKCkpOwotICAgIEZyYW1lKiBkeW5hbWljRnJhbWUgPSB0b0R5bmFtaWNGcmFt
ZShleGVjKTsKLSAgICBpZiAoIWR5bmFtaWNGcmFtZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQotICAgIGltcC0+d2l0aER5bmFtaWNGcmFtZShkeW5h
bWljRnJhbWUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19
Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoRHluYW1pY0ZyYW1lQW5kQXJnKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5p
bmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rl
c3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7Ci0gICAgVGVzdE9iaiogaW1wID0g
c3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgRnJhbWUqIGR5
bmFtaWNGcmFtZSA9IHRvRHluYW1pY0ZyYW1lKGV4ZWMpOwotICAgIGlmICghZHluYW1pY0ZyYW1l
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGlu
dCBpbnRBcmcoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotCi0gICAgaW1wLT53aXRoRHluYW1pY0ZyYW1lQW5kQXJnKGR5bmFtaWNGcmFtZSwg
aW50QXJnKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQot
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
V2l0aER5bmFtaWNGcmFtZUFuZE9wdGlvbmFsQXJnKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNW
YWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7Ci0gICAgVGVzdE9iaiog
aW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgRnJh
bWUqIGR5bmFtaWNGcmFtZSA9IHRvRHluYW1pY0ZyYW1lKGV4ZWMpOwotICAgIGlmICghZHluYW1p
Y0ZyYW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwot
ICAgIGludCBpbnRBcmcoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwotCi0gICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291
bnQoKTsKLSAgICBpZiAoYXJnc0NvdW50IDw9IDEpIHsKLSAgICAgICAgaW1wLT53aXRoRHluYW1p
Y0ZyYW1lQW5kT3B0aW9uYWxBcmcoZHluYW1pY0ZyYW1lLCBpbnRBcmcpOwotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIH0KLQotICAgIGludCBvcHRp
b25hbEFyZyhleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Ci0KLSAgICBpbXAtPndpdGhEeW5hbWljRnJhbWVBbmRPcHRpb25hbEFyZyhkeW5hbWlj
RnJhbWUsIGludEFyZywgb3B0aW9uYWxBcmcpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmUoRXhlY1N0
YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1
ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCi0g
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwot
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19p
bmZvKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKLSAgICBGcmFtZSogZHluYW1pY0ZyYW1lID0gdG9EeW5hbWljRnJhbWUoZXhl
Yyk7Ci0gICAgaWYgKCFkeW5hbWljRnJhbWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW50IGludEFyZyhleGVjLT5hcmd1bWVudCgwKS50b0lu
dDMyKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBpbXAtPndpdGhEeW5hbWlj
RnJhbWVBbmRVc2VyR2VzdHVyZShkeW5hbWljRnJhbWUsIGludEFyZywgcHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19
Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmVBU0FEKEV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAo
IXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQotICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0
aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7Ci0gICAgVGVz
dE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0g
ICAgRnJhbWUqIGR5bmFtaWNGcmFtZSA9IHRvRHluYW1pY0ZyYW1lKGV4ZWMpOwotICAgIGlmICgh
ZHluYW1pY0ZyYW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotICAgIGludCBpbnRBcmcoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKTsKLSAgICBpZiAoYXJnc0NvdW50IDw9IDEpIHsKLSAgICAgICAgaW1wLT53aXRo
RHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmVBU0FEKGR5bmFtaWNGcmFtZSwgaW50QXJnKTsKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICB9Ci0KLSAg
ICBpbnQgb3B0aW9uYWxBcmcoZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwotCi0gICAgaW1wLT53aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1
cmVBU0FEKGR5bmFtaWNGcmFtZSwgaW50QXJnLCBvcHRpb25hbEFyZywgcHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19
Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoU2NyaXB0U3RhdGVWb2lkKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhl
cml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RP
YmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3Rh
dGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0KLSAgICBpbXAtPndpdGhT
Y3JpcHRTdGF0ZVZvaWQoZXhlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9iaihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlz
VmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nh
c3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwotICAgIFRlc3RPYmoq
IGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotCi0KLSAg
ICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgV1RGOjpnZXRQdHIoaW1wLT53aXRoU2NyaXB0U3RhdGVPYmooZXhlYykpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotfQot
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
V2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFs
dWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYyk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8
SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwotICAgIFRlc3RPYmoqIGlt
cCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotCi0gICAgaW1wLT53aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpFeGNl
cHRpb24oRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6
OnNfaW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRo
aXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpT
VGVzdE9iajo6c19pbmZvKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2Jq
Kj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLQotCi0g
ICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIFdURjo6Z2V0UHRyKGltcC0+d2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKGV4ZWMs
IGVjKSkpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KLQotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygm
SlNUZXN0T2JqOjpzX2luZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
KTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihh
c09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nh
c3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0Q29udGV4dCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAg
IGlmICghc2NyaXB0Q29udGV4dCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLQotICAgIGltcC0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoc2NyaXB0
Q29udGV4dCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLX0K
LQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbEFyZyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSB0
aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5o
ZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYyk7Ci0gICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0
T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
UyhjYXN0ZWRUaGlzLCAmSlNUZXN0T2JqOjpzX2luZm8pOwotICAgIFRlc3RPYmoqIGltcCA9IHN0
YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotCi0gICAgc2l6ZV90IGFy
Z3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKLSAgICBpZiAoYXJnc0NvdW50IDw9IDAp
IHsKLSAgICAgICAgaW1wLT5tZXRob2RXaXRoT3B0aW9uYWxBcmcoKTsKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICB9Ci0KLSAgICBpbnQgb3B0KGV4
ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQot
ICAgIGltcC0+bWV0aG9kV2l0aE9wdGlvbmFsQXJnKG9wdCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9w
dGlvbmFsQXJnKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0
T2JqOjpzX2luZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVj
dCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMs
ICZKU1Rlc3RPYmo6OnNfaW5mbyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVz
dE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgaW50IG5vbk9wdChleGVjLT5hcmd1bWVu
dCgwKS50b0ludDMyKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBzaXplX3Qg
YXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwotICAgIGlmIChhcmdzQ291bnQgPD0g
MSkgewotICAgICAgICBpbXAtPm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJn
KG5vbk9wdCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgfQotCi0gICAgaW50IG9wdChleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBpbXAtPm1ldGhvZFdpdGhOb25PcHRpb25hbEFy
Z0FuZE9wdGlvbmFsQXJnKG5vbk9wdCwgb3B0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9u
YWxBcmdzKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2Jq
OjpzX2luZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0
aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZK
U1Rlc3RPYmo6OnNfaW5mbyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9i
aio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgaW50IG5vbk9wdChleGVjLT5hcmd1bWVudCgw
KS50b0ludDMyKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBzaXplX3QgYXJn
c0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOwotICAgIGlmIChhcmdzQ291bnQgPD0gMSkg
ewotICAgICAgICBpbXAtPm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJn
cyhub25PcHQpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwotICAgIH0KLQotICAgIGludCBvcHQxKGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYykp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbnQgb3B0MihleGVjLT5hcmd1bWVudCgyKS50
b0ludDMyKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBpbXAtPm1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhub25PcHQsIG9wdDEsIG9wdDIpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
Q2FsbGJhY2tBcmcoRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rl
c3RPYmo6OnNfaW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwot
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2Jq
ZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgJkpTVGVzdE9iajo6c19pbmZvKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxU
ZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDw9IDAgfHwgIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICB9Ci0gICAgUmVmUHRyPFRlc3RDYWxs
YmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFy
Z3VtZW50KDApKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOwotCi0gICAgaW1wLT5tZXRo
b2RXaXRoQ2FsbGJhY2tBcmcoY2FsbGJhY2spOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Fy
ZyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19p
bmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1Zh
bHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0
T2JqOjpzX2luZm8pOwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihj
YXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIGludCBub25DYWxsYmFjayhleGVjLT5hcmd1bWVudCgw
KS50b0ludDMyKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA8PSAxIHx8ICFleGVjLT5hcmd1bWVudCgxKS5pc09iamVjdCgpKSB7Ci0g
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7Ci0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgfQotICAgIFJlZlB0
cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVj
dChleGVjLT5hcmd1bWVudCgxKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKLQotICAg
IGltcC0+bWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmcobm9uQ2FsbGJhY2ss
IGNhbGxiYWNrKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwot
fQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcoRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICgh
dGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCi0gICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRp
Y19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKLSAgICBUZXN0
T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAg
ICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjazsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpID4gMCAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkgewot
ICAgICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7Ci0gICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICB9Ci0gICAgICAg
IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVu
dCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKLSAgICB9Ci0KLSAgICBpbXAtPm1l
dGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKGNhbGxiYWNrKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Qx
KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RU
aGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2lu
Zm8pKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFs
dWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RP
Ymo6OnNfaW5mbyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgVGVzdE9iaiogb2JqQXJnKHRvVGVzdE9iaihleGVjLT5h
cmd1bWVudCgwKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBjb25zdCBTdHJpbmcmIHN0
ckFyZyh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYykpKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qob2JqQXJn
LCBzdHJBcmcpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19
Ci0KLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVl
LmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpT
VGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKLSAgICBUZXN0T2JqKiBpbXAg
PSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBUZXN0T2Jq
KiBvYmpBcmcodG9UZXN0T2JqKGV4ZWMtPmFyZ3VtZW50KDApKSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotCi0gICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKLSAg
ICBpZiAoYXJnc0NvdW50IDw9IDEpIHsKLSAgICAgICAgaW1wLT5vdmVybG9hZGVkTWV0aG9kKG9i
akFyZyk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0g
ICAgfQotCi0gICAgaW50IGludEFyZyhleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qob2JqQXJn
LCBpbnRBcmcpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19
Ci0KLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDMoRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc1ZhbHVl
LmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOwotICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpT
VGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKLSAgICBUZXN0T2JqKiBpbXAg
PSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBjb25zdCBT
dHJpbmcmIHN0ckFyZyh1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYykpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBpbXAtPm92ZXJsb2FkZWRNZXRo
b2Qoc3RyQXJnKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwot
fQotCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1
ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTsKLSAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxK
U1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7Ci0gICAgVGVzdE9iaiogaW1w
ID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgaW50IGlu
dEFyZyhleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci0KLSAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2QoaW50QXJnKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q1
KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RU
aGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2lu
Zm8pKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFs
dWUpKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RP
Ymo6OnNfaW5mbyk7Ci0gICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSAwIHx8
ICFleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBUWVBFX01JU01BVENIX0VSUik7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgfQotICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxi
YWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSks
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKLQotICAgIGltcC0+b3ZlcmxvYWRlZE1ldGhv
ZChjYWxsYmFjayk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
LX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2QoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHNpemVfdCBhcmdz
Q291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7Ci0gICAgSlNWYWx1ZSBhcmcxKGV4ZWMtPmFy
Z3VtZW50KDEpKTsKLSAgICBKU1ZhbHVlIGFyZzAoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlm
ICgoYXJnc0NvdW50ID09IDIgJiYgKGFyZzAuaXNOdWxsKCkgfHwgKGFyZzAuaXNPYmplY3QoKSAm
JiBhc09iamVjdChhcmcwKS0+aW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkpICYmIChhcmcx
LmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgYXJnMS5pc1N0cmluZygpIHx8IGFyZzEuaXNPYmplY3Qo
KSkpKQotICAgICAgICByZXR1cm4ganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kMShleGVjKTsKLSAgICBpZiAoKGFyZ3NDb3VudCA9PSAxICYmIChhcmcwLmlzTnVsbCgp
IHx8IChhcmcwLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoYXJnMCktPmluaGVyaXRzKCZKU1Rlc3RP
Ymo6OnNfaW5mbykpKSkgfHwgKGFyZ3NDb3VudCA9PSAyICYmIChhcmcwLmlzTnVsbCgpIHx8IChh
cmcwLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoYXJnMCktPmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNf
aW5mbykpKSkpCi0gICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2QyKGV4ZWMpOwotICAgIGlmICgoYXJnc0NvdW50ID09IDEgJiYgKGFyZzAuaXNV
bmRlZmluZWRPck51bGwoKSB8fCBhcmcwLmlzU3RyaW5nKCkgfHwgYXJnMC5pc09iamVjdCgpKSkp
Ci0gICAgICAgIHJldHVybiBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2QzKGV4ZWMpOwotICAgIGlmIChhcmdzQ291bnQgPT0gMSkKLSAgICAgICAgcmV0dXJuIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDQoZXhlYyk7Ci0gICAgaWYgKChh
cmdzQ291bnQgPT0gMSAmJiAoYXJnMC5pc051bGwoKSB8fCBhcmcwLmlzT2JqZWN0KCkpKSkKLSAg
ICAgICAgcmV0dXJuIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDUo
ZXhlYyk7Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci19Ci0KLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhv
ZChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19p
bmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1Zh
bHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0
T2JqOjpzX2luZm8pOwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihj
YXN0ZWRUaGlzLT5pbXBsKCkpOwotCi0gICAgaW1wLT5jbGFzc01ldGhvZCgpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRp
b25hbChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5o
b3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6
c19pbmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhp
c1ZhbHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNU
ZXN0T2JqOjpzX2luZm8pOwotICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotCi0gICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4ZWMtPmFy
Z3VtZW50Q291bnQoKTsKLSAgICBpZiAoYXJnc0NvdW50IDw9IDApIHsKLQotICAgICAgICBKU0M6
OkpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5jbGFzc01ldGhvZFdpdGhPcHRpb25hbCgp
KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAgIH0KLQotICAg
IGludCBhcmcoZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKSk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotCi0KLSAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wLT5jbGFz
c01ldGhvZFdpdGhPcHRpb25hbChhcmcpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7Ci19Ci0KLS8vIENvbnN0YW50IGdldHRlcnMKLQotSlNWYWx1ZSBqc1Rlc3RPYmpDT05T
VF9WQUxVRV8wKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwotICAgIHJldHVybiBqc051bWJlcihzdGF0aWNfY2Fz
dDxpbnQ+KDApKTsKLX0KLQotSlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV8xKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOwotICAgIHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQ+KDEpKTsKLX0KLQot
SlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV8yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwg
Y29uc3QgSWRlbnRpZmllciYpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwotICAgIHJldHVy
biBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQ+KDIpKTsKLX0KLQotSlNWYWx1ZSBqc1Rlc3RPYmpD
T05TVF9WQUxVRV80KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwotICAgIHJldHVybiBqc051bWJlcihzdGF0aWNf
Y2FzdDxpbnQ+KDQpKTsKLX0KLQotSlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV84KEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGV4ZWMpOwotICAgIHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQ+KDgpKTsKLX0K
LQotSlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV85KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSwgY29uc3QgSWRlbnRpZmllciYpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwotICAgIHJl
dHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQ+KC0xKSk7Ci19Ci0KLUpTVmFsdWUganNUZXN0
T2JqQ09OU1RfVkFMVUVfMTAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlm
aWVyJikKLXsKLSAgICByZXR1cm4ganNTdHJpbmdPck51bGwoZXhlYywgU3RyaW5nKCJteSBjb25z
dGFudCBzdHJpbmciKSk7Ci19Ci0KLUpTVmFsdWUganNUZXN0T2JqQ09OU1RfVkFMVUVfMTEoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJikKLXsKLSAgICBVTlVTRURf
UEFSQU0oZXhlYyk7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRpY19jYXN0PGludD4oMHhmZmZm
ZmZmZikpOwotfQotCi1KU1ZhbHVlIGpzVGVzdE9iakNPTlNUX1ZBTFVFXzEyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGV4
ZWMpOwotICAgIHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQ+KDB4MDEpKTsKLX0KLQot
SlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV8xMyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUs
IGNvbnN0IElkZW50aWZpZXImKQotewotICAgIFVOVVNFRF9QQVJBTShleGVjKTsKLSAgICByZXR1
cm4ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50PigwWDIwKSk7Ci19Ci0KLUpTVmFsdWUganNUZXN0
T2JqQ09OU1RfVkFMVUVfMTQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlm
aWVyJikKLXsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7Ci0gICAgcmV0dXJuIGpzTnVtYmVyKHN0
YXRpY19jYXN0PGludD4oMHgxYWJjKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0T2JqKiBp
bXBsKQotewotICAgIHJldHVybiB3cmFwPEpTVGVzdE9iaj4oZXhlYywgZ2xvYmFsT2JqZWN0LCBp
bXBsKTsKLX0KLQotVGVzdE9iaiogdG9UZXN0T2JqKEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gdmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSA/IHN0YXRpY19jYXN0
PEpTVGVzdE9iaio+KGFzT2JqZWN0KHZhbHVlKSktPmltcGwoKSA6IDA7Ci19Ci0KLX0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmgJKHJldmlzaW9uIDg5MTQyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwNSArMCwwIEBACi0v
KgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgSlNUZXN0T2JqX2gKLSNkZWZpbmUgSlNU
ZXN0T2JqX2gKLQotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0V2l0aEdsb2JhbE9i
amVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgVGVzdE9iajsKLQotY2xhc3MgSlNUZXN0T2JqIDogcHVibGlj
IEpTRE9NV3JhcHBlciB7Ci0gICAgdHlwZWRlZiBKU0RPTVdyYXBwZXIgQmFzZTsKLXB1YmxpYzoK
LSAgICBKU1Rlc3RPYmooSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NS
ZWZQdHI8VGVzdE9iaj4pOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5
cGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0gICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHZpcnR1YWwgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcHV0KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICBz
dGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotCi0gICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCwgJnNfaW5mbyk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLQotICAgIC8vIEN1c3RvbSBhdHRyaWJ1dGVz
Ci0gICAgSlNDOjpKU1ZhbHVlIGN1c3RvbUF0dHIoSlNDOjpFeGVjU3RhdGUqKSBjb25zdDsKLSAg
ICB2b2lkIHNldEN1c3RvbUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOwotCi0g
ICAgLy8gQ3VzdG9tIGZ1bmN0aW9ucwotICAgIEpTQzo6SlNWYWx1ZSBjdXN0b21NZXRob2QoSlND
OjpFeGVjU3RhdGUqKTsKLSAgICBKU0M6OkpTVmFsdWUgY3VzdG9tTWV0aG9kV2l0aEFyZ3MoSlND
OjpFeGVjU3RhdGUqKTsKLSAgICBUZXN0T2JqKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBs
LmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFRlc3RPYmo+IG1faW1wbDsKLXByb3Rl
Y3RlZDoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwotfTsKLQot
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRl
c3RPYmoqKTsKLVRlc3RPYmoqIHRvVGVzdE9iaihKU0M6OkpTVmFsdWUpOwotCi1jbGFzcyBKU1Rl
c3RPYmpQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU09iamVjdFdpdGhHbG9iYWxPYmplY3Qgewot
ICAgIHR5cGVkZWYgSlNDOjpKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgQmFzZTsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNH
bG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHZpcnR1YWwgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQsICZzX2luZm8pOwot
ICAgIH0KLSAgICBKU1Rlc3RPYmpQcm90b3R5cGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkgOiBKU0M6OkpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdChnbG9iYWxEYXRhLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSkgeyB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKLX07Ci0KLS8vIEZ1bmN0aW9ucwotCi1KU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0
aG9kKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFyZ3MoSlNDOjpFeGVjU3Rh
dGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkludE1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSW50TWV0aG9kV2l0aEFy
Z3MoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T2JqTWV0aG9kV2l0aEFyZ3MoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJl
c0FsbEFyZ3MoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NB
bmRUaHJvd3MoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uSWRiS2V5KEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRpb25zT2JqZWN0KEpT
Qzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25DdXN0b21NZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhB
cmdzKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21BcmdzQW5kRXhjZXB0aW9uKEpTQzo6RXhl
Y1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25SZW1v
dmVFdmVudExpc3RlbmVyKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1pY0ZyYW1lKEpT
Qzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRHluYW1pY0ZyYW1lQW5kQXJnKEpTQzo6RXhlY1N0YXRl
Kik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25XaXRoRHluYW1pY0ZyYW1lQW5kT3B0aW9uYWxBcmcoSlNDOjpFeGVjU3RhdGUqKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbldpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZShKU0M6OkV4ZWNTdGF0ZSopOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
V2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlQVNBRChKU0M6OkV4ZWNTdGF0ZSopOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
V2l0aFNjcmlwdFN0YXRlVm9pZChKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRl
T2JqKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKEpT
Qzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oSlNDOjpFeGVj
U3RhdGUqKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0KEpTQzo6RXhlY1N0YXRlKik7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoSlNDOjpFeGVjU3RhdGUqKTsK
LUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyhKU0M6OkV4ZWNTdGF0ZSopOwotSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmcoSlNDOjpFeGVjU3RhdGUqKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZChKU0M6OkV4ZWNTdGF0
ZSopOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoSlNDOjpFeGVjU3RhdGUqKTsKLS8vIEF0
dHJpYnV0ZXMKLQotSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5SW50QXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci1KU0M6OkpT
VmFsdWUganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLUpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpS
ZWFkT25seVRlc3RPYmpBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBK
U0M6OklkZW50aWZpZXImKTsKLUpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwotdm9pZCBz
ZXRKU1Rlc3RPYmpTaG9ydEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlND
OjpKU1ZhbHVlKTsKLUpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci12b2lk
IHNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09i
amVjdCosIEpTQzo6SlNWYWx1ZSk7Ci1KU0M6OkpTVmFsdWUganNUZXN0T2JqSW50QXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci12b2lk
IHNldEpTVGVzdE9iakludEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlND
OjpKU1ZhbHVlKTsKLUpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0F0dHIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwotdm9pZCBzZXRK
U1Rlc3RPYmpMb25nTG9uZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlND
OjpKU1ZhbHVlKTsKLUpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci12
b2lkIHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7Ci1KU0M6OkpTVmFsdWUganNUZXN0T2JqU3RyaW5n
QXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVy
Jik7Ci12b2lkIHNldEpTVGVzdE9ialN0cmluZ0F0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
T2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKLUpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7
Ci12b2lkIHNldEpTVGVzdE9ialRlc3RPYmpBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09i
amVjdCosIEpTQzo6SlNWYWx1ZSk7Ci1KU0M6OkpTVmFsdWUganNUZXN0T2JqWE1MT2JqQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci12
b2lkIHNldEpTVGVzdE9ialhNTE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0
KiwgSlNDOjpKU1ZhbHVlKTsKLUpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGUoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwotdm9pZCBzZXRK
U1Rlc3RPYmpDcmVhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1Zh
bHVlKTsKLUpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLXZvaWQgc2V0
SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTVmFsdWUpOwotSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVn
cmFsQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlm
aWVyJik7Ci12b2lkIHNldEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOwotSlNDOjpKU1ZhbHVlIGpzVGVz
dE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLXZvaWQgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpKU1ZhbHVlKTsKLUpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7
Ci12b2lkIHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7Ci1KU0M6OkpTVmFsdWUganNUZXN0T2JqUmVm
bGVjdGVkVVJMQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJik7Ci12b2lkIHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKLUpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpSZWZsZWN0ZWROb25FbXB0eVVSTEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwotdm9pZCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRO
b25FbXB0eVVSTEF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1Zh
bHVlKTsKLUpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLXZvaWQgc2V0
SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTVmFsdWUpOwotSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3Rv
bUludGVncmFsQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJik7Ci12b2lkIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOwotSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLXZvaWQgc2V0SlNUZXN0
T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpKU1ZhbHVlKTsKLUpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0
b21VUkxBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50
aWZpZXImKTsKLXZvaWQgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0cihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOwotSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialJlZmxlY3RlZEN1c3RvbU5vbkVtcHR5VVJMQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci12b2lkIHNldEpTVGVzdE9ialJl
ZmxlY3RlZEN1c3RvbU5vbkVtcHR5VVJMQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTVmFsdWUpOwotSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50
aWZpZXImKTsKLXZvaWQgc2V0SlNUZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKLUpTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci12b2lkIHNldEpTVGVzdE9iakF0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNW
YWx1ZSk7Ci1KU0M6OkpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRp
b24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYp
Owotdm9pZCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOwotSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLXZvaWQgc2V0SlNUZXN0T2JqU3Ry
aW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0
KiwgSlNDOjpKU1ZhbHVlKTsKLUpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLXZvaWQg
c2V0SlNUZXN0T2JqQ3VzdG9tQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTVmFsdWUpOwotSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialNjcmlwdFN0cmluZ0F0dHIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwotSlND
OjpKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwotdm9pZCBzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIxKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1
ZSk7Ci1KU0M6OkpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci12b2lkIHNldEpTVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlND
OjpKU1ZhbHVlKTsKLUpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLXZvaWQg
c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTVmFsdWUpOwotSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLUpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpJZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29u
c3QgSlNDOjpJZGVudGlmaWVyJik7Ci12b2lkIHNldEpTVGVzdE9iaklkKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7Ci1KU0M6OkpTVmFsdWUganNUZXN0T2Jq
SGFzaChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVy
Jik7Ci1KU0M6OkpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwotLy8gQ29uc3RhbnRzCi0KLUpT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV8wKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLUpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpD
T05TVF9WQUxVRV8xKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImKTsKLUpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV8yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLUpTQzo6SlNW
YWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV80KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLUpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9W
QUxVRV84KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImKTsKLUpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDT05TVF9WQUxVRV85KEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLUpTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpDT05TVF9WQUxVRV8xMChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29u
c3QgSlNDOjpJZGVudGlmaWVyJik7Ci1KU0M6OkpTVmFsdWUganNUZXN0T2JqQ09OU1RfVkFMVUVf
MTEoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYp
OwotSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakNPTlNUX1ZBTFVFXzEyKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLUpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpDT05TVF9WQUxVRV8xMyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJik7Ci1KU0M6OkpTVmFsdWUganNUZXN0T2JqQ09OU1RfVkFMVUVfMTQo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHJldmlzaW9u
IDg5MTQyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTgxICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0K
LSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotCi0jaW5j
bHVkZSAiSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgiCi0KLSNpbmNsdWRl
ICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlICJUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotCi11c2luZyBuYW1l
c3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUFTU0VSVF9DTEFTU19GSVRTX0lO
X0NFTEwoSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKTsKLQotLyogSGFzaCB0
YWJsZSAqLwotI2lmIEVOQUJMRShKSVQpCi0jZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0
b3IpICwgZ2VuZXJhdG9yCi0jZWxzZQotI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9y
KQotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VUYWJsZVZhbHVlc1szXSA9Ci17Ci0gICAgeyAidmFsdWUiLCBE
b250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUp
LCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7ICJjb25zdHJ1Y3RvciIs
IERvbnRFbnVtIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3Ry
dWN0b3IpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKLSAgICB7IDAsIDAsIDAs
IDAgVEhVTktfR0VORVJBVE9SKDApIH0KLX07Ci0KLSN1bmRlZiBUSFVOS19HRU5FUkFUT1IKLXN0
YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VUYWJsZSA9IHsgNCwgMywgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlVGFibGVWYWx1ZXMsIDAgfTsKLS8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9y
ICovCi0jaWYgRU5BQkxFKEpJVCkKLSNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikg
LCBnZW5lcmF0b3IKLSNlbHNlCi0jZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpCi0j
ZW5kaWYKLQotc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yVGFibGVWYWx1ZXNbMV0gPQotewotICAgIHsgMCwg
MCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkgfQotfTsKLQotI3VuZGVmIFRIVU5LX0dFTkVSQVRP
Ugotc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yVGFibGUgPSB7IDEsIDAsIEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsIDAgfTsKLWNs
YXNzIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yIDogcHVi
bGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6
OlByb3BlcnR5U2xvdCYpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5
RGVzY3JpcHRvciYpOwotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Ci0g
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RD
b3VudCwgJnNfaW5mbyk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
SlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0
dXJlRmxhZ3M7Ci19OwotCi1jb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciIsICZET01Db25zdHJ1Y3Rvck9iamVjdDo6c19pbmZv
LCAmSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3JUYWJsZSwg
MCB9OwotCi1KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKLSAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
KQotewotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9i
amVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7Ci19Ci0KLWJvb2wgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xvdChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQotewotICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yVGFibGUsIHRoaXMs
IHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLWJvb2wgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yKQotewotICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IsIEpTRE9NV3Jh
cHBlcj4oZXhlYywgJkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVj
dG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KLS8qIEhhc2gg
dGFibGUgZm9yIHByb3RvdHlwZSAqLwotI2lmIEVOQUJMRShKSVQpCi0jZGVmaW5lIFRIVU5LX0dF
TkVSQVRPUihnZW5lcmF0b3IpICwgZ2VuZXJhdG9yCi0jZWxzZQotI2RlZmluZSBUSFVOS19HRU5F
UkFUT1IoZ2VuZXJhdG9yKQotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVUYWJsZVZhbHVlc1sx
XSA9Ci17Ci0gICAgeyAwLCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigwKSB9Ci19OwotCi0jdW5k
ZWYgVEhVTktfR0VORVJBVE9SCi1zdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlVGFibGUgPSB7IDEs
IDAsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZVRhYmxlVmFs
dWVzLCAwIH07Ci1jb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlUHJvdG90eXBlIiwgJkpTQzo6SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0OjpzX2luZm8s
ICZKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVUYWJsZSwgMCB9
OwotCi1KU09iamVjdCogSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90
eXBlOjpzZWxmKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
LXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZT4oZXhlYywgZ2xvYmFsT2JqZWN0KTsKLX0KLQotY29uc3QgQ2xhc3NJbmZvIEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6c19pbmZvID0geyAiVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICZKU0RPTVdyYXBwZXI6OnNfaW5mbywgJkpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVRhYmxlLCAwIH07Ci0KLUpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQYXNzUmVmUHRyPFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+IGltcGwp
Ci0gICAgOiBKU0RPTVdyYXBwZXIoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi0gICAgLCBtX2lt
cGwoaW1wbCkKLXsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotfQotCi1KU09iamVj
dCogSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjcmVhdGVQcm90b3R5cGUo
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJl
dHVybiBuZXcgKGV4ZWMpIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3Rv
dHlwZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKLX0KLQot
Ym9vbCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmdldE93blByb3BlcnR5
U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQotewotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpcywg
JnNfaW5mbyk7Ci0gICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UsIEJhc2U+KGV4ZWMsICZKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKLX0KLQotYm9v
bCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpcywgJnNfaW5mbyk7Ci0gICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3Jp
cHRvcjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UsIEJhc2U+KGV4ZWMsICZK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VUYWJsZSwgdGhpcywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yKTsKLX0KLQotSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0
IElkZW50aWZpZXImKQotewotICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSo+KGFzT2JqZWN0KHNsb3RCYXNlKSk7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwot
ICAgIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcCA9IHN0YXRpY19jYXN0
PFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihjYXN0ZWRUaGlzLT5pbXBsKCkp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wLT52YWx1ZSgpID8gaW1wLT52YWx1ZSgpLT5kZXNl
cmlhbGl6ZShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSkgOiBqc051bGwoKTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi0KLUpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNl
LCBjb25zdCBJZGVudGlmaWVyJikKLXsKLSAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UqIGRvbU9iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSo+KGFzT2JqZWN0KHNsb3RCYXNlKSk7Ci0gICAgcmV0dXJuIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Z2V0Q29uc3RydWN0b3IoZXhlYywgZG9tT2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKSk7Ci19Ci0KLUpTVmFsdWUgSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yPihleGVjLCBzdGF0
aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwotfQotCi1KU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wbCkKLXsKLSAg
ICByZXR1cm4gd3JhcDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+KGV4ZWMs
IGdsb2JhbE9iamVjdCwgaW1wbCk7Ci19Ci0KLVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UqIHRvVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZShKU0M6OkpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLmluaGVyaXRzKCZKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2U6OnNfaW5mbykgPyBzdGF0aWNfY2FzdDxKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UqPihhc09iamVjdCh2YWx1ZSkpLT5pbXBsKCkgOiAwOwotfQot
Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5oCShyZXZpc2lvbiA4OTE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw4NCArMCwwIEBACi0vKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNp
Zm5kZWYgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlX2gKLSNkZWZpbmUgSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlX2gKLQotI2lmIEVOQUJMRShDb25kaXRp
b24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLQotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgot
I2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pT
T2JqZWN0V2l0aEdsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90
eXBlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZTsKLQotY2xhc3MgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlIDogcHVibGljIEpTRE9NV3JhcHBlciB7Ci0gICAgdHlwZWRlZiBKU0RPTVdyYXBwZXIg
QmFzZTsKLXB1YmxpYzoKLSAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uo
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8VGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4pOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBj
cmVhdGVQcm90b3R5cGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0g
ICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotCi0gICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCwg
JnNfaW5mbyk7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3Rv
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdl
dCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2U+IG1faW1wbDsKLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOwotfTsKLQotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uq
KTsKLVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHRvVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZShKU0M6OkpTVmFsdWUpOwotCi1jbGFzcyBKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU09iamVjdFdp
dGhHbG9iYWxPYmplY3QgewotICAgIHR5cGVkZWYgSlNDOjpKU09iamVjdFdpdGhHbG9iYWxPYmpl
Y3QgQmFzZTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpD
bGFzc0luZm8gc19pbmZvOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0
YSwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBBbm9ueW1vdXNTbG90Q291bnQsICZzX2luZm8pOwotICAgIH0KLSAgICBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUoSlNDOjpKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgOiBKU0M6OkpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdChnbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkgeyB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7Ci19Owot
Ci0vLyBBdHRyaWJ1dGVzCi0KLUpTQzo6SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlND
OjpJZGVudGlmaWVyJik7Ci1KU0M6OkpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0KLSNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENhbGxi
YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdENhbGxiYWNrLmgJKHJldmlzaW9uIDg5MTQyKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENhbGxiYWNrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbXBvcnQgPFdlYkNvcmUvRE9NT2JqZWN0Lmg+Ci0KLSNpZiBXRUJLSVRfVkVS
U0lPTl9NQVhfQUxMT1dFRCA+PSBXRUJLSVRfVkVSU0lPTl9MQVRFU1QKLQotQGNsYXNzIERPTUNs
YXNzMTsKLUBjbGFzcyBET01DbGFzczI7Ci1AY2xhc3MgRE9NQ2xhc3MzOwotQGNsYXNzIERPTUNs
YXNzNTsKLUBjbGFzcyBET01DbGFzczY7Ci1AY2xhc3MgRE9NRE9NU3RyaW5nTGlzdDsKLUBjbGFz
cyBOU1N0cmluZzsKLQotQGludGVyZmFjZSBET01UZXN0Q2FsbGJhY2sgOiBET01PYmplY3QKLS0g
KEJPT0wpY2FsbGJhY2tXaXRoTm9QYXJhbTsKLS0gKEJPT0wpY2FsbGJhY2tXaXRoQ2xhc3MxUGFy
YW06KERPTUNsYXNzMSAqKWNsYXNzMVBhcmFtOwotLSAoQk9PTCljYWxsYmFja1dpdGhDbGFzczJQ
YXJhbTooRE9NQ2xhc3MyICopY2xhc3MyUGFyYW0gc3RyQXJnOihOU1N0cmluZyAqKXN0ckFyZzsK
LS0gKGludCljYWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZTooRE9NQ2xhc3MzICopY2xhc3Mz
UGFyYW07Ci0tIChpbnQpY3VzdG9tQ2FsbGJhY2s6KERPTUNsYXNzNSAqKWNsYXNzNVBhcmFtIGNs
YXNzNlBhcmFtOihET01DbGFzczYgKiljbGFzczZQYXJhbTsKLS0gKEJPT0wpY2FsbGJhY2tXaXRo
U3RyaW5nTGlzdDooRE9NRE9NU3RyaW5nTGlzdCAqKWxpc3RQYXJhbTsKLUBlbmQKLQotI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
Q2FsbGJhY2subW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L09iakMvRE9NVGVzdENhbGxiYWNrLm1tCShyZXZpc2lvbiA4OTE0MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDYWxsYmFjay5tbQko
d29ya2luZyBjb3B5KQpAQCAtMSwxNDEgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotCi0jaW1wb3J0
ICJET01JbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJET01UZXN0Q2FsbGJhY2suaCIKLQotI2ltcG9y
dCAiQ2xhc3MxLmgiCi0jaW1wb3J0ICJDbGFzczIuaCIKLSNpbXBvcnQgIkNsYXNzMy5oIgotI2lt
cG9ydCAiQ2xhc3M1LmgiCi0jaW1wb3J0ICJDbGFzczYuaCIKLSNpbXBvcnQgIkRPTUJsb2JJbnRl
cm5hbC5oIgotI2ltcG9ydCAiRE9NQ1NTUnVsZUludGVybmFsLmgiCi0jaW1wb3J0ICJET01DU1NW
YWx1ZUludGVybmFsLmgiCi0jaW1wb3J0ICJET01DbGFzczFJbnRlcm5hbC5oIgotI2ltcG9ydCAi
RE9NQ2xhc3MySW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTUNsYXNzM0ludGVybmFsLmgiCi0jaW1w
b3J0ICJET01DbGFzczVJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NQ2xhc3M2SW50ZXJuYWwuaCIK
LSNpbXBvcnQgIkRPTURPTVN0cmluZ0xpc3RJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NRXZlbnRJ
bnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCi0jaW1wb3J0ICJET01TdHJp
bmdMaXN0LmgiCi0jaW1wb3J0ICJET01TdHlsZVNoZWV0SW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRP
TVRlc3RDYWxsYmFja0ludGVybmFsLmgiCi0jaW1wb3J0ICJFeGNlcHRpb25IYW5kbGVycy5oIgot
I2ltcG9ydCAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCi0jaW1wb3J0ICJLVVJMLmgiCi0jaW1w
b3J0ICJUZXN0Q2FsbGJhY2suaCIKLSNpbXBvcnQgIlRocmVhZENoZWNrLmgiCi0jaW1wb3J0ICJX
ZWJDb3JlT2JqQ0V4dHJhcy5oIgotI2ltcG9ydCAiV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oIgot
I2ltcG9ydCA8d3RmL0dldFB0ci5oPgotCi0jZGVmaW5lIElNUEwgcmVpbnRlcnByZXRfY2FzdDxX
ZWJDb3JlOjpUZXN0Q2FsbGJhY2sqPihfaW50ZXJuYWwpCi0KLUBpbXBsZW1lbnRhdGlvbiBET01U
ZXN0Q2FsbGJhY2sKLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgaWYgKFdlYkNvcmVPYmpDU2No
ZWR1bGVEZWFsbG9jYXRlT25NYWluVGhyZWFkKFtET01UZXN0Q2FsbGJhY2sgY2xhc3NdLCBzZWxm
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKF9pbnRlcm5hbCkKLSAgICAgICAgSU1QTC0+
ZGVyZWYoKTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpZmluYWxpemUKLXsK
LSAgICBpZiAoX2ludGVybmFsKQotICAgICAgICBJTVBMLT5kZXJlZigpOwotICAgIFtzdXBlciBm
aW5hbGl6ZV07Ci19Ci0KLS0gKEJPT0wpY2FsbGJhY2tXaXRoTm9QYXJhbQotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4gSU1QTC0+Y2FsbGJh
Y2tXaXRoTm9QYXJhbSgpOwotfQotCi0tIChCT09MKWNhbGxiYWNrV2l0aENsYXNzMVBhcmFtOihE
T01DbGFzczEgKiljbGFzczFQYXJhbQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4gSU1QTC0+Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0oY29y
ZShjbGFzczFQYXJhbSkpOwotfQotCi0tIChCT09MKWNhbGxiYWNrV2l0aENsYXNzMlBhcmFtOihE
T01DbGFzczIgKiljbGFzczJQYXJhbSBzdHJBcmc6KE5TU3RyaW5nICopc3RyQXJnCi17Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIHJldHVybiBJTVBMLT5j
YWxsYmFja1dpdGhDbGFzczJQYXJhbShjb3JlKGNsYXNzMlBhcmFtKSwgc3RyQXJnKTsKLX0KLQot
LSAoaW50KWNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBlOihET01DbGFzczMgKiljbGFzczNQ
YXJhbQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBy
ZXR1cm4gSU1QTC0+Y2FsbGJhY2tXaXRoTm9uQm9vbFJldHVyblR5cGUoY29yZShjbGFzczNQYXJh
bSkpOwotfQotCi0tIChpbnQpY3VzdG9tQ2FsbGJhY2s6KERPTUNsYXNzNSAqKWNsYXNzNVBhcmFt
IGNsYXNzNlBhcmFtOihET01DbGFzczYgKiljbGFzczZQYXJhbQotewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4gSU1QTC0+Y3VzdG9tQ2FsbGJh
Y2soY29yZShjbGFzczVQYXJhbSksIGNvcmUoY2xhc3M2UGFyYW0pKTsKLX0KLQotLSAoQk9PTClj
YWxsYmFja1dpdGhTdHJpbmdMaXN0OihET01ET01TdHJpbmdMaXN0ICopbGlzdFBhcmFtCi17Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIHJldHVybiBJTVBM
LT5jYWxsYmFja1dpdGhTdHJpbmdMaXN0KGNvcmUobGlzdFBhcmFtKSk7Ci19Ci0KLUBlbmQKLQot
V2ViQ29yZTo6VGVzdENhbGxiYWNrKiBjb3JlKERPTVRlc3RDYWxsYmFjayAqd3JhcHBlcikKLXsK
LSAgICByZXR1cm4gd3JhcHBlciA/IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGVzdENhbGxi
YWNrKj4od3JhcHBlci0+X2ludGVybmFsKSA6IDA7Ci19Ci0KLURPTVRlc3RDYWxsYmFjayAqa2l0
KFdlYkNvcmU6OlRlc3RDYWxsYmFjayogdmFsdWUpCi17Ci0gICAgeyBET01fQVNTRVJUX01BSU5f
VEhSRUFEKCk7IFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVja1JvdW5kT25lKCk7IH07Ci0gICAg
aWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBpZiAoRE9NVGVzdENhbGxiYWNr
ICp3cmFwcGVyID0gZ2V0RE9NV3JhcHBlcih2YWx1ZSkpCi0gICAgICAgIHJldHVybiBbW3dyYXBw
ZXIgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0gICAgRE9NVGVzdENhbGxiYWNrICp3cmFwcGVyID0g
W1tET01UZXN0Q2FsbGJhY2sgYWxsb2NdIF9pbml0XTsKLSAgICB3cmFwcGVyLT5faW50ZXJuYWwg
PSByZWludGVycHJldF9jYXN0PERPTU9iamVjdEludGVybmFsKj4odmFsdWUpOwotICAgIHZhbHVl
LT5yZWYoKTsKLSAgICBhZGRET01XcmFwcGVyKHdyYXBwZXIsIHZhbHVlKTsKLSAgICByZXR1cm4g
W3dyYXBwZXIgYXV0b3JlbGVhc2VdOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENh
bGxiYWNrSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0Q2FsbGJhY2tJbnRlcm5hbC5oCShyZXZpc2lvbiA4OTE0
MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RD
YWxsYmFja0ludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAq
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQgPFdlYkNvcmUvRE9NVGVzdENhbGxiYWNrLmg+
Ci0KLSNpZiBXRUJLSVRfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBXRUJLSVRfVkVSU0lPTl9MQVRF
U1QKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIFRlc3RDYWxsYmFjazsKLX0KLQot
V2ViQ29yZTo6VGVzdENhbGxiYWNrKiBjb3JlKERPTVRlc3RDYWxsYmFjayAqKTsKLURPTVRlc3RD
YWxsYmFjayAqa2l0KFdlYkNvcmU6OlRlc3RDYWxsYmFjayopOwotCi0jZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RJbnRlcmZhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2Jq
Qy9ET01UZXN0SW50ZXJmYWNlLmgJKHJldmlzaW9uIDg5MTQyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdEludGVyZmFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW1wb3J0IDxXZWJDb3JlL0RPTU9iamVjdC5oPgotCi0jaWYgV0VCS0lUX1ZFUlNJ
T05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZFUlNJT05fTEFURVNUCi0KLUBpbnRlcmZhY2UgRE9N
VGVzdEludGVyZmFjZSA6IERPTU9iamVjdAotQGVuZAotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RJbnRlcmZhY2UubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9N
VGVzdEludGVyZmFjZS5tbQkocmV2aXNpb24gODkxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0SW50ZXJmYWNlLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDkyICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW1wb3J0ICJj
b25maWcuaCIKLQotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikK
LQotI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiRE9NVGVzdEludGVyZmFjZS5o
IgotCi0jaW1wb3J0ICJET01CbG9iSW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTUNTU1J1bGVJbnRl
cm5hbC5oIgotI2ltcG9ydCAiRE9NQ1NTVmFsdWVJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NRXZl
bnRJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCi0jaW1wb3J0ICJET01T
dHlsZVNoZWV0SW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTVRlc3RJbnRlcmZhY2VJbnRlcm5hbC5o
IgotI2ltcG9ydCAiRXhjZXB0aW9uSGFuZGxlcnMuaCIKLSNpbXBvcnQgIkpTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oIgotI2ltcG9ydCAiVGVzdEludGVyZmFjZS5oIgotI2ltcG9ydCAiVGhyZWFkQ2hl
Y2suaCIKLSNpbXBvcnQgIldlYkNvcmVPYmpDRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJTY3JpcHRP
YmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDx3dGYvR2V0UHRyLmg+Ci0KLSNkZWZpbmUgSU1QTCBy
ZWludGVycHJldF9jYXN0PFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqPihfaW50ZXJuYWwpCi0KLUBp
bXBsZW1lbnRhdGlvbiBET01UZXN0SW50ZXJmYWNlCi0KLS0gKHZvaWQpZGVhbGxvYwotewotICAg
IGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblRocmVhZChbRE9NVGVzdElu
dGVyZmFjZSBjbGFzc10sIHNlbGYpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoX2ludGVy
bmFsKQotICAgICAgICBJTVBMLT5kZXJlZigpOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQot
LSAodm9pZClmaW5hbGl6ZQotewotICAgIGlmIChfaW50ZXJuYWwpCi0gICAgICAgIElNUEwtPmRl
cmVmKCk7Ci0gICAgW3N1cGVyIGZpbmFsaXplXTsKLX0KLQotQGVuZAotCi1XZWJDb3JlOjpUZXN0
SW50ZXJmYWNlKiBjb3JlKERPTVRlc3RJbnRlcmZhY2UgKndyYXBwZXIpCi17Ci0gICAgcmV0dXJu
IHdyYXBwZXIgPyByZWludGVycHJldF9jYXN0PFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqPih3cmFw
cGVyLT5faW50ZXJuYWwpIDogMDsKLX0KLQotRE9NVGVzdEludGVyZmFjZSAqa2l0KFdlYkNvcmU6
OlRlc3RJbnRlcmZhY2UqIHZhbHVlKQotewotICAgIHsgRE9NX0FTU0VSVF9NQUlOX1RIUkVBRCgp
OyBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZE9uZSgpOyB9OwotICAgIGlmICghdmFs
dWUpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgaWYgKERPTVRlc3RJbnRlcmZhY2UgKndyYXBw
ZXIgPSBnZXRET01XcmFwcGVyKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFtbd3JhcHBlciByZXRh
aW5dIGF1dG9yZWxlYXNlXTsKLSAgICBET01UZXN0SW50ZXJmYWNlICp3cmFwcGVyID0gW1tET01U
ZXN0SW50ZXJmYWNlIGFsbG9jXSBfaW5pdF07Ci0gICAgd3JhcHBlci0+X2ludGVybmFsID0gcmVp
bnRlcnByZXRfY2FzdDxET01PYmplY3RJbnRlcm5hbCo+KHZhbHVlKTsKLSAgICB2YWx1ZS0+cmVm
KCk7Ci0gICAgYWRkRE9NV3JhcHBlcih3cmFwcGVyLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIFt3cmFw
cGVyIGF1dG9yZWxlYXNlXTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9PYmpDL0RPTVRlc3RJbnRlcmZhY2VJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RJbnRlcmZhY2VJbnRl
cm5hbC5oCShyZXZpc2lvbiA4OTE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3RJbnRlcmZhY2VJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDM4ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCi0gKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW1wb3J0IDxXZWJD
b3JlL0RPTVRlc3RJbnRlcmZhY2UuaD4KLQotI2lmIFdFQktJVF9WRVJTSU9OX01BWF9BTExPV0VE
ID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xh
c3MgVGVzdEludGVyZmFjZTsKLX0KLQotV2ViQ29yZTo6VGVzdEludGVyZmFjZSogY29yZShET01U
ZXN0SW50ZXJmYWNlICopOwotRE9NVGVzdEludGVyZmFjZSAqa2l0KFdlYkNvcmU6OlRlc3RJbnRl
cmZhY2UqKTsKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvT2JqQy9ET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmgJKHJldmlzaW9uIDg5MTQyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdt
YWlsLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCA8V2ViQ29yZS9ET01PYmplY3QuaD4KLQotI2lmIFdF
QktJVF9WRVJTSU9OX01BWF9BTExPV0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAotCi1AY2xh
c3MgRE9NTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjsKLQotQGludGVyZmFjZSBET01UZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lciA6IERPTU9iamVjdAotLSAodm9pZCltZXRob2Q6KERPTU1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIgKilsaXN0ZW5lcjsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvT2JqQy9ET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5tbQkocmV2aXNpb24gODkx
NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw5NSArMCwwIEBA
Ci0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgotICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJET01JbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ci5oIgotCi0jaW1wb3J0ICJET01CbG9iSW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTUNTU1J1bGVJ
bnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NQ1NTVmFsdWVJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9N
RXZlbnRJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NTWVkaWFRdWVyeUxpc3RMaXN0ZW5lckludGVy
bmFsLmgiCi0jaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTVN0eWxlU2hl
ZXRJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJJbnRl
cm5hbC5oIgotI2ltcG9ydCAiRXhjZXB0aW9uSGFuZGxlcnMuaCIKLSNpbXBvcnQgIkpTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5oIgotI2ltcG9ydCAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oIgotI2lt
cG9ydCAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCIKLSNpbXBvcnQgIlRocmVhZENoZWNr
LmgiCi0jaW1wb3J0ICJXZWJDb3JlT2JqQ0V4dHJhcy5oIgotI2ltcG9ydCAiV2ViU2NyaXB0T2Jq
ZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8d3RmL0dldFB0ci5oPgotCi0jZGVmaW5lIElNUEwgcmVp
bnRlcnByZXRfY2FzdDxXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcio+KF9pbnRl
cm5hbCkKLQotQGltcGxlbWVudGF0aW9uIERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyCi0K
LS0gKHZvaWQpZGVhbGxvYwotewotICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0
ZU9uTWFpblRocmVhZChbRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIgY2xhc3NdLCBzZWxm
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKF9pbnRlcm5hbCkKLSAgICAgICAgSU1QTC0+
ZGVyZWYoKTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpZmluYWxpemUKLXsK
LSAgICBpZiAoX2ludGVybmFsKQotICAgICAgICBJTVBMLT5kZXJlZigpOwotICAgIFtzdXBlciBm
aW5hbGl6ZV07Ci19Ci0KLS0gKHZvaWQpbWV0aG9kOihET01NZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
ICopbGlzdGVuZXIKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgSU1QTC0+bWV0aG9kKGNvcmUobGlzdGVuZXIpKTsKLX0KLQotQGVuZAotCi1XZWJDb3Jl
OjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogY29yZShET01UZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lciAqd3JhcHBlcikKLXsKLSAgICByZXR1cm4gd3JhcHBlciA/IHJlaW50ZXJwcmV0X2Nh
c3Q8V2ViQ29yZTo6VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqPih3cmFwcGVyLT5faW50ZXJu
YWwpIDogMDsKLX0KLQotRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIgKmtpdChXZWJDb3Jl
OjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogdmFsdWUpCi17Ci0gICAgeyBET01fQVNTRVJU
X01BSU5fVEhSRUFEKCk7IFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVja1JvdW5kT25lKCk7IH07
Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBpZiAoRE9NVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIgKndyYXBwZXIgPSBnZXRET01XcmFwcGVyKHZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuIFtbd3JhcHBlciByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLSAgICBET01UZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciAqd3JhcHBlciA9IFtbRE9NVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIgYWxsb2NdIF9pbml0XTsKLSAgICB3cmFwcGVyLT5faW50ZXJuYWwgPSByZWludGVy
cHJldF9jYXN0PERPTU9iamVjdEludGVybmFsKj4odmFsdWUpOwotICAgIHZhbHVlLT5yZWYoKTsK
LSAgICBhZGRET01XcmFwcGVyKHdyYXBwZXIsIHZhbHVlKTsKLSAgICByZXR1cm4gW3dyYXBwZXIg
YXV0b3JlbGVhc2VdOwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJJbnRlcm5hbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVySW50ZXJuYWwuaAkocmV2aXNpb24gODkxNDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lckludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzggKzAsMCBAQAotLyoK
LSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
LSAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQgPFdlYkNvcmUvRE9NVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuaD4KLQotI2lmIFdFQktJVF9WRVJTSU9OX01BWF9BTExPV0VEID49IFdF
QktJVF9WRVJTSU9OX0xBVEVTVAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI7Ci19Ci0KLVdlYkNvcmU6OlRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyKiBjb3JlKERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyICopOwotRE9NVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIgKmtpdChXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lciopOwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgJKHJldmlzaW9uIDg5MTQyKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2Vpbmln
QGdtYWlsLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCA8V2ViQ29yZS9ET01PYmplY3QuaD4KLQotI2lm
IFdFQktJVF9WRVJTSU9OX01BWF9BTExPV0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAotCi1A
Y2xhc3MgRE9NSURCS2V5OwotQGNsYXNzIERPTU9wdGlvbnNPYmplY3Q7Ci1AY2xhc3MgRE9NVGVz
dE9iajsKLUBjbGFzcyBET01sb2c7Ci1AY2xhc3MgTlNTdHJpbmc7Ci1AcHJvdG9jb2wgRE9NRXZl
bnRMaXN0ZW5lcjsKLQotZW51bSB7Ci0gICAgRE9NX0NPTlNUX1ZBTFVFXzAgPSAwLAotICAgIERP
TV9DT05TVF9WQUxVRV8xID0gMSwKLSAgICBET01fQ09OU1RfVkFMVUVfMiA9IDIsCi0gICAgRE9N
X0NPTlNUX1ZBTFVFXzQgPSA0LAotICAgIERPTV9DT05TVF9WQUxVRV84ID0gOCwKLSAgICBET01f
Q09OU1RfVkFMVUVfOSA9IC0xLAotICAgIERPTV9DT05TVF9WQUxVRV8xMCA9ICJteSBjb25zdGFu
dCBzdHJpbmciLAotICAgIERPTV9DT05TVF9WQUxVRV8xMSA9IDB4ZmZmZmZmZmYsCi0gICAgRE9N
X0NPTlNUX1ZBTFVFXzEyID0gMHgwMSwKLSAgICBET01fQ09OU1RfVkFMVUVfMTMgPSAwWDIwLAot
ICAgIERPTV9DT05TVF9WQUxVRV8xNCA9IDB4MWFiYwotfTsKLQotQGludGVyZmFjZSBET01UZXN0
T2JqIDogRE9NT2JqZWN0Ci0tIChpbnQpcmVhZE9ubHlJbnRBdHRyOwotLSAoTlNTdHJpbmcgKily
ZWFkT25seVN0cmluZ0F0dHI7Ci0tIChET01UZXN0T2JqICopcmVhZE9ubHlUZXN0T2JqQXR0cjsK
LS0gKHNob3J0KXNob3J0QXR0cjsKLS0gKHZvaWQpc2V0U2hvcnRBdHRyOihzaG9ydCluZXdTaG9y
dEF0dHI7Ci0tICh1bnNpZ25lZCBzaG9ydCl1bnNpZ25lZFNob3J0QXR0cjsKLS0gKHZvaWQpc2V0
VW5zaWduZWRTaG9ydEF0dHI6KHVuc2lnbmVkIHNob3J0KW5ld1Vuc2lnbmVkU2hvcnRBdHRyOwot
LSAoaW50KWludEF0dHI7Ci0tICh2b2lkKXNldEludEF0dHI6KGludCluZXdJbnRBdHRyOwotLSAo
bG9uZyBsb25nKWxvbmdMb25nQXR0cjsKLS0gKHZvaWQpc2V0TG9uZ0xvbmdBdHRyOihsb25nIGxv
bmcpbmV3TG9uZ0xvbmdBdHRyOwotLSAodW5zaWduZWQgbG9uZyBsb25nKXVuc2lnbmVkTG9uZ0xv
bmdBdHRyOwotLSAodm9pZClzZXRVbnNpZ25lZExvbmdMb25nQXR0cjoodW5zaWduZWQgbG9uZyBs
b25nKW5ld1Vuc2lnbmVkTG9uZ0xvbmdBdHRyOwotLSAoTlNTdHJpbmcgKilzdHJpbmdBdHRyOwot
LSAodm9pZClzZXRTdHJpbmdBdHRyOihOU1N0cmluZyAqKW5ld1N0cmluZ0F0dHI7Ci0tIChET01U
ZXN0T2JqICopdGVzdE9iakF0dHI7Ci0tICh2b2lkKXNldFRlc3RPYmpBdHRyOihET01UZXN0T2Jq
ICopbmV3VGVzdE9iakF0dHI7Ci0tIChET01UZXN0T2JqICopWE1MT2JqQXR0cjsKLS0gKHZvaWQp
c2V0WE1MT2JqQXR0cjooRE9NVGVzdE9iaiAqKW5ld1hNTE9iakF0dHI7Ci0tIChCT09MKWNyZWF0
ZTsKLS0gKHZvaWQpc2V0Q3JlYXRlOihCT09MKW5ld0NyZWF0ZTsKLS0gKE5TU3RyaW5nICopcmVm
bGVjdGVkU3RyaW5nQXR0cjsKLS0gKHZvaWQpc2V0UmVmbGVjdGVkU3RyaW5nQXR0cjooTlNTdHJp
bmcgKiluZXdSZWZsZWN0ZWRTdHJpbmdBdHRyOwotLSAoaW50KXJlZmxlY3RlZEludGVncmFsQXR0
cjsKLS0gKHZvaWQpc2V0UmVmbGVjdGVkSW50ZWdyYWxBdHRyOihpbnQpbmV3UmVmbGVjdGVkSW50
ZWdyYWxBdHRyOwotLSAodW5zaWduZWQpcmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHI7Ci0t
ICh2b2lkKXNldFJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyOih1bnNpZ25lZCluZXdSZWZs
ZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cjsKLS0gKEJPT0wpcmVmbGVjdGVkQm9vbGVhbkF0dHI7
Ci0tICh2b2lkKXNldFJlZmxlY3RlZEJvb2xlYW5BdHRyOihCT09MKW5ld1JlZmxlY3RlZEJvb2xl
YW5BdHRyOwotLSAoTlNTdHJpbmcgKilyZWZsZWN0ZWRVUkxBdHRyOwotLSAodm9pZClzZXRSZWZs
ZWN0ZWRVUkxBdHRyOihOU1N0cmluZyAqKW5ld1JlZmxlY3RlZFVSTEF0dHI7Ci0tIChOU1N0cmlu
ZyAqKXJlZmxlY3RlZE5vbkVtcHR5VVJMQXR0cjsKLS0gKHZvaWQpc2V0UmVmbGVjdGVkTm9uRW1w
dHlVUkxBdHRyOihOU1N0cmluZyAqKW5ld1JlZmxlY3RlZE5vbkVtcHR5VVJMQXR0cjsKLS0gKE5T
U3RyaW5nICopcmVmbGVjdGVkU3RyaW5nQXR0cjsKLS0gKHZvaWQpc2V0UmVmbGVjdGVkU3RyaW5n
QXR0cjooTlNTdHJpbmcgKiluZXdSZWZsZWN0ZWRTdHJpbmdBdHRyOwotLSAoaW50KXJlZmxlY3Rl
ZEN1c3RvbUludGVncmFsQXR0cjsKLS0gKHZvaWQpc2V0UmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxB
dHRyOihpbnQpbmV3UmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyOwotLSAoQk9PTClyZWZsZWN0
ZWRDdXN0b21Cb29sZWFuQXR0cjsKLS0gKHZvaWQpc2V0UmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0
dHI6KEJPT0wpbmV3UmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHI7Ci0tIChOU1N0cmluZyAqKXJl
ZmxlY3RlZEN1c3RvbVVSTEF0dHI7Ci0tICh2b2lkKXNldFJlZmxlY3RlZEN1c3RvbVVSTEF0dHI6
KE5TU3RyaW5nICopbmV3UmVmbGVjdGVkQ3VzdG9tVVJMQXR0cjsKLS0gKE5TU3RyaW5nICopcmVm
bGVjdGVkQ3VzdG9tTm9uRW1wdHlVUkxBdHRyOwotLSAodm9pZClzZXRSZWZsZWN0ZWRDdXN0b21O
b25FbXB0eVVSTEF0dHI6KE5TU3RyaW5nICopbmV3UmVmbGVjdGVkQ3VzdG9tTm9uRW1wdHlVUkxB
dHRyOwotLSAoaW50KWF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uOwotLSAodm9pZClzZXRBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbjooaW50KW5ld0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uOwotLSAoaW50
KWF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uOwotLSAodm9pZClzZXRBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbjooaW50KW5ld0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uOwotLSAoTlNTdHJpbmcgKilzdHJp
bmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbjsKLS0gKHZvaWQpc2V0U3RyaW5nQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb246KE5TU3RyaW5nICopbmV3U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb247
Ci0tIChOU1N0cmluZyAqKXN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uOwotLSAodm9pZClz
ZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbjooTlNTdHJpbmcgKiluZXdTdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbjsKLS0gKGludCljdXN0b21BdHRyOwotLSAodm9pZClzZXRDdXN0
b21BdHRyOihpbnQpbmV3Q3VzdG9tQXR0cjsKLS0gKE5TU3RyaW5nICopc2NyaXB0U3RyaW5nQXR0
cjsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLS0gKGludCljb25kaXRpb25hbEF0dHIxOwotLSAo
dm9pZClzZXRDb25kaXRpb25hbEF0dHIxOihpbnQpbmV3Q29uZGl0aW9uYWxBdHRyMTsKLSNlbmRp
ZgotI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLS0gKGludClj
b25kaXRpb25hbEF0dHIyOwotLSAodm9pZClzZXRDb25kaXRpb25hbEF0dHIyOihpbnQpbmV3Q29u
ZGl0aW9uYWxBdHRyMjsKLSNlbmRpZgotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMikKLS0gKGludCljb25kaXRpb25hbEF0dHIzOwotLSAodm9pZClzZXRDb25kaXRp
b25hbEF0dHIzOihpbnQpbmV3Q29uZGl0aW9uYWxBdHRyMzsKLSNlbmRpZgotLSAoaW50KWRlc2Ny
aXB0aW9uTmFtZTsKLS0gKGludClpZE5hbWU7Ci0tICh2b2lkKXNldElkTmFtZTooaW50KW5ld0lk
TmFtZTsKLS0gKE5TU3RyaW5nICopaGFzaE5hbWU7Ci0tICh2b2lkKXZvaWRNZXRob2Q7Ci0tICh2
b2lkKXZvaWRNZXRob2RXaXRoQXJnczooaW50KWludEFyZyBzdHJBcmc6KE5TU3RyaW5nICopc3Ry
QXJnIG9iakFyZzooRE9NVGVzdE9iaiAqKW9iakFyZzsKLS0gKGludClpbnRNZXRob2Q7Ci0tIChp
bnQpaW50TWV0aG9kV2l0aEFyZ3M6KGludClpbnRBcmcgc3RyQXJnOihOU1N0cmluZyAqKXN0ckFy
ZyBvYmpBcmc6KERPTVRlc3RPYmogKilvYmpBcmc7Ci0tIChET01UZXN0T2JqICopb2JqTWV0aG9k
OwotLSAoRE9NVGVzdE9iaiAqKW9iak1ldGhvZFdpdGhBcmdzOihpbnQpaW50QXJnIHN0ckFyZzoo
TlNTdHJpbmcgKilzdHJBcmcgb2JqQXJnOihET01UZXN0T2JqICopb2JqQXJnOwotLSAoRE9NVGVz
dE9iaiAqKW1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3M6KE5TU3RyaW5nICopc3RyQXJnIG9iakFy
ZzooRE9NVGVzdE9iaiAqKW9iakFyZzsKLS0gKERPTVRlc3RPYmogKiltZXRob2RUaGF0UmVxdWly
ZXNBbGxBcmdzQW5kVGhyb3dzOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmog
KilvYmpBcmc7Ci0tICh2b2lkKXNlcmlhbGl6ZWRWYWx1ZTooTlNTdHJpbmcgKilzZXJpYWxpemVk
QXJnOwotLSAodm9pZClpZGJLZXk6KERPTUlEQktleSAqKWtleTsKLS0gKHZvaWQpb3B0aW9uc09i
amVjdDooRE9NT3B0aW9uc09iamVjdCAqKW9vIG9vbzooRE9NT3B0aW9uc09iamVjdCAqKW9vbzsK
LS0gKHZvaWQpbWV0aG9kV2l0aEV4Y2VwdGlvbjsKLS0gKHZvaWQpY3VzdG9tTWV0aG9kOwotLSAo
dm9pZCljdXN0b21NZXRob2RXaXRoQXJnczooaW50KWludEFyZyBzdHJBcmc6KE5TU3RyaW5nICop
c3RyQXJnIG9iakFyZzooRE9NVGVzdE9iaiAqKW9iakFyZzsKLS0gKHZvaWQpY3VzdG9tQXJnc0Fu
ZEV4Y2VwdGlvbjooRE9NbG9nICopaW50QXJnOwotLSAodm9pZClhZGRFdmVudExpc3RlbmVyOihO
U1N0cmluZyAqKXR5cGUgbGlzdGVuZXI6KGlkIDxET01FdmVudExpc3RlbmVyPilsaXN0ZW5lciB1
c2VDYXB0dXJlOihCT09MKXVzZUNhcHR1cmU7Ci0tICh2b2lkKXJlbW92ZUV2ZW50TGlzdGVuZXI6
KE5TU3RyaW5nICopdHlwZSBsaXN0ZW5lcjooaWQgPERPTUV2ZW50TGlzdGVuZXI+KWxpc3RlbmVy
IHVzZUNhcHR1cmU6KEJPT0wpdXNlQ2FwdHVyZTsKLS0gKHZvaWQpd2l0aER5bmFtaWNGcmFtZTsK
LS0gKHZvaWQpd2l0aER5bmFtaWNGcmFtZUFuZEFyZzooaW50KWludEFyZzsKLS0gKHZvaWQpd2l0
aER5bmFtaWNGcmFtZUFuZE9wdGlvbmFsQXJnOihpbnQpaW50QXJnIG9wdGlvbmFsQXJnOihpbnQp
b3B0aW9uYWxBcmc7Ci0tICh2b2lkKXdpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZTooaW50
KWludEFyZzsKLS0gKHZvaWQpd2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlQVNBRDooaW50
KWludEFyZyBvcHRpb25hbEFyZzooaW50KW9wdGlvbmFsQXJnOwotLSAodm9pZCl3aXRoU2NyaXB0
U3RhdGVWb2lkOwotLSAoRE9NVGVzdE9iaiAqKXdpdGhTY3JpcHRTdGF0ZU9iajsKLS0gKHZvaWQp
d2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbjsKLS0gKERPTVRlc3RPYmogKil3aXRoU2NyaXB0
U3RhdGVPYmpFeGNlcHRpb247Ci0tICh2b2lkKXdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0Owot
LSAodm9pZCltZXRob2RXaXRoT3B0aW9uYWxBcmc6KGludClvcHQ7Ci0tICh2b2lkKW1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnOihpbnQpbm9uT3B0IG9wdDooaW50KW9wdDsK
LS0gKHZvaWQpbWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzOihpbnQp
bm9uT3B0IG9wdDE6KGludClvcHQxIG9wdDI6KGludClvcHQyOwotLSAodm9pZCljbGFzc01ldGhv
ZDsKLS0gKGludCljbGFzc01ldGhvZFdpdGhPcHRpb25hbDooaW50KWFyZzsKLUBlbmQKLQotI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01U
ZXN0T2JqLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9PYmpDL0RPTVRlc3RPYmoubW0JKHJldmlzaW9uIDg5MTQyKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQkod29ya2luZyBjb3B5
KQpAQCAtMSw3MTIgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQg
ImNvbmZpZy5oIgotI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiRE9NVGVzdE9i
ai5oIgotCi0jaW1wb3J0ICJET01CbG9iSW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTUNTU1J1bGVJ
bnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NQ1NTVmFsdWVJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9N
RXZlbnRJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NSURCS2V5SW50ZXJuYWwuaCIKLSNpbXBvcnQg
IkRPTU5vZGVJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NT3B0aW9uc09iamVjdEludGVybmFsLmgi
Ci0jaW1wb3J0ICJET01TdHlsZVNoZWV0SW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTVRlc3RPYmpJ
bnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NbG9nSW50ZXJuYWwuaCIKLSNpbXBvcnQgIkV2ZW50TGlz
dGVuZXIuaCIKLSNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJzLmgiCi0jaW1wb3J0ICJIVE1MTmFt
ZXMuaCIKLSNpbXBvcnQgIklEQktleS5oIgotI2ltcG9ydCAiSlNNYWluVGhyZWFkRXhlY1N0YXRl
LmgiCi0jaW1wb3J0ICJLVVJMLmgiCi0jaW1wb3J0ICJPYmpDRXZlbnRMaXN0ZW5lci5oIgotI2lt
cG9ydCAiT3B0aW9uc09iamVjdC5oIgotI2ltcG9ydCAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgi
Ci0jaW1wb3J0ICJUZXN0T2JqLmgiCi0jaW1wb3J0ICJUaHJlYWRDaGVjay5oIgotI2ltcG9ydCAi
V2ViQ29yZU9iakNFeHRyYXMuaCIKLSNpbXBvcnQgIldlYlNjcmlwdE9iamVjdFByaXZhdGUuaCIK
LSNpbXBvcnQgImxvZy5oIgotI2ltcG9ydCA8d3RmL0dldFB0ci5oPgotCi0jZGVmaW5lIElNUEwg
cmVpbnRlcnByZXRfY2FzdDxXZWJDb3JlOjpUZXN0T2JqKj4oX2ludGVybmFsKQotCi1AaW1wbGVt
ZW50YXRpb24gRE9NVGVzdE9iagotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBpZiAoV2ViQ29y
ZU9iakNTY2hlZHVsZURlYWxsb2NhdGVPbk1haW5UaHJlYWQoW0RPTVRlc3RPYmogY2xhc3NdLCBz
ZWxmKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKF9pbnRlcm5hbCkKLSAgICAgICAgSU1Q
TC0+ZGVyZWYoKTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpZmluYWxpemUK
LXsKLSAgICBpZiAoX2ludGVybmFsKQotICAgICAgICBJTVBMLT5kZXJlZigpOwotICAgIFtzdXBl
ciBmaW5hbGl6ZV07Ci19Ci0KLS0gKGludClyZWFkT25seUludEF0dHIKLXsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgcmV0dXJuIElNUEwtPnJlYWRPbmx5
SW50QXR0cigpOwotfQotCi0tIChOU1N0cmluZyAqKXJlYWRPbmx5U3RyaW5nQXR0cgotewotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4gSU1QTC0+
cmVhZE9ubHlTdHJpbmdBdHRyKCk7Ci19Ci0KLS0gKERPTVRlc3RPYmogKilyZWFkT25seVRlc3RP
YmpBdHRyCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IHJldHVybiBraXQoV1RGOjpnZXRQdHIoSU1QTC0+cmVhZE9ubHlUZXN0T2JqQXR0cigpKSk7Ci19
Ci0KLS0gKHNob3J0KXNob3J0QXR0cgotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4gSU1QTC0+c2hvcnRBdHRyKCk7Ci19Ci0KLS0gKHZvaWQp
c2V0U2hvcnRBdHRyOihzaG9ydCluZXdTaG9ydEF0dHIKLXsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgSU1QTC0+c2V0U2hvcnRBdHRyKG5ld1Nob3J0QXR0
cik7Ci19Ci0KLS0gKHVuc2lnbmVkIHNob3J0KXVuc2lnbmVkU2hvcnRBdHRyCi17Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIHJldHVybiBJTVBMLT51bnNp
Z25lZFNob3J0QXR0cigpOwotfQotCi0tICh2b2lkKXNldFVuc2lnbmVkU2hvcnRBdHRyOih1bnNp
Z25lZCBzaG9ydCluZXdVbnNpZ25lZFNob3J0QXR0cgotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBJTVBMLT5zZXRVbnNpZ25lZFNob3J0QXR0cihuZXdV
bnNpZ25lZFNob3J0QXR0cik7Ci19Ci0KLS0gKGludClpbnRBdHRyCi17Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIHJldHVybiBJTVBMLT5pbnRBdHRyKCk7
Ci19Ci0KLS0gKHZvaWQpc2V0SW50QXR0cjooaW50KW5ld0ludEF0dHIKLXsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgSU1QTC0+c2V0SW50QXR0cihuZXdJ
bnRBdHRyKTsKLX0KLQotLSAobG9uZyBsb25nKWxvbmdMb25nQXR0cgotewotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4gSU1QTC0+bG9uZ0xvbmdB
dHRyKCk7Ci19Ci0KLS0gKHZvaWQpc2V0TG9uZ0xvbmdBdHRyOihsb25nIGxvbmcpbmV3TG9uZ0xv
bmdBdHRyCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IElNUEwtPnNldExvbmdMb25nQXR0cihuZXdMb25nTG9uZ0F0dHIpOwotfQotCi0tICh1bnNpZ25l
ZCBsb25nIGxvbmcpdW5zaWduZWRMb25nTG9uZ0F0dHIKLXsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgcmV0dXJuIElNUEwtPnVuc2lnbmVkTG9uZ0xvbmdB
dHRyKCk7Ci19Ci0KLS0gKHZvaWQpc2V0VW5zaWduZWRMb25nTG9uZ0F0dHI6KHVuc2lnbmVkIGxv
bmcgbG9uZyluZXdVbnNpZ25lZExvbmdMb25nQXR0cgotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBJTVBMLT5zZXRVbnNpZ25lZExvbmdMb25nQXR0cihu
ZXdVbnNpZ25lZExvbmdMb25nQXR0cik7Ci19Ci0KLS0gKE5TU3RyaW5nICopc3RyaW5nQXR0cgot
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4g
SU1QTC0+c3RyaW5nQXR0cigpOwotfQotCi0tICh2b2lkKXNldFN0cmluZ0F0dHI6KE5TU3RyaW5n
ICopbmV3U3RyaW5nQXR0cgotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBJTVBMLT5zZXRTdHJpbmdBdHRyKG5ld1N0cmluZ0F0dHIpOwotfQotCi0tIChE
T01UZXN0T2JqICopdGVzdE9iakF0dHIKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgcmV0dXJuIGtpdChXVEY6OmdldFB0cihJTVBMLT50ZXN0T2JqQXR0
cigpKSk7Ci19Ci0KLS0gKHZvaWQpc2V0VGVzdE9iakF0dHI6KERPTVRlc3RPYmogKiluZXdUZXN0
T2JqQXR0cgotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBBU1NFUlQobmV3VGVzdE9iakF0dHIpOwotCi0gICAgSU1QTC0+c2V0VGVzdE9iakF0dHIoY29y
ZShuZXdUZXN0T2JqQXR0cikpOwotfQotCi0tIChET01UZXN0T2JqICopWE1MT2JqQXR0cgotewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4ga2l0
KFdURjo6Z2V0UHRyKElNUEwtPnhtbE9iakF0dHIoKSkpOwotfQotCi0tICh2b2lkKXNldFhNTE9i
akF0dHI6KERPTVRlc3RPYmogKiluZXdYTUxPYmpBdHRyCi17Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIEFTU0VSVChuZXdYTUxPYmpBdHRyKTsKLQotICAg
IElNUEwtPnNldFhNTE9iakF0dHIoY29yZShuZXdYTUxPYmpBdHRyKSk7Ci19Ci0KLS0gKEJPT0wp
Y3JlYXRlCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IHJldHVybiBJTVBMLT5pc0NyZWF0ZSgpOwotfQotCi0tICh2b2lkKXNldENyZWF0ZTooQk9PTClu
ZXdDcmVhdGUKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgSU1QTC0+c2V0Q3JlYXRlKG5ld0NyZWF0ZSk7Ci19Ci0KLS0gKE5TU3RyaW5nICopcmVmbGVj
dGVkU3RyaW5nQXR0cgotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICByZXR1cm4gSU1QTC0+Z2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVm
bGVjdGVkc3RyaW5nYXR0ckF0dHIpOwotfQotCi0tICh2b2lkKXNldFJlZmxlY3RlZFN0cmluZ0F0
dHI6KE5TU3RyaW5nICopbmV3UmVmbGVjdGVkU3RyaW5nQXR0cgotewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBJTVBMLT5zZXRBdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0ciwgbmV3UmVmbGVjdGVkU3RyaW5n
QXR0cik7Ci19Ci0KLS0gKGludClyZWZsZWN0ZWRJbnRlZ3JhbEF0dHIKLXsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgcmV0dXJuIElNUEwtPmdldEludGVn
cmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0
cik7Ci19Ci0KLS0gKHZvaWQpc2V0UmVmbGVjdGVkSW50ZWdyYWxBdHRyOihpbnQpbmV3UmVmbGVj
dGVkSW50ZWdyYWxBdHRyCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIElNUEwtPnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0ciwgbmV3UmVmbGVjdGVkSW50ZWdyYWxBdHRyKTsKLX0K
LQotLSAodW5zaWduZWQpcmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIKLXsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgcmV0dXJuIElNUEwtPmdldFVu
c2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNp
Z25lZGludGVncmFsYXR0ckF0dHIpOwotfQotCi0tICh2b2lkKXNldFJlZmxlY3RlZFVuc2lnbmVk
SW50ZWdyYWxBdHRyOih1bnNpZ25lZCluZXdSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cgot
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBJTVBMLT5z
ZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVk
dW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRyLCBuZXdSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0
cik7Ci19Ci0KLS0gKEJPT0wpcmVmbGVjdGVkQm9vbGVhbkF0dHIKLXsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgcmV0dXJuIElNUEwtPmhhc0F0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0cik7Ci19Ci0KLS0g
KHZvaWQpc2V0UmVmbGVjdGVkQm9vbGVhbkF0dHI6KEJPT0wpbmV3UmVmbGVjdGVkQm9vbGVhbkF0
dHIKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgSU1Q
TC0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xl
YW5hdHRyQXR0ciwgbmV3UmVmbGVjdGVkQm9vbGVhbkF0dHIpOwotfQotCi0tIChOU1N0cmluZyAq
KXJlZmxlY3RlZFVSTEF0dHIKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgcmV0dXJuIElNUEwtPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKTsKLX0KLQotLSAodm9pZClzZXRSZWZsZWN0ZWRVUkxB
dHRyOihOU1N0cmluZyAqKW5ld1JlZmxlY3RlZFVSTEF0dHIKLXsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgSU1QTC0+c2V0QXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIsIG5ld1JlZmxlY3RlZFVSTEF0dHIpOwot
fQotCi0tIChOU1N0cmluZyAqKXJlZmxlY3RlZE5vbkVtcHR5VVJMQXR0cgotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4gSU1QTC0+Z2V0Tm9u
RW1wdHlVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRub25lbXB0eXVy
bGF0dHJBdHRyKTsKLX0KLQotLSAodm9pZClzZXRSZWZsZWN0ZWROb25FbXB0eVVSTEF0dHI6KE5T
U3RyaW5nICopbmV3UmVmbGVjdGVkTm9uRW1wdHlVUkxBdHRyCi17Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIElNUEwtPnNldEF0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OnJlZmxlY3RlZG5vbmVtcHR5dXJsYXR0ckF0dHIsIG5ld1JlZmxlY3RlZE5v
bkVtcHR5VVJMQXR0cik7Ci19Ci0KLS0gKE5TU3RyaW5nICopcmVmbGVjdGVkU3RyaW5nQXR0cgot
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4g
SU1QTC0+Z2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmlu
Z0F0dHJBdHRyKTsKLX0KLQotLSAodm9pZClzZXRSZWZsZWN0ZWRTdHJpbmdBdHRyOihOU1N0cmlu
ZyAqKW5ld1JlZmxlY3RlZFN0cmluZ0F0dHIKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgSU1QTC0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyLCBuZXdSZWZsZWN0ZWRTdHJpbmdBdHRyKTsK
LX0KLQotLSAoaW50KXJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cgotewotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4gSU1QTC0+Z2V0SW50ZWdy
YWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRy
QXR0cik7Ci19Ci0KLS0gKHZvaWQpc2V0UmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyOihpbnQp
bmV3UmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIElNUEwtPnNldEludGVncmFsQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIsIG5ld1JlZmxlY3Rl
ZEN1c3RvbUludGVncmFsQXR0cik7Ci19Ci0KLS0gKEJPT0wpcmVmbGVjdGVkQ3VzdG9tQm9vbGVh
bkF0dHIKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
cmV0dXJuIElNUEwtPmhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRl
bnRCb29sZWFuQXR0ckF0dHIpOwotfQotCi0tICh2b2lkKXNldFJlZmxlY3RlZEN1c3RvbUJvb2xl
YW5BdHRyOihCT09MKW5ld1JlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyCi17Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIElNUEwtPnNldEJvb2xlYW5BdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyLCBu
ZXdSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0cik7Ci19Ci0KLS0gKE5TU3RyaW5nICopcmVmbGVj
dGVkQ3VzdG9tVVJMQXR0cgotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICByZXR1cm4gSU1QTC0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyKTsKLX0KLQotLSAodm9pZClzZXRSZWZsZWN0ZWRD
dXN0b21VUkxBdHRyOihOU1N0cmluZyAqKW5ld1JlZmxlY3RlZEN1c3RvbVVSTEF0dHIKLXsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgSU1QTC0+c2V0QXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyLCBuZXdS
ZWZsZWN0ZWRDdXN0b21VUkxBdHRyKTsKLX0KLQotLSAoTlNTdHJpbmcgKilyZWZsZWN0ZWRDdXN0
b21Ob25FbXB0eVVSTEF0dHIKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgcmV0dXJuIElNUEwtPmdldE5vbkVtcHR5VVJMQXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudE5vbkVtcHR5VVJMQXR0ckF0dHIpOwotfQotCi0tICh2
b2lkKXNldFJlZmxlY3RlZEN1c3RvbU5vbkVtcHR5VVJMQXR0cjooTlNTdHJpbmcgKiluZXdSZWZs
ZWN0ZWRDdXN0b21Ob25FbXB0eVVSTEF0dHIKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgSU1QTC0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y3VzdG9tQ29udGVudE5vbkVtcHR5VVJMQXR0ckF0dHIsIG5ld1JlZmxlY3RlZEN1c3RvbU5v
bkVtcHR5VVJMQXR0cik7Ci19Ci0KLS0gKGludClhdHRyV2l0aEdldHRlckV4Y2VwdGlvbgotewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbnQgcmVzdWx0ID0gSU1QTC0+YXR0cldpdGhHZXR0
ZXJFeGNlcHRpb24oZWMpOwotICAgIFdlYkNvcmU6OnJhaXNlT25ET01FcnJvcihlYyk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZClzZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbjoo
aW50KW5ld0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIElNUEwtPnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKG5ld0F0dHJXaXRoR2V0dGVyRXhj
ZXB0aW9uLCBlYyk7Ci0gICAgV2ViQ29yZTo6cmFpc2VPbkRPTUVycm9yKGVjKTsKLX0KLQotLSAo
aW50KWF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIHJldHVybiBJTVBMLT5hdHRyV2l0aFNldHRlckV4Y2VwdGlv
bigpOwotfQotCi0tICh2b2lkKXNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uOihpbnQpbmV3QXR0
cldpdGhTZXR0ZXJFeGNlcHRpb24KLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgSU1QTC0+
c2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24obmV3QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24sIGVj
KTsKLSAgICBXZWJDb3JlOjpyYWlzZU9uRE9NRXJyb3IoZWMpOwotfQotCi0tIChOU1N0cmluZyAq
KXN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIE5TU3RyaW5nICpyZXN1bHQgPSBJTVBMLT5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bihlYyk7Ci0gICAgV2ViQ29yZTo6cmFpc2VPbkRPTUVycm9yKGVjKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi0tICh2b2lkKXNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uOihOU1N0
cmluZyAqKW5ld1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uCi17Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIElNUEwtPnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKG5ld1N0
cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uLCBlYyk7Ci0gICAgV2ViQ29yZTo6cmFpc2VPbkRP
TUVycm9yKGVjKTsKLX0KLQotLSAoTlNTdHJpbmcgKilzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbgotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBy
ZXR1cm4gSU1QTC0+c3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKTsKLX0KLQotLSAodm9p
ZClzZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbjooTlNTdHJpbmcgKiluZXdTdHJpbmdB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbgotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBJTVBM
LT5zZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihuZXdTdHJpbmdBdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbiwgZWMpOwotICAgIFdlYkNvcmU6OnJhaXNlT25ET01FcnJvcihlYyk7Ci19Ci0K
LS0gKGludCljdXN0b21BdHRyCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIHJldHVybiBJTVBMLT5jdXN0b21BdHRyKCk7Ci19Ci0KLS0gKHZvaWQpc2V0
Q3VzdG9tQXR0cjooaW50KW5ld0N1c3RvbUF0dHIKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgSU1QTC0+c2V0Q3VzdG9tQXR0cihuZXdDdXN0b21BdHRy
KTsKLX0KLQotLSAoTlNTdHJpbmcgKilzY3JpcHRTdHJpbmdBdHRyCi17Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIHJldHVybiBJTVBMLT5zY3JpcHRTdHJp
bmdBdHRyKCk7Ci19Ci0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLS0gKGludCljb25kaXRpb25h
bEF0dHIxCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IHJldHVybiBJTVBMLT5jb25kaXRpb25hbEF0dHIxKCk7Ci19Ci0KLS0gKHZvaWQpc2V0Q29uZGl0
aW9uYWxBdHRyMTooaW50KW5ld0NvbmRpdGlvbmFsQXR0cjEKLXsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgSU1QTC0+c2V0Q29uZGl0aW9uYWxBdHRyMShu
ZXdDb25kaXRpb25hbEF0dHIxKTsKLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEp
ICYmIEVOQUJMRShDb25kaXRpb24yKQotLSAoaW50KWNvbmRpdGlvbmFsQXR0cjIKLXsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgcmV0dXJuIElNUEwtPmNv
bmRpdGlvbmFsQXR0cjIoKTsKLX0KLQotLSAodm9pZClzZXRDb25kaXRpb25hbEF0dHIyOihpbnQp
bmV3Q29uZGl0aW9uYWxBdHRyMgotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBJTVBMLT5zZXRDb25kaXRpb25hbEF0dHIyKG5ld0NvbmRpdGlvbmFsQXR0
cjIpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjIpCi0tIChpbnQpY29uZGl0aW9uYWxBdHRyMwotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4gSU1QTC0+Y29uZGl0aW9uYWxBdHRyMygp
OwotfQotCi0tICh2b2lkKXNldENvbmRpdGlvbmFsQXR0cjM6KGludCluZXdDb25kaXRpb25hbEF0
dHIzCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIElN
UEwtPnNldENvbmRpdGlvbmFsQXR0cjMobmV3Q29uZGl0aW9uYWxBdHRyMyk7Ci19Ci0jZW5kaWYK
LQotLSAoaW50KWRlc2NyaXB0aW9uTmFtZQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4gSU1QTC0+ZGVzY3JpcHRpb24oKTsKLX0KLQotLSAo
aW50KWlkTmFtZQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICByZXR1cm4gSU1QTC0+aWQoKTsKLX0KLQotLSAodm9pZClzZXRJZE5hbWU6KGludCluZXdJ
ZE5hbWUKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
SU1QTC0+c2V0SWQobmV3SWROYW1lKTsKLX0KLQotLSAoTlNTdHJpbmcgKiloYXNoTmFtZQotewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4gSU1Q
TC0+aGFzaCgpOwotfQotCi0tICh2b2lkKXZvaWRNZXRob2QKLXsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgSU1QTC0+dm9pZE1ldGhvZCgpOwotfQotCi0t
ICh2b2lkKXZvaWRNZXRob2RXaXRoQXJnczooaW50KWludEFyZyBzdHJBcmc6KE5TU3RyaW5nICop
c3RyQXJnIG9iakFyZzooRE9NVGVzdE9iaiAqKW9iakFyZwotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBJTVBMLT52b2lkTWV0aG9kV2l0aEFyZ3MoaW50
QXJnLCBzdHJBcmcsIGNvcmUob2JqQXJnKSk7Ci19Ci0KLS0gKGludClpbnRNZXRob2QKLXsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgcmV0dXJuIElNUEwt
PmludE1ldGhvZCgpOwotfQotCi0tIChpbnQpaW50TWV0aG9kV2l0aEFyZ3M6KGludClpbnRBcmcg
c3RyQXJnOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmogKilvYmpBcmcKLXsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgcmV0dXJuIElN
UEwtPmludE1ldGhvZFdpdGhBcmdzKGludEFyZywgc3RyQXJnLCBjb3JlKG9iakFyZykpOwotfQot
Ci0tIChET01UZXN0T2JqICopb2JqTWV0aG9kCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIHJldHVybiBraXQoV1RGOjpnZXRQdHIoSU1QTC0+b2JqTWV0
aG9kKCkpKTsKLX0KLQotLSAoRE9NVGVzdE9iaiAqKW9iak1ldGhvZFdpdGhBcmdzOihpbnQpaW50
QXJnIHN0ckFyZzooTlNTdHJpbmcgKilzdHJBcmcgb2JqQXJnOihET01UZXN0T2JqICopb2JqQXJn
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIHJldHVy
biBraXQoV1RGOjpnZXRQdHIoSU1QTC0+b2JqTWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJBcmcs
IGNvcmUob2JqQXJnKSkpKTsKLX0KLQotLSAoRE9NVGVzdE9iaiAqKW1ldGhvZFRoYXRSZXF1aXJl
c0FsbEFyZ3M6KE5TU3RyaW5nICopc3RyQXJnIG9iakFyZzooRE9NVGVzdE9iaiAqKW9iakFyZwot
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4g
a2l0KFdURjo6Z2V0UHRyKElNUEwtPm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3Moc3RyQXJnLCBj
b3JlKG9iakFyZykpKSk7Ci19Ci0KLS0gKERPTVRlc3RPYmogKiltZXRob2RUaGF0UmVxdWlyZXNB
bGxBcmdzQW5kVGhyb3dzOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmogKilv
YmpBcmcKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRE9NVGVzdE9iaiAqcmVzdWx0ID0g
a2l0KFdURjo6Z2V0UHRyKElNUEwtPm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3Mo
c3RyQXJnLCBjb3JlKG9iakFyZyksIGVjKSkpOwotICAgIFdlYkNvcmU6OnJhaXNlT25ET01FcnJv
cihlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZClzZXJpYWxpemVkVmFsdWU6
KE5TU3RyaW5nICopc2VyaWFsaXplZEFyZwotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBJTVBMLT5zZXJpYWxpemVkVmFsdWUoV2ViQ29yZTo6U2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV1RGOjpTdHJpbmcoc2VyaWFsaXplZEFyZykpKTsKLX0K
LQotLSAodm9pZClpZGJLZXk6KERPTUlEQktleSAqKWtleQotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBJTVBMLT5pZGJLZXkoY29yZShrZXkpKTsKLX0K
LQotLSAodm9pZClvcHRpb25zT2JqZWN0OihET01PcHRpb25zT2JqZWN0ICopb28gb29vOihET01P
cHRpb25zT2JqZWN0ICopb29vCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIElNUEwtPm9wdGlvbnNPYmplY3QoY29yZShvbyksIGNvcmUob29vKSk7Ci19
Ci0KLS0gKHZvaWQpbWV0aG9kV2l0aEV4Y2VwdGlvbgotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBJTVBMLT5tZXRob2RXaXRoRXhjZXB0aW9uKGVjKTsKLSAgICBXZWJDb3JlOjpyYWlzZU9u
RE9NRXJyb3IoZWMpOwotfQotCi0tICh2b2lkKWN1c3RvbU1ldGhvZAotewotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBJTVBMLT5jdXN0b21NZXRob2QoKTsK
LX0KLQotLSAodm9pZCljdXN0b21NZXRob2RXaXRoQXJnczooaW50KWludEFyZyBzdHJBcmc6KE5T
U3RyaW5nICopc3RyQXJnIG9iakFyZzooRE9NVGVzdE9iaiAqKW9iakFyZwotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBJTVBMLT5jdXN0b21NZXRob2RX
aXRoQXJncyhpbnRBcmcsIHN0ckFyZywgY29yZShvYmpBcmcpKTsKLX0KLQotLSAodm9pZCljdXN0
b21BcmdzQW5kRXhjZXB0aW9uOihET01sb2cgKilpbnRBcmcKLXsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgSU1QTC0+Y3VzdG9tQXJnc0FuZEV4Y2VwdGlvbihjb3JlKGludEFyZyksIGVjKTsK
LSAgICBXZWJDb3JlOjpyYWlzZU9uRE9NRXJyb3IoZWMpOwotfQotCi0tICh2b2lkKWFkZEV2ZW50
TGlzdGVuZXI6KE5TU3RyaW5nICopdHlwZSBsaXN0ZW5lcjooaWQgPERPTUV2ZW50TGlzdGVuZXI+
KWxpc3RlbmVyIHVzZUNhcHR1cmU6KEJPT0wpdXNlQ2FwdHVyZQotewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6RXZlbnRMaXN0
ZW5lcj4gbmF0aXZlRXZlbnRMaXN0ZW5lciA9IFdlYkNvcmU6Ok9iakNFdmVudExpc3RlbmVyOjp3
cmFwKGxpc3RlbmVyKTsKLSAgICBJTVBMLT5hZGRFdmVudExpc3RlbmVyKHR5cGUsIFdURjo6Z2V0
UHRyKG5hdGl2ZUV2ZW50TGlzdGVuZXIpLCB1c2VDYXB0dXJlKTsKLX0KLQotLSAodm9pZClyZW1v
dmVFdmVudExpc3RlbmVyOihOU1N0cmluZyAqKXR5cGUgbGlzdGVuZXI6KGlkIDxET01FdmVudExp
c3RlbmVyPilsaXN0ZW5lciB1c2VDYXB0dXJlOihCT09MKXVzZUNhcHR1cmUKLXsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkV2
ZW50TGlzdGVuZXI+IG5hdGl2ZUV2ZW50TGlzdGVuZXIgPSBXZWJDb3JlOjpPYmpDRXZlbnRMaXN0
ZW5lcjo6d3JhcChsaXN0ZW5lcik7Ci0gICAgSU1QTC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBl
LCBXVEY6OmdldFB0cihuYXRpdmVFdmVudExpc3RlbmVyKSwgdXNlQ2FwdHVyZSk7Ci19Ci0KLS0g
KHZvaWQpd2l0aER5bmFtaWNGcmFtZQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBJTVBMLT53aXRoRHluYW1pY0ZyYW1lKCk7Ci19Ci0KLS0gKHZvaWQp
d2l0aER5bmFtaWNGcmFtZUFuZEFyZzooaW50KWludEFyZwotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBJTVBMLT53aXRoRHluYW1pY0ZyYW1lQW5kQXJn
KGludEFyZyk7Ci19Ci0KLS0gKHZvaWQpd2l0aER5bmFtaWNGcmFtZUFuZE9wdGlvbmFsQXJnOihp
bnQpaW50QXJnIG9wdGlvbmFsQXJnOihpbnQpb3B0aW9uYWxBcmcKLXsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgSU1QTC0+d2l0aER5bmFtaWNGcmFtZUFu
ZE9wdGlvbmFsQXJnKGludEFyZywgb3B0aW9uYWxBcmcpOwotfQotCi0tICh2b2lkKXdpdGhEeW5h
bWljRnJhbWVBbmRVc2VyR2VzdHVyZTooaW50KWludEFyZwotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBJTVBMLT53aXRoRHluYW1pY0ZyYW1lQW5kVXNl
ckdlc3R1cmUoaW50QXJnKTsKLX0KLQotLSAodm9pZCl3aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdl
c3R1cmVBU0FEOihpbnQpaW50QXJnIG9wdGlvbmFsQXJnOihpbnQpb3B0aW9uYWxBcmcKLXsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgSU1QTC0+d2l0aER5
bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlQVNBRChpbnRBcmcsIG9wdGlvbmFsQXJnKTsKLX0KLQot
LSAodm9pZCl3aXRoU2NyaXB0U3RhdGVWb2lkCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIElNUEwtPndpdGhTY3JpcHRTdGF0ZVZvaWQoKTsKLX0KLQot
LSAoRE9NVGVzdE9iaiAqKXdpdGhTY3JpcHRTdGF0ZU9iagotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4ga2l0KFdURjo6Z2V0UHRyKElNUEwt
PndpdGhTY3JpcHRTdGF0ZU9iaigpKSk7Ci19Ci0KLS0gKHZvaWQpd2l0aFNjcmlwdFN0YXRlVm9p
ZEV4Y2VwdGlvbgotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBJTVBMLT53aXRoU2NyaXB0
U3RhdGVWb2lkRXhjZXB0aW9uKGVjKTsKLSAgICBXZWJDb3JlOjpyYWlzZU9uRE9NRXJyb3IoZWMp
OwotfQotCi0tIChET01UZXN0T2JqICopd2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uCi17Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIERPTVRlc3RPYmogKnJlc3VsdCA9IGtpdChXVEY6Omdl
dFB0cihJTVBMLT53aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oZWMpKSk7Ci0gICAgV2ViQ29y
ZTo6cmFpc2VPbkRPTUVycm9yKGVjKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0tICh2b2lk
KXdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIElNUEwtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
Ci19Ci0KLS0gKHZvaWQpbWV0aG9kV2l0aE9wdGlvbmFsQXJnOihpbnQpb3B0Ci17Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIElNUEwtPm1ldGhvZFdpdGhP
cHRpb25hbEFyZyhvcHQpOwotfQotCi0tICh2b2lkKW1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0Fu
ZE9wdGlvbmFsQXJnOihpbnQpbm9uT3B0IG9wdDooaW50KW9wdAotewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBJTVBMLT5tZXRob2RXaXRoTm9uT3B0aW9u
YWxBcmdBbmRPcHRpb25hbEFyZyhub25PcHQsIG9wdCk7Ci19Ci0KLS0gKHZvaWQpbWV0aG9kV2l0
aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzOihpbnQpbm9uT3B0IG9wdDE6KGludClv
cHQxIG9wdDI6KGludClvcHQyCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIElNUEwtPm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFs
QXJncyhub25PcHQsIG9wdDEsIG9wdDIpOwotfQotCi0tICh2b2lkKWNsYXNzTWV0aG9kCi17Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIElNUEwtPmNsYXNz
TWV0aG9kKCk7Ci19Ci0KLS0gKGludCljbGFzc01ldGhvZFdpdGhPcHRpb25hbDooaW50KWFyZwot
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4g
SU1QTC0+Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoYXJnKTsKLX0KLQotQGVuZAotCi1XZWJDb3Jl
OjpUZXN0T2JqKiBjb3JlKERPTVRlc3RPYmogKndyYXBwZXIpCi17Ci0gICAgcmV0dXJuIHdyYXBw
ZXIgPyByZWludGVycHJldF9jYXN0PFdlYkNvcmU6OlRlc3RPYmoqPih3cmFwcGVyLT5faW50ZXJu
YWwpIDogMDsKLX0KLQotRE9NVGVzdE9iaiAqa2l0KFdlYkNvcmU6OlRlc3RPYmoqIHZhbHVlKQot
ewotICAgIHsgRE9NX0FTU0VSVF9NQUlOX1RIUkVBRCgpOyBXZWJDb3JlVGhyZWFkVmlvbGF0aW9u
Q2hlY2tSb3VuZE9uZSgpOyB9OwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgaWYgKERPTVRlc3RPYmogKndyYXBwZXIgPSBnZXRET01XcmFwcGVyKHZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuIFtbd3JhcHBlciByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLSAgICBET01UZXN0
T2JqICp3cmFwcGVyID0gW1tET01UZXN0T2JqIGFsbG9jXSBfaW5pdF07Ci0gICAgd3JhcHBlci0+
X2ludGVybmFsID0gcmVpbnRlcnByZXRfY2FzdDxET01PYmplY3RJbnRlcm5hbCo+KHZhbHVlKTsK
LSAgICB2YWx1ZS0+cmVmKCk7Ci0gICAgYWRkRE9NV3JhcHBlcih3cmFwcGVyLCB2YWx1ZSk7Ci0g
ICAgcmV0dXJuIFt3cmFwcGVyIGF1dG9yZWxlYXNlXTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmpJbnRlcm5hbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RP
YmpJbnRlcm5hbC5oCShyZXZpc2lvbiA4OTE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmpJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDM4ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCi0gKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW1wb3J0IDxXZWJD
b3JlL0RPTVRlc3RPYmouaD4KLQotI2lmIFdFQktJVF9WRVJTSU9OX01BWF9BTExPV0VEID49IFdF
QktJVF9WRVJTSU9OX0xBVEVTVAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgVGVz
dE9iajsKLX0KLQotV2ViQ29yZTo6VGVzdE9iaiogY29yZShET01UZXN0T2JqICopOwotRE9NVGVz
dE9iaiAqa2l0KFdlYkNvcmU6OlRlc3RPYmoqKTsKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCShy
ZXZpc2lvbiA4OTE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2ltcG9ydCA8V2ViQ29yZS9ET01PYmplY3QuaD4KLQotI2lmIFdFQktJVF9WRVJTSU9O
X01BWF9BTExPV0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAotCi1AY2xhc3MgTlNTdHJpbmc7
Ci0KLUBpbnRlcmZhY2UgRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSA6IERP
TU9iamVjdAotLSAoTlNTdHJpbmcgKil2YWx1ZTsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UubW0JKHJldmlzaW9uIDg5MTQyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMSw5OSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjIpCi0KLSNpbXBvcnQgIkRPTUludGVybmFsLmgiCi0KLSNpbXBvcnQgIkRPTVRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKLQotI2ltcG9ydCAiRE9NQmxvYkludGVy
bmFsLmgiCi0jaW1wb3J0ICJET01DU1NSdWxlSW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTUNTU1Zh
bHVlSW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTUV2ZW50SW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRP
TU5vZGVJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NU3R5bGVTaGVldEludGVybmFsLmgiCi0jaW1w
b3J0ICJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlSW50ZXJuYWwuaCIKLSNp
bXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJzLmgiCi0jaW1wb3J0ICJKU01haW5UaHJlYWRFeGVjU3Rh
dGUuaCIKLSNpbXBvcnQgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2ltcG9ydCAiVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIgotI2ltcG9ydCAiVGhyZWFkQ2hlY2suaCIK
LSNpbXBvcnQgIldlYkNvcmVPYmpDRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJTY3JpcHRPYmplY3RQ
cml2YXRlLmgiCi0jaW1wb3J0IDx3dGYvR2V0UHRyLmg+Ci0KLSNkZWZpbmUgSU1QTCByZWludGVy
cHJldF9jYXN0PFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihf
aW50ZXJuYWwpCi0KLUBpbXBsZW1lbnRhdGlvbiBET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlCi0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVk
dWxlRGVhbGxvY2F0ZU9uTWFpblRocmVhZChbRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSBjbGFzc10sIHNlbGYpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoX2ludGVy
bmFsKQotICAgICAgICBJTVBMLT5kZXJlZigpOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQot
LSAodm9pZClmaW5hbGl6ZQotewotICAgIGlmIChfaW50ZXJuYWwpCi0gICAgICAgIElNUEwtPmRl
cmVmKCk7Ci0gICAgW3N1cGVyIGZpbmFsaXplXTsKLX0KLQotLSAoTlNTdHJpbmcgKil2YWx1ZQot
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4g
SU1QTC0+dmFsdWUoKS0+dG9TdHJpbmcoKTsKLX0KLQotQGVuZAotCi1XZWJDb3JlOjpUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjb3JlKERPTVRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UgKndyYXBwZXIpCi17Ci0gICAgcmV0dXJuIHdyYXBwZXIgPyByZWludGVy
cHJldF9jYXN0PFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPih3
cmFwcGVyLT5faW50ZXJuYWwpIDogMDsKLX0KLQotRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSAqa2l0KFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UqIHZhbHVlKQotewotICAgIHsgRE9NX0FTU0VSVF9NQUlOX1RIUkVBRCgpOyBXZWJDb3JlVGhy
ZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZE9uZSgpOyB9OwotICAgIGlmICghdmFsdWUpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0gICAgaWYgKERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UgKndyYXBwZXIgPSBnZXRET01XcmFwcGVyKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFtbd3Jh
cHBlciByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLSAgICBET01UZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlICp3cmFwcGVyID0gW1tET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlIGFsbG9jXSBfaW5pdF07Ci0gICAgd3JhcHBlci0+X2ludGVybmFsID0gcmVpbnRlcnBy
ZXRfY2FzdDxET01PYmplY3RJbnRlcm5hbCo+KHZhbHVlKTsKLSAgICB2YWx1ZS0+cmVmKCk7Ci0g
ICAgYWRkRE9NV3JhcHBlcih3cmFwcGVyLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIFt3cmFwcGVyIGF1
dG9yZWxlYXNlXTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VJbnRlcm5hbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VJbnRlcm5hbC5oCShyZXZpc2lvbiA4OTE0
MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDM4ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCi0gKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW1wb3J0IDxXZWJD
b3JlL0RPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaD4KLQotI2lmIFdFQktJ
VF9WRVJTSU9OX01BWF9BTExPV0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZTsKLX0KLQotV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY29y
ZShET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICopOwotRE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAqa2l0KFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UqKTsKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5jcHAJ
KHJldmlzaW9uIDg5MTQyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdENhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjQgKzAsMCBAQAot
LyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAgICBCb3N0b24sIE1BIDAy
MTExLTEzMDcsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJWOFRl
c3RDYWxsYmFjay5oIgotCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotCi0jaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4
Q2xhc3MxLmgiCi0jaW5jbHVkZSAiVjhDbGFzczIuaCIKLSNpbmNsdWRlICJWOEN1c3RvbVZvaWRD
YWxsYmFjay5oIgotI2luY2x1ZGUgIlY4RE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIlY4UHJv
eHkuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVY4VGVzdENhbGxiYWNrOjpWOFRlc3RDYWxsYmFj
ayh2ODo6TG9jYWw8djg6Ok9iamVjdD4gY2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCi0gICAgOiBBY3RpdmVET01DYWxsYmFjayhjb250ZXh0KQotICAgICwgbV9jYWxs
YmFjayh2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGNhbGxiYWNrKSkKLSAgICAsIG1f
d29ybGRDb250ZXh0KFVzZUN1cnJlbnRXb3JsZCkKLXsKLX0KLQotVjhUZXN0Q2FsbGJhY2s6On5W
OFRlc3RDYWxsYmFjaygpCi17Ci0gICAgbV9jYWxsYmFjay5EaXNwb3NlKCk7Ci19Ci0KLS8vIEZ1
bmN0aW9ucwotCi1ib29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhOb1BhcmFtKCkKLXsK
LSAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4gdjhDb250ZXh0ID0gdG9WOENvbnRleHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBt
X3dvcmxkQ29udGV4dCk7Ci0gICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7Ci0K
LQotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAqYXJndiA9IDA7Ci0KLSAgICBib29sIGNhbGxi
YWNrUmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICByZXR1cm4gIWludm9rZUNhbGxiYWNrKG1fY2Fs
bGJhY2ssIDAsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSk7Ci19Ci0KLWJvb2wgVjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVBhcmFt
KENsYXNzMSogY2xhc3MxUGFyYW0pCi17Ci0gICAgaWYgKCFjYW5JbnZva2VDYWxsYmFjaygpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsK
LQotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHRvVjhDb250ZXh0KHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgbV93b3JsZENvbnRleHQpOwotICAgIGlmICh2OENvbnRl
eHQuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHY4OjpDb250ZXh0OjpT
Y29wZSBzY29wZSh2OENvbnRleHQpOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNsYXNz
MVBhcmFtSGFuZGxlID0gdG9WOChjbGFzczFQYXJhbSk7Ci0gICAgaWYgKGNsYXNzMVBhcmFtSGFu
ZGxlLklzRW1wdHkoKSkgewotICAgICAgICBDUkFTSCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0gewotICAgICAgICBj
bGFzczFQYXJhbUhhbmRsZQotICAgIH07Ci0KLSAgICBib29sIGNhbGxiYWNrUmV0dXJuVmFsdWUg
PSBmYWxzZTsKLSAgICByZXR1cm4gIWludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssIDEsIGFyZ3Ys
IGNhbGxiYWNrUmV0dXJuVmFsdWUsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci19Ci0KLWJv
b2wgVjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKENsYXNzMiogY2xhc3My
UGFyYW0sIGNvbnN0IFN0cmluZyYgc3RyQXJnKQotewotICAgIGlmICghY2FuSW52b2tlQ2FsbGJh
Y2soKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSB0b1Y4Q29u
dGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1fd29ybGRDb250ZXh0KTsKLSAgICBpZiAo
djhDb250ZXh0LklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICB2ODo6Q29u
dGV4dDo6U2NvcGUgc2NvcGUodjhDb250ZXh0KTsKLQotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBjbGFzczJQYXJhbUhhbmRsZSA9IHRvVjgoY2xhc3MyUGFyYW0pOwotICAgIGlmIChjbGFzczJQ
YXJhbUhhbmRsZS5Jc0VtcHR5KCkpIHsKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdHJBcmdIYW5kbGUgPSB2
OFN0cmluZyhzdHJBcmcpOwotICAgIGlmIChzdHJBcmdIYW5kbGUuSXNFbXB0eSgpKSB7Ci0gICAg
ICAgIENSQVNIKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBhcmd2W10gPSB7Ci0gICAgICAgIGNsYXNzMlBhcmFtSGFuZGxlLAotICAg
ICAgICBzdHJBcmdIYW5kbGUKLSAgICB9OwotCi0gICAgYm9vbCBjYWxsYmFja1JldHVyblZhbHVl
ID0gZmFsc2U7Ci0gICAgcmV0dXJuICFpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAyLCBhcmd2
LCBjYWxsYmFja1JldHVyblZhbHVlLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotfQotCi1i
b29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhTdHJpbmdMaXN0KFBhc3NSZWZQdHI8RE9N
U3RyaW5nTGlzdD4gbGlzdFBhcmFtKQotewotICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7
Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSB0b1Y4Q29udGV4dChz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1fd29ybGRDb250ZXh0KTsKLSAgICBpZiAodjhDb250
ZXh0LklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICB2ODo6Q29udGV4dDo6
U2NvcGUgc2NvcGUodjhDb250ZXh0KTsKLQotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBsaXN0
UGFyYW1IYW5kbGUgPSB0b1Y4KGxpc3RQYXJhbSk7Ci0gICAgaWYgKGxpc3RQYXJhbUhhbmRsZS5J
c0VtcHR5KCkpIHsKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsKLSAgICAgICAgbGlzdFBh
cmFtSGFuZGxlCi0gICAgfTsKLQotICAgIGJvb2wgY2FsbGJhY2tSZXR1cm5WYWx1ZSA9IGZhbHNl
OwotICAgIHJldHVybiAhaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgMSwgYXJndiwgY2FsbGJh
Y2tSZXR1cm5WYWx1ZSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENh
bGxiYWNrLmgJKHJldmlzaW9uIDg5MTQyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjYgKzAs
MCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAgICBCb3N0b24s
IE1BIDAyMTExLTEzMDcsIFVTQS4KLSovCi0KLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0KLSNpZm5k
ZWYgVjhUZXN0Q2FsbGJhY2tfaAotI2RlZmluZSBWOFRlc3RDYWxsYmFja19oCi0KLSNpbmNsdWRl
ICJBY3RpdmVET01DYWxsYmFjay5oIgotI2luY2x1ZGUgIlRlc3RDYWxsYmFjay5oIgotI2luY2x1
ZGUgIldvcmxkQ29udGV4dEhhbmRsZS5oIgotI2luY2x1ZGUgPHY4Lmg+Ci0jaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OwotCi1jbGFzcyBWOFRlc3RDYWxsYmFjayA6IHB1YmxpYyBUZXN0Q2FsbGJhY2ss
IHB1YmxpYyBBY3RpdmVET01DYWxsYmFjayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8VjhUZXN0Q2FsbGJhY2s+IGNyZWF0ZSh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2YWx1
ZS0+SXNPYmplY3QoKSk7Ci0gICAgICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBWOFRlc3RDYWxsYmFjayh2YWx1ZS0+VG9PYmplY3QoKSwgY29udGV4dCkp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgflY4VGVzdENhbGxiYWNrKCk7Ci0KLSAgICAvLyBGdW5j
dGlvbnMKLSAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoTm9QYXJhbSgpOwotICAgIHZpcnR1
YWwgYm9vbCBjYWxsYmFja1dpdGhDbGFzczFQYXJhbShDbGFzczEqIGNsYXNzMVBhcmFtKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oQ2xhc3MyKiBjbGFzczJQYXJh
bSwgY29uc3QgU3RyaW5nJiBzdHJBcmcpOwotICAgIENPTVBJTEVfQVNTRVJUKGZhbHNlKSAgICB2
aXJ0dWFsIGludCBjYWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZShDbGFzczMqIGNsYXNzM1Bh
cmFtKTsKLSAgICB2aXJ0dWFsIGludCBjdXN0b21DYWxsYmFjayhDbGFzczUqIGNsYXNzNVBhcmFt
LCBDbGFzczYqIGNsYXNzNlBhcmFtKTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoU3Ry
aW5nTGlzdChQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGxpc3RQYXJhbSk7Ci0KLXByaXZhdGU6
Ci0gICAgVjhUZXN0Q2FsbGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+LCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0Kik7Ci0KLSAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2NhbGxiYWNr
OwotICAgIFdvcmxkQ29udGV4dEhhbmRsZSBtX3dvcmxkQ29udGV4dDsKLX07Ci0KLX0KLQotI2Vu
ZGlmIC8vIFY4VGVzdENhbGxiYWNrX2gKLQotI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiA4OTE0MikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDEwOSArMCwwIEBACi0vKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3Vp
dGUgMzMwLAotICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlY4VGVzdEludGVyZmFjZS5oIgotCi0jaWYgRU5BQkxFKENv
bmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotCi0jaW5jbHVkZSAiUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oIgotI2luY2x1ZGUgIlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4QmluZGlu
Z1N0YXRlLmgiCi0jaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiVjhJc29sYXRl
ZENvbnRleHQuaCIKLSNpbmNsdWRlICJWOFByb3h5LmgiCi0jaW5jbHVkZSA8d3RmL1VudXNlZFBh
cmFtLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotV3JhcHBlclR5cGVJbmZvIFY4VGVzdElu
dGVyZmFjZTo6aW5mbyA9IHsgVjhUZXN0SW50ZXJmYWNlOjpHZXRUZW1wbGF0ZSwgVjhUZXN0SW50
ZXJmYWNlOjpkZXJlZk9iamVjdCwgMCwgMCB9OwotCi1uYW1lc3BhY2UgVGVzdEludGVyZmFjZUlu
dGVybmFsIHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgVjhfVVNFKFQpIHsgfQotCi19
IC8vIG5hbWVzcGFjZSBUZXN0SW50ZXJmYWNlSW50ZXJuYWwKLQotdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4VGVzdEludGVyZmFjZTo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RJbnRlcmZhY2UuQ29udHJ1Y3Rv
ciIpOwotICAgIHJldHVybiBWOFByb3h5Ojpjb25zdHJ1Y3RET01PYmplY3RXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDxUZXN0SW50ZXJmYWNlPihhcmdzLCAmaW5mbyk7Ci19Ci1zdGF0aWMgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdEludGVyZmFj
ZVRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjKQotewot
ICAgIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPiBkZWZhdWx0U2lnbmF0dXJlID0gY29uZmlndXJl
VGVtcGxhdGUoZGVzYywgIlRlc3RJbnRlcmZhY2UiLCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4oKSwgVjhUZXN0SW50ZXJmYWNlOjppbnRlcm5hbEZpZWxkQ291bnQsCi0gICAg
ICAgIDAsIDAsCi0gICAgICAgIDAsIDApOwotICAgIFVOVVNFRF9QQVJBTShkZWZhdWx0U2lnbmF0
dXJlKTsgLy8gSW4gc29tZSBjYXNlcywgaXQgd2lsbCBub3QgYmUgdXNlZC4KLSAgICAgICAgZGVz
Yy0+U2V0Q2FsbEhhbmRsZXIoVjhUZXN0SW50ZXJmYWNlOjpjb25zdHJ1Y3RvckNhbGxiYWNrKTsK
LSAgICAKLQotICAgIC8vIEN1c3RvbSB0b1N0cmluZyB0ZW1wbGF0ZQotICAgIGRlc2MtPlNldChn
ZXRUb1N0cmluZ05hbWUoKSwgZ2V0VG9TdHJpbmdUZW1wbGF0ZSgpKTsKLSAgICByZXR1cm4gZGVz
YzsKLX0KLQotdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEludGVy
ZmFjZTo6R2V0UmF3VGVtcGxhdGUoKQotewotICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0SW50ZXJmYWNlUmF3Q2FjaGUgPSBjcmVhdGVSYXdUZW1w
bGF0ZSgpOwotICAgIHJldHVybiBWOFRlc3RJbnRlcmZhY2VSYXdDYWNoZTsKLX0KLQotdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdEludGVyZmFjZTo6R2V0VGVtcGxh
dGUoKQotewotICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
VjhUZXN0SW50ZXJmYWNlQ2FjaGUgPSBDb25maWd1cmVWOFRlc3RJbnRlcmZhY2VUZW1wbGF0ZShH
ZXRSYXdUZW1wbGF0ZSgpKTsKLSAgICByZXR1cm4gVjhUZXN0SW50ZXJmYWNlQ2FjaGU7Ci19Ci0K
LWJvb2wgVjhUZXN0SW50ZXJmYWNlOjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dmFsdWUpCi17Ci0gICAgcmV0dXJuIEdldFJhd1RlbXBsYXRlKCktPkhhc0luc3RhbmNlKHZhbHVl
KTsKLX0KLQotCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEludGVyZmFjZTo6d3JhcFNs
b3coVGVzdEludGVyZmFjZSogaW1wbCkKLXsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdy
YXBwZXI7Ci0gICAgVjhQcm94eSogcHJveHkgPSAwOwotICAgIHdyYXBwZXIgPSBWOERPTVdyYXBw
ZXI6Omluc3RhbnRpYXRlVjhPYmplY3QocHJveHksICZpbmZvLCBpbXBsKTsKLSAgICBpZiAod3Jh
cHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotCi0gICAgaW1wbC0+cmVm
KCk7Ci0gICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlckhhbmRsZSA9IHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcik7Ci0jaWYgIVBMQVRGT1JNKFFUKQot
Ly8gRklYTUU6IHF0c2NyaXB0LXN0YWdpbmcncyBzaGlwcGVkIFY4IGRvZXMgbm90IGhhdmUgdGhl
IG5lZWRlZCBmdW5jdGlvbmFsaXR5IHlldC4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02MTI5MQotCi0gICAgaWYgKCFoYXNEZXBlbmRlbnRMaWZldGltZSkKLSAg
ICAgICAgd3JhcHBlckhhbmRsZS5NYXJrSW5kZXBlbmRlbnQoKTsKLSNlbmRpZgotICAgIGdldERP
TU9iamVjdE1hcCgpLnNldChpbXBsLCB3cmFwcGVySGFuZGxlKTsKLSAgICByZXR1cm4gd3JhcHBl
cjsKLX0KLQotdm9pZCBWOFRlc3RJbnRlcmZhY2U6OmRlcmVmT2JqZWN0KHZvaWQqIG9iamVjdCkK
LXsKLSAgICBzdGF0aWNfY2FzdDxUZXN0SW50ZXJmYWNlKj4ob2JqZWN0KS0+ZGVyZWYoKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuaAkocmV2aXNpb24g
ODkxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
SW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAgICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KLSovCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0K
LSNpZm5kZWYgVjhUZXN0SW50ZXJmYWNlX2gKLSNkZWZpbmUgVjhUZXN0SW50ZXJmYWNlX2gKLQot
I2luY2x1ZGUgIlRlc3RJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKLSNp
bmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+Ci0jaW5jbHVkZSA8djguaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFY4VGVzdEludGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzRGVwZW5kZW50TGlmZXRpbWUgPSBmYWxzZTsKLSAgICBzdGF0aWMg
Ym9vbCBIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpOwotICAgIHN0YXRp
YyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0UmF3VGVtcGxhdGUoKTsK
LSAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFRlbXBs
YXRlKCk7Ci0gICAgc3RhdGljIFRlc3RJbnRlcmZhY2UqIHRvTmF0aXZlKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gb2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
VGVzdEludGVyZmFjZSo+KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9N
V3JhcHBlck9iamVjdEluZGV4KSk7Ci0gICAgfQotICAgIGlubGluZSBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RJbnRlcmZhY2UqKTsKLSAgICBzdGF0aWMgdm9pZCBkZXJl
Zk9iamVjdCh2b2lkKik7Ci0gICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOwotICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKTsKLSAgICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmllbGRDb3Vu
dCA9IHY4RGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOwotcHJpdmF0ZToKLSAg
ICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhUZXN0SW50ZXJmYWNlKik7
Ci19OwotCi0KLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0SW50ZXJmYWNlOjp3cmFwKFRl
c3RJbnRlcmZhY2UqIGltcGwpCi17Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChpbXBsKTsKLSAgICAgICAgaWYgKCF3cmFwcGVy
LklzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiBWOFRl
c3RJbnRlcmZhY2U6OndyYXBTbG93KGltcGwpOwotfQotCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHRvVjgoVGVzdEludGVyZmFjZSogaW1wbCkKLXsKLSAgICBpZiAoIWltcGwpCi0gICAg
ICAgIHJldHVybiB2ODo6TnVsbCgpOwotICAgIHJldHVybiBWOFRlc3RJbnRlcmZhY2U6OndyYXAo
aW1wbCk7Ci19Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwg
VGVzdEludGVyZmFjZSA+IGltcGwpCi17Ci0gICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSk7Ci19
Ci19Ci0KLSNlbmRpZiAvLyBWOFRlc3RJbnRlcmZhY2VfaAotI2VuZGlmIC8vIEVOQUJMRShDb25k
aXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAkocmV2aXNpb24gODkxNDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE0ICswLDAgQEAKLS8qCi0gICAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
Ci0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5oIgotCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIk1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVz
LmgiCi0jaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhCaW5kaW5nTWFjcm9zLmgi
Ci0jaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKLSNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIK
LSNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgotI2luY2x1ZGUgIlY4UHJveHkuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1XcmFwcGVyVHlwZUluZm8gVjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcjo6aW5mbyA9IHsgVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6R2V0VGVt
cGxhdGUsIFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmRlcmVmT2JqZWN0LCAwLCAwIH07
Ci0KLW5hbWVzcGFjZSBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckludGVybmFsIHsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgVjhfVVNFKFQpIHsgfQotCi1zdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IG1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17
Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIubWV0aG9kIik7
Ci0gICAgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGltcCA9IFY4VGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXI6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIEVYQ0VQVElPTl9CTE9D
SyhSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4sIGxpc3RlbmVyLCBNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyOjpjcmVhdGUoYXJnc1swXSkpOwotICAgIGltcC0+bWV0aG9kKGxpc3RlbmVyKTsK
LSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVySW50ZXJuYWwKLQotc3RhdGljIGNvbnN0IEJhdGNo
ZWRDYWxsYmFjayBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNhbGxiYWNrc1tdID0gewotICAg
IHsibWV0aG9kIiwgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJJbnRlcm5hbDo6bWV0aG9kQ2Fs
bGJhY2t9LAotfTsKLXN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
Q29uZmlndXJlVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclRlbXBsYXRlKHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjKQotewotICAgIHY4OjpMb2NhbDx2ODo6U2ln
bmF0dXJlPiBkZWZhdWx0U2lnbmF0dXJlID0gY29uZmlndXJlVGVtcGxhdGUoZGVzYywgIlRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIiwgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+KCksIFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmludGVybmFsRmllbGRDb3VudCwK
LSAgICAgICAgMCwgMCwKLSAgICAgICAgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDYWxsYmFj
a3MsIFdURl9BUlJBWV9MRU5HVEgoVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDYWxsYmFja3Mp
KTsKLSAgICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBpbnN0YW5jZSA9IGRlc2MtPklu
c3RhbmNlVGVtcGxhdGUoKTsKLSAgICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90
byA9IGRlc2MtPlByb3RvdHlwZVRlbXBsYXRlKCk7Ci0gICAgCi0KLSAgICAvLyBDdXN0b20gdG9T
dHJpbmcgdGVtcGxhdGUKLSAgICBkZXNjLT5TZXQoZ2V0VG9TdHJpbmdOYW1lKCksIGdldFRvU3Ry
aW5nVGVtcGxhdGUoKSk7Ci0gICAgcmV0dXJuIGRlc2M7Ci19Ci0KLXY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpHZXRSYXdU
ZW1wbGF0ZSgpCi17Ci0gICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUmF3Q2FjaGUgPSBjcmVhdGVSYXdUZW1w
bGF0ZSgpOwotICAgIHJldHVybiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUmF3Q2FjaGU7
Ci19Ci0KLXY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyOjpHZXRUZW1wbGF0ZSgpCi17Ci0gICAgc3RhdGljIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ2Fj
aGUgPSBDb25maWd1cmVWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyVGVtcGxhdGUoR2V0UmF3
VGVtcGxhdGUoKSk7Ci0gICAgcmV0dXJuIFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDYWNo
ZTsKLX0KLQotYm9vbCBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpIYXNJbnN0YW5jZSh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCi17Ci0gICAgcmV0dXJuIEdldFJhd1RlbXBsYXRl
KCktPkhhc0luc3RhbmNlKHZhbHVlKTsKLX0KLQotCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OndyYXBTbG93KFRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyKiBpbXBsKQotewotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcjsKLSAg
ICBWOFByb3h5KiBwcm94eSA9IDA7Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFu
dGlhdGVWOE9iamVjdChwcm94eSwgJmluZm8sIGltcGwpOwotICAgIGlmICh3cmFwcGVyLklzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0KLSAgICBpbXBsLT5yZWYoKTsKLSAgICB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVySGFuZGxlID0gdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyKTsKLSNpZiAhUExBVEZPUk0oUVQpCi0vLyBGSVhNRTog
cXRzY3JpcHQtc3RhZ2luZydzIHNoaXBwZWQgVjggZG9lcyBub3QgaGF2ZSB0aGUgbmVlZGVkIGZ1
bmN0aW9uYWxpdHkgeWV0LgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYxMjkxCi0KLSAgICBpZiAoIWhhc0RlcGVuZGVudExpZmV0aW1lKQotICAgICAgICB3cmFw
cGVySGFuZGxlLk1hcmtJbmRlcGVuZGVudCgpOwotI2VuZGlmCi0gICAgZ2V0RE9NT2JqZWN0TWFw
KCkuc2V0KGltcGwsIHdyYXBwZXJIYW5kbGUpOwotICAgIHJldHVybiB3cmFwcGVyOwotfQotCi12
b2lkIFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmRlcmVmT2JqZWN0KHZvaWQqIG9iamVj
dCkKLXsKLSAgICBzdGF0aWNfY2FzdDxUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcio+KG9iamVj
dCktPmRlcmVmKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAkocmV2aXNpb24gODkxNDIpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBV
U0EuCi0qLwotCi0jaWZuZGVmIFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJfaAotI2RlZmlu
ZSBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyX2gKLQotI2luY2x1ZGUgIlRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAi
V3JhcHBlclR5cGVJbmZvLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2lu
Y2x1ZGUgPHY4Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNEZXBlbmRlbnRMaWZldGltZSA9IGZhbHNlOwotICAgIHN0
YXRpYyBib29sIEhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSk7Ci0gICAg
c3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRSYXdUZW1wbGF0
ZSgpOwotICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0
VGVtcGxhdGUoKTsKLSAgICBzdGF0aWMgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIHRvTmF0
aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqPihvYmplY3QtPkdl
dFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOwotICAg
IH0KLSAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lciopOwotICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQq
KTsKLSAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87Ci0gICAgc3RhdGljIGNvbnN0IGlu
dCBpbnRlcm5hbEZpZWxkQ291bnQgPSB2OERlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50
ICsgMDsKLXByaXZhdGU6Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNs
b3coVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqKTsKLX07Ci0KLQotdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjp3cmFwKFRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyKiBpbXBsKQotewotICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdy
YXBwZXIgPSBnZXRET01PYmplY3RNYXAoKS5nZXQoaW1wbCk7Ci0gICAgICAgIGlmICghd3JhcHBl
ci5Jc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gVjhU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6d3JhcFNsb3coaW1wbCk7Ci19Ci0KLWlubGluZSB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogaW1w
bCkKLXsKLSAgICBpZiAoIWltcGwpCi0gICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotICAgIHJl
dHVybiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjp3cmFwKGltcGwpOwotfQotaW5saW5l
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyID4gaW1wbCkKLXsKLSAgICByZXR1cm4gdG9WOChpbXBsLmdldCgpKTsKLX0KLX0K
LQotI2VuZGlmIC8vIFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJfaApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5j
cHAJKHJldmlzaW9uIDg5MTQyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQwMCArMCwwIEBACi0v
KgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICAgIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlY4VGVz
dE9iai5oIgotCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJJREJLZXku
aCIKLSNpbmNsdWRlICJPcHRpb25zT2JqZWN0LmgiCi0jaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNjcmlwdEFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIlNjcmlw
dENhbGxTdGFjay5oIgotI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCIKLSNpbmNs
dWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNp
bmNsdWRlICJWOEJpbmRpbmdNYWNyb3MuaCIKLSNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgot
I2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiVjhQcm94eS5oIgotI2luY2x1ZGUgIlY4VGVzdENhbGxiYWNrLmgiCi0jaW5j
bHVkZSAiVjhpbnQuaCIKLSNpbmNsdWRlICJWOGxvZy5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1XcmFwcGVyVHlwZUluZm8gVjhUZXN0T2JqOjppbmZv
ID0geyBWOFRlc3RPYmo6OkdldFRlbXBsYXRlLCBWOFRlc3RPYmo6OmRlcmVmT2JqZWN0LCAwLCAw
IH07Ci0KLW5hbWVzcGFjZSBUZXN0T2JqSW50ZXJuYWwgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gdm9pZCBWOF9VU0UoVCkgeyB9Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVh
ZE9ubHlJbnRBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnJl
YWRPbmx5SW50QXR0ci5fZ2V0Iik7Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05h
dGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPnJl
YWRPbmx5SW50QXR0cigpKTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWFk
T25seVN0cmluZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmou
cmVhZE9ubHlTdHJpbmdBdHRyLl9nZXQiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OFN0cmluZyhpbXAtPnJlYWRP
bmx5U3RyaW5nQXR0cigpKTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWFk
T25seVRlc3RPYmpBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29u
c3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2Jq
LnJlYWRPbmx5VGVzdE9iakF0dHIuX2dldCIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9i
ajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgUmVmUHRyPFRlc3RPYmo+IHJlc3VsdCA9
IGltcC0+cmVhZE9ubHlUZXN0T2JqQXR0cigpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3
cmFwcGVyID0gcmVzdWx0LmdldCgpID8gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KHJlc3VsdC5nZXQo
KSkgOiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKLSAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkp
IHsKLSAgICAgICAgd3JhcHBlciA9IHRvVjgocmVzdWx0LmdldCgpKTsKLSAgICAgICAgaWYgKCF3
cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVuUmVm
ZXJlbmNlKGluZm8uSG9sZGVyKCksIHdyYXBwZXIpOwotICAgIH0KLSAgICByZXR1cm4gd3JhcHBl
cjsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzaG9ydEF0dHJBdHRyR2V0dGVy
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQotewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouc2hvcnRBdHRyLl9nZXQiKTsKLSAgICBU
ZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJl
dHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+c2hvcnRBdHRyKCkpOwotfQotCi1zdGF0aWMgdm9p
ZCBzaG9ydEF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAg
ICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnNob3J0QXR0ci5fc2V0Iik7Ci0gICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBpbnQgdiA9IHRv
SW50MzIodmFsdWUpOwotICAgIGltcC0+c2V0U2hvcnRBdHRyKHYpOwotICAgIHJldHVybjsKLX0K
LQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB1bnNpZ25lZFNob3J0QXR0ckF0dHJHZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGlu
Zm8pCi17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai51bnNpZ25lZFNob3J0QXR0ci5fZ2V0
Iik7Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigp
KTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPnVuc2lnbmVkU2hvcnRBdHRyKCkp
OwotfQotCi1zdGF0aWMgdm9pZCB1bnNpZ25lZFNob3J0QXR0ckF0dHJTZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6
QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoudW5zaWdu
ZWRTaG9ydEF0dHIuX3NldCIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRp
dmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgaW50IHYgPSB0b1VJbnQzMih2YWx1ZSk7Ci0gICAgaW1w
LT5zZXRVbnNpZ25lZFNob3J0QXR0cih2KTsKLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gaW50QXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgSU5DX1NUQVRTKCJE
T00uVGVzdE9iai5pbnRBdHRyLl9nZXQiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGlt
cC0+aW50QXR0cigpKTsKLX0KLQotc3RhdGljIHZvaWQgaW50QXR0ckF0dHJTZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2
ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouaW50
QXR0ci5fc2V0Iik7Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZv
LkhvbGRlcigpKTsKLSAgICBpbnQgdiA9IHRvSW50MzIodmFsdWUpOwotICAgIGltcC0+c2V0SW50
QXR0cih2KTsKLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
bG9uZ0xvbmdBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmxv
bmdMb25nQXR0ci5fZ2V0Iik7Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2
ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KHN0YXRpY19jYXN0
PGRvdWJsZT4oaW1wLT5sb25nTG9uZ0F0dHIoKSkpOwotfQotCi1zdGF0aWMgdm9pZCBsb25nTG9u
Z0F0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6
OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNf
U1RBVFMoIkRPTS5UZXN0T2JqLmxvbmdMb25nQXR0ci5fc2V0Iik7Ci0gICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBsb25nIGxvbmcgdiA9
IHRvSW50NjQodmFsdWUpOwotICAgIGltcC0+c2V0TG9uZ0xvbmdBdHRyKFdURjo6Z2V0UHRyKHYp
KTsKLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdW5zaWdu
ZWRMb25nTG9uZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmou
dW5zaWduZWRMb25nTG9uZ0F0dHIuX2dldCIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9i
ajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhz
dGF0aWNfY2FzdDxkb3VibGU+KGltcC0+dW5zaWduZWRMb25nTG9uZ0F0dHIoKSkpOwotfQotCi1z
dGF0aWMgdm9pZCB1bnNpZ25lZExvbmdMb25nQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoudW5zaWduZWRMb25n
TG9uZ0F0dHIuX3NldCIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUo
aW5mby5Ib2xkZXIoKSk7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIHYgPSB0b0ludDY0KHZhbHVl
KTsKLSAgICBpbXAtPnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKFdURjo6Z2V0UHRyKHYpKTsKLSAg
ICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaW5nQXR0ckF0
dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCi17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zdHJpbmdBdHRyLl9nZXQi
KTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkp
OwotICAgIHJldHVybiB2OFN0cmluZyhpbXAtPnN0cmluZ0F0dHIoKSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHN0cmluZ0F0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsK
LSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnN0cmluZ0F0dHIuX3NldCIpOwotICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgU1RSSU5H
X1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DS19WT0lEKFY4UGFyYW1ldGVyPD4sIHYsIHZh
bHVlKTsKLSAgICBpbXAtPnNldFN0cmluZ0F0dHIodik7Ci0gICAgcmV0dXJuOwotfQotCi1zdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRlc3RPYmpBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJ
TkNfU1RBVFMoIkRPTS5UZXN0T2JqLnRlc3RPYmpBdHRyLl9nZXQiKTsKLSAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB0b1Y4
KGltcC0+dGVzdE9iakF0dHIoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RPYmpBdHRyQXR0clNl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFs
dWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgSU5DX1NUQVRTKCJET00u
VGVzdE9iai50ZXN0T2JqQXR0ci5fc2V0Iik7Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2Jq
Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBUZXN0T2JqKiB2ID0gVjhUZXN0T2JqOjpI
YXNJbnN0YW5jZSh2YWx1ZSkgPyBWOFRlc3RPYmo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QodmFsdWUpKSA6IDA7Ci0gICAgaW1wLT5zZXRUZXN0T2JqQXR0cihXVEY6Omdl
dFB0cih2KSk7Ci0gICAgcmV0dXJuOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFhNTE9iakF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2
ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouWE1M
T2JqQXR0ci5fZ2V0Iik7Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOChpbXAtPnhtbE9iakF0dHIoKSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIFhNTE9iakF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLlhNTE9iakF0dHIuX3NldCIpOwot
ICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0g
ICAgVGVzdE9iaiogdiA9IFY4VGVzdE9iajo6SGFzSW5zdGFuY2UodmFsdWUpID8gVjhUZXN0T2Jq
Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSkgOiAwOwotICAg
IGltcC0+c2V0WE1MT2JqQXR0cihXVEY6OmdldFB0cih2KSk7Ci0gICAgcmV0dXJuOwotfQotCi1z
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNyZWF0ZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgSU5D
X1NUQVRTKCJET00uVGVzdE9iai5jcmVhdGUuX2dldCIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4
VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4Qm9vbGVhbihp
bXAtPmlzQ3JlYXRlKCkpOwotfQotCi1zdGF0aWMgdm9pZCBjcmVhdGVBdHRyU2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmNy
ZWF0ZS5fc2V0Iik7Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZv
LkhvbGRlcigpKTsKLSAgICBib29sIHYgPSB2YWx1ZS0+Qm9vbGVhblZhbHVlKCk7Ci0gICAgaW1w
LT5zZXRDcmVhdGUodik7Ci0gICAgcmV0dXJuOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHJlZmxlY3RlZFN0cmluZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmoucmVmbGVjdGVkU3RyaW5nQXR0ci5fZ2V0Iik7Ci0gICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhTdHJp
bmcoaW1wLT5nZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdh
dHRyQXR0cikpOwotfQotCi1zdGF0aWMgdm9pZCByZWZsZWN0ZWRTdHJpbmdBdHRyQXR0clNldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVz
dE9iai5yZWZsZWN0ZWRTdHJpbmdBdHRyLl9zZXQiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRl
c3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIFNUUklOR19UT19WOFBBUkFNRVRF
Ul9FWENFUFRJT05fQkxPQ0tfVk9JRChWOFBhcmFtZXRlcjxXaXRoTnVsbENoZWNrPiwgdiwgdmFs
dWUpOwotICAgIGltcC0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVk
c3RyaW5nYXR0ckF0dHIsIHYpOwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiByZWZsZWN0ZWRJbnRlZ3JhbEF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19T
VEFUUygiRE9NLlRlc3RPYmoucmVmbGVjdGVkSW50ZWdyYWxBdHRyLl9nZXQiKTsKLSAgICBUZXN0
T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVy
biB2ODo6SW50ZWdlcjo6TmV3KGltcC0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJl
ZmxlY3RlZEludGVncmFsQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQotewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoucmVmbGVjdGVkSW50ZWdyYWxBdHRyLl9z
ZXQiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVy
KCkpOwotICAgIGludCB2ID0gdG9JbnQzMih2YWx1ZSk7Ci0gICAgaW1wLT5zZXRJbnRlZ3JhbEF0
dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIsIHYp
OwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWZsZWN0
ZWRVbnNpZ25lZEludGVncmFsQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgSU5DX1NUQVRTKCJET00u
VGVzdE9iai5yZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ci5fZ2V0Iik7Ci0gICAgVGVzdE9i
aiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4g
djg6OkludGVnZXI6Ok5ld0Zyb21VbnNpZ25lZChzdGQ6Om1heCgwLCBpbXAtPmdldEludGVncmFs
QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0
dHJBdHRyKSkpOwotfQotCi1zdGF0aWMgdm9pZCByZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0
ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFU
UygiRE9NLlRlc3RPYmoucmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIuX3NldCIpOwotICAg
IFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAg
dW5zaWduZWQgdiA9IHRvVUludDMyKHZhbHVlKTsKLSAgICBpbXAtPnNldFVuc2lnbmVkSW50ZWdy
YWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFs
YXR0ckF0dHIsIHYpOwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiByZWZsZWN0ZWRCb29sZWFuQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgSU5DX1NUQVRTKCJE
T00uVGVzdE9iai5yZWZsZWN0ZWRCb29sZWFuQXR0ci5fZ2V0Iik7Ci0gICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhCb29s
ZWFuKGltcC0+aGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkYm9vbGVh
bmF0dHJBdHRyKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlZmxlY3RlZEJvb2xlYW5BdHRyQXR0clNl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFs
dWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgSU5DX1NUQVRTKCJET00u
VGVzdE9iai5yZWZsZWN0ZWRCb29sZWFuQXR0ci5fc2V0Iik7Ci0gICAgVGVzdE9iaiogaW1wID0g
VjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBib29sIHYgPSB2YWx1ZS0+
Qm9vbGVhblZhbHVlKCk7Ci0gICAgaW1wLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyLCB2KTsKLSAgICByZXR1cm47Ci19Ci0K
LXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVmbGVjdGVkVVJMQXR0ckF0dHJHZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
Ci17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5yZWZsZWN0ZWRVUkxBdHRyLl9nZXQiKTsK
LSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwot
ICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlZmxlY3RlZFVS
TEF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6
OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNf
U1RBVFMoIkRPTS5UZXN0T2JqLnJlZmxlY3RlZFVSTEF0dHIuX3NldCIpOwotICAgIFRlc3RPYmoq
IGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgU1RSSU5HX1RP
X1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DS19WT0lEKFY4UGFyYW1ldGVyPFdpdGhOdWxsQ2hl
Y2s+LCB2LCB2YWx1ZSk7Ci0gICAgaW1wLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciwgdik7Ci0gICAgcmV0dXJuOwotfQotCi1zdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHJlZmxlY3RlZE5vbkVtcHR5VVJMQXR0ckF0dHJHZXR0ZXIodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17
Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5yZWZsZWN0ZWROb25FbXB0eVVSTEF0dHIuX2dl
dCIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIo
KSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+Z2V0Tm9uRW1wdHlVUkxBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRub25lbXB0eXVybGF0dHJBdHRyKSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHJlZmxlY3RlZE5vbkVtcHR5VVJMQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoucmVmbGVjdGVk
Tm9uRW1wdHlVUkxBdHRyLl9zZXQiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRv
TmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJ
T05fQkxPQ0tfVk9JRChWOFBhcmFtZXRlcjxXaXRoTnVsbENoZWNrPiwgdiwgdmFsdWUpOwotICAg
IGltcC0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkbm9uZW1wdHl1
cmxhdHRyQXR0ciwgdik7Ci0gICAgcmV0dXJuOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHJlZmxlY3RlZFN0cmluZ0F0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmoucmVmbGVjdGVkU3RyaW5nQXR0ci5fZ2V0Iik7Ci0gICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjhTdHJp
bmcoaW1wLT5nZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3Ry
aW5nQXR0ckF0dHIpKTsKLX0KLQotc3RhdGljIHZvaWQgcmVmbGVjdGVkU3RyaW5nQXR0ckF0dHJT
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZh
bHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9N
LlRlc3RPYmoucmVmbGVjdGVkU3RyaW5nQXR0ci5fc2V0Iik7Ci0gICAgVGVzdE9iaiogaW1wID0g
VjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBTVFJJTkdfVE9fVjhQQVJB
TUVURVJfRVhDRVBUSU9OX0JMT0NLX1ZPSUQoVjhQYXJhbWV0ZXI8V2l0aE51bGxDaGVjaz4sIHYs
IHZhbHVlKTsKLSAgICBpbXAtPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3Rv
bUNvbnRlbnRTdHJpbmdBdHRyQXR0ciwgdik7Ci0gICAgcmV0dXJuOwotfQotCi1zdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckF0dHJHZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
Ci17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5yZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0
dHIuX2dldCIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5nZXRJbnRlZ3JhbEF0
dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRy
KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckF0dHJTZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9NLlRl
c3RPYmoucmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyLl9zZXQiKTsKLSAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIGludCB2ID0gdG9J
bnQzMih2YWx1ZSk7Ci0gICAgaW1wLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyLCB2KTsKLSAgICByZXR1cm47Ci19
Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0
dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoucmVmbGVjdGVkQ3Vz
dG9tQm9vbGVhbkF0dHIuX2dldCIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9O
YXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4Qm9vbGVhbihpbXAtPmhhc0F0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIpKTsK
LX0KLQotc3RhdGljIHZvaWQgcmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJBdHRyU2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29u
c3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2Jq
LnJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyLl9zZXQiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBW
OFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIGJvb2wgdiA9IHZhbHVlLT5C
b29sZWFuVmFsdWUoKTsKLSAgICBpbXAtPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyLCB2KTsKLSAgICByZXR1cm47Ci19
Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckF0
dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCi17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5yZWZsZWN0ZWRDdXN0b21V
UkxBdHRyLl9nZXQiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGlu
Zm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmdldFVSTEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0cikpOwotfQotCi1zdGF0
aWMgdm9pZCByZWZsZWN0ZWRDdXN0b21VUkxBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCi17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5yZWZsZWN0ZWRDdXN0
b21VUkxBdHRyLl9zZXQiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwotICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxP
Q0tfVk9JRChWOFBhcmFtZXRlcjxXaXRoTnVsbENoZWNrPiwgdiwgdmFsdWUpOwotICAgIGltcC0+
c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRy
LCB2KTsKLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVm
bGVjdGVkQ3VzdG9tTm9uRW1wdHlVUkxBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNfU1RBVFMo
IkRPTS5UZXN0T2JqLnJlZmxlY3RlZEN1c3RvbU5vbkVtcHR5VVJMQXR0ci5fZ2V0Iik7Ci0gICAg
VGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBy
ZXR1cm4gdjhTdHJpbmcoaW1wLT5nZXROb25FbXB0eVVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnROb25FbXB0eVVSTEF0dHJBdHRyKSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHJlZmxlY3RlZEN1c3RvbU5vbkVtcHR5VVJMQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoucmVmbGVjdGVk
Q3VzdG9tTm9uRW1wdHlVUkxBdHRyLl9zZXQiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RP
Ymo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9F
WENFUFRJT05fQkxPQ0tfVk9JRChWOFBhcmFtZXRlcjxXaXRoTnVsbENoZWNrPiwgdiwgdmFsdWUp
OwotICAgIGltcC0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVu
dE5vbkVtcHR5VVJMQXR0ckF0dHIsIHYpOwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBhdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0g
ICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbi5fZ2V0Iik7
Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsK
LSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbnQgdiA9IGltcC0+YXR0cldpdGhHZXR0
ZXJFeGNlcHRpb24oZWMpOwotICAgIGlmIChVTkxJS0VMWShlYykpIHsKLSAgICAgICAgVjhQcm94
eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKLSAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZh
bHVlPigpOwotICAgIH0KLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyh2KTsKLX0KLQotc3Rh
dGljIHZvaWQgYXR0cldpdGhHZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmF0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uLl9zZXQiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0
aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIGludCB2ID0gdG9JbnQzMih2YWx1ZSk7Ci0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wLT5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbih2
LCBlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGVjKSkKLSAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhj
ZXB0aW9uKGVjKTsKLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gYXR0cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmouYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24uX2dldCIpOwotICAgIFRlc3RPYmoq
IGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4
OjpJbnRlZ2VyOjpOZXcoaW1wLT5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKLX0KLQotc3Rh
dGljIHZvaWQgYXR0cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmF0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uLl9zZXQiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0
aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIGludCB2ID0gdG9JbnQzMih2YWx1ZSk7Ci0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wLT5zZXRBdHRyV2l0aFNldHRlckV4Y2VwdGlvbih2
LCBlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGVjKSkKLSAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhj
ZXB0aW9uKGVjKTsKLSAgICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gc3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19T
VEFUUygiRE9NLlRlc3RPYmouc3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24uX2dldCIpOwot
ICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU3RyaW5nIHYgPSBpbXAtPnN0cmluZ0F0dHJX
aXRoR2V0dGVyRXhjZXB0aW9uKGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZWMpKSB7Ci0gICAgICAg
IFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7Ci0gICAgICAgIHJldHVybiB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4oKTsKLSAgICB9Ci0gICAgcmV0dXJuIHY4U3RyaW5nKHYpOwotfQotCi1zdGF0
aWMgdm9pZCBzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJTZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6
QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouc3RyaW5n
QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24uX3NldCIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVz
dE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVS
X0VYQ0VQVElPTl9CTE9DS19WT0lEKFY4UGFyYW1ldGVyPD4sIHYsIHZhbHVlKTsKLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXAtPnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uKHYsIGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZWMpKQotICAgICAgICBWOFByb3h5OjpzZXRE
T01FeGNlcHRpb24oZWMpOwotICAgIHJldHVybjsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAg
SU5DX1NUQVRTKCJET00uVGVzdE9iai5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbi5fZ2V0
Iik7Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigp
KTsKLSAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bigpKTsKLX0KLQotc3RhdGljIHZvaWQgc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRy
U2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNfU1RBVFMoIkRP
TS5UZXN0T2JqLnN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uLl9zZXQiKTsKLSAgICBUZXN0
T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIFNUUklO
R19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0tfVk9JRChWOFBhcmFtZXRlcjw+LCB2LCB2
YWx1ZSk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wLT5zZXRTdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbih2LCBlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGVjKSkKLSAgICAg
ICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKLSAgICByZXR1cm47Ci19Ci0KLXN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2NyaXB0U3RyaW5nQXR0ckF0dHJHZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0g
ICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zY3JpcHRTdHJpbmdBdHRyLl9nZXQiKTsKLSAgICBU
ZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJl
dHVybiB2OFN0cmluZ09yTnVsbChpbXAtPnNjcmlwdFN0cmluZ0F0dHIoKSk7Ci19Ci0KLSNpZiBF
TkFCTEUoQ29uZGl0aW9uMSkKLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25kaXRp
b25hbEF0dHIxQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmNvbmRp
dGlvbmFsQXR0cjEuX2dldCIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRp
dmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5jb25k
aXRpb25hbEF0dHIxKCkpOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpCi0KLSNp
ZiBFTkFCTEUoQ29uZGl0aW9uMSkKLQotc3RhdGljIHZvaWQgY29uZGl0aW9uYWxBdHRyMUF0dHJT
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZh
bHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9N
LlRlc3RPYmouY29uZGl0aW9uYWxBdHRyMS5fc2V0Iik7Ci0gICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBpbnQgdiA9IHRvSW50MzIodmFs
dWUpOwotICAgIGltcC0+c2V0Q29uZGl0aW9uYWxBdHRyMSh2KTsKLSAgICByZXR1cm47Ci19Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkKLQotI2lmIEVOQUJMRShDb25kaXRpb24xKSAm
JiBFTkFCTEUoQ29uZGl0aW9uMikKLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25k
aXRpb25hbEF0dHIyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmNv
bmRpdGlvbmFsQXR0cjIuX2dldCIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9O
YXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5j
b25kaXRpb25hbEF0dHIyKCkpOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpICYm
IEVOQUJMRShDb25kaXRpb24yKQotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShD
b25kaXRpb24yKQotCi1zdGF0aWMgdm9pZCBjb25kaXRpb25hbEF0dHIyQXR0clNldHRlcih2ODo6
TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5j
b25kaXRpb25hbEF0dHIyLl9zZXQiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRv
TmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIGludCB2ID0gdG9JbnQzMih2YWx1ZSk7Ci0gICAg
aW1wLT5zZXRDb25kaXRpb25hbEF0dHIyKHYpOwotICAgIHJldHVybjsKLX0KLQotI2VuZGlmIC8v
IEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLQotI2lmIEVOQUJMRShD
b25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLQotc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjb25kaXRpb25hbEF0dHIzQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNfU1RBVFMoIkRP
TS5UZXN0T2JqLmNvbmRpdGlvbmFsQXR0cjMuX2dldCIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4
VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2Vy
OjpOZXcoaW1wLT5jb25kaXRpb25hbEF0dHIzKCkpOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKENv
bmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKQotCi1zdGF0aWMgdm9pZCBjb25kaXRpb25hbEF0dHIzQXR0
clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
dmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgSU5DX1NUQVRTKCJE
T00uVGVzdE9iai5jb25kaXRpb25hbEF0dHIzLl9zZXQiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBW
OFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIGludCB2ID0gdG9JbnQzMih2
YWx1ZSk7Ci0gICAgaW1wLT5zZXRDb25kaXRpb25hbEF0dHIzKHYpOwotICAgIHJldHVybjsKLX0K
LQotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLQot
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbmFibGVkQXRSdW50aW1lQXR0cjFBdHRyR2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQotewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouZW5hYmxlZEF0UnVudGltZUF0dHIx
Ll9nZXQiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9s
ZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+ZW5hYmxlZEF0UnVudGlt
ZUF0dHIxKCkpOwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVkQXRSdW50aW1lQXR0cjFBdHRyU2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5U
ZXN0T2JqLmVuYWJsZWRBdFJ1bnRpbWVBdHRyMS5fc2V0Iik7Ci0gICAgVGVzdE9iaiogaW1wID0g
VjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBpbnQgdiA9IHRvSW50MzIo
dmFsdWUpOwotICAgIGltcC0+c2V0RW5hYmxlZEF0UnVudGltZUF0dHIxKHYpOwotICAgIHJldHVy
bjsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbmFibGVkQXRSdW50aW1lQXR0
cjJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouZW5hYmxlZEF0UnVu
dGltZUF0dHIyLl9nZXQiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+ZW5hYmxl
ZEF0UnVudGltZUF0dHIyKCkpOwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVkQXRSdW50aW1lQXR0
cjJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZh
bHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNfU1RB
VFMoIkRPTS5UZXN0T2JqLmVuYWJsZWRBdFJ1bnRpbWVBdHRyMi5fc2V0Iik7Ci0gICAgVGVzdE9i
aiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBpbnQgdiA9
IHRvSW50MzIodmFsdWUpOwotICAgIGltcC0+c2V0RW5hYmxlZEF0UnVudGltZUF0dHIyKHYpOwot
ICAgIHJldHVybjsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkZXNjcmlwdGlv
bkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCi17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5kZXNjcmlwdGlvbi5f
Z2V0Iik7Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRl
cigpKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPmRlc2NyaXB0aW9uKCkpOwot
fQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGlkQXR0ckdldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJ
TkNfU1RBVFMoIkRPTS5UZXN0T2JqLmlkLl9nZXQiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRl
c3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB2ODo6SW50ZWdlcjo6
TmV3KGltcC0+aWQoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkQXR0clNldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5pZC5fc2V0
Iik7Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigp
KTsKLSAgICBpbnQgdiA9IHRvSW50MzIodmFsdWUpOwotICAgIGltcC0+c2V0SWQodik7Ci0gICAg
cmV0dXJuOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGhhc2hBdHRyR2V0dGVy
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQotewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouaGFzaC5fZ2V0Iik7Ci0gICAgVGVzdE9i
aiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4g
djhTdHJpbmcoaW1wLT5oYXNoKCkpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZvaWRNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIElO
Q19TVEFUUygiRE9NLlRlc3RPYmoudm9pZE1ldGhvZCIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4
VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgaW1wLT52b2lkTWV0aG9kKCk7
Ci0gICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwotfQotCi1zdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHZvaWRNZXRob2RXaXRoQXJnc0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai52b2lkTWV0aG9kV2l0
aEFyZ3MiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9s
ZGVyKCkpOwotICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIGludEFyZywgdG9JbnQzMihhcmdzWzBd
KSk7Ci0gICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRl
cjw+LCBzdHJBcmcsIGFyZ3NbMV0pOwotICAgIEVYQ0VQVElPTl9CTE9DSyhUZXN0T2JqKiwgb2Jq
QXJnLCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3NbMl0pID8gVjhUZXN0T2JqOjp0b05hdGl2
ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMl0pKSA6IDApOwotICAgIGltcC0+
dm9pZE1ldGhvZFdpdGhBcmdzKGludEFyZywgc3RyQXJnLCBvYmpBcmcpOwotICAgIHJldHVybiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBpbnRNZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIElO
Q19TVEFUUygiRE9NLlRlc3RPYmouaW50TWV0aG9kIik7Ci0gICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdjg6OkludGVnZXI6
Ok5ldyhpbXAtPmludE1ldGhvZCgpKTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBpbnRNZXRob2RXaXRoQXJnc0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17
Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5pbnRNZXRob2RXaXRoQXJncyIpOwotICAgIFRl
c3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgRVhD
RVBUSU9OX0JMT0NLKGludCwgaW50QXJnLCB0b0ludDMyKGFyZ3NbMF0pKTsKLSAgICBTVFJJTkdf
VE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIHN0ckFyZywgYXJn
c1sxXSk7Ci0gICAgRVhDRVBUSU9OX0JMT0NLKFRlc3RPYmoqLCBvYmpBcmcsIFY4VGVzdE9iajo6
SGFzSW5zdGFuY2UoYXJnc1syXSkgPyBWOFRlc3RPYmo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3QoYXJnc1syXSkpIDogMCk7Ci0gICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpO
ZXcoaW1wLT5pbnRNZXRob2RXaXRoQXJncyhpbnRBcmcsIHN0ckFyZywgb2JqQXJnKSk7Ci19Ci0K
LXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm9iak1ldGhv
ZCIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIo
KSk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wLT5vYmpNZXRob2QoKSk7Ci19Ci0KLXN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gb2JqTWV0aG9kV2l0aEFyZ3NDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoub2JqTWV0aG9kV2l0
aEFyZ3MiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9s
ZGVyKCkpOwotICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIGludEFyZywgdG9JbnQzMihhcmdzWzBd
KSk7Ci0gICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRl
cjw+LCBzdHJBcmcsIGFyZ3NbMV0pOwotICAgIEVYQ0VQVElPTl9CTE9DSyhUZXN0T2JqKiwgb2Jq
QXJnLCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3NbMl0pID8gVjhUZXN0T2JqOjp0b05hdGl2
ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMl0pKSA6IDApOwotICAgIHJldHVy
biB0b1Y4KGltcC0+b2JqTWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJBcmcsIG9iakFyZykpOwot
fQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFy
Z3NDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmoubWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyIpOwotICAgIGlmIChhcmdzLkxl
bmd0aCgpIDwgMikKLSAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwotICAg
IFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAg
U1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCBzdHJB
cmcsIGFyZ3NbMF0pOwotICAgIEVYQ0VQVElPTl9CTE9DSyhUZXN0T2JqKiwgb2JqQXJnLCBWOFRl
c3RPYmo6Okhhc0luc3RhbmNlKGFyZ3NbMV0pID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMV0pKSA6IDApOwotICAgIHJldHVybiB0b1Y4KGlt
cC0+bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyhzdHJBcmcsIG9iakFyZykpOwotfQotCi1zdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJv
d3NDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmoubWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyIpOwotICAgIGlm
IChhcmdzLkxlbmd0aCgpIDwgMikKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91
Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6U3ludGF4RXJyb3IpOwotICAgIFRlc3RPYmoqIGltcCA9
IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgewotICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0so
VjhQYXJhbWV0ZXI8Piwgc3RyQXJnLCBhcmdzWzBdKTsKLSAgICBFWENFUFRJT05fQkxPQ0soVGVz
dE9iaiosIG9iakFyZywgVjhUZXN0T2JqOjpIYXNJbnN0YW5jZShhcmdzWzFdKSA/IFY4VGVzdE9i
ajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzFdKSkgOiAwKTsK
LSAgICBSZWZQdHI8VGVzdE9iaj4gcmVzdWx0ID0gaW1wLT5tZXRob2RUaGF0UmVxdWlyZXNBbGxB
cmdzQW5kVGhyb3dzKHN0ckFyZywgb2JqQXJnLCBlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGVjKSkK
LSAgICAgICAgZ290byBmYWlsOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCkpOwot
ICAgIH0KLSAgICBmYWlsOgotICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7Ci0gICAg
cmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zZXJpYWxpemVkVmFsdWUiKTsKLSAg
ICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAg
IGJvb2wgc2VyaWFsaXplZEFyZ0RpZFRocm93ID0gZmFsc2U7Ci0gICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZEFyZyA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKGFyZ3NbMF0sIHNlcmlhbGl6ZWRBcmdEaWRUaHJvdyk7Ci0gICAgaWYgKHNlcmlhbGl6ZWRB
cmdEaWRUaHJvdykKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICBpbXAtPnNl
cmlhbGl6ZWRWYWx1ZShzZXJpYWxpemVkQXJnKTsKLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6
VmFsdWU+KCk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaWRiS2V5Q2FsbGJh
Y2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0
T2JqLmlkYktleSIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJn
cy5Ib2xkZXIoKSk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgewotICAgIFJlZlB0
cjxJREJLZXk+IGtleSA9IGNyZWF0ZUlEQktleUZyb21WYWx1ZShhcmdzWzBdKTsKLSAgICBpZiAo
VU5MSUtFTFkoIWtleSkpIHsKLSAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKLSAgICAg
ICAgZ290byBmYWlsOwotICAgIH0KLSAgICBpbXAtPmlkYktleShrZXkpOwotICAgIHJldHVybiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKLSAgICB9Ci0gICAgZmFpbDoKLSAgICBWOFByb3h5Ojpz
ZXRET01FeGNlcHRpb24oZWMpOwotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsK
LX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvcHRpb25zT2JqZWN0Q2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2Jq
Lm9wdGlvbnNPYmplY3QiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGFyZ3MuSG9sZGVyKCkpOwotICAgIEVYQ0VQVElPTl9CTE9DSyhPcHRpb25zT2JqZWN0LCBvbywg
YXJnc1swXSk7Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMSkgewotICAgICAgICBpbXAtPm9w
dGlvbnNPYmplY3Qob28pOwotICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7
Ci0gICAgfQotICAgIEVYQ0VQVElPTl9CTE9DSyhPcHRpb25zT2JqZWN0LCBvb28sIGFyZ3NbMV0p
OwotICAgIGltcC0+b3B0aW9uc09iamVjdChvbywgb29vKTsKLSAgICByZXR1cm4gdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KCk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9k
V2l0aEV4Y2VwdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAg
SU5DX1NUQVRTKCJET00uVGVzdE9iai5tZXRob2RXaXRoRXhjZXB0aW9uIik7Ci0gICAgVGVzdE9i
aiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICB7Ci0gICAgaW1wLT5tZXRob2RXaXRoRXhjZXB0aW9uKGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkoZWMpKQotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgcmV0dXJuIHY4
OjpIYW5kbGU8djg6OlZhbHVlPigpOwotICAgIH0KLSAgICBmYWlsOgotICAgIFY4UHJveHk6OnNl
dERPTUV4Y2VwdGlvbihlYyk7Ci0gICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwot
fQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGN1c3RvbUFyZ3NBbmRFeGNlcHRpb25D
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygiRE9N
LlRlc3RPYmouY3VzdG9tQXJnc0FuZEV4Y2VwdGlvbiIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4
VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgewotICAgIFJlZlB0cjxTY3JpcHRBcmd1bWVudHM+IHNjcmlwdEFyZ3VtZW50cyhj
cmVhdGVTY3JpcHRBcmd1bWVudHMoYXJncywgMSkpOwotICAgIHNpemVfdCBtYXhTdGFja1NpemUg
PSBpbXAtPnNob3VsZENhcHR1cmVGdWxsU3RhY2tUcmFjZSgpID8gU2NyaXB0Q2FsbFN0YWNrOjpt
YXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlIDogMTsKLSAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNr
PiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNrKG1heFN0YWNrU2l6ZSkpOwotICAgIGlm
ICghY2FsbFN0YWNrKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAgIEVYQ0VQ
VElPTl9CTE9DSyhsb2cqLCBpbnRBcmcsIFY4bG9nOjpIYXNJbnN0YW5jZShhcmdzWzBdKSA/IFY4
bG9nOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKSA6IDAp
OwotICAgIGltcC0+Y3VzdG9tQXJnc0FuZEV4Y2VwdGlvbihpbnRBcmcsIHNjcmlwdEFyZ3VtZW50
cywgY2FsbFN0YWNrLCBlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGVjKSkKLSAgICAgICAgZ290byBm
YWlsOwotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKLSAgICB9Ci0gICAgZmFp
bDoKLSAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwotICAgIHJldHVybiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4oKTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhZGRF
dmVudExpc3RlbmVyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBJ
TkNfU1RBVFMoIkRPTS5UZXN0T2JqLmFkZEV2ZW50TGlzdGVuZXIoKSIpOwotICAgIFJlZlB0cjxF
dmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihh
cmdzWzFdLCBmYWxzZSwgTGlzdGVuZXJGaW5kT3JDcmVhdGUpOwotICAgIGlmIChsaXN0ZW5lcikg
ewotICAgICAgICBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpLT5hZGRFdmVudExp
c3RlbmVyKHY4VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbmcoYXJnc1swXSksIGxpc3RlbmVyLCBh
cmdzWzJdLT5Cb29sZWFuVmFsdWUoKSk7Ci0gICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3ko
YXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgVjhUZXN0T2JqOjpldmVudExpc3RlbmVyQ2FjaGVJbmRl
eCk7Ci0gICAgfQotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLXN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gcmVtb3ZlRXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5yZW1vdmVFdmVu
dExpc3RlbmVyKCkiKTsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERP
TVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoYXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZE9u
bHkpOwotICAgIGlmIChsaXN0ZW5lcikgewotICAgICAgICBWOFRlc3RPYmo6OnRvTmF0aXZlKGFy
Z3MuSG9sZGVyKCkpLT5yZW1vdmVFdmVudExpc3RlbmVyKHY4VmFsdWVUb0F0b21pY1dlYkNvcmVT
dHJpbmcoYXJnc1swXSksIGxpc3RlbmVyLmdldCgpLCBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKSk7
Ci0gICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwg
VjhUZXN0T2JqOjpldmVudExpc3RlbmVyQ2FjaGVJbmRleCk7Ci0gICAgfQotICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aER5
bmFtaWNGcmFtZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgSU5D
X1NUQVRTKCJET00uVGVzdE9iai53aXRoRHluYW1pY0ZyYW1lIik7Ci0gICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBGcmFtZSogZW50ZXJl
ZEZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCk7Ci0gICAg
aWYgKCFlbnRlcmVkRnJhbWUpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAg
aW1wLT53aXRoRHluYW1pY0ZyYW1lKGVudGVyZWRGcmFtZSk7Ci0gICAgcmV0dXJuIHY4OjpIYW5k
bGU8djg6OlZhbHVlPigpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhE
eW5hbWljRnJhbWVBbmRBcmdDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewot
ICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoud2l0aER5bmFtaWNGcmFtZUFuZEFyZyIpOwotICAg
IFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAg
RVhDRVBUSU9OX0JMT0NLKGludCwgaW50QXJnLCB0b0ludDMyKGFyZ3NbMF0pKTsKLSAgICBGcmFt
ZSogZW50ZXJlZEZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0
KCk7Ci0gICAgaWYgKCFlbnRlcmVkRnJhbWUpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7Ci0gICAgaW1wLT53aXRoRHluYW1pY0ZyYW1lQW5kQXJnKGVudGVyZWRGcmFtZSwgaW50QXJn
KTsKLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Ci19Ci0KLXN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aER5bmFtaWNGcmFtZUFuZE9wdGlvbmFsQXJnQ2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2Jq
LndpdGhEeW5hbWljRnJhbWVBbmRPcHRpb25hbEFyZyIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4
VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgRVhDRVBUSU9OX0JMT0NLKGlu
dCwgaW50QXJnLCB0b0ludDMyKGFyZ3NbMF0pKTsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8PSAx
KSB7Ci0gICAgICAgIEZyYW1lKiBlbnRlcmVkRnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1l
Rm9yRW50ZXJlZENvbnRleHQoKTsKLSAgICAgICAgaWYgKCFlbnRlcmVkRnJhbWUpCi0gICAgICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAgICAgICBpbXAtPndpdGhEeW5hbWljRnJh
bWVBbmRPcHRpb25hbEFyZyhlbnRlcmVkRnJhbWUsIGludEFyZyk7Ci0gICAgICAgIHJldHVybiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKLSAgICB9Ci0gICAgRVhDRVBUSU9OX0JMT0NLKGludCwg
b3B0aW9uYWxBcmcsIHRvSW50MzIoYXJnc1sxXSkpOwotICAgIEZyYW1lKiBlbnRlcmVkRnJhbWUg
PSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLSAgICBpZiAoIWVu
dGVyZWRGcmFtZSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICBpbXAtPndp
dGhEeW5hbWljRnJhbWVBbmRPcHRpb25hbEFyZyhlbnRlcmVkRnJhbWUsIGludEFyZywgb3B0aW9u
YWxBcmcpOwotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKLX0KLQotc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmVDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygiRE9NLlRl
c3RPYmoud2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlIik7Ci0gICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBFWENFUFRJT05fQkxP
Q0soaW50LCBpbnRBcmcsIHRvSW50MzIoYXJnc1swXSkpOwotICAgIEZyYW1lKiBlbnRlcmVkRnJh
bWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLSAgICBpZiAo
IWVudGVyZWRGcmFtZSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICBpbXAt
PndpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZShlbnRlcmVkRnJhbWUsIGludEFyZywgcHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKCkpOwotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4o
KTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoRHluYW1pY0ZyYW1lQW5k
VXNlckdlc3R1cmVBU0FEQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAg
ICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLndpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZUFT
QUQiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwotICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIGludEFyZywgdG9JbnQzMihhcmdzWzBdKSk7
Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMSkgewotICAgICAgICBGcmFtZSogZW50ZXJlZEZy
YW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCk7Ci0gICAgICAg
IGlmICghZW50ZXJlZEZyYW1lKQotICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
LSAgICAgICAgaW1wLT53aXRoRHluYW1pY0ZyYW1lQW5kVXNlckdlc3R1cmVBU0FEKGVudGVyZWRG
cmFtZSwgaW50QXJnLCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSk7Ci0gICAgICAgIHJldHVybiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKLSAgICB9Ci0gICAgRVhDRVBUSU9OX0JMT0NLKGludCwg
b3B0aW9uYWxBcmcsIHRvSW50MzIoYXJnc1sxXSkpOwotICAgIEZyYW1lKiBlbnRlcmVkRnJhbWUg
PSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLSAgICBpZiAoIWVu
dGVyZWRGcmFtZSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICBpbXAtPndp
dGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZUFTQUQoZW50ZXJlZEZyYW1lLCBpbnRBcmcsIG9w
dGlvbmFsQXJnLCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSk7Ci0gICAgcmV0dXJuIHY4OjpIYW5k
bGU8djg6OlZhbHVlPigpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhT
Y3JpcHRTdGF0ZVZvaWRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAg
IElOQ19TVEFUUygiRE9NLlRlc3RPYmoud2l0aFNjcmlwdFN0YXRlVm9pZCIpOwotICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgRW1wdHlT
Y3JpcHRTdGF0ZSBzdGF0ZTsKLSAgICBpbXAtPndpdGhTY3JpcHRTdGF0ZVZvaWQoJnN0YXRlKTsK
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KHN0YXRlLmV4Y2VwdGlvbigpKTsKLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7
Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdFN0YXRlT2JqQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5U
ZXN0T2JqLndpdGhTY3JpcHRTdGF0ZU9iaiIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9i
ajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgRW1wdHlTY3JpcHRTdGF0ZSBzdGF0ZTsK
LSAgICBSZWZQdHI8VGVzdE9iaj4gcmVzdWx0ID0gaW1wLT53aXRoU2NyaXB0U3RhdGVPYmooJnN0
YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKHN0YXRlLmV4Y2VwdGlvbigpKTsKLSAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFz
ZSgpKTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0U3RhdGVW
b2lkRXhjZXB0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBJ
TkNfU1RBVFMoIkRPTS5UZXN0T2JqLndpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24iKTsKLSAg
ICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHsKLSAgICBFbXB0eVNjcmlwdFN0YXRlIHN0YXRl
OwotICAgIGltcC0+d2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkoZWMpKQotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZS5leGNlcHRpb24o
KSk7Ci0gICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwotICAgIH0KLSAgICBmYWls
OgotICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7Ci0gICAgcmV0dXJuIHY4OjpIYW5k
bGU8djg6OlZhbHVlPigpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhT
Y3JpcHRTdGF0ZU9iakV4Y2VwdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
Ci17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai53aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRp
b24iKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHsKLSAgICBFbXB0eVNjcmlwdFN0
YXRlIHN0YXRlOwotICAgIFJlZlB0cjxUZXN0T2JqPiByZXN1bHQgPSBpbXAtPndpdGhTY3JpcHRT
dGF0ZU9iakV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZWMpKQotICAg
ICAgICBnb3RvIGZhaWw7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihzdGF0ZS5leGNlcHRpb24oKSk7Ci0gICAgcmV0dXJuIHRvVjgocmVz
dWx0LnJlbGVhc2UoKSk7Ci0gICAgfQotICAgIGZhaWw6Ci0gICAgVjhQcm94eTo6c2V0RE9NRXhj
ZXB0aW9uKGVjKTsKLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Ci19Ci0KLXN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygiRE9NLlRl
c3RPYmoud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQiKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBW
OFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdENvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAg
aWYgKCFzY3JpcHRDb250ZXh0KQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAg
IGltcC0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoc2NyaXB0Q29udGV4dCk7Ci0gICAgcmV0
dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IG1ldGhvZFdpdGhPcHRpb25hbEFyZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5tZXRob2RXaXRoT3B0aW9uYWxB
cmciKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwotICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDApIHsKLSAgICAgICAgaW1wLT5tZXRob2RX
aXRoT3B0aW9uYWxBcmcoKTsKLSAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigp
OwotICAgIH0KLSAgICBFWENFUFRJT05fQkxPQ0soaW50LCBvcHQsIHRvSW50MzIoYXJnc1swXSkp
OwotICAgIGltcC0+bWV0aG9kV2l0aE9wdGlvbmFsQXJnKG9wdCk7Ci0gICAgcmV0dXJuIHY4OjpI
YW5kbGU8djg6OlZhbHVlPigpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1l
dGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm1ldGhvZFdpdGhO
b25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnIik7Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0
T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBFWENFUFRJT05fQkxPQ0soaW50LCBu
b25PcHQsIHRvSW50MzIoYXJnc1swXSkpOwotICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDEpIHsK
LSAgICAgICAgaW1wLT5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhub25P
cHQpOwotICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Ci0gICAgfQotICAg
IEVYQ0VQVElPTl9CTE9DSyhpbnQsIG9wdCwgdG9JbnQzMihhcmdzWzFdKSk7Ci0gICAgaW1wLT5t
ZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhub25PcHQsIG9wdCk7Ci0gICAg
cmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IG1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJnc0NhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVz
dE9iai5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MiKTsKLSAgICBU
ZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIEVY
Q0VQVElPTl9CTE9DSyhpbnQsIG5vbk9wdCwgdG9JbnQzMihhcmdzWzBdKSk7Ci0gICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPD0gMSkgewotICAgICAgICBpbXAtPm1ldGhvZFdpdGhOb25PcHRpb25hbEFy
Z0FuZFR3b09wdGlvbmFsQXJncyhub25PcHQpOwotICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2
ODo6VmFsdWU+KCk7Ci0gICAgfQotICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIG9wdDEsIHRvSW50
MzIoYXJnc1sxXSkpOwotICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIG9wdDIsIHRvSW50MzIoYXJn
c1syXSkpOwotICAgIGltcC0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxB
cmdzKG5vbk9wdCwgb3B0MSwgb3B0Mik7Ci0gICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVl
PigpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhDYWxsYmFj
a0FyZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgSU5DX1NUQVRT
KCJET00uVGVzdE9iai5tZXRob2RXaXRoQ2FsbGJhY2tBcmciKTsKLSAgICBUZXN0T2JqKiBpbXAg
PSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIGlmIChhcmdzLkxlbmd0
aCgpIDw9IDAgfHwgIWFyZ3NbMF0tPklzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFj
ayA9IFY4VGVzdENhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSwgZ2V0U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKTsKLSAgICBpbXAtPm1ldGhvZFdpdGhDYWxsYmFja0FyZyhjYWxsYmFjayk7Ci0gICAg
cmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IG1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2Jq
Lm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnIik7Ci0gICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBFWENFUFRJT05f
QkxPQ0soaW50LCBub25DYWxsYmFjaywgdG9JbnQzMihhcmdzWzBdKSk7Ci0gICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPD0gMSB8fCAhYXJnc1sxXS0+SXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwotICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNh
bGxiYWNrID0gVjhUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzFdLCBnZXRTY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpOwotICAgIGltcC0+bWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJh
Y2tBcmcobm9uQ2FsbGJhY2ssIGNhbGxiYWNrKTsKLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6
VmFsdWU+KCk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aENh
bGxiYWNrQW5kT3B0aW9uYWxBcmdDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQot
ewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoubWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9u
YWxBcmciKTsKLSAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9s
ZGVyKCkpOwotICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrOwotICAgIGlmIChhcmdz
Lkxlbmd0aCgpID4gMCAmJiAhYXJnc1swXS0+SXNOdWxsKCkgJiYgIWFyZ3NbMF0tPklzVW5kZWZp
bmVkKCkpIHsKLSAgICAgICAgaWYgKCFhcmdzWzBdLT5Jc09iamVjdCgpKQotICAgICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwotICAgICAgICBjYWxsYmFjayA9
IFY4VGVzdENhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSwgZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKTsKLSAgICB9Ci0gICAgaW1wLT5tZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhj
YWxsYmFjayk7Ci0gICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwotfQotCi1zdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG92ZXJsb2FkZWRNZXRob2QxQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm92ZXJs
b2FkZWRNZXRob2QxIik7Ci0gICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShh
cmdzLkhvbGRlcigpKTsKLSAgICBFWENFUFRJT05fQkxPQ0soVGVzdE9iaiosIG9iakFyZywgVjhU
ZXN0T2JqOjpIYXNJbnN0YW5jZShhcmdzWzBdKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6Okhh
bmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwKTsKLSAgICBTVFJJTkdfVE9fVjhQ
QVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIHN0ckFyZywgYXJnc1sxXSk7
Ci0gICAgaW1wLT5vdmVybG9hZGVkTWV0aG9kKG9iakFyZywgc3RyQXJnKTsKLSAgICByZXR1cm4g
djg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gb3ZlcmxvYWRlZE1ldGhvZDJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQot
ewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoub3ZlcmxvYWRlZE1ldGhvZDIiKTsKLSAgICBU
ZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIEVY
Q0VQVElPTl9CTE9DSyhUZXN0T2JqKiwgb2JqQXJnLCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFy
Z3NbMF0pID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0
KGFyZ3NbMF0pKSA6IDApOwotICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDEpIHsKLSAgICAgICAg
aW1wLT5vdmVybG9hZGVkTWV0aG9kKG9iakFyZyk7Ci0gICAgICAgIHJldHVybiB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4oKTsKLSAgICB9Ci0gICAgRVhDRVBUSU9OX0JMT0NLKGludCwgaW50QXJnLCB0
b0ludDMyKGFyZ3NbMV0pKTsKLSAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qob2JqQXJnLCBpbnRB
cmcpOwotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKLX0KLQotc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9kM0NhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5vdmVybG9hZGVk
TWV0aG9kMyIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5I
b2xkZXIoKSk7Ci0gICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBh
cmFtZXRlcjw+LCBzdHJBcmcsIGFyZ3NbMF0pOwotICAgIGltcC0+b3ZlcmxvYWRlZE1ldGhvZChz
dHJBcmcpOwotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKLX0KLQotc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9kNENhbGxiYWNrKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5vdmVybG9h
ZGVkTWV0aG9kNCIpOwotICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJn
cy5Ib2xkZXIoKSk7Ci0gICAgRVhDRVBUSU9OX0JMT0NLKGludCwgaW50QXJnLCB0b0ludDMyKGFy
Z3NbMF0pKTsKLSAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2QoaW50QXJnKTsKLSAgICByZXR1cm4g
djg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Ci19Ci0KLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gb3ZlcmxvYWRlZE1ldGhvZDVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQot
ewotICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoub3ZlcmxvYWRlZE1ldGhvZDUiKTsKLSAgICBU
ZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIGlm
IChhcmdzLkxlbmd0aCgpIDw9IDAgfHwgIWFyZ3NbMF0tPklzT2JqZWN0KCkpCi0gICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKLSAgICBSZWZQdHI8VGVzdENhbGxi
YWNrPiBjYWxsYmFjayA9IFY4VGVzdENhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSwgZ2V0U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2QoY2FsbGJhY2sp
OwotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKLX0KLQotc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm92ZXJsb2FkZWRNZXRo
b2QiKTsKLSAgICBpZiAoKGFyZ3MuTGVuZ3RoKCkgPT0gMiAmJiAoYXJnc1swXS0+SXNOdWxsKCkg
fHwgVjhUZXN0T2JqOjpIYXNJbnN0YW5jZShhcmdzWzBdKSkgJiYgKGFyZ3NbMV0tPklzTnVsbCgp
IHx8IGFyZ3NbMV0tPklzVW5kZWZpbmVkKCkgfHwgYXJnc1sxXS0+SXNTdHJpbmcoKSB8fCBhcmdz
WzFdLT5Jc09iamVjdCgpKSkpCi0gICAgICAgIHJldHVybiBvdmVybG9hZGVkTWV0aG9kMUNhbGxi
YWNrKGFyZ3MpOwotICAgIGlmICgoYXJncy5MZW5ndGgoKSA9PSAxICYmIChhcmdzWzBdLT5Jc051
bGwoKSB8fCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKGFyZ3NbMF0pKSkgfHwgKGFyZ3MuTGVuZ3Ro
KCkgPT0gMiAmJiAoYXJnc1swXS0+SXNOdWxsKCkgfHwgVjhUZXN0T2JqOjpIYXNJbnN0YW5jZShh
cmdzWzBdKSkpKQotICAgICAgICByZXR1cm4gb3ZlcmxvYWRlZE1ldGhvZDJDYWxsYmFjayhhcmdz
KTsKLSAgICBpZiAoKGFyZ3MuTGVuZ3RoKCkgPT0gMSAmJiAoYXJnc1swXS0+SXNOdWxsKCkgfHwg
YXJnc1swXS0+SXNVbmRlZmluZWQoKSB8fCBhcmdzWzBdLT5Jc1N0cmluZygpIHx8IGFyZ3NbMF0t
PklzT2JqZWN0KCkpKSkKLSAgICAgICAgcmV0dXJuIG92ZXJsb2FkZWRNZXRob2QzQ2FsbGJhY2so
YXJncyk7Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIG92ZXJs
b2FkZWRNZXRob2Q0Q2FsbGJhY2soYXJncyk7Ci0gICAgaWYgKChhcmdzLkxlbmd0aCgpID09IDEg
JiYgKGFyZ3NbMF0tPklzTnVsbCgpIHx8IGFyZ3NbMF0tPklzT2JqZWN0KCkpKSkKLSAgICAgICAg
cmV0dXJuIG92ZXJsb2FkZWRNZXRob2Q1Q2FsbGJhY2soYXJncyk7Ci0gICAgVjhQcm94eTo6dGhy
b3dUeXBlRXJyb3IoKTsKLSAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKLX0K
LQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjbGFzc01ldGhvZENhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5jbGFz
c01ldGhvZCIpOwotICAgIFRlc3RPYmo6OmNsYXNzTWV0aG9kKCk7Ci0gICAgcmV0dXJuIHY4OjpI
YW5kbGU8djg6OlZhbHVlPigpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNs
YXNzTWV0aG9kV2l0aE9wdGlvbmFsQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
LXsKLSAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsIik7
Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMCkgewotICAgICAgICByZXR1cm4gdjg6OkludGVn
ZXI6Ok5ldyhUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbCgpKTsKLSAgICB9Ci0gICAg
RVhDRVBUSU9OX0JMT0NLKGludCwgYXJnLCB0b0ludDMyKGFyZ3NbMF0pKTsKLSAgICByZXR1cm4g
djg6OkludGVnZXI6Ok5ldyhUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbChhcmcpKTsK
LX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbmFibGVkQXRSdW50aW1lTWV0aG9k
MUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgSU5DX1NUQVRTKCJE
T00uVGVzdE9iai5lbmFibGVkQXRSdW50aW1lTWV0aG9kMSIpOwotICAgIFRlc3RPYmoqIGltcCA9
IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgRVhDRVBUSU9OX0JMT0NL
KGludCwgaW50QXJnLCBWOGludDo6SGFzSW5zdGFuY2UoYXJnc1swXSkgPyBWOGludDo6dG9OYXRp
dmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwKTsKLSAgICBpbXAt
PmVuYWJsZWRBdFJ1bnRpbWVNZXRob2QxKGludEFyZyk7Ci0gICAgcmV0dXJuIHY4OjpIYW5kbGU8
djg6OlZhbHVlPigpOwotfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuYWJsZWRB
dFJ1bnRpbWVNZXRob2QyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAg
ICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmVuYWJsZWRBdFJ1bnRpbWVNZXRob2QyIik7Ci0gICAg
VGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBF
WENFUFRJT05fQkxPQ0soaW50LCBpbnRBcmcsIFY4aW50OjpIYXNJbnN0YW5jZShhcmdzWzBdKSA/
IFY4aW50Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKSA6
IDApOwotICAgIGltcC0+ZW5hYmxlZEF0UnVudGltZU1ldGhvZDIoaW50QXJnKTsKLSAgICByZXR1
cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RPYmpJ
bnRlcm5hbAotCi1zdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSBUZXN0T2JqQXR0cnNbXSA9
IHsKLSAgICAvLyBBdHRyaWJ1dGUgJ3JlYWRPbmx5SW50QXR0cicgKFR5cGU6ICdyZWFkb25seSBh
dHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQotICAgIHsicmVhZE9ubHlJbnRBdHRyIiwgVGVzdE9iaklu
dGVybmFsOjpyZWFkT25seUludEF0dHJBdHRyR2V0dGVyLCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0
YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4
OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAg
ICAvLyBBdHRyaWJ1dGUgJ3JlYWRPbmx5U3RyaW5nQXR0cicgKFR5cGU6ICdyZWFkb25seSBhdHRy
aWJ1dGUnIEV4dEF0dHI6ICcnKQotICAgIHsicmVhZE9ubHlTdHJpbmdBdHRyIiwgVGVzdE9iaklu
dGVybmFsOjpyZWFkT25seVN0cmluZ0F0dHJBdHRyR2V0dGVyLCAwLCAwIC8qIG5vIGRhdGEgKi8s
IHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0
PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwK
LSAgICAvLyBBdHRyaWJ1dGUgJ3JlYWRPbmx5VGVzdE9iakF0dHInIChUeXBlOiAncmVhZG9ubHkg
YXR0cmlidXRlJyBFeHRBdHRyOiAnJykKLSAgICB7InJlYWRPbmx5VGVzdE9iakF0dHIiLCBUZXN0
T2JqSW50ZXJuYWw6OnJlYWRPbmx5VGVzdE9iakF0dHJBdHRyR2V0dGVyLCAwLCAwIC8qIG5vIGRh
dGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRp
Y19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNl
ICovfSwKLSAgICAvLyBBdHRyaWJ1dGUgJ3Nob3J0QXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4
dEF0dHI6ICcnKQotICAgIHsic2hvcnRBdHRyIiwgVGVzdE9iakludGVybmFsOjpzaG9ydEF0dHJB
dHRyR2V0dGVyLCBUZXN0T2JqSW50ZXJuYWw6OnNob3J0QXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8g
ZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3Rh
dGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFu
Y2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAndW5zaWduZWRTaG9ydEF0dHInIChUeXBlOiAnYXR0
cmlidXRlJyBFeHRBdHRyOiAnJykKLSAgICB7InVuc2lnbmVkU2hvcnRBdHRyIiwgVGVzdE9iaklu
dGVybmFsOjp1bnNpZ25lZFNob3J0QXR0ckF0dHJHZXR0ZXIsIFRlc3RPYmpJbnRlcm5hbDo6dW5z
aWduZWRTaG9ydEF0dHJBdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4
OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0
dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1
dGUgJ2ludEF0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKLSAgICB7ImludEF0
dHIiLCBUZXN0T2JqSW50ZXJuYWw6OmludEF0dHJBdHRyR2V0dGVyLCBUZXN0T2JqSW50ZXJuYWw6
OmludEF0dHJBdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nl
c3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0
ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUgJ2xv
bmdMb25nQXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQotICAgIHsibG9uZ0xv
bmdBdHRyIiwgVGVzdE9iakludGVybmFsOjpsb25nTG9uZ0F0dHJBdHRyR2V0dGVyLCBUZXN0T2Jq
SW50ZXJuYWw6OmxvbmdMb25nQXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGlj
X2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlBy
b3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotICAgIC8v
IEF0dHJpYnV0ZSAndW5zaWduZWRMb25nTG9uZ0F0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRB
dHRyOiAnJykKLSAgICB7InVuc2lnbmVkTG9uZ0xvbmdBdHRyIiwgVGVzdE9iakludGVybmFsOjp1
bnNpZ25lZExvbmdMb25nQXR0ckF0dHJHZXR0ZXIsIFRlc3RPYmpJbnRlcm5hbDo6dW5zaWduZWRM
b25nTG9uZ0F0dHJBdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpB
Y2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJp
YnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUg
J3N0cmluZ0F0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKLSAgICB7InN0cmlu
Z0F0dHIiLCBUZXN0T2JqSW50ZXJuYWw6OnN0cmluZ0F0dHJBdHRyR2V0dGVyLCBUZXN0T2JqSW50
ZXJuYWw6OnN0cmluZ0F0dHJBdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0
PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0
eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRy
aWJ1dGUgJ3Rlc3RPYmpBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCi0gICAg
eyJ0ZXN0T2JqQXR0ciIsIFRlc3RPYmpJbnRlcm5hbDo6dGVzdE9iakF0dHJBdHRyR2V0dGVyLCBU
ZXN0T2JqSW50ZXJuYWw6OnRlc3RPYmpBdHRyQXR0clNldHRlciwgMCAvKiBubyBkYXRhICovLCBz
dGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2
ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCi0g
ICAgLy8gQXR0cmlidXRlICdYTUxPYmpBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjog
JycpCi0gICAgeyJYTUxPYmpBdHRyIiwgVGVzdE9iakludGVybmFsOjpYTUxPYmpBdHRyQXR0ckdl
dHRlciwgVGVzdE9iakludGVybmFsOjpYTUxPYmpBdHRyQXR0clNldHRlciwgMCAvKiBubyBkYXRh
ICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNf
Y2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAq
L30sCi0gICAgLy8gQXR0cmlidXRlICdjcmVhdGUnIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRy
OiAnJykKLSAgICB7ImNyZWF0ZSIsIFRlc3RPYmpJbnRlcm5hbDo6Y3JlYXRlQXR0ckdldHRlciwg
VGVzdE9iakludGVybmFsOjpjcmVhdGVBdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRp
Y19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQ
cm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAv
LyBBdHRyaWJ1dGUgJ3JlZmxlY3RlZFN0cmluZ0F0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRB
dHRyOiAnUmVmbGVjdCcpCi0gICAgeyJyZWZsZWN0ZWRTdHJpbmdBdHRyIiwgVGVzdE9iakludGVy
bmFsOjpyZWZsZWN0ZWRTdHJpbmdBdHRyQXR0ckdldHRlciwgVGVzdE9iakludGVybmFsOjpyZWZs
ZWN0ZWRTdHJpbmdBdHRyQXR0clNldHRlciwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2
ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlB
dHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCi0gICAgLy8gQXR0cmli
dXRlICdyZWZsZWN0ZWRJbnRlZ3JhbEF0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAn
UmVmbGVjdCcpCi0gICAgeyJyZWZsZWN0ZWRJbnRlZ3JhbEF0dHIiLCBUZXN0T2JqSW50ZXJuYWw6
OnJlZmxlY3RlZEludGVncmFsQXR0ckF0dHJHZXR0ZXIsIFRlc3RPYmpJbnRlcm5hbDo6cmVmbGVj
dGVkSW50ZWdyYWxBdHRyQXR0clNldHRlciwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2
ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlB
dHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCi0gICAgLy8gQXR0cmli
dXRlICdyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4
dEF0dHI6ICdSZWZsZWN0JykKLSAgICB7InJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyIiwg
VGVzdE9iakludGVybmFsOjpyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckF0dHJHZXR0ZXIs
IFRlc3RPYmpJbnRlcm5hbDo6cmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJBdHRyU2V0dGVy
LCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVG
QVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8q
IG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUgJ3JlZmxlY3RlZEJvb2xlYW5BdHRy
JyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ1JlZmxlY3QnKQotICAgIHsicmVmbGVjdGVk
Qm9vbGVhbkF0dHIiLCBUZXN0T2JqSW50ZXJuYWw6OnJlZmxlY3RlZEJvb2xlYW5BdHRyQXR0ckdl
dHRlciwgVGVzdE9iakludGVybmFsOjpyZWZsZWN0ZWRCb29sZWFuQXR0ckF0dHJTZXR0ZXIsIDAg
Lyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxU
KSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24g
aW5zdGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAncmVmbGVjdGVkVVJMQXR0cicgKFR5cGU6
ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICdVUkwgUmVmbGVjdCcpCi0gICAgeyJyZWZsZWN0ZWRVUkxB
dHRyIiwgVGVzdE9iakludGVybmFsOjpyZWZsZWN0ZWRVUkxBdHRyQXR0ckdldHRlciwgVGVzdE9i
akludGVybmFsOjpyZWZsZWN0ZWRVUkxBdHRyQXR0clNldHRlciwgMCAvKiBubyBkYXRhICovLCBz
dGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2
ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCi0g
ICAgLy8gQXR0cmlidXRlICdyZWZsZWN0ZWROb25FbXB0eVVSTEF0dHInIChUeXBlOiAnYXR0cmli
dXRlJyBFeHRBdHRyOiAnVVJMIE5vbkVtcHR5IFJlZmxlY3QnKQotICAgIHsicmVmbGVjdGVkTm9u
RW1wdHlVUkxBdHRyIiwgVGVzdE9iakludGVybmFsOjpyZWZsZWN0ZWROb25FbXB0eVVSTEF0dHJB
dHRyR2V0dGVyLCBUZXN0T2JqSW50ZXJuYWw6OnJlZmxlY3RlZE5vbkVtcHR5VVJMQXR0ckF0dHJT
ZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4
OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSks
IDAgLyogb24gaW5zdGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAncmVmbGVjdGVkU3RyaW5n
QXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICdSZWZsZWN0JykKLSAgICB7InJlZmxl
Y3RlZFN0cmluZ0F0dHIiLCBUZXN0T2JqSW50ZXJuYWw6OnJlZmxlY3RlZFN0cmluZ0F0dHJBdHRy
R2V0dGVyLCBUZXN0T2JqSW50ZXJuYWw6OnJlZmxlY3RlZFN0cmluZ0F0dHJBdHRyU2V0dGVyLCAw
IC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVM
VCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9u
IGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUgJ3JlZmxlY3RlZEN1c3RvbUludGVncmFs
QXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICdSZWZsZWN0JykKLSAgICB7InJlZmxl
Y3RlZEN1c3RvbUludGVncmFsQXR0ciIsIFRlc3RPYmpJbnRlcm5hbDo6cmVmbGVjdGVkQ3VzdG9t
SW50ZWdyYWxBdHRyQXR0ckdldHRlciwgVGVzdE9iakludGVybmFsOjpyZWZsZWN0ZWRDdXN0b21J
bnRlZ3JhbEF0dHJBdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpB
Y2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJp
YnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAgICAvLyBBdHRyaWJ1dGUg
J3JlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjog
J1JlZmxlY3QnKQotICAgIHsicmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIiLCBUZXN0T2JqSW50
ZXJuYWw6OnJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyQXR0ckdldHRlciwgVGVzdE9iakludGVy
bmFsOjpyZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAq
Lywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nh
c3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99
LAotICAgIC8vIEF0dHJpYnV0ZSAncmVmbGVjdGVkQ3VzdG9tVVJMQXR0cicgKFR5cGU6ICdhdHRy
aWJ1dGUnIEV4dEF0dHI6ICdVUkwgUmVmbGVjdCcpCi0gICAgeyJyZWZsZWN0ZWRDdXN0b21VUkxB
dHRyIiwgVGVzdE9iakludGVybmFsOjpyZWZsZWN0ZWRDdXN0b21VUkxBdHRyQXR0ckdldHRlciwg
VGVzdE9iakludGVybmFsOjpyZWZsZWN0ZWRDdXN0b21VUkxBdHRyQXR0clNldHRlciwgMCAvKiBu
byBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBz
dGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0
YW5jZSAqL30sCi0gICAgLy8gQXR0cmlidXRlICdyZWZsZWN0ZWRDdXN0b21Ob25FbXB0eVVSTEF0
dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnVVJMIE5vbkVtcHR5IFJlZmxlY3QnKQot
ICAgIHsicmVmbGVjdGVkQ3VzdG9tTm9uRW1wdHlVUkxBdHRyIiwgVGVzdE9iakludGVybmFsOjpy
ZWZsZWN0ZWRDdXN0b21Ob25FbXB0eVVSTEF0dHJBdHRyR2V0dGVyLCBUZXN0T2JqSW50ZXJuYWw6
OnJlZmxlY3RlZEN1c3RvbU5vbkVtcHR5VVJMQXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAq
Lywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nh
c3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99
LAotICAgIC8vIEF0dHJpYnV0ZSAnYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24nIChUeXBlOiAnYXR0
cmlidXRlJyBFeHRBdHRyOiAnJykKLSAgICB7ImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIiwgVGVz
dE9iakludGVybmFsOjphdHRyV2l0aEdldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIsIFRlc3RPYmpJ
bnRlcm5hbDo6YXR0cldpdGhHZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEg
Ki8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19j
YXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICov
fSwKLSAgICAvLyBBdHRyaWJ1dGUgJ2F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uJyAoVHlwZTogJ2F0
dHJpYnV0ZScgRXh0QXR0cjogJycpCi0gICAgeyJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIsIFRl
c3RPYmpJbnRlcm5hbDo6YXR0cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyLCBUZXN0T2Jq
SW50ZXJuYWw6OmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uQXR0clNldHRlciwgMCAvKiBubyBkYXRh
ICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNf
Y2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAq
L30sCi0gICAgLy8gQXR0cmlidXRlICdzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbicgKFR5
cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQotICAgIHsic3RyaW5nQXR0cldpdGhHZXR0ZXJF
eGNlcHRpb24iLCBUZXN0T2JqSW50ZXJuYWw6OnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
QXR0ckdldHRlciwgVGVzdE9iakludGVybmFsOjpzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bkF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRy
b2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6
Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAnc3RyaW5nQXR0
cldpdGhTZXR0ZXJFeGNlcHRpb24nIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKLSAg
ICB7InN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIiwgVGVzdE9iakludGVybmFsOjpzdHJp
bmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIsIFRlc3RPYmpJbnRlcm5hbDo6c3Ry
aW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25BdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0
YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4
OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKLSAg
ICAvLyBBdHRyaWJ1dGUgJ2N1c3RvbUF0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAn
Q3VzdG9tJykKLSAgICB7ImN1c3RvbUF0dHIiLCBWOFRlc3RPYmo6OmN1c3RvbUF0dHJBY2Nlc3Nv
ckdldHRlciwgVjhUZXN0T2JqOjpjdXN0b21BdHRyQWNjZXNzb3JTZXR0ZXIsIDAgLyogbm8gZGF0
YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGlj
X2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2Ug
Ki99LAotICAgIC8vIEF0dHJpYnV0ZSAnc2NyaXB0U3RyaW5nQXR0cicgKFR5cGU6ICdyZWFkb25s
eSBhdHRyaWJ1dGUnIEV4dEF0dHI6ICdDb252ZXJ0U2NyaXB0U3RyaW5nJykKLSAgICB7InNjcmlw
dFN0cmluZ0F0dHIiLCBUZXN0T2JqSW50ZXJuYWw6OnNjcmlwdFN0cmluZ0F0dHJBdHRyR2V0dGVy
LCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6
REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAw
IC8qIG9uIGluc3RhbmNlICovfSwKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLSAgICAvLyBBdHRy
aWJ1dGUgJ2NvbmRpdGlvbmFsQXR0cjEnIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnQ29u
ZGl0aW9uYWwnKQotICAgIHsiY29uZGl0aW9uYWxBdHRyMSIsIFRlc3RPYmpJbnRlcm5hbDo6Y29u
ZGl0aW9uYWxBdHRyMUF0dHJHZXR0ZXIsIFRlc3RPYmpJbnRlcm5hbDo6Y29uZGl0aW9uYWxBdHRy
MUF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRy
b2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6
Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24x
KQotI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICAvLyBB
dHRyaWJ1dGUgJ2NvbmRpdGlvbmFsQXR0cjInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAn
Q29uZGl0aW9uYWwnKQotICAgIHsiY29uZGl0aW9uYWxBdHRyMiIsIFRlc3RPYmpJbnRlcm5hbDo6
Y29uZGl0aW9uYWxBdHRyMkF0dHJHZXR0ZXIsIFRlc3RPYmpJbnRlcm5hbDo6Y29uZGl0aW9uYWxB
dHRyMkF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0Nv
bnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2
ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRp
b24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5B
QkxFKENvbmRpdGlvbjIpCi0gICAgLy8gQXR0cmlidXRlICdjb25kaXRpb25hbEF0dHIzJyAoVHlw
ZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ0NvbmRpdGlvbmFsJykKLSAgICB7ImNvbmRpdGlvbmFs
QXR0cjMiLCBUZXN0T2JqSW50ZXJuYWw6OmNvbmRpdGlvbmFsQXR0cjNBdHRyR2V0dGVyLCBUZXN0
T2JqSW50ZXJuYWw6OmNvbmRpdGlvbmFsQXR0cjNBdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8s
IHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0
PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwK
LSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAg
Ly8gQXR0cmlidXRlICdkZXNjcmlwdGlvbicgKFR5cGU6ICdyZWFkb25seSBhdHRyaWJ1dGUnIEV4
dEF0dHI6ICcnKQotICAgIHsiZGVzY3JpcHRpb24iLCBUZXN0T2JqSW50ZXJuYWw6OmRlc2NyaXB0
aW9uQXR0ckdldHRlciwgMCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNz
Q29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+
KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCi0gICAgLy8gQXR0cmlidXRlICdpZCcg
KFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQotICAgIHsiaWQiLCBUZXN0T2JqSW50ZXJu
YWw6OmlkQXR0ckdldHRlciwgVGVzdE9iakludGVybmFsOjppZEF0dHJTZXR0ZXIsIDAgLyogbm8g
ZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3Rh
dGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFu
Y2UgKi99LAotICAgIC8vIEF0dHJpYnV0ZSAnaGFzaCcgKFR5cGU6ICdyZWFkb25seSBhdHRyaWJ1
dGUnIEV4dEF0dHI6ICcnKQotICAgIHsiaGFzaCIsIFRlc3RPYmpJbnRlcm5hbDo6aGFzaEF0dHJH
ZXR0ZXIsIDAsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+
KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9u
ZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAotfTsKLXN0YXRpYyBjb25zdCBCYXRjaGVkQ2FsbGJh
Y2sgVGVzdE9iakNhbGxiYWNrc1tdID0gewotICAgIHsidm9pZE1ldGhvZCIsIFRlc3RPYmpJbnRl
cm5hbDo6dm9pZE1ldGhvZENhbGxiYWNrfSwKLSAgICB7ImludE1ldGhvZCIsIFRlc3RPYmpJbnRl
cm5hbDo6aW50TWV0aG9kQ2FsbGJhY2t9LAotICAgIHsib2JqTWV0aG9kIiwgVGVzdE9iakludGVy
bmFsOjpvYmpNZXRob2RDYWxsYmFja30sCi0gICAgeyJzZXJpYWxpemVkVmFsdWUiLCBUZXN0T2Jq
SW50ZXJuYWw6OnNlcmlhbGl6ZWRWYWx1ZUNhbGxiYWNrfSwKLSAgICB7ImlkYktleSIsIFRlc3RP
YmpJbnRlcm5hbDo6aWRiS2V5Q2FsbGJhY2t9LAotICAgIHsib3B0aW9uc09iamVjdCIsIFRlc3RP
YmpJbnRlcm5hbDo6b3B0aW9uc09iamVjdENhbGxiYWNrfSwKLSAgICB7Im1ldGhvZFdpdGhFeGNl
cHRpb24iLCBUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhFeGNlcHRpb25DYWxsYmFja30sCi0g
ICAgeyJjdXN0b21NZXRob2QiLCBWOFRlc3RPYmo6OmN1c3RvbU1ldGhvZENhbGxiYWNrfSwKLSAg
ICB7ImN1c3RvbU1ldGhvZFdpdGhBcmdzIiwgVjhUZXN0T2JqOjpjdXN0b21NZXRob2RXaXRoQXJn
c0NhbGxiYWNrfSwKLSAgICB7ImFkZEV2ZW50TGlzdGVuZXIiLCBUZXN0T2JqSW50ZXJuYWw6OmFk
ZEV2ZW50TGlzdGVuZXJDYWxsYmFja30sCi0gICAgeyJyZW1vdmVFdmVudExpc3RlbmVyIiwgVGVz
dE9iakludGVybmFsOjpyZW1vdmVFdmVudExpc3RlbmVyQ2FsbGJhY2t9LAotICAgIHsid2l0aER5
bmFtaWNGcmFtZSIsIFRlc3RPYmpJbnRlcm5hbDo6d2l0aER5bmFtaWNGcmFtZUNhbGxiYWNrfSwK
LSAgICB7IndpdGhEeW5hbWljRnJhbWVBbmRBcmciLCBUZXN0T2JqSW50ZXJuYWw6OndpdGhEeW5h
bWljRnJhbWVBbmRBcmdDYWxsYmFja30sCi0gICAgeyJ3aXRoRHluYW1pY0ZyYW1lQW5kT3B0aW9u
YWxBcmciLCBUZXN0T2JqSW50ZXJuYWw6OndpdGhEeW5hbWljRnJhbWVBbmRPcHRpb25hbEFyZ0Nh
bGxiYWNrfSwKLSAgICB7IndpdGhEeW5hbWljRnJhbWVBbmRVc2VyR2VzdHVyZSIsIFRlc3RPYmpJ
bnRlcm5hbDo6d2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlQ2FsbGJhY2t9LAotICAgIHsi
d2l0aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlQVNBRCIsIFRlc3RPYmpJbnRlcm5hbDo6d2l0
aER5bmFtaWNGcmFtZUFuZFVzZXJHZXN0dXJlQVNBRENhbGxiYWNrfSwKLSAgICB7IndpdGhTY3Jp
cHRTdGF0ZVZvaWQiLCBUZXN0T2JqSW50ZXJuYWw6OndpdGhTY3JpcHRTdGF0ZVZvaWRDYWxsYmFj
a30sCi0gICAgeyJ3aXRoU2NyaXB0U3RhdGVPYmoiLCBUZXN0T2JqSW50ZXJuYWw6OndpdGhTY3Jp
cHRTdGF0ZU9iakNhbGxiYWNrfSwKLSAgICB7IndpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24i
LCBUZXN0T2JqSW50ZXJuYWw6OndpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb25DYWxsYmFja30s
Ci0gICAgeyJ3aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24iLCBUZXN0T2JqSW50ZXJuYWw6Ondp
dGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbkNhbGxiYWNrfSwKLSAgICB7IndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0IiwgVGVzdE9iakludGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dENhbGxiYWNrfSwKLSAgICB7Im1ldGhvZFdpdGhPcHRpb25hbEFyZyIsIFRlc3RPYmpJbnRlcm5h
bDo6bWV0aG9kV2l0aE9wdGlvbmFsQXJnQ2FsbGJhY2t9LAotICAgIHsibWV0aG9kV2l0aE5vbk9w
dGlvbmFsQXJnQW5kT3B0aW9uYWxBcmciLCBUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhOb25P
cHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnQ2FsbGJhY2t9LAotICAgIHsibWV0aG9kV2l0aE5vbk9w
dGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzIiwgVGVzdE9iakludGVybmFsOjptZXRob2RXaXRo
Tm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3NDYWxsYmFja30sCi0gICAgeyJtZXRob2RX
aXRoQ2FsbGJhY2tBcmciLCBUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhDYWxsYmFja0FyZ0Nh
bGxiYWNrfSwKLSAgICB7Im1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnIiwg
VGVzdE9iakludGVybmFsOjptZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZ0Nh
bGxiYWNrfSwKLSAgICB7Im1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIiwgVGVzdE9i
akludGVybmFsOjptZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0NhbGxiYWNrfSwKLSAg
ICB7Im92ZXJsb2FkZWRNZXRob2QiLCBUZXN0T2JqSW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2RD
YWxsYmFja30sCi19Owotc3RhdGljIGNvbnN0IEJhdGNoZWRDb25zdGFudCBUZXN0T2JqQ29uc3Rz
W10gPSB7Ci0gICAgeyJDT05TVF9WQUxVRV8wIiwgc3RhdGljX2Nhc3Q8c2lnbmVkIGludD4oMCl9
LAotICAgIHsiQ09OU1RfVkFMVUVfMSIsIHN0YXRpY19jYXN0PHNpZ25lZCBpbnQ+KDEpfSwKLSAg
ICB7IkNPTlNUX1ZBTFVFXzIiLCBzdGF0aWNfY2FzdDxzaWduZWQgaW50PigyKX0sCi0gICAgeyJD
T05TVF9WQUxVRV80Iiwgc3RhdGljX2Nhc3Q8c2lnbmVkIGludD4oNCl9LAotICAgIHsiQ09OU1Rf
VkFMVUVfOCIsIHN0YXRpY19jYXN0PHNpZ25lZCBpbnQ+KDgpfSwKLSAgICB7IkNPTlNUX1ZBTFVF
XzkiLCBzdGF0aWNfY2FzdDxzaWduZWQgaW50PigtMSl9LAotICAgIHsiQ09OU1RfVkFMVUVfMTAi
LCBzdGF0aWNfY2FzdDxzaWduZWQgaW50PigibXkgY29uc3RhbnQgc3RyaW5nIil9LAotICAgIHsi
Q09OU1RfVkFMVUVfMTEiLCBzdGF0aWNfY2FzdDxzaWduZWQgaW50PigweGZmZmZmZmZmKX0sCi0g
ICAgeyJDT05TVF9WQUxVRV8xMiIsIHN0YXRpY19jYXN0PHNpZ25lZCBpbnQ+KDB4MDEpfSwKLSAg
ICB7IkNPTlNUX1ZBTFVFXzEzIiwgc3RhdGljX2Nhc3Q8c2lnbmVkIGludD4oMFgyMCl9LAotICAg
IHsiQ09OU1RfVkFMVUVfMTQiLCBzdGF0aWNfY2FzdDxzaWduZWQgaW50PigweDFhYmMpfSwKLX07
Ci0KLUNPTVBJTEVfQVNTRVJUKDAgPT0gVGVzdE9iajo6Q09OU1RfVkFMVUVfMCwgVGVzdE9iakVu
dW1DT05TVF9WQUxVRV8wSXNXcm9uZ1VzZURvbnRDaGVja0VudW1zKTsKLUNPTVBJTEVfQVNTRVJU
KDEgPT0gVGVzdE9iajo6Q09OU1RfVkFMVUVfMSwgVGVzdE9iakVudW1DT05TVF9WQUxVRV8xSXNX
cm9uZ1VzZURvbnRDaGVja0VudW1zKTsKLUNPTVBJTEVfQVNTRVJUKDIgPT0gVGVzdE9iajo6Q09O
U1RfVkFMVUVfMiwgVGVzdE9iakVudW1DT05TVF9WQUxVRV8ySXNXcm9uZ1VzZURvbnRDaGVja0Vu
dW1zKTsKLUNPTVBJTEVfQVNTRVJUKDQgPT0gVGVzdE9iajo6Q09OU1RfVkFMVUVfNCwgVGVzdE9i
akVudW1DT05TVF9WQUxVRV80SXNXcm9uZ1VzZURvbnRDaGVja0VudW1zKTsKLUNPTVBJTEVfQVNT
RVJUKDggPT0gVGVzdE9iajo6Q09OU1RfVkFMVUVfOCwgVGVzdE9iakVudW1DT05TVF9WQUxVRV84
SXNXcm9uZ1VzZURvbnRDaGVja0VudW1zKTsKLUNPTVBJTEVfQVNTRVJUKC0xID09IFRlc3RPYmo6
OkNPTlNUX1ZBTFVFXzksIFRlc3RPYmpFbnVtQ09OU1RfVkFMVUVfOUlzV3JvbmdVc2VEb250Q2hl
Y2tFbnVtcyk7Ci1DT01QSUxFX0FTU0VSVCgibXkgY29uc3RhbnQgc3RyaW5nIiA9PSBUZXN0T2Jq
OjpDT05TVF9WQUxVRV8xMCwgVGVzdE9iakVudW1DT05TVF9WQUxVRV8xMElzV3JvbmdVc2VEb250
Q2hlY2tFbnVtcyk7Ci1DT01QSUxFX0FTU0VSVCgweGZmZmZmZmZmID09IFRlc3RPYmo6OkNPTlNU
X1ZBTFVFXzExLCBUZXN0T2JqRW51bUNPTlNUX1ZBTFVFXzExSXNXcm9uZ1VzZURvbnRDaGVja0Vu
dW1zKTsKLUNPTVBJTEVfQVNTRVJUKDB4MDEgPT0gVGVzdE9iajo6Q09OU1RfVkFMVUVfMTIsIFRl
c3RPYmpFbnVtQ09OU1RfVkFMVUVfMTJJc1dyb25nVXNlRG9udENoZWNrRW51bXMpOwotQ09NUElM
RV9BU1NFUlQoMFgyMCA9PSBUZXN0T2JqOjpDT05TVF9WQUxVRV8xMywgVGVzdE9iakVudW1DT05T
VF9WQUxVRV8xM0lzV3JvbmdVc2VEb250Q2hlY2tFbnVtcyk7Ci1DT01QSUxFX0FTU0VSVCgweDFh
YmMgPT0gVGVzdE9iajo6Q09OU1RfVkFMVUVfMTQsIFRlc3RPYmpFbnVtQ09OU1RfVkFMVUVfMTRJ
c1dyb25nVXNlRG9udENoZWNrRW51bXMpOwotCi1zdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdE9ialRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjKQotewotICAgIHY4OjpMb2NhbDx2ODo6U2lnbmF0
dXJlPiBkZWZhdWx0U2lnbmF0dXJlID0gY29uZmlndXJlVGVtcGxhdGUoZGVzYywgIlRlc3RPYmoi
LCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgVjhUZXN0T2JqOjppbnRl
cm5hbEZpZWxkQ291bnQsCi0gICAgICAgIFRlc3RPYmpBdHRycywgV1RGX0FSUkFZX0xFTkdUSChU
ZXN0T2JqQXR0cnMpLAotICAgICAgICBUZXN0T2JqQ2FsbGJhY2tzLCBXVEZfQVJSQVlfTEVOR1RI
KFRlc3RPYmpDYWxsYmFja3MpKTsKLSAgICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBp
bnN0YW5jZSA9IGRlc2MtPkluc3RhbmNlVGVtcGxhdGUoKTsKLSAgICB2ODo6TG9jYWw8djg6Ok9i
amVjdFRlbXBsYXRlPiBwcm90byA9IGRlc2MtPlByb3RvdHlwZVRlbXBsYXRlKCk7Ci0gICAgCi0g
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmVuYWJsZWRBdFJ1bnRpbWVBdHRyMUVuYWJs
ZWQoKSkgewotICAgICAgICBzdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSBhdHRyRGF0YSA9
XAotICAgICAgICAvLyBBdHRyaWJ1dGUgJ2VuYWJsZWRBdFJ1bnRpbWVBdHRyMScgKFR5cGU6ICdh
dHRyaWJ1dGUnIEV4dEF0dHI6ICdFbmFibGVkQXRSdW50aW1lJykKLSAgICAgICAgeyJlbmFibGVk
QXRSdW50aW1lQXR0cjEiLCBUZXN0T2JqSW50ZXJuYWw6OmVuYWJsZWRBdFJ1bnRpbWVBdHRyMUF0
dHJHZXR0ZXIsIFRlc3RPYmpJbnRlcm5hbDo6ZW5hYmxlZEF0UnVudGltZUF0dHIxQXR0clNldHRl
ciwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRF
RkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAv
KiBvbiBpbnN0YW5jZSAqL307Ci0gICAgICAgIGNvbmZpZ3VyZUF0dHJpYnV0ZShpbnN0YW5jZSwg
cHJvdG8sIGF0dHJEYXRhKTsKLSAgICB9Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OmZlYXR1cmVOYW1lRW5hYmxlZCgpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBCYXRjaGVkQXR0
cmlidXRlIGF0dHJEYXRhID1cCi0gICAgICAgIC8vIEF0dHJpYnV0ZSAnZW5hYmxlZEF0UnVudGlt
ZUF0dHIyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJ0VuYWJsZWRBdFJ1bnRpbWUnKQot
ICAgICAgICB7ImVuYWJsZWRBdFJ1bnRpbWVBdHRyMiIsIFRlc3RPYmpJbnRlcm5hbDo6ZW5hYmxl
ZEF0UnVudGltZUF0dHIyQXR0ckdldHRlciwgVGVzdE9iakludGVybmFsOjplbmFibGVkQXRSdW50
aW1lQXR0cjJBdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nl
c3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0
ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfTsKLSAgICAgICAgY29uZmlndXJlQXR0
cmlidXRlKGluc3RhbmNlLCBwcm90bywgYXR0ckRhdGEpOwotICAgIH0KLQotICAgIC8vIEN1c3Rv
bSBTaWduYXR1cmUgJ3ZvaWRNZXRob2RXaXRoQXJncycKLSAgICBjb25zdCBpbnQgdm9pZE1ldGhv
ZFdpdGhBcmdzQXJnYyA9IDM7Ci0gICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
dm9pZE1ldGhvZFdpdGhBcmdzQXJndlt2b2lkTWV0aG9kV2l0aEFyZ3NBcmdjXSA9IHsgdjg6Okhh
bmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4oKSwgVjhUZXN0T2JqOjpHZXRSYXdUZW1wbGF0ZSgpIH07Ci0gICAgdjg6OkhhbmRsZTx2
ODo6U2lnbmF0dXJlPiB2b2lkTWV0aG9kV2l0aEFyZ3NTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJl
OjpOZXcoZGVzYywgdm9pZE1ldGhvZFdpdGhBcmdzQXJnYywgdm9pZE1ldGhvZFdpdGhBcmdzQXJn
dik7Ci0gICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoInZvaWRNZXRob2RXaXRoQXJncyIp
LCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpJbnRlcm5hbDo6dm9pZE1ldGhvZFdp
dGhBcmdzQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCB2b2lkTWV0aG9kV2l0aEFy
Z3NTaWduYXR1cmUpKTsKLQotICAgIC8vIEN1c3RvbSBTaWduYXR1cmUgJ2ludE1ldGhvZFdpdGhB
cmdzJwotICAgIGNvbnN0IGludCBpbnRNZXRob2RXaXRoQXJnc0FyZ2MgPSAzOwotICAgIHY4OjpI
YW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGludE1ldGhvZFdpdGhBcmdzQXJndltpbnRNZXRo
b2RXaXRoQXJnc0FyZ2NdID0geyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPigpLCB2
ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPigpLCBWOFRlc3RPYmo6OkdldFJhd1RlbXBs
YXRlKCkgfTsKLSAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IGludE1ldGhvZFdpdGhBcmdz
U2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIGludE1ldGhvZFdpdGhBcmdzQXJn
YywgaW50TWV0aG9kV2l0aEFyZ3NBcmd2KTsKLSAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5l
dygiaW50TWV0aG9kV2l0aEFyZ3MiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2Jq
SW50ZXJuYWw6OmludE1ldGhvZFdpdGhBcmdzQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVl
PigpLCBpbnRNZXRob2RXaXRoQXJnc1NpZ25hdHVyZSkpOwotCi0gICAgLy8gQ3VzdG9tIFNpZ25h
dHVyZSAnb2JqTWV0aG9kV2l0aEFyZ3MnCi0gICAgY29uc3QgaW50IG9iak1ldGhvZFdpdGhBcmdz
QXJnYyA9IDM7Ci0gICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gb2JqTWV0aG9k
V2l0aEFyZ3NBcmd2W29iak1ldGhvZFdpdGhBcmdzQXJnY10gPSB7IHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+KCksIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCksIFY4
VGVzdE9iajo6R2V0UmF3VGVtcGxhdGUoKSB9OwotICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVy
ZT4gb2JqTWV0aG9kV2l0aEFyZ3NTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywg
b2JqTWV0aG9kV2l0aEFyZ3NBcmdjLCBvYmpNZXRob2RXaXRoQXJnc0FyZ3YpOwotICAgIHByb3Rv
LT5TZXQodjg6OlN0cmluZzo6TmV3KCJvYmpNZXRob2RXaXRoQXJncyIpLCB2ODo6RnVuY3Rpb25U
ZW1wbGF0ZTo6TmV3KFRlc3RPYmpJbnRlcm5hbDo6b2JqTWV0aG9kV2l0aEFyZ3NDYWxsYmFjaywg
djg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIG9iak1ldGhvZFdpdGhBcmdzU2lnbmF0dXJlKSk7Ci0K
LSAgICAvLyBDdXN0b20gU2lnbmF0dXJlICdtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzJwotICAg
IGNvbnN0IGludCBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQXJnYyA9IDI7Ci0gICAgdjg6Okhh
bmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FyZ3Zb
bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FyZ2NdID0geyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlv
blRlbXBsYXRlPigpLCBWOFRlc3RPYmo6OkdldFJhd1RlbXBsYXRlKCkgfTsKLSAgICB2ODo6SGFu
ZGxlPHY4OjpTaWduYXR1cmU+IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NTaWduYXR1cmUgPSB2
ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FyZ2MsIG1l
dGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBcmd2KTsKLSAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6
Ok5ldygibWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6
TmV3KFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0NhbGxiYWNrLCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc1NpZ25hdHVy
ZSkpOwotCi0gICAgLy8gQ3VzdG9tIFNpZ25hdHVyZSAnbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJn
c0FuZFRocm93cycKLSAgICBjb25zdCBpbnQgbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRo
cm93c0FyZ2MgPSAyOwotICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IG1ldGhv
ZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NBcmd2W21ldGhvZFRoYXRSZXF1aXJlc0FsbEFy
Z3NBbmRUaHJvd3NBcmdjXSA9IHsgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwg
VjhUZXN0T2JqOjpHZXRSYXdUZW1wbGF0ZSgpIH07Ci0gICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0
dXJlPiBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzU2lnbmF0dXJlID0gdjg6OlNp
Z25hdHVyZTo6TmV3KGRlc2MsIG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NBcmdj
LCBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzQXJndik7Ci0gICAgcHJvdG8tPlNl
dCh2ODo6U3RyaW5nOjpOZXcoIm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MiKSwg
djg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFRoYXRSZXF1
aXJlc0FsbEFyZ3NBbmRUaHJvd3NDYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIG1l
dGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NTaWduYXR1cmUpKTsKLQotICAgIC8vIEN1
c3RvbSBTaWduYXR1cmUgJ2N1c3RvbUFyZ3NBbmRFeGNlcHRpb24nCi0gICAgY29uc3QgaW50IGN1
c3RvbUFyZ3NBbmRFeGNlcHRpb25BcmdjID0gMTsKLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBjdXN0b21BcmdzQW5kRXhjZXB0aW9uQXJndltjdXN0b21BcmdzQW5kRXhjZXB0
aW9uQXJnY10gPSB7IFY4bG9nOjpHZXRSYXdUZW1wbGF0ZSgpIH07Ci0gICAgdjg6OkhhbmRsZTx2
ODo6U2lnbmF0dXJlPiBjdXN0b21BcmdzQW5kRXhjZXB0aW9uU2lnbmF0dXJlID0gdjg6OlNpZ25h
dHVyZTo6TmV3KGRlc2MsIGN1c3RvbUFyZ3NBbmRFeGNlcHRpb25BcmdjLCBjdXN0b21BcmdzQW5k
RXhjZXB0aW9uQXJndik7Ci0gICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoImN1c3RvbUFy
Z3NBbmRFeGNlcHRpb24iKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqSW50ZXJu
YWw6OmN1c3RvbUFyZ3NBbmRFeGNlcHRpb25DYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KCksIGN1c3RvbUFyZ3NBbmRFeGNlcHRpb25TaWduYXR1cmUpKTsKLSAgICBkZXNjLT5TZXQodjg6
OlN0cmluZzo6TmV3KCJjbGFzc01ldGhvZCIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRl
c3RPYmpJbnRlcm5hbDo6Y2xhc3NNZXRob2RDYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KCksIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPigpKSk7Ci0gICAgZGVzYy0+U2V0KHY4OjpTdHJp
bmc6Ok5ldygiY2xhc3NNZXRob2RXaXRoT3B0aW9uYWwiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6
Ok5ldyhUZXN0T2JqSW50ZXJuYWw6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsQ2FsbGJhY2ssIHY4
OjpIYW5kbGU8djg6OlZhbHVlPigpLCB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4oKSkpOwotICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjplbmFibGVkQXRSdW50aW1lTWV0aG9kMUVuYWJs
ZWQoKSkKLSAgICAgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoImVuYWJsZWRBdFJ1bnRp
bWVNZXRob2QxIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9iakludGVybmFsOjpl
bmFibGVkQXRSdW50aW1lTWV0aG9kMUNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwg
ZGVmYXVsdFNpZ25hdHVyZSkpOwotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpmZWF0
dXJlTmFtZUVuYWJsZWQoKSkKLSAgICAgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoImVu
YWJsZWRBdFJ1bnRpbWVNZXRob2QyIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9i
akludGVybmFsOjplbmFibGVkQXRSdW50aW1lTWV0aG9kMkNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4oKSwgZGVmYXVsdFNpZ25hdHVyZSkpOwotICAgIGJhdGNoQ29uZmlndXJlQ29uc3Rh
bnRzKGRlc2MsIHByb3RvLCBUZXN0T2JqQ29uc3RzLCBXVEZfQVJSQVlfTEVOR1RIKFRlc3RPYmpD
b25zdHMpKTsKLQotICAgIC8vIEN1c3RvbSB0b1N0cmluZyB0ZW1wbGF0ZQotICAgIGRlc2MtPlNl
dChnZXRUb1N0cmluZ05hbWUoKSwgZ2V0VG9TdHJpbmdUZW1wbGF0ZSgpKTsKLSAgICByZXR1cm4g
ZGVzYzsKLX0KLQotdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE9i
ajo6R2V0UmF3VGVtcGxhdGUoKQotewotICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gVjhUZXN0T2JqUmF3Q2FjaGUgPSBjcmVhdGVSYXdUZW1wbGF0ZSgpOwot
ICAgIHJldHVybiBWOFRlc3RPYmpSYXdDYWNoZTsKLX0KLQotdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE9iajo6R2V0VGVtcGxhdGUoKQotewotICAgIHN0YXRpYyB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0T2JqQ2FjaGUgPSBDb25m
aWd1cmVWOFRlc3RPYmpUZW1wbGF0ZShHZXRSYXdUZW1wbGF0ZSgpKTsKLSAgICByZXR1cm4gVjhU
ZXN0T2JqQ2FjaGU7Ci19Ci0KLWJvb2wgVjhUZXN0T2JqOjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdmFsdWUpCi17Ci0gICAgcmV0dXJuIEdldFJhd1RlbXBsYXRlKCktPkhhc0lu
c3RhbmNlKHZhbHVlKTsKLX0KLQotCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE9iajo6
d3JhcFNsb3coVGVzdE9iaiogaW1wbCkKLXsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdy
YXBwZXI7Ci0gICAgVjhQcm94eSogcHJveHkgPSAwOwotICAgIHdyYXBwZXIgPSBWOERPTVdyYXBw
ZXI6Omluc3RhbnRpYXRlVjhPYmplY3QocHJveHksICZpbmZvLCBpbXBsKTsKLSAgICBpZiAod3Jh
cHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotCi0gICAgaW1wbC0+cmVm
KCk7Ci0gICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlckhhbmRsZSA9IHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcik7Ci0jaWYgIVBMQVRGT1JNKFFUKQot
Ly8gRklYTUU6IHF0c2NyaXB0LXN0YWdpbmcncyBzaGlwcGVkIFY4IGRvZXMgbm90IGhhdmUgdGhl
IG5lZWRlZCBmdW5jdGlvbmFsaXR5IHlldC4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02MTI5MQotCi0gICAgaWYgKCFoYXNEZXBlbmRlbnRMaWZldGltZSkKLSAg
ICAgICAgd3JhcHBlckhhbmRsZS5NYXJrSW5kZXBlbmRlbnQoKTsKLSNlbmRpZgotICAgIGdldERP
TU9iamVjdE1hcCgpLnNldChpbXBsLCB3cmFwcGVySGFuZGxlKTsKLSAgICByZXR1cm4gd3JhcHBl
cjsKLX0KLQotdm9pZCBWOFRlc3RPYmo6OmRlcmVmT2JqZWN0KHZvaWQqIG9iamVjdCkKLXsKLSAg
ICBzdGF0aWNfY2FzdDxUZXN0T2JqKj4ob2JqZWN0KS0+ZGVyZWYoKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouaAkocmV2aXNpb24gODkxNDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNzYgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwK
LSAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSovCi0KLSNpZm5kZWYgVjhUZXN0T2Jq
X2gKLSNkZWZpbmUgVjhUZXN0T2JqX2gKLQotI2luY2x1ZGUgIlRlc3RPYmouaCIKLSNpbmNsdWRl
ICJWOERPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIKLSNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8djguaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFY4VGVzdE9iaiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzRGVwZW5kZW50TGlmZXRpbWUgPSBmYWxz
ZTsKLSAgICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFs
dWUpOwotICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0
UmF3VGVtcGxhdGUoKTsKLSAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IEdldFRlbXBsYXRlKCk7Ci0gICAgc3RhdGljIFRlc3RPYmoqIHRvTmF0aXZlKHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8VGVzdE9iaio+KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4
RE9NV3JhcHBlck9iamVjdEluZGV4KSk7Ci0gICAgfQotICAgIGlubGluZSBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RPYmoqKTsKLSAgICBzdGF0aWMgdm9pZCBkZXJlZk9i
amVjdCh2b2lkKik7Ci0gICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOwotICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3VzdG9tTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYpOwotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3VzdG9tTWV0aG9k
V2l0aEFyZ3NDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJik7Ci0gICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBjdXN0b21BdHRyQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pOwotICAgIHN0YXRpYyB2
b2lkIGN1c3RvbUF0dHJBY2Nlc3NvclNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
OwotICAgIHN0YXRpYyBjb25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhEZWZhdWx0V3Jh
cHBlckludGVybmFsRmllbGRDb3VudCArIDA7Ci1wcml2YXRlOgotICAgIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IHdyYXBTbG93KFRlc3RPYmoqKTsKLX07Ci0KLQotdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBWOFRlc3RPYmo6OndyYXAoVGVzdE9iaiogaW1wbCkKLXsKLSAgICAgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KGltcGwp
OwotICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHdy
YXBwZXI7Ci0gICAgcmV0dXJuIFY4VGVzdE9iajo6d3JhcFNsb3coaW1wbCk7Ci19Ci0KLWlubGlu
ZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0T2JqKiBpbXBsKQotewotICAgIGlmICgh
aW1wbCkKLSAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci0gICAgcmV0dXJuIFY4VGVzdE9iajo6
d3JhcChpbXBsKTsKLX0KLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVm
UHRyPCBUZXN0T2JqID4gaW1wbCkKLXsKLSAgICByZXR1cm4gdG9WOChpbXBsLmdldCgpKTsKLX0K
LX0KLQotI2VuZGlmIC8vIFY4VGVzdE9ial9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAkocmV2aXNpb24gODkxNDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDUgKzAs
MCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAgICBCb3N0b24s
IE1BIDAyMTExLTEzMDcsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKLQotI2lmIEVOQUJMRShD
b25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLQotI2luY2x1ZGUgIlJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNs
dWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgotI2luY2x1ZGUg
IlY4RE9NV3JhcHBlci5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiVjhQcm94eS5oIgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVdyYXBwZXJUeXBlSW5mbyBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2U6OmluZm8gPSB7IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6
R2V0VGVtcGxhdGUsIFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6ZGVyZWZP
YmplY3QsIDAsIDAgfTsKLQotbmFtZXNwYWNlIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VJbnRlcm5hbCB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIFY4X1VTRShUKSB7
IH0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUlu
dGVybmFsCi0KLXN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29u
ZmlndXJlVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVGVtcGxhdGUodjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MpCi17Ci0gICAgdjg6OkxvY2FsPHY4
OjpTaWduYXR1cmU+IGRlZmF1bHRTaWduYXR1cmUgPSBjb25maWd1cmVUZW1wbGF0ZShkZXNjLCAi
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPigpLCBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6
OmludGVybmFsRmllbGRDb3VudCwKLSAgICAgICAgMCwgMCwKLSAgICAgICAgMCwgMCk7Ci0gICAg
VU5VU0VEX1BBUkFNKGRlZmF1bHRTaWduYXR1cmUpOyAvLyBJbiBzb21lIGNhc2VzLCBpdCB3aWxs
IG5vdCBiZSB1c2VkLgotICAgIAotCi0gICAgLy8gQ3VzdG9tIHRvU3RyaW5nIHRlbXBsYXRlCi0g
ICAgZGVzYy0+U2V0KGdldFRvU3RyaW5nTmFtZSgpLCBnZXRUb1N0cmluZ1RlbXBsYXRlKCkpOwot
ICAgIHJldHVybiBkZXNjOwotfQotCi12ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpHZXRSYXdUZW1wbGF0ZSgp
Ci17Ci0gICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSYXdDYWNoZSA9IGNyZWF0ZVJhd1RlbXBs
YXRlKCk7Ci0gICAgcmV0dXJuIFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJh
d0NhY2hlOwotfQotCi12ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpHZXRUZW1wbGF0ZSgpCi17Ci0gICAgc3Rh
dGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZSA9IENvbmZpZ3VyZVY4VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVRlbXBsYXRlKEdldFJhd1RlbXBsYXRlKCkpOwotICAgIHJldHVybiBW
OFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZTsKLX0KLQotYm9vbCBWOFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gR2V0UmF3VGVtcGxhdGUoKS0+SGFzSW5z
dGFuY2UodmFsdWUpOwotfQotCi0KLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp3cmFwU2xvdyhUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlKiBpbXBsKQotewotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBl
cjsKLSAgICBWOFByb3h5KiBwcm94eSA9IDA7Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6
aW5zdGFudGlhdGVWOE9iamVjdChwcm94eSwgJmluZm8sIGltcGwpOwotICAgIGlmICh3cmFwcGVy
LklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0KLSAgICBpbXBsLT5yZWYoKTsK
LSAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplQW5kU2V0UHJvcGVydHkod3Jh
cHBlciwgInZhbHVlIiwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6RG9u
dERlbGV0ZSB8IHY4OjpSZWFkT25seSksIGltcGwtPnZhbHVlKCkpOwotICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXJIYW5kbGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
Pjo6TmV3KHdyYXBwZXIpOwotI2lmICFQTEFURk9STShRVCkKLS8vIEZJWE1FOiBxdHNjcmlwdC1z
dGFnaW5nJ3Mgc2hpcHBlZCBWOCBkb2VzIG5vdCBoYXZlIHRoZSBuZWVkZWQgZnVuY3Rpb25hbGl0
eSB5ZXQuCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEyOTEK
LQotICAgIGlmICghaGFzRGVwZW5kZW50TGlmZXRpbWUpCi0gICAgICAgIHdyYXBwZXJIYW5kbGUu
TWFya0luZGVwZW5kZW50KCk7Ci0jZW5kaWYKLSAgICBnZXRET01PYmplY3RNYXAoKS5zZXQoaW1w
bCwgd3JhcHBlckhhbmRsZSk7Ci0gICAgcmV0dXJuIHdyYXBwZXI7Ci19Ci0KLXZvaWQgVjhUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpkZXJlZk9iamVjdCh2b2lkKiBvYmplY3Qp
Ci17Ci0gICAgc3RhdGljX2Nhc3Q8VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+
KG9iamVjdCktPmRlcmVmKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgJKHJl
dmlzaW9uIDg5MTQyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDc2ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0g
ICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0qLwotCi0jaWYgRU5BQkxFKENvbmRpdGlv
bjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotCi0jaWZuZGVmIFY4VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZV9oCi0jZGVmaW5lIFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZV9oCi0KLSNpbmNsdWRlICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmgiCi0jaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZv
LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHY4Lmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBW
OFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgewotcHVibGljOgotICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc0RlcGVuZGVudExpZmV0aW1lID0gZmFsc2U7Ci0gICAgc3RhdGljIGJv
b2wgSGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKTsKLSAgICBzdGF0aWMg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IEdldFJhd1RlbXBsYXRlKCk7Ci0g
ICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0
ZSgpOwotICAgIHN0YXRpYyBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiB0b05h
dGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihv
YmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRl
eCkpOwotICAgIH0KLSAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cChUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKik7Ci0gICAgc3RhdGljIHZvaWQg
ZGVyZWZPYmplY3Qodm9pZCopOwotICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKLSAg
ICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmllbGRDb3VudCA9IHY4RGVmYXVsdFdyYXBwZXJJ
bnRlcm5hbEZpZWxkQ291bnQgKyAwOwotcHJpdmF0ZToKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiB3cmFwU2xvdyhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKik7
Ci19OwotCi0KLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlOjp3cmFwKFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGlt
cGwpCi17Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldERPTU9i
amVjdE1hcCgpLmdldChpbXBsKTsKLSAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiBWOFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2U6OndyYXBTbG93KGltcGwpOwotfQotCi1pbmxpbmUgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHRvVjgoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1w
bCkKLXsKLSAgICBpZiAoIWltcGwpCi0gICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotICAgIHJl
dHVybiBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OndyYXAoaW1wbCk7Ci19
Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSA+IGltcGwpCi17Ci0gICAgcmV0dXJuIHRvVjgoaW1w
bC5nZXQoKSk7Ci19Ci19Ci0KLSNlbmRpZiAvLyBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VfaAotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMikKLQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5n
ZUxvZwkocmV2aXNpb24gODkxNDIpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMiBAQAorMjAxMS0wNi0xNyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
bW92ZSBydW4tYmluZGluZ3MtdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyODgwCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1iaW5kaW5ncy10
ZXN0czogUmVtb3ZlZC4KKwogMjAxMS0wNi0xNyAgQ2hhbmcgU2h1ICA8Y3NodUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCkluZGV4OiBUb29scy9TY3Jp
cHRzL3J1bi1iaW5kaW5ncy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1i
aW5kaW5ncy10ZXN0cwkocmV2aXNpb24gODkxNDIpCisrKyBUb29scy9TY3JpcHRzL3J1bi1iaW5k
aW5ncy10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtMSwxMzcgKzAsMCBAQAotIyEvdXNyL2Jpbi9w
eXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0jIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0jIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKLSMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0jIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0jIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSMgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotIwotCi0jIFRoaXMgc2Ny
aXB0IGdlbmVyYXRlcyBoIGFuZCBjcHAgZmlsZSBmb3IgVGVzdE9iai5pZGwgdXNpbmcgdGhlIFY4
IGNvZGUKLSMgZ2VuZXJhdG9yLiBQbGVhc2UgZXhlY3V0ZSB0aGUgc2NyaXB0IHdoZW5ldmVyIGNo
YW5nZXMgYXJlIG1hZGUgdG8KLSMgQ29kZUdlbmVyYXRvclY4LnBtLCBhbmQgc3VibWl0IHRoZSBj
aGFuZ2VzIGluIFY4VGVzdE9iai5oL2NwcCBpbiB0aGUgc2FtZQotIyBwYXRjaC4gVGhpcyBtYWtl
cyBpdCBlYXNpZXIgdG8gdHJhY2sgYW5kIHJldmlldyBjaGFuZ2VzIGluIGdlbmVyYXRlZCBjb2Rl
LgotIyBUbyBleGVjdXRlLCBpbnZva2U6ICdweXRob24gcnVuX3Rlc3RzLnB5JwotCi1pbXBvcnQg
b3MKLWltcG9ydCBvcy5wYXRoCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5cwotaW1wb3J0
IHRlbXBmaWxlCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dCBpbXBvcnQgc2NtCi0KLQot
ZGVmIGdlbmVyYXRlX2Zyb21faWRsKGdlbmVyYXRvciwgaWRsX2ZpbGUsIG91dHB1dF9kaXJlY3Rv
cnkpOgotICAgIGNtZCA9IFsncGVybCcsICctdycsCi0gICAgICAgICAgICctSVNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMnLAotICAgICAgICAgICAnU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCcsCi0gICAgICAgICAgICMgaWRsIGluY2x1
ZGUgZGlyZWN0b3JpZXMgKHBhdGggcmVsYXRpdmUgdG8gZ2VuZXJhdGUtYmluZGluZ3MucGwpCi0g
ICAgICAgICAgICctLWluY2x1ZGUnLCAnLicsCi0gICAgICAgICAgICctLWRlZmluZXMnLCAnVEVT
VElOR18lcycgJSBnZW5lcmF0b3IsCi0gICAgICAgICAgICctLWdlbmVyYXRvcicsIGdlbmVyYXRv
ciwKLSAgICAgICAgICAgJy0tb3V0cHV0RGlyJywgb3V0cHV0X2RpcmVjdG9yeSwKLSAgICAgICAg
ICAgaWRsX2ZpbGVdCi0gICAgcmV0dXJuIHN1YnByb2Nlc3MuY2FsbChjbWQpID09IDAKLQotCi1k
ZWYgZGV0ZWN0X2NoYW5nZXMod29ya19kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgot
ICAgIGNoYW5nZXNfZm91bmQgPSBGYWxzZQotICAgIGZvciBvdXRwdXRfZmlsZSBpbiBvcy5saXN0
ZGlyKHdvcmtfZGlyZWN0b3J5KToKLSAgICAgICAgcHJpbnQgJ0RldGVjdGluZyBjaGFuZ2VzIGlu
ICVzLi4uJyAlIG91dHB1dF9maWxlCi0gICAgICAgIGNtZCA9IFsnZGlmZicsCi0gICAgICAgICAg
ICAgICAnLXUnLAotICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHJlZmVyZW5jZV9kaXJlY3Rv
cnksIG91dHB1dF9maWxlKSwKLSAgICAgICAgICAgICAgIG9zLnBhdGguam9pbih3b3JrX2RpcmVj
dG9yeSwgb3V0cHV0X2ZpbGUpXQotICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoY21kKSAhPSAw
OgotICAgICAgICAgICAgcHJpbnQgJ0RldGVjdGVkIGNoYW5nZXMgaW4gJXMgKHNlZSBhYm92ZSkn
ICUgb3V0cHV0X2ZpbGUKLSAgICAgICAgICAgIGNoYW5nZXNfZm91bmQgPSBUcnVlCi0gICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICBwcmludCAnTm8gY2hhbmdlcyBmb3VuZC4nCi0KLSAgICByZXR1
cm4gY2hhbmdlc19mb3VuZAotCi0KLWRlZiBydW5fdGVzdHMoZ2VuZXJhdG9yLCBpbnB1dF9kaXJl
Y3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnksIHJlc2V0X3Jlc3VsdHMpOgotICAgIHdvcmtfZGly
ZWN0b3J5ID0gcmVmZXJlbmNlX2RpcmVjdG9yeQotCi0gICAgcGFzc2VkID0gVHJ1ZQotICAgIGZv
ciBpbnB1dF9maWxlIGluIG9zLmxpc3RkaXIoaW5wdXRfZGlyZWN0b3J5KToKLSAgICAgICAgKG5h
bWUsIGV4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KGlucHV0X2ZpbGUpCi0gICAgICAgIGlm
IGV4dGVuc2lvbiAhPSAnLmlkbCc6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBwcmlu
dCAnVGVzdGluZyB0aGUgJXMgZ2VuZXJhdG9yIG9uICVzJyAlIChnZW5lcmF0b3IsIGlucHV0X2Zp
bGUpCi0gICAgICAgICMgR2VuZXJhdGUgb3V0cHV0IGludG8gdGhlIHdvcmsgZGlyZWN0b3J5IChl
aXRoZXIgdGhlIGdpdmVuIG9uZSBvciBhIAotICAgICAgICAjIHRlbXAgb25lIGlmIG5vdCByZXNl
dF9yZXN1bHRzIGlzIHBlcmZvcm1lZCkKLSAgICAgICAgaWYgbm90IHJlc2V0X3Jlc3VsdHM6Ci0g
ICAgICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQotICAgICAgICBp
ZiBub3QgZ2VuZXJhdGVfZnJvbV9pZGwoZ2VuZXJhdG9yLCBvcy5wYXRoLmpvaW4oaW5wdXRfZGly
ZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5wdXRfZmlsZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
b3JrX2RpcmVjdG9yeSk6Ci0gICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQotICAgICAgICBpZiBy
ZXNldF9yZXN1bHRzOgotICAgICAgICAgICAgcHJpbnQgIk92ZXJ3cm90ZSByZWZlcmVuY2UgZmls
ZXMiCi0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICAjIERldGVjdCBjaGFuZ2VzCi0gICAg
ICAgIGlmIGRldGVjdF9jaGFuZ2VzKHdvcmtfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5
KToKLSAgICAgICAgICAgIHBhc3NlZCA9IEZhbHNlCi0KLSAgICBpZiBub3QgcGFzc2VkOgotICAg
ICAgICBwcmludCAnJXMgZ2VuZXJhdG9yIGZhaWxlZC4nICUgZ2VuZXJhdG9yCi0gICAgcmV0dXJu
IHBhc3NlZAotCi0KLWRlZiBtYWluKGFyZ3YpOgotICAgICIiIlJ1bnMgV2ViQ29yZSBiaW5kaW5n
cyBjb2RlIGdlbmVyYXRvcnMgb24gdGVzdCBJREwgZmlsZXMgYW5kIGNvbXBhcmVzIAotICAgIHRo
ZSByZXN1bHRzIHdpdGggcmVmZXJlbmNlIGZpbGVzLgotCi0gICAgT3B0aW9uczoKLSAgICAgICAt
LXJlc2V0LXJlc3VsdHM6IE92ZXJ3cml0ZXMgdGhlIHJlZmVyZW5jZSBmaWxlcyB3aXRoIHRoZSBn
ZW5lcmF0ZWQgcmVzdWx0cy4KLQotICAgICIiIgotICAgIHJlc2V0X3Jlc3VsdHMgPSAiLS1yZXNl
dC1yZXN1bHRzIiBpbiBhcmd2Ci0KLSAgICBjdXJyZW50X3NjbSA9IHNjbS5kZXRlY3Rfc2NtX3N5
c3RlbShvcy5jdXJkaXIpCi0gICAgb3MuY2hkaXIoY3VycmVudF9zY20uY2hlY2tvdXRfcm9vdCkK
LQotICAgIGFsbF90ZXN0c19wYXNzZWQgPSBUcnVlCi0KLSAgICBnZW5lcmF0b3JzID0gWwotICAg
ICAgICAnSlMnLAotICAgICAgICAnVjgnLAotICAgICAgICAnT2JqQycsCi0gICAgICAgICdHT2Jq
ZWN0JywKLSAgICAgICAgJ0NQUCcKLSAgICBdCi0KLSAgICBmb3IgZ2VuZXJhdG9yIGluIGdlbmVy
YXRvcnM6Ci0gICAgICAgIGlucHV0X2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbignU291cmNlJywg
J1dlYkNvcmUnLCAnYmluZGluZ3MnLCAnc2NyaXB0cycsICd0ZXN0JykKLSAgICAgICAgcmVmZXJl
bmNlX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAnYmluZGlu
Z3MnLCAnc2NyaXB0cycsICd0ZXN0JywgZ2VuZXJhdG9yKQotICAgICAgICBpZiBub3QgcnVuX3Rl
c3RzKGdlbmVyYXRvciwgaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5LCByZXNl
dF9yZXN1bHRzKToKLSAgICAgICAgICAgIGFsbF90ZXN0c19wYXNzZWQgPSBGYWxzZQotCi0gICAg
aWYgYWxsX3Rlc3RzX3Bhc3NlZDoKLSAgICAgICAgcHJpbnQgJ0FsbCB0ZXN0cyBwYXNzZWQhJwot
ICAgICAgICByZXR1cm4gMAotICAgIGVsc2U6Ci0gICAgICAgIHByaW50ICcoVG8gdXBkYXRlIHRo
ZSByZWZlcmVuY2UgZmlsZXMsIGV4ZWN1dGUgInJ1bi1iaW5kaW5ncy10ZXN0cyAtLXJlc2V0LXJl
c3VsdHMiKScKLSAgICAgICAgcmV0dXJuIC0xCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f
JzoKLSAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2KSkK
</data>
<flag name="review"
          id="91627"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>