<?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>128189</bug_id>
          
          <creation_ts>2014-02-04 09:34:42 -0800</creation_ts>
          <short_desc>Remove CPP bindings generator.</short_desc>
          <delta_ts>2014-02-04 10:46:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Bindings</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>976390</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-02-04 09:34:42 -0800</bug_when>
    <thetext>Remove CPP bindings generator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976392</commentid>
    <comment_count>1</comment_count>
      <attachid>223126</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-02-04 09:36:36 -0800</bug_when>
    <thetext>Created attachment 223126
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976435</commentid>
    <comment_count>2</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-02-04 10:46:19 -0800</bug_when>
    <thetext>Committed r163389: &lt;http://trac.webkit.org/changeset/163389&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223126</attachid>
            <date>2014-02-04 09:36:36 -0800</date>
            <delta_ts>2014-02-04 09:46:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-128189.diff</filename>
            <type>text/plain</type>
            <size>243064</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ZTcxNWFmLi5kNmVkODYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODkg
QEAKKzIwMTQtMDItMDQgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgorCisgICAg
ICAgIFJlbW92ZSBDUFAgYmluZGluZ3MgZ2VuZXJhdG9yLgorICAgICAgICA8aHR0cHM6Ly93ZWJr
aXQub3JnL2IvMTI4MTg5PgorCisgICAgICAgIFNjcnViIG91dCBzb21lIGxlZnRvdmVyIEJsYWNr
YmVycnkgZ3Vuay4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmlkbDoKKyAgICAgICAgKiBi
aW5kaW5ncy9jcHAvV2ViRE9NQ1N0cmluZy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGlu
Z3MvY3BwL1dlYkRPTUNTdHJpbmcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9jcHAv
V2ViRE9NRE9NV2luZG93Q3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9j
cHAvV2ViRE9NRXZlbnRMaXN0ZW5lckN1c3RvbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmlu
ZGluZ3MvY3BwL1dlYkRPTUV2ZW50VGFyZ2V0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9jcHAvV2ViRE9NRXZlbnRUYXJnZXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9jcHAvV2ViRE9NSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IGJpbmRpbmdzL2NwcC9XZWJET01IVE1MRG9jdW1lbnRDdXN0b20uY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIGJpbmRpbmdzL2NwcC9XZWJET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJET01Ob2RlQ3VzdG9tLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9jcHAvV2ViRE9NTm9kZUZpbHRlckN1c3RvbS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvY3BwL1dlYkRPTU9iamVjdC5oOiBSZW1v
dmVkLgorICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJET01TdHJpbmcuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIGJpbmRpbmdzL2NwcC9XZWJET01TdHJpbmcuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9jcHAvV2ViRXhjZXB0aW9uSGFuZGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogYmluZGluZ3MvY3BwL1dlYkV4Y2VwdGlvbkhhbmRsZXIuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9jcHAvV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogYmluZGluZ3MvY3BwL1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9jcHAvV2ViTmF0aXZlTm9kZUZpbHRlckNvbmRpdGlvbi5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogYmluZGluZ3MvY3BwL1dlYk5hdGl2ZU5vZGVGaWx0ZXJDb25kaXRp
b24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JD
UFAucG06IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9DUFBU
ZXN0U3VwcGxlbWVudGFsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvQ1BQL0NQUFRlc3RTdXBwbGVtZW50YWwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTUZsb2F0NjRBcnJheS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01GbG9hdDY0QXJyYXkuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RB
Y3RpdmVET01PYmplY3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9DUFAvV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdC5oOiBSZW1vdmVkLgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdENhbGxiYWNrLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RDYWxsYmFj
ay5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9N
VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlci5oOiBSZW1vdmVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEV2ZW50Q29uc3Ry
dWN0b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAv
V2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RFdmVudFRhcmdldC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0RXZlbnRUYXJnZXQu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRl
c3RFeGNlcHRpb24uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9DUFAvV2ViRE9NVGVzdEV4Y2VwdGlvbi5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvQ1BQL1dlYkRPTVRlc3RJbXBsZW1lbnRzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RJbXBsZW1lbnRzLmg6IFJlbW92ZWQuCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0SW50ZXJmYWNlLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRl
c3RJbnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
Q1BQL1dlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9X
ZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5oOiBSZW1vdmVk
LgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE5vZGUuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVz
dE5vZGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RPYmouY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9DUFAvV2ViRE9NVGVzdE9iai5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9DUFAvV2ViRE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvQ1BQL1dlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFN1cHBsZW1lbnRhbC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U3VwcGxlbWVudGFs
Lmg6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01U
ZXN0VHlwZWRlZnMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9DUFAvV2ViRE9NVGVzdFR5cGVkZWZzLmg6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01hdHRyaWJ1dGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NYXR0cmlidXRlLmg6IFJlbW92ZWQuCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01yZWFkb25seS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01yZWFkb25s
eS5oOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0LmlkbDoKKyAgICAgICAgKiBk
b20vQ3VzdG9tRXZlbnQuaWRsOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5pZGw6CisgICAgICAg
ICogZG9tL0V2ZW50LmlkbDoKKyAgICAgICAgKiBkb20vTm9kZS5pZGw6CisgICAgICAgICogZG9t
L1BvcFN0YXRlRXZlbnQuaWRsOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRs
OgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5pZGw6CisgICAgICAgICogaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbDoKKyAgICAgICAgKiBwYWdlL0RPTVdp
bmRvdy5pZGw6CisgICAgICAgICogcGFnZS9Mb2NhdGlvbi5pZGw6CisgICAgICAgICogd29ya2Vy
cy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5pZGw6CisKIDIwMTQtMDItMDQgIFJhZHUgU3Rh
dmlsYSAgPHN0YXZpbGFAYWRvYmUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxNTk2MDkp
OiBJbWFnZXMgYXJlIGNvcnJ1cHRlZCB3aGVuIGhvdmVyaW5nIG92ZXIgYnV0dG9ucyBAIGdpdGh1
Yi5jb20KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
UmVzdWx0U2V0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVz
dWx0U2V0LmlkbAppbmRleCBkM2I5M2U0Li41ZGUwMzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldC5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXQuaWRsCkBAIC0zNCw5ICszNCw3
IEBACiBdIGludGVyZmFjZSBTUUxSZXN1bHRTZXQgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBT
UUxSZXN1bHRTZXRSb3dMaXN0IHJvd3M7CiAKLSNpZiAhZGVmaW5lZChMQU5HVUFHRV9DUFApIHx8
ICFMQU5HVUFHRV9DUFAKICAgICBbR2V0dGVyUmFpc2VzRXhjZXB0aW9uXSByZWFkb25seSBhdHRy
aWJ1dGUgbG9uZyBpbnNlcnRJZDsKLSNlbHNlCiAgICAgLy8gRXhwbGljaXRlbHkgY2hvb3NlICds
b25nIGxvbmcnIGhlcmUgdG8gYXZvaWQgYSA2NGJpdC0+MzJiaXQgc2hvcnRlbmluZyB3YXJuaW5n
IGZvciB1cy4KICAgICBbR2V0dGVyUmFpc2VzRXhjZXB0aW9uXSByZWFkb25seSBhdHRyaWJ1dGUg
bG9uZyBsb25nIGluc2VydElkOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9jcHAvV2ViRE9NQ1N0cmluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9j
cHAvV2ViRE9NQ1N0cmluZy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliZWQ3
ZTUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUNTdHJp
bmcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkRPTUNTdHJpbmcuaCIKLQotI2luY2x1
ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgIldlYkRPTVN0cmluZy5oIgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotY2xhc3MgV2ViRE9NQ1N0cmluZ1ByaXZhdGUgOiBwdWJs
aWMgV1RGOjpDU3RyaW5nQnVmZmVyIHsKLX07Ci0KLXZvaWQgV2ViRE9NQ1N0cmluZzo6cmVzZXQo
KQotewotICAgIGlmIChtX3ByaXZhdGUpIHsKLSAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOwot
ICAgICAgICBtX3ByaXZhdGUgPSAwOwotICAgIH0KLX0KLQotdm9pZCBXZWJET01DU3RyaW5nOjph
c3NpZ24oY29uc3QgV2ViRE9NQ1N0cmluZyYgb3RoZXIpCi17Ci0gICAgYXNzaWduKGNvbnN0X2Nh
c3Q8V2ViRE9NQ1N0cmluZ1ByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUpKTsKLX0KLQotdm9pZCBX
ZWJET01DU3RyaW5nOjphc3NpZ24oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKLXsK
LSAgICBjaGFyKiBuZXdEYXRhOwotICAgIFJlZlB0cjxXVEY6OkNTdHJpbmdCdWZmZXI+IGJ1ZmZl
ciA9Ci0gICAgICAgIFdURjo6Q1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIG5ld0Rh
dGEpLmJ1ZmZlcigpOwotICAgIG1lbWNweShuZXdEYXRhLCBkYXRhLCBsZW5ndGgpOwotICAgIGFz
c2lnbihzdGF0aWNfY2FzdDxXZWJET01DU3RyaW5nUHJpdmF0ZSo+KGJ1ZmZlci5nZXQoKSkpOwot
fQotCi1zaXplX3QgV2ViRE9NQ1N0cmluZzo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
cHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgLy8gTk9URTogVGhlIGJ1ZmZlcidzIGxl
bmd0aCBpbmNsdWRlcyB0aGUgbnVsbCBieXRlLgotICAgIHJldHVybiBjb25zdF9jYXN0PFdlYkRP
TUNTdHJpbmdQcml2YXRlKj4obV9wcml2YXRlKS0+bGVuZ3RoKCk7Ci19Ci0KLWNvbnN0IGNoYXIq
IFdlYkRPTUNTdHJpbmc6OmRhdGEoKSBjb25zdAotewotICAgIGlmICghbV9wcml2YXRlKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxXZWJET01DU3RyaW5nUHJpdmF0
ZSo+KG1fcHJpdmF0ZSktPmRhdGEoKTsKLX0KLQotV2ViRE9NU3RyaW5nIFdlYkRPTUNTdHJpbmc6
OnV0ZjE2KCkgY29uc3QKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6VVRGOEVuY29kaW5nKCkuZGVj
b2RlKGRhdGEoKSwgbGVuZ3RoKCkpOwotfQotCi1XZWJET01DU3RyaW5nIFdlYkRPTUNTdHJpbmc6
OmZyb21VVEYxNihjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gV2ViQ29yZTo6VVRGOEVuY29kaW5nKCkuZW5jb2RlKAotICAgICAgICBkYXRhLCBsZW5n
dGgsIFdlYkNvcmU6OlF1ZXN0aW9uTWFya3NGb3JVbmVuY29kYWJsZXMpOwotfQotCi1XZWJET01D
U3RyaW5nIFdlYkRPTUNTdHJpbmc6OmZyb21VVEYxNihjb25zdCBXZWJVQ2hhciogZGF0YSkKLXsK
LSAgICBzaXplX3QgbGVuID0gMDsKLSAgICB3aGlsZSAoZGF0YVtsZW5dICE9IFdlYlVDaGFyKDAp
KQotICAgICAgICBsZW4rKzsKLSAgICByZXR1cm4gZnJvbVVURjE2KGRhdGEsIGxlbik7Ci19Ci0K
LVdlYkRPTUNTdHJpbmc6OldlYkRPTUNTdHJpbmcoY29uc3QgV1RGOjpDU3RyaW5nJiBzKQotICAg
IDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYkRPTUNTdHJpbmdQcml2YXRlKj4ocy5idWZmZXIo
KSkpCi17Ci0gICAgaWYgKG1fcHJpdmF0ZSkKLSAgICAgICAgbV9wcml2YXRlLT5yZWYoKTsKLX0K
LQotV2ViRE9NQ1N0cmluZyYgV2ViRE9NQ1N0cmluZzo6b3BlcmF0b3I9KGNvbnN0IFdURjo6Q1N0
cmluZyYgcykKLXsKLSAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViRE9NQ1N0cmluZ1ByaXZhdGUq
PihzLmJ1ZmZlcigpKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1XZWJET01DU3RyaW5nOjpv
cGVyYXRvciBXVEY6OkNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGU7Ci19
Ci0KLXZvaWQgV2ViRE9NQ1N0cmluZzo6YXNzaWduKFdlYkRPTUNTdHJpbmdQcml2YXRlKiBwKQot
ewotICAgIC8vIFRha2UgY2FyZSB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbV9wcml2YXRlID09
IHAKLSAgICBpZiAocCkKLSAgICAgICAgcC0+cmVmKCk7Ci0gICAgaWYgKG1fcHJpdmF0ZSkKLSAg
ICAgICAgbV9wcml2YXRlLT5kZXJlZigpOwotICAgIG1fcHJpdmF0ZSA9IHA7Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NQ1N0cmluZy5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUNTdHJpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYzkyMTg5NS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9jcHAvV2ViRE9NQ1N0cmluZy5oCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYkRPTUNTdHJpbmdfaAotI2RlZmluZSBXZWJET01DU3Ry
aW5nX2gKLQotI2luY2x1ZGUgPFdlYkRPTU9iamVjdC5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+IC8vIEZvciBzaXplX3QKLQotLy8gVVRGLTE2IGNoYXJh
Y3RlciB0eXBlCi0jaWYgZGVmaW5lZChXSU4zMikKLXR5cGVkZWYgd2NoYXJfdCBXZWJVQ2hhcjsK
LSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IFdlYlVDaGFyOwotI2VuZGlmCi0KLWNsYXNz
IFdlYkRPTUNTdHJpbmdQcml2YXRlOwotY2xhc3MgV2ViRE9NU3RyaW5nOwotCi0vLyBBIHNpbmds
ZS1ieXRlIHN0cmluZyBjb250YWluZXIgd2l0aCB1bnNwZWNpZmllZCBlbmNvZGluZy4gIEl0IGlz
Ci0vLyBpbmV4cGVuc2l2ZSB0byBjb3B5IGEgV2ViRE9NQ1N0cmluZyBvYmplY3QuCi0vLwotLy8g
V0FSTklORzogSXQgaXMgbm90IHNhZmUgdG8gcGFzcyBhIFdlYkRPTUNTdHJpbmcgYWNyb3NzIHRo
cmVhZHMhISEKLS8vCi1jbGFzcyBXZWJET01DU3RyaW5nIHsKLXB1YmxpYzoKLSAgICB+V2ViRE9N
Q1N0cmluZygpIHsgcmVzZXQoKTsgfQotCi0gICAgV2ViRE9NQ1N0cmluZygpIDogbV9wcml2YXRl
KDApIHsgfQotCi0gICAgV2ViRE9NQ1N0cmluZyhjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVu
KSA6IG1fcHJpdmF0ZSgwKQotICAgIHsKLSAgICAgICAgYXNzaWduKGRhdGEsIGxlbik7Ci0gICAg
fQotCi0gICAgV2ViRE9NQ1N0cmluZyhjb25zdCBXZWJET01DU3RyaW5nJiBzKSA6IG1fcHJpdmF0
ZSgwKSB7IGFzc2lnbihzKTsgfQotCi0gICAgV2ViRE9NQ1N0cmluZyYgb3BlcmF0b3I9KGNvbnN0
IFdlYkRPTUNTdHJpbmcmIHMpCi0gICAgewotICAgICAgICBhc3NpZ24ocyk7Ci0gICAgICAgIHJl
dHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0gICAgdm9pZCBhc3NpZ24o
Y29uc3QgV2ViRE9NQ1N0cmluZyYpOwotICAgIHZvaWQgYXNzaWduKGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBsZW4pOwotCi0gICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0OwotICAgIGNvbnN0IGNo
YXIqIGRhdGEoKSBjb25zdDsKLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFs
ZW5ndGgoKTsgfQotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHJpdmF0ZTsg
fQotCi0gICAgV2ViRE9NU3RyaW5nIHV0ZjE2KCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgV2ViRE9N
Q1N0cmluZyBmcm9tVVRGMTYoY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOwot
ICAgIHN0YXRpYyBXZWJET01DU3RyaW5nIGZyb21VVEYxNihjb25zdCBXZWJVQ2hhciogZGF0YSk7
Ci0KLSAgICBXZWJET01DU3RyaW5nKGNvbnN0IFdURjo6Q1N0cmluZyYpOwotICAgIFdlYkRPTUNT
dHJpbmcmIG9wZXJhdG9yPShjb25zdCBXVEY6OkNTdHJpbmcmKTsKLSAgICBvcGVyYXRvciBXVEY6
OkNTdHJpbmcoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGFzc2lnbihXZWJET01DU3Ry
aW5nUHJpdmF0ZSopOwotICAgIFdlYkRPTUNTdHJpbmdQcml2YXRlKiBtX3ByaXZhdGU7Ci19Owot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01E
T01XaW5kb3dDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTURP
TVdpbmRvd0N1c3RvbS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZDllYzQu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTURPTVdpbmRv
d0N1c3RvbS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViRE9NRE9NV2luZG93LmgiCi0K
LSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJXZWJET01FdmVudExpc3RlbmVyLmgi
Ci0jaW5jbHVkZSAiV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5oIgotCi12b2lkIFdlYkRPTURPTVdp
bmRvdzo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJET01TdHJpbmcmIHR5cGUsIGNvbnN0IFdl
YkRPTUV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCi17Ci0gICAgaWYg
KCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh0b1dlYkNvcmUobGlzdGVuZXIp
KQotICAgICAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdG9XZWJDb3JlKGxpc3Rl
bmVyKSwgdXNlQ2FwdHVyZSk7Ci19Ci0KLXZvaWQgV2ViRE9NRE9NV2luZG93OjpyZW1vdmVFdmVu
dExpc3RlbmVyKGNvbnN0IFdlYkRPTVN0cmluZyYgdHlwZSwgY29uc3QgV2ViRE9NRXZlbnRMaXN0
ZW5lciYgbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHRvV2ViQ29yZShsaXN0ZW5lcikpCi0gICAgICAgIGlt
cGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCB0b1dlYkNvcmUobGlzdGVuZXIpLCB1c2VD
YXB0dXJlKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJE
T01FdmVudExpc3RlbmVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2NwcC9X
ZWJET01FdmVudExpc3RlbmVyQ3VzdG9tLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZGIzMWI3MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2Vi
RE9NRXZlbnRMaXN0ZW5lckN1c3RvbS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViRE9N
RXZlbnRMaXN0ZW5lci5oIgotCi0jaW5jbHVkZSAiV2ViRE9NRXZlbnQuaCIKLSNpbmNsdWRlICJX
ZWJOYXRpdmVFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi12b2lk
IFdlYkRPTUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KGNvbnN0IFdlYkRPTUV2ZW50JiBldnQp
Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+aGFu
ZGxlRXZlbnQoMCwgdG9XZWJDb3JlKGV2dCkpOwotfQotCi1XZWJET01FdmVudExpc3RlbmVyIHRv
V2ViS2l0KFdlYlVzZXJFdmVudExpc3RlbmVyKiB2YWx1ZSkKLXsKLSAgICBSZWZQdHI8V2ViTmF0
aXZlRXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBXZWJOYXRpdmVFdmVudExpc3RlbmVyOjpjcmVh
dGUodmFsdWUpOwotICAgIHJldHVybiBXZWJET01FdmVudExpc3RlbmVyKGxpc3RlbmVyLmdldCgp
KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01FdmVu
dFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NRXZlbnRUYXJn
ZXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk0ZWZlLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01FdmVudFRhcmdldC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJXZWJET01FdmVudFRhcmdldC5oIgotCi0jaW5jbHVkZSAiRE9N
QXBwbGljYXRpb25DYWNoZS5oIgotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkRl
ZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmgiCi0jaW5jbHVkZSAiRXZlbnRTb3VyY2UuaCIKLSNp
bmNsdWRlICJNZXNzYWdlUG9ydC5oIgotI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRlICJOb3Rp
ZmljYXRpb24uaCIKLSNpbmNsdWRlICJTaGFyZWRXb3JrZXIuaCIKLSNpbmNsdWRlICJTaGFyZWRX
b3JrZXJHbG9iYWxTY29wZS5oIgotI2luY2x1ZGUgIlRocmVhZENoZWNrLmgiCi0jaW5jbHVkZSAi
V2ViRE9NRE9NQXBwbGljYXRpb25DYWNoZS5oIgotI2luY2x1ZGUgIldlYkRPTURPTVdpbmRvdy5o
IgotI2luY2x1ZGUgIldlYkRPTURlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmgiCi0jaW5jbHVk
ZSAiV2ViRE9NRXZlbnRTb3VyY2UuaCIKLSNpbmNsdWRlICJXZWJET01NZXNzYWdlUG9ydC5oIgot
I2luY2x1ZGUgIldlYkRPTU5vZGUuaCIKLSNpbmNsdWRlICJXZWJET01Xb3JrZXIuaCIKLSNpbmNs
dWRlICJXZWJET01YTUxIdHRwUmVxdWVzdC5oIgotI2luY2x1ZGUgIldlYkRPTVhNTEh0dHBSZXF1
ZXN0VXBsb2FkLmgiCi0jaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgotI2luY2x1ZGUg
IldlYlNvY2tldC5oIgotI2luY2x1ZGUgIldvcmtlci5oIgotI2luY2x1ZGUgIlhNTEh0dHBSZXF1
ZXN0LmgiCi0jaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RVcGxvYWQuaCIKLQotI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLQotI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKLSNpbmNsdWRlICJXZWJE
T01TaGFyZWRXb3JrZXIuaCIKLSNpbmNsdWRlICJXZWJET01TaGFyZWRXb3JrZXJHbG9iYWxTY29w
ZS5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FD
WV9OT1RJRklDQVRJT05TKQotI2luY2x1ZGUgIldlYkRPTU5vdGlmaWNhdGlvbi5oIgotI2VuZGlm
Ci0KLSNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCi0jaW5jbHVkZSAiV2ViRE9NV2ViU29ja2V0Lmgi
Ci0jZW5kaWYKLQotc3RydWN0IFdlYkRPTUV2ZW50VGFyZ2V0OjpXZWJET01FdmVudFRhcmdldFBy
aXZhdGUgewotICAgIFdlYkRPTUV2ZW50VGFyZ2V0UHJpdmF0ZShXZWJDb3JlOjpFdmVudFRhcmdl
dCogb2JqZWN0ID0gMCkKLSAgICAgICAgOiBpbXBsKG9iamVjdCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgUmVmUHRyPFdlYkNvcmU6OkV2ZW50VGFyZ2V0PiBpbXBsOwotfTsKLQotV2ViRE9NRXZlbnRU
YXJnZXQ6OldlYkRPTUV2ZW50VGFyZ2V0KCkKLSAgICA6IFdlYkRPTU9iamVjdCgpCi0gICAgLCBt
X2ltcGwoMCkKLXsKLX0KLQotV2ViRE9NRXZlbnRUYXJnZXQ6OldlYkRPTUV2ZW50VGFyZ2V0KFdl
YkNvcmU6OkV2ZW50VGFyZ2V0KiBpbXBsKQotICAgIDogV2ViRE9NT2JqZWN0KCkKLSAgICAsIG1f
aW1wbChuZXcgV2ViRE9NRXZlbnRUYXJnZXRQcml2YXRlKGltcGwpKQotewotfQotCi1XZWJET01F
dmVudFRhcmdldDo6V2ViRE9NRXZlbnRUYXJnZXQoY29uc3QgV2ViRE9NRXZlbnRUYXJnZXQmIGNv
cHkpCi0gICAgOiBXZWJET01PYmplY3QoKQotewotICAgIG1faW1wbCA9IGNvcHkuaW1wbCgpID8g
bmV3IFdlYkRPTUV2ZW50VGFyZ2V0UHJpdmF0ZShjb3B5LmltcGwoKSkgOiAwOwotfQotCi1XZWJE
T01FdmVudFRhcmdldDo6fldlYkRPTUV2ZW50VGFyZ2V0KCkKLXsKLSAgICBkZWxldGUgbV9pbXBs
OwotICAgIG1faW1wbCA9IDA7Ci19Ci0KLVdlYkNvcmU6OkV2ZW50VGFyZ2V0KiBXZWJET01FdmVu
dFRhcmdldDo6aW1wbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+aW1w
bC5nZXQoKSA6IDA7Ci19Ci0KLSNkZWZpbmUgQ29udmVydFRvKHR5cGUpIFwKLVdlYkRPTSMjdHlw
ZSBXZWJET01FdmVudFRhcmdldDo6dG8jI3R5cGUoKSBcCi17IFwKLSAgICBXZWJDb3JlOjpFdmVu
dFRhcmdldCogdGFyZ2V0ID0gaW1wbCgpOyBcCi0gICAgcmV0dXJuIFdlYkRPTSMjdHlwZSh0YXJn
ZXQgPyB0YXJnZXQtPnRvIyN0eXBlKCkgOiAwKTsgXAotfQotCi1Db252ZXJ0VG8oTm9kZSkKLUNv
bnZlcnRUbyhET01XaW5kb3cpCi0KLSNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCi1Db252ZXJ0
VG8oU2hhcmVkV29ya2VyKQotQ29udmVydFRvKFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlKQotI2Vu
ZGlmCi0KLSNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklD
QVRJT05TKQotQ29udmVydFRvKE5vdGlmaWNhdGlvbikKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFdF
Ql9TT0NLRVRTKQotQ29udmVydFRvKFdlYlNvY2tldCkKLSNlbmRpZgotCi1XZWJDb3JlOjpFdmVu
dFRhcmdldCogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTUV2ZW50VGFyZ2V0JiB3cmFwcGVyKQotewot
ICAgIHJldHVybiB3cmFwcGVyLmltcGwoKTsKLX0KLQotV2ViRE9NRXZlbnRUYXJnZXQgdG9XZWJL
aXQoV2ViQ29yZTo6RXZlbnRUYXJnZXQqIHZhbHVlKQotewotICAgIGlmIChXZWJDb3JlOjpOb2Rl
KiBub2RlID0gdmFsdWUtPnRvTm9kZSgpKQotICAgICAgICByZXR1cm4gdG9XZWJLaXQobm9kZSk7
Ci0KLSAgICBpZiAoV2ViQ29yZTo6RE9NV2luZG93KiB3aW5kb3cgPSB2YWx1ZS0+dG9ET01XaW5k
b3coKSkKLSAgICAgICAgcmV0dXJuIHRvV2ViS2l0KHdpbmRvdyk7Ci0KLSNpZiBFTkFCTEUoU1ZH
KSAmJiAwCi0gICAgLy8gRklYTUU6IEVuYWJsZSBvbmNlIFNWRyBiaW5kaW5ncyBhcmUgZ2VuZXJh
dGVkLgotICAgIC8vIFNWR0VsZW1lbnRJbnN0YW5jZSBzdXBwb3J0cyBib3RoIHRvU1ZHRWxlbWVu
dEluc3RhbmNlIGFuZCB0b05vZGUgc2luY2Ugc28gbXVjaCBtb3VzZSBoYW5kbGluZyBjb2RlIGRl
cGVuZHMgb24gdG9Ob2RlIHJldHVybmluZyBhIHZhbGlkIG5vZGUuCi0gICAgaWYgKFdlYkNvcmU6
OlNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2UgPSB2YWx1ZS0+dG9TVkdFbGVtZW50SW5zdGFu
Y2UoKSkKLSAgICAgICAgcmV0dXJuIHRvV2ViS2l0KGluc3RhbmNlKTsKLSNlbmRpZgotCi0jaWYg
RU5BQkxFKFNIQVJFRF9XT1JLRVJTKQotICAgIGlmIChXZWJDb3JlOjpTaGFyZWRXb3JrZXIqIHNo
YXJlZFdvcmtlciA9IHZhbHVlLT50b1NoYXJlZFdvcmtlcigpKQotICAgICAgICByZXR1cm4gdG9X
ZWJLaXQoc2hhcmVkV29ya2VyKTsKLQotICAgIGlmIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJHbG9i
YWxTY29wZSogd29ya2VyR2xvYmFsU2NvcGUgPSB2YWx1ZS0+dG9TaGFyZWRXb3JrZXJHbG9iYWxT
Y29wZSgpKQotICAgICAgICByZXR1cm4gdG9XZWJLaXQod29ya2VyR2xvYmFsU2NvcGUpOwotI2Vu
ZGlmCi0KLSNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklD
QVRJT05TKQotICAgIGlmIChXZWJDb3JlOjpOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbiA9IHZh
bHVlLT50b05vdGlmaWNhdGlvbigpKQotICAgICAgICByZXR1cm4gdG9XZWJLaXQobm90aWZpY2F0
aW9uKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQotICAgIGlmIChXZWJDb3Jl
OjpXZWJTb2NrZXQqIHdlYlNvY2tldCA9IHZhbHVlLT50b1dlYlNvY2tldCgpKQotICAgICAgICBy
ZXR1cm4gdG9XZWJLaXQod2ViU29ja2V0KTsKLSNlbmRpZgotCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIFdlYkRPTUV2ZW50VGFyZ2V0KCk7Ci19Ci0KLVdlYkRPTUV2ZW50
VGFyZ2V0JiBXZWJET01FdmVudFRhcmdldDo6b3BlcmF0b3I9KGNvbnN0IFdlYkRPTUV2ZW50VGFy
Z2V0JiBjb3B5KQotewotICAgIGRlbGV0ZSBtX2ltcGw7Ci0gICAgbV9pbXBsID0gY29weS5pbXBs
KCkgPyBuZXcgV2ViRE9NRXZlbnRUYXJnZXRQcml2YXRlKGNvcHkuaW1wbCgpKSA6IDA7Ci0gICAg
cmV0dXJuICp0aGlzOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvY3Bw
L1dlYkRPTUV2ZW50VGFyZ2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9N
RXZlbnRUYXJnZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ2OTA5MS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NRXZlbnRUYXJnZXQu
aAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5k
ZWYgV2ViRE9NRXZlbnRUYXJnZXRfaAotI2RlZmluZSBXZWJET01FdmVudFRhcmdldF9oCi0KLSNp
bmNsdWRlIDxXZWJET01PYmplY3QuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgRXZl
bnRUYXJnZXQ7Ci19OwotCi1jbGFzcyBXZWJET01EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTsK
LWNsYXNzIFdlYkRPTURPTUFwcGxpY2F0aW9uQ2FjaGU7Ci1jbGFzcyBXZWJET01ET01XaW5kb3c7
Ci1jbGFzcyBXZWJET01FdmVudFNvdXJjZTsKLWNsYXNzIFdlYkRPTU1lc3NhZ2VQb3J0OwotY2xh
c3MgV2ViRE9NTm9kZTsKLWNsYXNzIFdlYkRPTU5vdGlmaWNhdGlvbjsKLWNsYXNzIFdlYkRPTVNo
YXJlZFdvcmtlcjsKLWNsYXNzIFdlYkRPTVNoYXJlZFdvcmtlckdsb2JhbFNjb3BlOwotY2xhc3Mg
V2ViRE9NV2ViU29ja2V0OwotY2xhc3MgV2ViRE9NV29ya2VyOwotY2xhc3MgV2ViRE9NWE1MSHR0
cFJlcXVlc3Q7Ci1jbGFzcyBXZWJET01YTUxIdHRwUmVxdWVzdFVwbG9hZDsKLQotY2xhc3MgV2Vi
RE9NRXZlbnRUYXJnZXQgOiBwdWJsaWMgV2ViRE9NT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBXZWJE
T01FdmVudFRhcmdldCgpOwotICAgIGV4cGxpY2l0IFdlYkRPTUV2ZW50VGFyZ2V0KFdlYkNvcmU6
OkV2ZW50VGFyZ2V0Kik7Ci0gICAgV2ViRE9NRXZlbnRUYXJnZXQoY29uc3QgV2ViRE9NRXZlbnRU
YXJnZXQmKTsKLSAgICB+V2ViRE9NRXZlbnRUYXJnZXQoKTsKLQotICAgIFdlYkNvcmU6OkV2ZW50
VGFyZ2V0KiBpbXBsKCkgY29uc3Q7Ci0KLSAgICBXZWJET01Ob2RlIHRvTm9kZSgpOwotICAgIFdl
YkRPTURPTVdpbmRvdyB0b0RPTVdpbmRvdygpOwotICAgIFdlYkRPTVdvcmtlciB0b1dvcmtlcigp
OwotICAgIFdlYkRPTURlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlIHRvRGVkaWNhdGVkV29ya2Vy
R2xvYmFsU2NvcGUoKTsKLSAgICBXZWJET01TaGFyZWRXb3JrZXIgdG9TaGFyZWRXb3JrZXIoKTsK
LSAgICBXZWJET01TaGFyZWRXb3JrZXJHbG9iYWxTY29wZSB0b1NoYXJlZFdvcmtlckdsb2JhbFNj
b3BlKCk7Ci0gICAgV2ViRE9NTm90aWZpY2F0aW9uIHRvTm90aWZpY2F0aW9uKCk7Ci0gICAgV2Vi
RE9NV2ViU29ja2V0IHRvV2ViU29ja2V0KCk7Ci0KLSAgICBXZWJET01FdmVudFRhcmdldCYgb3Bl
cmF0b3I9KGNvbnN0IFdlYkRPTUV2ZW50VGFyZ2V0Jik7Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RydWN0
IFdlYkRPTUV2ZW50VGFyZ2V0UHJpdmF0ZTsKLSAgICBXZWJET01FdmVudFRhcmdldFByaXZhdGUq
IG1faW1wbDsKLX07Ci0KLVdlYkNvcmU6OkV2ZW50VGFyZ2V0KiB0b1dlYkNvcmUoY29uc3QgV2Vi
RE9NRXZlbnRUYXJnZXQmKTsKLVdlYkRPTUV2ZW50VGFyZ2V0IHRvV2ViS2l0KFdlYkNvcmU6OkV2
ZW50VGFyZ2V0Kik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvY3BwL1dlYkRPTUhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2NwcC9XZWJET01IVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGExNmEzMjkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvY3BwL1dlYkRPTUhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJXZWJET01IVE1MQ29sbGVjdGlvbi5oIgotCi0jaW5jbHVkZSAiSFRNTENvbGxlY3Rp
b24uaCIKLSNpbmNsdWRlICJXZWJET01Ob2RlLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotCi1XZWJET01Ob2RlIFdlYkRPTUhU
TUxDb2xsZWN0aW9uOjppdGVtKHVuc2lnbmVkIGluZGV4KQotewotICAgIGlmICghaW1wbCgpKQot
ICAgICAgICByZXR1cm4gV2ViRE9NTm9kZSgpOwotCi0gICAgcmV0dXJuIHRvV2ViS2l0KFdURjo6
Z2V0UHRyKGltcGwoKS0+aXRlbShpbmRleCkpKTsKLX0KLQotV2ViRE9NTm9kZSBXZWJET01IVE1M
Q29sbGVjdGlvbjo6bmFtZWRJdGVtKGNvbnN0IFdlYkRPTVN0cmluZyYgbmFtZSkKLXsKLSAgICBp
ZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIFdlYkRPTU5vZGUoKTsKLQotICAgIHJldHVybiB0
b1dlYktpdChXVEY6OmdldFB0cihpbXBsKCktPm5hbWVkSXRlbShuYW1lKSkpOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTUhUTUxEb2N1bWVudEN1c3Rv
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NSFRNTERvY3VtZW50Q3Vz
dG9tLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEyZjgyNC4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NSFRNTERvY3VtZW50Q3VzdG9t
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJET01IVE1MRG9jdW1lbnQuaCIKLQotI2lu
Y2x1ZGUgIkhUTUxEb2N1bWVudC5oIgotI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgotI2lu
Y2x1ZGUgIldlYkV4Y2VwdGlvbkhhbmRsZXIuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+Ci0KLXN0YXRpYyBpbmxpbmUg
dm9pZCBkb2N1bWVudFdyaXRlKGNvbnN0IFdlYkRPTVN0cmluZyYgdGV4dCwgV2ViQ29yZTo6SFRN
TERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBhZGROZXdsaW5lKQotewotICAgIFdlYkNvcmU6OlNl
Z21lbnRlZFN0cmluZyBzZWdtZW50ZWRTdHJpbmcgPSBXVEY6OlN0cmluZyh0ZXh0KTsKLSAgICBp
ZiAoYWRkTmV3bGluZSkKLSAgICAgICAgc2VnbWVudGVkU3RyaW5nLmFwcGVuZChXZWJDb3JlOjpT
ZWdtZW50ZWRTdHJpbmcoV1RGOjpTdHJpbmcoJldURjo6VW5pY29kZTo6bmV3bGluZUNoYXJhY3Rl
cikpKTsKLSAgICBkb2N1bWVudC0+d3JpdGUoc2VnbWVudGVkU3RyaW5nKTsKLX0KLQotdm9pZCBX
ZWJET01IVE1MRG9jdW1lbnQ6OndyaXRlKGNvbnN0IFdlYkRPTVN0cmluZyYgdGV4dCkKLXsKLSAg
ICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZG9jdW1lbnRXcml0ZSh0ZXh0
LCBpbXBsKCksIGZhbHNlKTsKLX0KLQotdm9pZCBXZWJET01IVE1MRG9jdW1lbnQ6OndyaXRlbG4o
Y29uc3QgV2ViRE9NU3RyaW5nJiB0ZXh0KQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBkb2N1bWVudFdyaXRlKHRleHQsIGltcGwoKSwgdHJ1ZSk7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01IVE1M
T3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3ZTJlYjI1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJE
T01IVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IldlYkRPTUhUTUxPcHRpb25zQ29sbGVjdGlvbi5oIgotCi0jaW5jbHVkZSAiSFRNTE9wdGlvbnND
b2xsZWN0aW9uLmgiCi0jaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgotCi11bnNpZ25l
ZCBXZWJET01IVE1MT3B0aW9uc0NvbGxlY3Rpb246Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFpbXBsKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGltcGwoKS0+bGVuZ3Ro
KCk7Ci19Ci0KLXZvaWQgV2ViRE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpzZXRMZW5ndGgodW5z
aWduZWQgbGVuZ3RoKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCktPnNldExlbmd0aChs
ZW5ndGgsIGVjKTsKLSAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2Vw
dGlvbkNvZGU+KGVjKSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9j
cHAvV2ViRE9NTm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2Vi
RE9NTm9kZUN1c3RvbS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMmRkNTcu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTU5vZGVDdXN0
b20uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkRPTU5vZGUuaCIKLQotI2luY2x1ZGUg
Ik5vZGUuaCIKLSNpbmNsdWRlICJXZWJET01FdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiV2Vi
RXhjZXB0aW9uSGFuZGxlci5oIgotI2luY2x1ZGUgIldlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaCIK
LQotV2ViRE9NTm9kZSBXZWJET01Ob2RlOjppbnNlcnRCZWZvcmUoY29uc3QgV2ViRE9NTm9kZSYg
bmV3Q2hpbGQsIGNvbnN0IFdlYkRPTU5vZGUmIHJlZkNoaWxkKQotewotICAgIGlmICghaW1wbCgp
KQotICAgICAgICByZXR1cm4gV2ViRE9NTm9kZSgpOwotCi0gICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgaWYgKGltcGwoKS0+aW5zZXJ0QmVmb3JlKHRvV2ViQ29yZShuZXdD
aGlsZCksIHRvV2ViQ29yZShyZWZDaGlsZCksIGVjLCBBdHRhY2hMYXppbHkpKQotICAgICAgICBy
ZXR1cm4gbmV3Q2hpbGQ7Ci0KLSAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRP
TUV4Y2VwdGlvbkNvZGU+KGVjKSk7Ci0gICAgcmV0dXJuIFdlYkRPTU5vZGUoKTsKLX0KLQotV2Vi
RE9NTm9kZSBXZWJET01Ob2RlOjpyZXBsYWNlQ2hpbGQoY29uc3QgV2ViRE9NTm9kZSYgbmV3Q2hp
bGQsIGNvbnN0IFdlYkRPTU5vZGUmIG9sZENoaWxkKQotewotICAgIGlmICghaW1wbCgpKQotICAg
ICAgICByZXR1cm4gV2ViRE9NTm9kZSgpOwotCi0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgaWYgKGltcGwoKS0+cmVwbGFjZUNoaWxkKHRvV2ViQ29yZShuZXdDaGlsZCks
IHRvV2ViQ29yZShvbGRDaGlsZCksIGVjLCBBdHRhY2hMYXppbHkpKQotICAgICAgICByZXR1cm4g
b2xkQ2hpbGQ7Ci0KLSAgICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2Vw
dGlvbkNvZGU+KGVjKSk7Ci0gICAgcmV0dXJuIFdlYkRPTU5vZGUoKTsKLX0KLQotV2ViRE9NTm9k
ZSBXZWJET01Ob2RlOjpyZW1vdmVDaGlsZChjb25zdCBXZWJET01Ob2RlJiBvbGRDaGlsZCkKLXsK
LSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIFdlYkRPTU5vZGUoKTsKLQotICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlmIChpbXBsKCktPnJlbW92ZUNoaWxk
KHRvV2ViQ29yZShvbGRDaGlsZCksIGVjKSkKLSAgICAgICAgcmV0dXJuIG9sZENoaWxkOwotCi0g
ICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykp
OwotICAgIHJldHVybiBXZWJET01Ob2RlKCk7Ci19Ci0KLVdlYkRPTU5vZGUgV2ViRE9NTm9kZTo6
YXBwZW5kQ2hpbGQoY29uc3QgV2ViRE9NTm9kZSYgbmV3Q2hpbGQpCi17Ci0gICAgaWYgKCFpbXBs
KCkpCi0gICAgICAgIHJldHVybiBXZWJET01Ob2RlKCk7Ci0KLSAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBpZiAoaW1wbCgpLT5hcHBlbmRDaGlsZCh0b1dlYkNvcmUobmV3
Q2hpbGQpLCBlYywgQXR0YWNoTGF6aWx5KSkKLSAgICAgICAgcmV0dXJuIG5ld0NoaWxkOwotCi0g
ICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykp
OwotICAgIHJldHVybiBXZWJET01Ob2RlKCk7Ci19Ci0KLXZvaWQgV2ViRE9NTm9kZTo6YWRkRXZl
bnRMaXN0ZW5lcihjb25zdCBXZWJET01TdHJpbmcmIHR5cGUsIGNvbnN0IFdlYkRPTUV2ZW50TGlz
dGVuZXImIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICh0b1dlYkNvcmUobGlzdGVuZXIpKQotICAgICAgICBp
bXBsKCktPmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdG9XZWJDb3JlKGxpc3RlbmVyKSwgdXNlQ2Fw
dHVyZSk7Ci19Ci0KLXZvaWQgV2ViRE9NTm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBX
ZWJET01TdHJpbmcmIHR5cGUsIGNvbnN0IFdlYkRPTUV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBi
b29sIHVzZUNhcHR1cmUpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICh0b1dlYkNvcmUobGlzdGVuZXIpKQotICAgICAgICBpbXBsKCktPnJlbW92ZUV2ZW50
TGlzdGVuZXIodHlwZSwgdG9XZWJDb3JlKGxpc3RlbmVyKSwgdXNlQ2FwdHVyZSk7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NTm9kZUZpbHRlckN1c3Rv
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NTm9kZUZpbHRlckN1c3Rv
bS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NWZhNjEuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTU5vZGVGaWx0ZXJDdXN0b20uY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkRPTU5vZGVGaWx0ZXIuaCIKLQot
I2luY2x1ZGUgIldlYkRPTU5vZGUuaCIKLSNpbmNsdWRlICJXZWJOYXRpdmVOb2RlRmlsdGVyQ29u
ZGl0aW9uLmgiCi0KLXNob3J0IFdlYkRPTU5vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoY29uc3QgV2Vi
RE9NTm9kZSYgbikKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICByZXR1cm4gaW1wbCgpLT5hY2NlcHROb2RlKDAsIHRvV2ViQ29yZShuKSk7Ci19Ci0KLVdlYkRP
TU5vZGVGaWx0ZXIgdG9XZWJLaXQoV2ViVXNlck5vZGVGaWx0ZXIqIHZhbHVlKQotewotICAgIFJl
ZlB0cjxXZWJDb3JlOjpOb2RlRmlsdGVyPiBsaXN0ZW5lciA9IFdlYkNvcmU6Ok5vZGVGaWx0ZXI6
OmNyZWF0ZShXZWJOYXRpdmVOb2RlRmlsdGVyQ29uZGl0aW9uOjpjcmVhdGUodmFsdWUpKTsKLSAg
ICByZXR1cm4gV2ViRE9NTm9kZUZpbHRlcihsaXN0ZW5lci5nZXQoKSk7Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NT2JqZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9jcHAvV2ViRE9NT2JqZWN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDRkMTgzMGIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvY3Bw
L1dlYkRPTU9iamVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2lmbmRlZiBXZWJET01PYmplY3RfaAotI2RlZmluZSBXZWJET01PYmplY3RfaAot
Ci1jbGFzcyBXZWJET01PYmplY3QgewotcHJvdGVjdGVkOgotICAgIFdlYkRPTU9iamVjdCgpIHsg
fQotICAgIH5XZWJET01PYmplY3QoKSB7IH0KLX07Ci0KLS8vIExvb2tzIGFrd2FyZCwgdGhvdWdo
IHdlIHByZWZpeCBhbGwgY2xhc3NlcyB3aXRoIFdlYkRPTQotdHlwZWRlZiB1bnNpZ25lZCBsb25n
IGxvbmcgV2ViRE9NRE9NVGltZVN0YW1wOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJET01TdHJpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvY3BwL1dlYkRPTVN0cmluZy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGRlYmQ0ZjQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRP
TVN0cmluZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViRE9NU3RyaW5nLmgiCi0KLSNp
bmNsdWRlICJXZWJET01DU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1jbGFzcyBXZWJET01TdHJpbmdQcml2YXRlIDogcHVibGljIFdURjo6U3Ry
aW5nSW1wbCB7Ci19OwotCi12b2lkIFdlYkRPTVN0cmluZzo6cmVzZXQoKQotewotICAgIGlmICht
X3ByaXZhdGUpIHsKLSAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOwotICAgICAgICBtX3ByaXZh
dGUgPSAwOwotICAgIH0KLX0KLQotdm9pZCBXZWJET01TdHJpbmc6OmFzc2lnbihjb25zdCBXZWJE
T01TdHJpbmcmIG90aGVyKQotewotICAgIGFzc2lnbihjb25zdF9jYXN0PFdlYkRPTVN0cmluZ1By
aXZhdGUqPihvdGhlci5tX3ByaXZhdGUpKTsKLX0KLQotdm9pZCBXZWJET01TdHJpbmc6OmFzc2ln
bihjb25zdCBXZWJVQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBhc3NpZ24oc3Rh
dGljX2Nhc3Q8V2ViRE9NU3RyaW5nUHJpdmF0ZSo+KAotICAgICAgICBXVEY6OlN0cmluZ0ltcGw6
OmNyZWF0ZShkYXRhLCBsZW5ndGgpLmdldCgpKSk7Ci19Ci0KLXNpemVfdCBXZWJET01TdHJpbmc6
Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZSA/IGNvbnN0X2Nhc3Q8V2Vi
RE9NU3RyaW5nUHJpdmF0ZSo+KG1fcHJpdmF0ZSktPmxlbmd0aCgpIDogMDsKLX0KLQotY29uc3Qg
V2ViVUNoYXIqIFdlYkRPTVN0cmluZzo6ZGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJp
dmF0ZSA/IGNvbnN0X2Nhc3Q8V2ViRE9NU3RyaW5nUHJpdmF0ZSo+KG1fcHJpdmF0ZSktPmNoYXJh
Y3RlcnMoKSA6IDA7Ci19Ci0KLVdlYkRPTUNTdHJpbmcgV2ViRE9NU3RyaW5nOjp1dGY4KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gV1RGOjpTdHJpbmcobV9wcml2YXRlKS51dGY4KCk7Ci19Ci0KLVdl
YkRPTVN0cmluZyBXZWJET01TdHJpbmc6OmZyb21VVEY4KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVf
dCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFdURjo6U3RyaW5nOjpmcm9tVVRGOChkYXRhLCBsZW5n
dGgpOwotfQotCi1XZWJET01TdHJpbmcgV2ViRE9NU3RyaW5nOjpmcm9tVVRGOChjb25zdCBjaGFy
KiBkYXRhKQotewotICAgIHJldHVybiBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZGF0YSk7Ci19Ci0K
LVdlYkRPTVN0cmluZzo6V2ViRE9NU3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJiBzKQotICAgIDog
bV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYkRPTVN0cmluZ1ByaXZhdGUqPihzLmltcGwoKSkpCi17
Ci0gICAgaWYgKG1fcHJpdmF0ZSkKLSAgICAgICAgbV9wcml2YXRlLT5yZWYoKTsKLX0KLQotV2Vi
RE9NU3RyaW5nJiBXZWJET01TdHJpbmc6Om9wZXJhdG9yPShjb25zdCBXVEY6OlN0cmluZyYgcykK
LXsKLSAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViRE9NU3RyaW5nUHJpdmF0ZSo+KHMuaW1wbCgp
KSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1XZWJET01TdHJpbmc6Om9wZXJhdG9yIFdURjo6
U3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlOwotfQotCi1XZWJET01TdHJp
bmc6OldlYkRPTVN0cmluZyhjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgcykKLSAgICA6IG1fcHJp
dmF0ZSgwKQotewotICAgIGFzc2lnbihzLnN0cmluZygpKTsKLX0KLQotV2ViRE9NU3RyaW5nJiBX
ZWJET01TdHJpbmc6Om9wZXJhdG9yPShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgcykKLXsKLSAg
ICBhc3NpZ24ocy5zdHJpbmcoKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1XZWJET01TdHJp
bmc6Om9wZXJhdG9yIFdURjo6QXRvbWljU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RG
OjpBdG9taWNTdHJpbmcoc3RhdGljX2Nhc3Q8V1RGOjpTdHJpbmdJbXBsICo+KG1fcHJpdmF0ZSkp
OwotfQotCi1ib29sIFdlYkRPTVN0cmluZzo6ZXF1YWxzKGNvbnN0IGNoYXIqIHN0cmluZykgY29u
c3QKLXsKLSAgICByZXR1cm4gV1RGOjplcXVhbChtX3ByaXZhdGUsIHN0cmluZyk7Ci19Ci0KLXZv
aWQgV2ViRE9NU3RyaW5nOjphc3NpZ24oV2ViRE9NU3RyaW5nUHJpdmF0ZSogcCkKLXsKLSAgICAv
LyBUYWtlIGNhcmUgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1fcHJpdmF0ZSA9PSBwCi0gICAg
aWYgKHApCi0gICAgICAgIHAtPnJlZigpOwotICAgIGlmIChtX3ByaXZhdGUpCi0gICAgICAgIG1f
cHJpdmF0ZS0+ZGVyZWYoKTsKLSAgICBtX3ByaXZhdGUgPSBwOwotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvY3BwL1dlYkRPTVN0cmluZy5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvY3BwL1dlYkRPTVN0cmluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwZWVhMWFlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJE
T01TdHJpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2lmbmRlZiBXZWJET01TdHJpbmdfaAotI2RlZmluZSBXZWJET01TdHJpbmdfaAotCi0jaW5j
bHVkZSA8V2ViRE9NQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLWNsYXNz
IFdlYkRPTVN0cmluZ1ByaXZhdGU7Ci0KLS8vIEEgVVRGLTE2IHN0cmluZyBjb250YWluZXIuICBJ
dCBpcyBpbmV4cGVuc2l2ZSB0byBjb3B5IGEgV2ViRE9NU3RyaW5nCi0vLyBvYmplY3QuCi0vLwot
Ly8gV0FSTklORzogSXQgaXMgbm90IHNhZmUgdG8gcGFzcyBhIFdlYkRPTVN0cmluZyBhY3Jvc3Mg
dGhyZWFkcyEhIQotLy8KLWNsYXNzIFdlYkRPTVN0cmluZyB7Ci1wdWJsaWM6Ci0gICAgfldlYkRP
TVN0cmluZygpIHsgcmVzZXQoKTsgfQotCi0gICAgV2ViRE9NU3RyaW5nKCkgOiBtX3ByaXZhdGUo
MCkgeyB9Ci0KLSAgICBXZWJET01TdHJpbmcoY29uc3QgV2ViVUNoYXIqIGRhdGEsIHNpemVfdCBs
ZW4pIDogbV9wcml2YXRlKDApCi0gICAgewotICAgICAgICBhc3NpZ24oZGF0YSwgbGVuKTsKLSAg
ICB9Ci0KLSAgICBXZWJET01TdHJpbmcoY29uc3QgV2ViRE9NU3RyaW5nJiBzKSA6IG1fcHJpdmF0
ZSgwKSB7IGFzc2lnbihzKTsgfQotCi0gICAgV2ViRE9NU3RyaW5nJiBvcGVyYXRvcj0oY29uc3Qg
V2ViRE9NU3RyaW5nJiBzKQotICAgIHsKLSAgICAgICAgYXNzaWduKHMpOwotICAgICAgICByZXR1
cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgdm9pZCByZXNldCgpOwotICAgIHZvaWQgYXNzaWduKGNv
bnN0IFdlYkRPTVN0cmluZyYpOwotICAgIHZvaWQgYXNzaWduKGNvbnN0IFdlYlVDaGFyKiBkYXRh
LCBzaXplX3QgbGVuKTsKLQotICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdDsKLSAgICBjb25zdCBX
ZWJVQ2hhciogZGF0YSgpIGNvbnN0OwotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gIWxlbmd0aCgpOyB9Ci0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9wcml2
YXRlOyB9Ci0KLSAgICBXZWJET01DU3RyaW5nIHV0ZjgoKSBjb25zdDsKLQotICAgIHN0YXRpYyBX
ZWJET01TdHJpbmcgZnJvbVVURjgoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7Ci0g
ICAgc3RhdGljIFdlYkRPTVN0cmluZyBmcm9tVVRGOChjb25zdCBjaGFyKiBkYXRhKTsKLQotICAg
IHRlbXBsYXRlIDxpbnQgTj4gV2ViRE9NU3RyaW5nKGNvbnN0IGNoYXIgKCZkYXRhKVtOXSkKLSAg
ICAgICAgOiBtX3ByaXZhdGUoMCkKLSAgICB7Ci0gICAgICAgIGFzc2lnbihmcm9tVVRGOChkYXRh
LCBOIC0gMSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDxpbnQgTj4gV2ViRE9NU3RyaW5nJiBv
cGVyYXRvcj0oY29uc3QgY2hhciAoJmRhdGEpW05dKQotICAgIHsKLSAgICAgICAgYXNzaWduKGZy
b21VVEY4KGRhdGEsIE4gLSAxKSk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAg
ICBXZWJET01TdHJpbmcoY29uc3QgV1RGOjpTdHJpbmcmKTsKLSAgICBXZWJET01TdHJpbmcmIG9w
ZXJhdG9yPShjb25zdCBXVEY6OlN0cmluZyYpOwotICAgIG9wZXJhdG9yIFdURjo6U3RyaW5nKCkg
Y29uc3Q7Ci0KLSAgICBXZWJET01TdHJpbmcoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmKTsKLSAg
ICBXZWJET01TdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXVEY6OkF0b21pY1N0cmluZyYpOwotICAg
IG9wZXJhdG9yIFdURjo6QXRvbWljU3RyaW5nKCkgY29uc3Q7Ci0KLSAgICBib29sIGVxdWFscyhj
b25zdCBjaGFyKiBzdHJpbmcpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZvaWQgYXNzaWduKFdl
YkRPTVN0cmluZ1ByaXZhdGUqKTsKLSAgICBXZWJET01TdHJpbmdQcml2YXRlKiBtX3ByaXZhdGU7
Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2NwcC9X
ZWJFeGNlcHRpb25IYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJF
eGNlcHRpb25IYW5kbGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI4NTUy
NS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRXhjZXB0aW9u
SGFuZGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5o
IgotCi0vLyBUbyBhdm9pZCBhIGdsb2JhbCBzdGF0aWMgc3ltYm9sLCB3ZSBkZWNsYXJlIGl0IGlu
IGEgZnVuY3Rpb24KLXN0YXRpYyBpbmxpbmUgV2ViRXhjZXB0aW9uSGFuZGxlciYgZ2xvYmFsRXhj
ZXB0aW9uSGFuZGxlcigpCi17Ci0gICAgc3RhdGljIFdlYkV4Y2VwdGlvbkhhbmRsZXIgc19nbG9i
YWxFeGNlcHRpb25IYW5kbGVyOwotICAgIHJldHVybiBzX2dsb2JhbEV4Y2VwdGlvbkhhbmRsZXI7
Ci19Ci0KLXZvaWQgd2ViSW5zdGFsbEV4Y2VwdGlvbkhhbmRsZXIoV2ViRXhjZXB0aW9uSGFuZGxl
ciBoYW5kbGVyKQotewotICAgIEFTU0VSVChoYW5kbGVyKTsKLSAgICBnbG9iYWxFeGNlcHRpb25I
YW5kbGVyKCkgPSBoYW5kbGVyOwotfQotCi12b2lkIHdlYlJhaXNlRE9NRXhjZXB0aW9uKFdlYkRP
TUV4Y2VwdGlvbkNvZGUgZWMpCi17Ci0gICAgQVNTRVJUKGVjKTsKLSAgICBpZiAoV2ViRXhjZXB0
aW9uSGFuZGxlciYgaGFuZGxlciA9IGdsb2JhbEV4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAg
KCpoYW5kbGVyKShlYyk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9j
cHAvV2ViRXhjZXB0aW9uSGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvY3BwL1dl
YkV4Y2VwdGlvbkhhbmRsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY3OTI1
NC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViRXhjZXB0aW9u
SGFuZGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViRXhjZXB0aW9uSGFuZGxlcl9oCi0jZGVmaW5l
IFdlYkV4Y2VwdGlvbkhhbmRsZXJfaAotCi10eXBlZGVmIGludCBXZWJET01FeGNlcHRpb25Db2Rl
OwotdHlwZWRlZiB2b2lkICgqV2ViRXhjZXB0aW9uSGFuZGxlcikoV2ViRE9NRXhjZXB0aW9uQ29k
ZSk7Ci0KLS8vIFVzZWQgZnJvbSB0aGUgb3V0c2lkZSB0byByZWdpc3RlciBhIGNhbGxiYWNrIHRo
YXQgZ2V0cyBmaXJlZCB3aGVuZXZlciBhbiBleGNlcHRpb24gaXMgcmFpc2VkCi12b2lkIHdlYklu
c3RhbGxFeGNlcHRpb25IYW5kbGVyKFdlYkV4Y2VwdGlvbkhhbmRsZXIpOwotCi0vLyBOZXZlciB1
c2VkIGJ5IHRoZSBiaW5kaW5ncywgb25seSBpbmRpcmVjdGx5IGJ5IHdlYkRPTVJhaXNlRXJyb3IK
LXZvaWQgd2ViUmFpc2VET01FeGNlcHRpb24oV2ViRE9NRXhjZXB0aW9uQ29kZSk7Ci0KLS8vIFVz
ZWQgZnJvbSB0aGUgYmluZGluZ3MKLWlubGluZSB2b2lkIHdlYkRPTVJhaXNlRXJyb3IoV2ViRE9N
RXhjZXB0aW9uQ29kZSBlYykgCi17Ci0gICAgaWYgKGVjKQotICAgICAgICB3ZWJSYWlzZURPTUV4
Y2VwdGlvbihlYyk7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvY3BwL1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvY3BwL1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiNzgxZWI3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2NwcC9XZWJOYXRpdmVFdmVudExpc3RlbmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUzICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJX
ZWJOYXRpdmVFdmVudExpc3RlbmVyLmgiCi0KLSNpbmNsdWRlICJXZWJET01FdmVudC5oIgotCi1X
ZWJOYXRpdmVFdmVudExpc3RlbmVyOjpXZWJOYXRpdmVFdmVudExpc3RlbmVyKFdlYlVzZXJFdmVu
dExpc3RlbmVyKiBsaXN0ZW5lcikKLSAgICA6IFdlYkNvcmU6OkV2ZW50TGlzdGVuZXIoQ1BQRXZl
bnRMaXN0ZW5lclR5cGUpLAotICAgIG1fbGlzdGVuZXIobGlzdGVuZXIpCi17Ci0gICAgQVNTRVJU
KG1fbGlzdGVuZXIpOwotICAgIG1fbGlzdGVuZXItPnJlZigpOwotfQotCi1XZWJOYXRpdmVFdmVu
dExpc3RlbmVyOjp+V2ViTmF0aXZlRXZlbnRMaXN0ZW5lcigpCi17Ci0gICAgbV9saXN0ZW5lci0+
ZGVyZWYoKTsKLX0KLQotdm9pZCBXZWJOYXRpdmVFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQot
ewotICAgIG1fbGlzdGVuZXItPmhhbmRsZUV2ZW50KHRvV2ViS2l0KGV2ZW50KSk7Ci19Ci0KLWJv
b2wgV2ViTmF0aXZlRXZlbnRMaXN0ZW5lcjo6cmVwb3J0RXJyb3IoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmLCBp
bnQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBlcnJvciBoYW5kbGluZwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBXZWJOYXRpdmVFdmVudExpc3RlbmVyOjpvcGVyYXRvcj09KGNv
bnN0IFdlYkNvcmU6OkV2ZW50TGlzdGVuZXImIG90aGVyKQotewotICAgIGNvbnN0IFdlYk5hdGl2
ZUV2ZW50TGlzdGVuZXIqIHB0ck90aGVyID0gY2FzdCgmb3RoZXIpOwotICAgIHJldHVybiBwdHJP
dGhlciAmJiBtX2xpc3RlbmVyID09IHB0ck90aGVyLT5tX2xpc3RlbmVyOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvY3BwL1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJOYXRpdmVFdmVudExpc3RlbmVyLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzYjRmNWIuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvY3BwL1dlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMywg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViTmF0
aXZlRXZlbnRMaXN0ZW5lcl9oCi0jZGVmaW5lIFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXJfaAotCi0j
aW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIldlYkRPTUV2ZW50TGlzdGVuZXIu
aCIKLQotY2xhc3MgV2ViTmF0aXZlRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBXZWJDb3JlOjpFdmVu
dExpc3RlbmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJOYXRpdmVFdmVu
dExpc3RlbmVyPiBjcmVhdGUoV2ViVXNlckV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJOYXRpdmVFdmVudExpc3RlbmVyKGxpc3Rl
bmVyKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IFdlYk5hdGl2ZUV2ZW50TGlzdGVuZXIq
IGNhc3QoY29uc3QgV2ViQ29yZTo6RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIpCi0gICAgewotICAg
ICAgICByZXR1cm4gbGlzdGVuZXItPnR5cGUoKSA9PSBDUFBFdmVudExpc3RlbmVyVHlwZQotICAg
ICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTmF0aXZlRXZlbnRMaXN0ZW5lcio+
KGxpc3RlbmVyKQotICAgICAgICAgICAgICAgIDogMDsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5X
ZWJOYXRpdmVFdmVudExpc3RlbmVyKCk7Ci0gICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29u
c3QgV2ViQ29yZTo6RXZlbnRMaXN0ZW5lciYgb3RoZXIpOwotCi1wcml2YXRlOgotICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2Vi
Q29yZTo6RXZlbnQqKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVwb3J0RXJyb3IoV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLCBjb25zdCBX
VEY6OlN0cmluZyYgdXJsLCBpbnQgbGluZU51bWJlcik7Ci0KLXByb3RlY3RlZDoKLSAgICBXZWJO
YXRpdmVFdmVudExpc3RlbmVyKFdlYlVzZXJFdmVudExpc3RlbmVyKik7Ci0gICAgV2ViVXNlckV2
ZW50TGlzdGVuZXIqIG1fbGlzdGVuZXI7Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJOYXRpdmVOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJOYXRpdmVOb2RlRmlsdGVyQ29uZGl0aW9u
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVhOWQ3MC4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViTmF0aXZlTm9kZUZpbHRlckNvbmRpdGlv
bi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0g
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIldlYk5hdGl2ZU5vZGVGaWx0ZXJDb25kaXRpb24uaCIKLQotI2luY2x1ZGUgIldlYkRP
TU5vZGUuaCIKLQotV2ViTmF0aXZlTm9kZUZpbHRlckNvbmRpdGlvbjo6V2ViTmF0aXZlTm9kZUZp
bHRlckNvbmRpdGlvbihXZWJVc2VyTm9kZUZpbHRlciogZmlsdGVyKQotICAgIDogV2ViQ29yZTo6
Tm9kZUZpbHRlckNvbmRpdGlvbigpCi0gICAgLCBtX2ZpbHRlcihmaWx0ZXIpCi17Ci0gICAgQVNT
RVJUKG1fZmlsdGVyKTsKLSAgICBtX2ZpbHRlci0+cmVmKCk7Ci19Ci0KLVdlYk5hdGl2ZU5vZGVG
aWx0ZXJDb25kaXRpb246On5XZWJOYXRpdmVOb2RlRmlsdGVyQ29uZGl0aW9uKCkKLXsKLSAgICBt
X2ZpbHRlci0+ZGVyZWYoKTsKLX0KLQotc2hvcnQgV2ViTmF0aXZlTm9kZUZpbHRlckNvbmRpdGlv
bjo6YWNjZXB0Tm9kZShKU0M6OkV4ZWNTdGF0ZSosIFdlYkNvcmU6Ok5vZGUqIG5vZGUpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fZmlsdGVyLT5hY2NlcHROb2RlKHRvV2ViS2l0KG5vZGUpKTsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJOYXRpdmVOb2RlRmls
dGVyQ29uZGl0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9jcHAvV2ViTmF0aXZlTm9k
ZUZpbHRlckNvbmRpdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODkyYjRh
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2NwcC9XZWJOYXRpdmVOb2Rl
RmlsdGVyQ29uZGl0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRl
ZiBXZWJOYXRpdmVOb2RlRmlsdGVyQ29uZGl0aW9uX2gKLSNkZWZpbmUgV2ViTmF0aXZlTm9kZUZp
bHRlckNvbmRpdGlvbl9oCi0KLSNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCi0jaW5jbHVkZSAiV2Vi
RE9NTm9kZUZpbHRlci5oIgotCi1jbGFzcyBXZWJOYXRpdmVOb2RlRmlsdGVyQ29uZGl0aW9uIDog
cHVibGljIFdlYkNvcmU6Ok5vZGVGaWx0ZXJDb25kaXRpb24gewotcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFdlYk5hdGl2ZU5vZGVGaWx0ZXJDb25kaXRpb24+IGNyZWF0ZShXZWJVc2Vy
Tm9kZUZpbHRlciogZmlsdGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBX
ZWJOYXRpdmVOb2RlRmlsdGVyQ29uZGl0aW9uKGZpbHRlcikpOwotICAgIH0KLQotICAgIHZpcnR1
YWwgfldlYk5hdGl2ZU5vZGVGaWx0ZXJDb25kaXRpb24oKTsKLQotICAgIHZpcnR1YWwgc2hvcnQg
YWNjZXB0Tm9kZShKU0M6OkV4ZWNTdGF0ZSosIFdlYkNvcmU6Ok5vZGUqKSBjb25zdDsKLQotcHJv
dGVjdGVkOgotICAgIFdlYk5hdGl2ZU5vZGVGaWx0ZXJDb25kaXRpb24oV2ViVXNlck5vZGVGaWx0
ZXIqKTsKLSAgICBXZWJVc2VyTm9kZUZpbHRlciogbV9maWx0ZXI7Ci19OwotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckNQ
UC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckNQUC5w
bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIxYTY5NWIuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yQ1BQLnBtCisrKyAv
ZGV2L251bGwKQEAgLTEsOTk4ICswLDAgQEAKLQotIyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0jIENvcHlyaWdodCAoQykg
MjAwNiBBbmRlcnMgQ2FybHNzb24gPGFuZGVyc2NhQG1hYy5jb20+IAotIyBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+Ci0jIENvcHlyaWdodCAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgotIyBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotIyBDb3B5cmlnaHQgKEMpIDIwMDkgQ2FtZXJvbiBNY0Nvcm1hY2sgPGNhbUBtY2MuaWQuYXU+
Ci0jIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSMKLSMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSMgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIyAKLSMg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIyAKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhaW50IHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0jIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotIwotCi1w
YWNrYWdlIENvZGVHZW5lcmF0b3JDUFA7Ci0KLXVzZSBjb25zdGFudCBGaWxlTmFtZVByZWZpeCA9
PiAiV2ViRE9NIjsKLQotIyBHbG9iYWwgVmFyaWFibGVzCi0KLW15IEBoZWFkZXJDb250ZW50SGVh
ZGVyID0gKCk7Ci1teSBAaGVhZGVyQ29udGVudCA9ICgpOwotbXkgJWhlYWRlckZvcndhcmREZWNs
YXJhdGlvbnMgPSAoKTsKLQotbXkgQGltcGxDb250ZW50SGVhZGVyID0gKCk7Ci1teSBAaW1wbENv
bnRlbnQgPSAoKTsKLW15ICVpbXBsSW5jbHVkZXMgPSAoKTsKLQotIyBDb25zdGFudHMKLW15ICRl
eGNlcHRpb25Jbml0ID0gIldlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOyI7Ci1teSAkZXhj
ZXB0aW9uUmFpc2VPbkVycm9yID0gIndlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9N
RXhjZXB0aW9uQ29kZT4oZWMpKTsiOwotCi0jIERlZmF1bHQgTGljZW5zZSBUZW1wbGF0ZXMKLW15
ICRoZWFkZXJMaWNlbnNlVGVtcGxhdGUgPSA8PCAiRU9GIjsKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBX
ZWluaWcgPHNhbS53ZWluaWdcQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLUVPRgotCi1teSAkaW1w
bGVtZW50YXRpb25MaWNlbnNlVGVtcGxhdGUgPSA8PCAiRU9GIjsKLS8qCi0gKiBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
RU9GCi0KLSMgRGVmYXVsdCBjb25zdHJ1Y3Rvcgotc3ViIG5ldwotewotICAgIG15ICRvYmplY3Qg
PSBzaGlmdDsKLSAgICBteSAkcmVmZXJlbmNlID0geyB9OwotCi0gICAgJGNvZGVHZW5lcmF0b3Ig
PSBzaGlmdDsKLSAgICBzaGlmdDsgIyAkdXNlTGF5ZXJPblRvcAotICAgIHNoaWZ0OyAjICRwcmVw
cm9jZXNzb3IKLSAgICBzaGlmdDsgIyAkd3JpdGVEZXBlbmRlbmNpZXMKLQotICAgIGJsZXNzKCRy
ZWZlcmVuY2UsICRvYmplY3QpOwotICAgIHJldHVybiAkcmVmZXJlbmNlOwotfQotCi1zdWIgR2Vu
ZXJhdGVJbnRlcmZhY2UKLXsKLSAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Ci0gICAgbXkgJGludGVy
ZmFjZSA9IHNoaWZ0OwotICAgIG15ICRkZWZpbmVzID0gc2hpZnQ7Ci0KLSAgICBteSAkbmFtZSA9
ICRpbnRlcmZhY2UtPm5hbWU7Ci0gICAgbXkgJGNsYXNzTmFtZSA9IEdldENsYXNzTmFtZSgkbmFt
ZSk7Ci0gICAgbXkgJHBhcmVudENsYXNzTmFtZSA9ICJXZWJET00iIC4gR2V0UGFyZW50SW1wbENs
YXNzTmFtZSgkaW50ZXJmYWNlKTsKLQotICAgICRvYmplY3QtPkdlbmVyYXRlSGVhZGVyKCRpbnRl
cmZhY2UpOwotICAgICRvYmplY3QtPkdlbmVyYXRlSW1wbGVtZW50YXRpb24oJGludGVyZmFjZSk7
Ci19Ci0KLXN1YiBHZXRDbGFzc05hbWUKLXsKLSAgICBteSAkbmFtZSA9IHNoaWZ0OwotCi0gICAg
IyBzcGVjaWFsIGNhc2VzCi0gICAgcmV0dXJuICJXZWJET01TdHJpbmciIGlmICRjb2RlR2VuZXJh
dG9yLT5Jc1N0cmluZ1R5cGUoJG5hbWUpIG9yICRuYW1lIGVxICJTZXJpYWxpemVkU2NyaXB0VmFs
dWUiOwotICAgIHJldHVybiAiV2ViRE9NT2JqZWN0IiBpZiAkbmFtZSBlcSAiYW55IjsKLSAgICBy
ZXR1cm4gImJvb2wiIGlmICRuYW1lIGVxICJib29sZWFuIjsKLSAgICByZXR1cm4gJG5hbWUgaWYg
JGNvZGVHZW5lcmF0b3ItPklzUHJpbWl0aXZlVHlwZSgkbmFtZSk7Ci0KLSAgICByZXR1cm4gIldl
YkRPTSRuYW1lIjsKLX0KLQotc3ViIEdldEltcGxDbGFzc05hbWUKLXsKLSAgICByZXR1cm4gc2hp
ZnQ7Ci19Ci0KLXN1YiBHZXRQYXJlbnRJbXBsQ2xhc3NOYW1lCi17Ci0gICAgbXkgJGludGVyZmFj
ZSA9IHNoaWZ0OwotCi0gICAgdW5sZXNzICgkaW50ZXJmYWNlLT5wYXJlbnQpIHsKLSAgICAgICAg
cmV0dXJuICJFdmVudFRhcmdldCIgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkV2ZW50VGFyZ2V0In07Ci0gICAgICAgIHJldHVybiAiT2JqZWN0IjsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gJGludGVyZmFjZS0+cGFyZW50OwotfQotCi1zdWIgR2V0UGFyZW50Ci17Ci0gICAgbXkg
JGludGVyZmFjZSA9IHNoaWZ0OwotCi0gICAgbXkgJHBhcmVudDsKLSAgICBpZiAoISRpbnRlcmZh
Y2UtPnBhcmVudCkgewotICAgICAgICAkcGFyZW50ID0gIldlYkRPTU9iamVjdCI7Ci0gICAgICAg
ICRwYXJlbnQgPSAiV2ViRE9NRXZlbnRUYXJnZXQiIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJFdmVudFRhcmdldCJ9OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG15ICRwYXJl
bnROYW1lID0gJGludGVyZmFjZS0+cGFyZW50OwotICAgICAgICAkcGFyZW50ID0gIldlYkRPTSIg
LiAkcGFyZW50TmFtZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gJHBhcmVudDsKLX0KLQotc3ViIFNr
aXBGdW5jdGlvbgotewotICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwotCi0gICAgcmV0dXJuIDEg
aWYgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifTsK
LQotICAgICMgRklYTUU6IFdlIGRvbid0IGdlbmVyYXRlIGJpbmRpbmdzIGZvciBTVkcgcmVsYXRl
ZCBpbnRlcmZhY2VzIHlldAotICAgIHJldHVybiAxIGlmICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5u
YW1lID1+IC9nZXRTVkdEb2N1bWVudC87Ci0KLSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPkdldEFy
cmF5VHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkpIHsKLSAgICAgICAgcmV0dXJuIDE7
Ci0gICAgfQotCi0gICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5HZXRTZXF1ZW5jZVR5cGUoJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPnR5cGUpKSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAg
IGZvcmVhY2ggbXkgJHBhcmFtIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKLSAgICAgICAg
cmV0dXJuIDEgaWYgJGNvZGVHZW5lcmF0b3ItPkdldFNlcXVlbmNlVHlwZSgkcGFyYW0tPnR5cGUp
OwotICAgICAgICByZXR1cm4gMSBpZiAkcGFyYW0tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDbGFt
cCJ9OwotICAgIH0KLQotICAgICMgRklYTUU6IFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgdG8gYWRk
IHNjcmlwdCBleGVjdXRpb24gc3RhdGUgYXJndW1lbnRzIHRvIHRoZSBtZXRob2QuCi0gICAgIyBU
aGVzZSBmdW5jdGlvbnMgd2lsbCBub3QgY29tcGlsZSB3aXRoIHRoZSBDKysgYmluZGluZ3MgYXMg
aXMsIHNvIGRpc2FibGUgdGhlbQotICAgICMgdG8gcmVzdG9yZSBjb21waWxhdGlvbiB1bnRpbCBh
IHByb3BlciBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZGV2ZWxvcGVkLgotICAgIHJldHVybiAxIGlm
ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifTsK
LX0KLQotc3ViIFNraXBBdHRyaWJ1dGUKLXsKLSAgICBteSAkYXR0cmlidXRlID0gc2hpZnQ7Ci0g
ICAgbXkgJHR5cGUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGU7Ci0KLSAgICByZXR1cm4g
MSBpZiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20i
fQotICAgICAgICAgICAgICAgIG9yICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkN1c3RvbUdldHRlciJ9OwotCi0gICAgcmV0dXJuIDEgaWYgJHR5cGUgPX4gL0Nv
bnN0cnVjdG9yJC87Ci0gICAgcmV0dXJuIDEgaWYgJGF0dHJpYnV0ZS0+aXNTdGF0aWM7Ci0gICAg
cmV0dXJuIDEgaWYgJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpOwotCi0g
ICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5cGUpKSB7Ci0gICAgICAgIHJl
dHVybiAxOwotICAgIH0KLQotICAgIGlmICgkY29kZUdlbmVyYXRvci0+R2V0U2VxdWVuY2VUeXBl
KCR0eXBlKSkgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoJGNvZGVHZW5l
cmF0b3ItPklzRW51bVR5cGUoJHR5cGUpKSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQot
ICAgICRjb2RlR2VuZXJhdG9yLT5Bc3NlcnROb3RTZXF1ZW5jZVR5cGUoJHR5cGUpOwotCi0gICAg
IyBGSVhNRTogVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBhZGQgc2NyaXB0IGV4ZWN1dGlvbiBz
dGF0ZSBhcmd1bWVudHMgdG8gdGhlIG1ldGhvZC4KLSAgICAjIFRoZXNlIGZ1bmN0aW9ucyB3aWxs
IG5vdCBjb21waWxlIHdpdGggdGhlIEMrKyBiaW5kaW5ncyBhcyBpcywgc28gZGlzYWJsZSB0aGVt
Ci0gICAgIyB0byByZXN0b3JlIGNvbXBpbGF0aW9uIHVudGlsIGEgcHJvcGVyIGltcGxlbWVudGF0
aW9uIGNhbiBiZSBkZXZlbG9wZWQuCi0gICAgcmV0dXJuIDEgaWYgJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifTsKLQotICAgIHJldHVybiAwOwot
fQotCi1zdWIgR2V0Q1BQVHlwZQotewotICAgIG15ICR0eXBlID0gc2hpZnQ7Ci0gICAgbXkgJHVz
ZUNvbnN0UmVmZXJlbmNlID0gc2hpZnQ7Ci0gICAgbXkgJG5hbWUgPSBHZXRDbGFzc05hbWUoJHR5
cGUpOwotCi0gICAgcmV0dXJuICJjaGFyIiBpZiAkdHlwZSBlcSAiYnl0ZSI7Ci0gICAgcmV0dXJu
ICJ1bnNpZ25lZCBjaGFyIiBpZiAkdHlwZSBlcSAib2N0ZXQiOwotICAgIHJldHVybiAiaW50IiBp
ZiAkdHlwZSBlcSAibG9uZyI7Ci0gICAgcmV0dXJuICJ1bnNpZ25lZCIgaWYgJG5hbWUgZXEgInVu
c2lnbmVkIGxvbmciOwotICAgIHJldHVybiAidW5zaWduZWQgc2hvcnQiIGlmICR0eXBlIGVxICJD
b21wYXJlSG93IjsKLSAgICByZXR1cm4gImRvdWJsZSIgaWYgJG5hbWUgZXEgIkRhdGUiOwotCi0g
ICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJHR5cGUpKSB7Ci0gICAgICAgIGlm
ICgkdXNlQ29uc3RSZWZlcmVuY2UpIHsKLSAgICAgICAgICAgIHJldHVybiAiY29uc3QgJG5hbWUm
IjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAkbmFtZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gJG5hbWUgaWYgJGNvZGVHZW5lcmF0b3ItPklzUHJpbWl0aXZlVHlwZSgkdHlwZSkgb3IgJHR5
cGUgZXEgIkRPTVRpbWVTdGFtcCI7Ci0gICAgcmV0dXJuICJjb25zdCAkbmFtZSYiIGlmICR1c2VD
b25zdFJlZmVyZW5jZTsKLSAgICByZXR1cm4gJG5hbWU7Ci19Ci0KLXN1YiBDb252ZXJzaW9uTmVl
ZGVkCi17Ci0gICAgbXkgJHR5cGUgPSBzaGlmdDsKLSAgICByZXR1cm4gISRjb2RlR2VuZXJhdG9y
LT5Jc05vblBvaW50ZXJUeXBlKCR0eXBlKSAmJiAhJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlw
ZSgkdHlwZSk7Ci19Ci0KLXN1YiBHZXRDUFBUeXBlR2V0dGVyCi17Ci0gICAgbXkgJGFyZ05hbWUg
PSBzaGlmdDsKLSAgICBteSAkdHlwZSA9IHNoaWZ0OwotCi0gICAgcmV0dXJuICRhcmdOYW1lIGlm
ICRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpIG9yICRjb2RlR2VuZXJhdG9y
LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOwotICAgIHJldHVybiAic3RhdGljX2Nhc3Q8V2ViQ29yZTo6
UmFuZ2U6OkNvbXBhcmVIb3c+KCRhcmdOYW1lKSIgaWYgJHR5cGUgZXEgIkNvbXBhcmVIb3ciOwot
ICAgIHJldHVybiAiV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV1RGOjpT
dHJpbmcoJGFyZ05hbWUpKSIgaWYgJHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSI7Ci0g
ICAgcmV0dXJuICJ0byIgLiBHZXROYW1lc3BhY2VGb3JDbGFzcygkYXJnTmFtZSkgLiAiKCRhcmdO
YW1lKSI7Ci19Ci0KLXN1YiBBZGRGb3J3YXJkRGVjbGFyYXRpb25zRm9yVHlwZQotewotICAgIG15
ICR0eXBlID0gc2hpZnQ7Ci0gICAgbXkgJHB1YmxpYyA9IHNoaWZ0OwotCi0gICAgcmV0dXJuIGlm
ICRjb2RlR2VuZXJhdG9yLT5Jc05vblBvaW50ZXJUeXBlKCR0eXBlKSBvciAkY29kZUdlbmVyYXRv
ci0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKLQotICAgIG15ICRjbGFzcyA9IEdldENsYXNzTmFtZSgk
dHlwZSk7Ci0gICAgJGhlYWRlckZvcndhcmREZWNsYXJhdGlvbnN7JGNsYXNzfSA9IDEgaWYgJHB1
YmxpYzsKLX0KLQotc3ViIEFkZEluY2x1ZGVzRm9yVHlwZQotewotICAgIG15ICR0eXBlID0gc2hp
ZnQ7Ci0KLSAgICByZXR1cm4gaWYgJGNvZGVHZW5lcmF0b3ItPkdldFNlcXVlbmNlVHlwZSgkdHlw
ZSk7Ci0gICAgcmV0dXJuIGlmICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5cGUpOwot
ICAgIHJldHVybiBpZiAkY29kZUdlbmVyYXRvci0+SXNOb25Qb2ludGVyVHlwZSgkdHlwZSk7Ci0g
ICAgcmV0dXJuIGlmICR0eXBlID1+IC9Db25zdHJ1Y3Rvci87Ci0KLSAgICBpZiAoJGNvZGVHZW5l
cmF0b3ItPklzU3RyaW5nVHlwZSgkdHlwZSkpIHsKLSAgICAgICAgJGltcGxJbmNsdWRlc3sid3Rm
L3RleHQvQXRvbWljU3RyaW5nLmgifSA9IDE7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7IlVSTC5o
In0gPSAxOwotICAgICAgICAkaW1wbEluY2x1ZGVzeyJXZWJET01TdHJpbmcuaCJ9ID0gMTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgkdHlwZSBlcSAiYW55IikgewotICAgICAg
ICAkaW1wbEluY2x1ZGVzeyJXZWJET01PYmplY3QuaCJ9ID0gMTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmICgkdHlwZSBlcSAiRXZlbnRMaXN0ZW5lciIpIHsKLSAgICAgICAgJGlt
cGxJbmNsdWRlc3siV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5oIn0gPSAxOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7
Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIn0gPSAxOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgIyBBbHNvIGluY2x1ZGUgQ1NTSW1wb3J0UnVs
ZSBzbyB0aGF0IHRoZSB0b1dlYktpdCBtZXRob2RzIGZvciBzdWJjbGFzc2VzIGFyZSBmb3VuZAot
ICAgIGlmICgkdHlwZSBlcSAiQ1NTUnVsZSIpIHsKLSAgICAgICAgJGltcGxJbmNsdWRlc3siV2Vi
RE9NQ1NTSW1wb3J0UnVsZS5oIn0gPSAxOwotICAgIH0KLQotICAgICRpbXBsSW5jbHVkZXN7Ik5v
ZGUuaCJ9ID0gMSBpZiAkdHlwZSBlcSAiTm9kZUxpc3QiOwotICAgICRpbXBsSW5jbHVkZXN7IlN0
eWxlUHJvcGVydGllcy5oIn0gPSAxIGlmICR0eXBlIGVxICJDU1NTdHlsZURlY2xhcmF0aW9uIjsK
LQotICAgICMgRGVmYXVsdCwgaW5jbHVkZSB0aGUgc2FtZSBuYW1lZCBmaWxlICh0aGUgaW1wbGVt
ZW50YXRpb24pIGFuZCB0aGUgc2FtZSBuYW1lIHByZWZpeGVkIHdpdGggIldlYkRPTSIuIAotICAg
ICRpbXBsSW5jbHVkZXN7IiR0eXBlLmgifSA9IDEgdW5sZXNzICR0eXBlIGVxICJhbnkiOwotICAg
ICRpbXBsSW5jbHVkZXN7IldlYkRPTSR0eXBlLmgifSA9IDE7Ci19Ci0KLXN1YiBHZXROYW1lc3Bh
Y2VGb3JDbGFzcwotewotICAgIG15ICR0eXBlID0gc2hpZnQ7Ci0gICAgcmV0dXJuICJXVEYiIGlm
ICgoJHR5cGUgZXEgIkFycmF5QnVmZmVyIikgb3IgKCR0eXBlIGVxICJBcnJheUJ1ZmZlclZpZXci
KSk7IAotICAgIHJldHVybiAiV1RGIiBpZiAoKCR0eXBlIGVxICJVaW50OEFycmF5Iikgb3IgKCR0
eXBlIGVxICJVaW50OENsYW1wZWRBcnJheSIpIG9yICgkdHlwZSBlcSAiVWludDE2QXJyYXkiKSBv
ciAoJHR5cGUgZXEgIlVpbnQzMkFycmF5IikpOyAKLSAgICByZXR1cm4gIldURiIgaWYgKCgkdHlw
ZSBlcSAiSW50OEFycmF5Iikgb3IgKCR0eXBlIGVxICJJbnQxNkFycmF5Iikgb3IgKCR0eXBlIGVx
ICJJbnQzMkFycmF5IikpOyAKLSAgICByZXR1cm4gIldURiIgaWYgKCgkdHlwZSBlcSAiRmxvYXQz
MkFycmF5Iikgb3IgKCR0eXBlIGVxICJGbG9hdDY0QXJyYXkiKSk7ICAgIAotICAgIHJldHVybiAi
V2ViQ29yZSI7Ci19Ci0KLXN1YiBHZW5lcmF0ZUhlYWRlcgotewotICAgIG15ICRvYmplY3QgPSBz
aGlmdDsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0KLSAgICBteSAkaW50ZXJmYWNlTmFt
ZSA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0gICAgbXkgJGNsYXNzTmFtZSA9IEdldENsYXNzTmFtZSgk
aW50ZXJmYWNlTmFtZSk7Ci0gICAgbXkgJGltcGxDbGFzc05hbWUgPSBHZXRJbXBsQ2xhc3NOYW1l
KCRpbnRlcmZhY2VOYW1lKTsKLSAgICAKLSAgICBteSAkaW1wbENsYXNzTmFtZVdpdGhOYW1lc3Bh
Y2UgPSBHZXROYW1lc3BhY2VGb3JDbGFzcygkaW1wbENsYXNzTmFtZSkgLiAiOjoiIC4gJGltcGxD
bGFzc05hbWU7Ci0KLSAgICBteSAkcGFyZW50TmFtZSA9ICIiOwotICAgICRwYXJlbnROYW1lID0g
R2V0UGFyZW50KCRpbnRlcmZhY2UpOwotCi0gICAgbXkgJG51bUNvbnN0YW50cyA9IEB7JGludGVy
ZmFjZS0+Y29uc3RhbnRzfTsKLSAgICBteSAkbnVtQXR0cmlidXRlcyA9IEB7JGludGVyZmFjZS0+
YXR0cmlidXRlc307Ci0gICAgbXkgJG51bUZ1bmN0aW9ucyA9IEB7JGludGVyZmFjZS0+ZnVuY3Rp
b25zfTsKLQotICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVtcGxhdGUKLSAgICBAaGVhZGVy
Q29udGVudEhlYWRlciA9IHNwbGl0KCJcciIsICRoZWFkZXJMaWNlbnNlVGVtcGxhdGUpOwotICAg
IHB1c2goQGhlYWRlckNvbnRlbnRIZWFkZXIsICJcbiNpZm5kZWYgJGNsYXNzTmFtZSIgLiAiX2gi
KTsKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50SGVhZGVyLCAiXG4jZGVmaW5lICRjbGFzc05hbWUi
IC4gIl9oXG5cbiIpOwotCi0gICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0
b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGludGVyZmFjZSk7Ci0gICAgcHVzaChAaGVh
ZGVyQ29udGVudEhlYWRlciwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAkY29u
ZGl0aW9uYWxTdHJpbmc7Ci0KLSAgICAjIC0gSU5DTFVERVMgLQotCi0gICAgbXkgJWhlYWRlcklu
Y2x1ZGVzID0gKCk7Ci0gICAgJGhlYWRlckluY2x1ZGVzeyJXZWJET01TdHJpbmcuaCJ9ID0gMTsK
LSAgICAkaGVhZGVySW5jbHVkZXN7IiRwYXJlbnROYW1lLmgifSA9IDE7Ci0gICAgZm9yZWFjaCBt
eSAkaW5jbHVkZSAoc29ydCBrZXlzKCVoZWFkZXJJbmNsdWRlcykpIHsKLSAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudEhlYWRlciwgIiNpbmNsdWRlIDwkaW5jbHVkZT5cbiIpOwotICAgIH0KLQot
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFzcyAkY2xhc3NOYW1lIik7Ci0gICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiA6IHB1YmxpYyAkcGFyZW50TmFtZSIpIGlmICRwYXJlbnROYW1lOwot
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIge1xuIik7Ci0gICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgInB1YmxpYzpcbiIpOwotCi0gICAgIyBDb25zdHJ1Y3RvcgotICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgJGNsYXNzTmFtZSgpO1xuIik7Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBleHBsaWNpdCAkY2xhc3NOYW1lKCRpbXBsQ2xhc3NOYW1lV2l0aE5hbWVzcGFjZSopO1xu
Iik7Ci0KLSAgICAjIENvcHkgY29uc3RydWN0b3IgYW5kIGFzc2lnbm1lbnQgb3BlcmF0b3Igb24g
Y2xhc3NlcyB3aGljaCBoYXZlIHRoZSBkLXB0cgotICAgIGlmICgkcGFyZW50TmFtZSBlcSAiV2Vi
RE9NT2JqZWN0IikgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05h
bWUoY29uc3QgJGNsYXNzTmFtZSYpO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgJHtjbGFzc05hbWV9JiBvcGVyYXRvcj0oY29uc3QgJGNsYXNzTmFtZSYpO1xuIik7Ci0g
ICAgfQotCi0gICAgIyBEZXN0cnVjdG9yCi0gICAgaWYgKCRwYXJlbnROYW1lIGVxICJXZWJET01P
YmplY3QiKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCB+JGNs
YXNzTmFtZSgpO1xuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICB2aXJ0dWFsIH4kY2xhc3NOYW1lKCkgeyB9XG4iKTsKLSAgICB9Ci0KLSAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiXG4iKTsKLSAgICAkaGVhZGVyRm9yd2FyZERlY2xhcmF0aW9uc3sk
aW1wbENsYXNzTmFtZVdpdGhOYW1lc3BhY2V9ID0gMTsKLQotICAgICMgLSBBZGQgY29uc3RhbnRz
LgotICAgIGlmICgkbnVtQ29uc3RhbnRzID4gMCkgewotICAgICAgICBteSBAaGVhZGVyQ29uc3Rh
bnRzID0gKCk7Ci0gICAgICAgIG15IEBjb25zdGFudHMgPSBAeyRpbnRlcmZhY2UtPmNvbnN0YW50
c307Ci0gICAgICAgIG15ICRjb21iaW5lZENvbnN0YW50cyA9ICIiOwotCi0gICAgICAgICMgRklY
TUU6IHdlIG5lZWQgYSB3YXkgdG8gaW5jbHVkZSBtdWx0aXBsZSBlbnVtcy4KLSAgICAgICAgZm9y
ZWFjaCBteSAkY29uc3RhbnQgKEBjb25zdGFudHMpIHsKLSAgICAgICAgICAgIG15ICRjb25zdGFu
dE5hbWUgPSAkY29uc3RhbnQtPm5hbWU7Ci0gICAgICAgICAgICBteSAkY29uc3RhbnRWYWx1ZSA9
ICRjb25zdGFudC0+dmFsdWU7Ci0gICAgICAgICAgICBteSAkY29uZGl0aW9uYWwgPSAkY29uc3Rh
bnQtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25kaXRpb25hbCJ9OwotICAgICAgICAgICAgbXkg
JG5vdExhc3QgPSAkY29uc3RhbnQgbmUgJGNvbnN0YW50c1stMV07Ci0KLSAgICAgICAgICAgIGlm
ICgkY29uZGl0aW9uYWwpIHsKLSAgICAgICAgICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcg
PSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZ0Zyb21BdHRyaWJ1dGVW
YWx1ZSgkY29uZGl0aW9uYWwpOwotICAgICAgICAgICAgICAgICRjb21iaW5lZENvbnN0YW50cyAu
PSAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgJGNvbWJpbmVkQ29uc3RhbnRzIC49ICIgICAgICAgIFdFQkRPTV8kY29uc3RhbnROYW1lID0g
JGNvbnN0YW50VmFsdWUiOwotICAgICAgICAgICAgJGNvbWJpbmVkQ29uc3RhbnRzIC49ICIsIiBp
ZiAkbm90TGFzdDsKLSAgICAgICAgICAgIGlmICgkY29uZGl0aW9uYWwpIHsKLSAgICAgICAgICAg
ICAgICAkY29tYmluZWRDb25zdGFudHMgLj0gIlxuI2VuZGlmXG4iOwotICAgICAgICAgICAgfSBl
bHNpZiAoJG5vdExhc3QpIHsKLSAgICAgICAgICAgICAgICAkY29tYmluZWRDb25zdGFudHMgLj0g
IlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJlbnVtIHtcbiIp
OwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAkY29tYmluZWRDb25zdGFudHMpOwotICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4gICAgIik7Ci0gICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJ9O1xuXG4iKTsKLSAgICB9Ci0KLSAgICBteSBAaGVhZGVyQXR0cmlidXRlcyA9
ICgpOwotCi0gICAgIyAtIEFkZCBhdHRyaWJ1dGUgZ2V0dGVycy9zZXR0ZXJzLgotICAgIGlmICgk
bnVtQXR0cmlidXRlcyA+IDApIHsKLSAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRp
bnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAgICBuZXh0IGlmIFNraXBBdHRyaWJ1
dGUoJGF0dHJpYnV0ZSk7Ci0KLSAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVDb25kaXRpb25hbFN0
cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZSk7Ci0gICAgICAgICAgICBteSAkYXR0cmlidXRlTmFtZSA9ICRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+bmFtZTsKLSAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVUeXBlID0gR2V0
Q1BQVHlwZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUsIDApOwotICAgICAgICAgICAgbXkg
JHByb3BlcnR5ID0gIiI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICRwcm9wZXJ0eSAuPSAi
I2lmICR7YXR0cmlidXRlQ29uZGl0aW9uYWxTdHJpbmd9XG4iIGlmICRhdHRyaWJ1dGVDb25kaXRp
b25hbFN0cmluZzsKLSAgICAgICAgICAgICRwcm9wZXJ0eSAuPSAiICAgICIgLiAkYXR0cmlidXRl
VHlwZSAuICgkYXR0cmlidXRlVHlwZSA9fiAvXCokLyA/ICIiIDogIiAiKSAuICRhdHRyaWJ1dGVO
YW1lIC4gIigpIGNvbnN0IjsKLQotICAgICAgICAgICAgbXkgJGF2YWlsYWJpbGl0eU1hY3JvID0g
IiI7Ci0gICAgICAgICAgICBteSAkZGVjbGFyYXRpb25TdWZmaXggPSAiO1xuIjsKLQotICAgICAg
ICAgICAgQWRkRm9yd2FyZERlY2xhcmF0aW9uc0ZvclR5cGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT50eXBlLCAxKTsKLQotICAgICAgICAgICAgJGF0dHJpYnV0ZVR5cGUgPSBHZXRDUFBUeXBlKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSwgMSk7Ci0gICAgICAgICAgICBteSAkc2V0dGVyTmFt
ZSA9ICJzZXQiIC4gdWNmaXJzdCgkYXR0cmlidXRlTmFtZSk7Ci0KLSAgICAgICAgICAgICRwcm9w
ZXJ0eSAuPSAkZGVjbGFyYXRpb25TdWZmaXg7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJBdHRy
aWJ1dGVzLCAkcHJvcGVydHkpOwotICAgICAgICAgICAgaWYgKCEkYXR0cmlidXRlLT5pc1JlYWRP
bmx5IGFuZCAhJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVw
bGFjZWFibGUifSkgewotICAgICAgICAgICAgICAgICRwcm9wZXJ0eSA9ICIgICAgdm9pZCAkc2V0
dGVyTmFtZSgkYXR0cmlidXRlVHlwZSkiOwotICAgICAgICAgICAgICAgICRwcm9wZXJ0eSAuPSAk
ZGVjbGFyYXRpb25TdWZmaXg7Ci0gICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQXR0cmlidXRl
cywgJHByb3BlcnR5KTsgCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1c2goQGhlYWRl
ckF0dHJpYnV0ZXMsICIjZW5kaWZcbiIpIGlmICRhdHRyaWJ1dGVDb25kaXRpb25hbFN0cmluZzsK
LSAgICAgICAgfQotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCBAaGVhZGVyQXR0cmlidXRl
cykgaWYgQGhlYWRlckF0dHJpYnV0ZXMgPiAwOwotICAgIH0KLQotICAgIG15IEBoZWFkZXJGdW5j
dGlvbnMgPSAoKTsKLSAgICBteSBAZGVwcmVjYXRlZEhlYWRlckZ1bmN0aW9ucyA9ICgpOwotICAg
IG15IEBpbnRlcmZhY2VGdW5jdGlvbnMgPSAoKTsKLQotICAgICMgLSBBZGQgZnVuY3Rpb25zLgot
ICAgIGlmICgkbnVtRnVuY3Rpb25zID4gMCkgewotICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlv
biAoQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9KSB7Ci0gICAgICAgICAgICBuZXh0IGlmIFNraXBG
dW5jdGlvbigkZnVuY3Rpb24pOwotICAgICAgICAgICAgbmV4dCBpZiAoJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPm5hbWUgZXEgInNldCIgYW5kICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJUeXBlZEFycmF5In0pOwotICAgICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlv
bi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRBcyJ9IHx8ICRm
dW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwotCi0gICAgICAgICAgICBteSAkcmV0dXJuVHlwZSA9
IEdldENQUFR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUsIDApOwotICAgICAgICAgICAg
bXkgJG51bWJlck9mUGFyYW1ldGVycyA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsKLSAgICAg
ICAgICAgIG15ICV0eXBlc1RvRm9yd2FyZERlY2xhcmUgPSAoJGZ1bmN0aW9uLT5zaWduYXR1cmUt
PnR5cGUgPT4gMSk7Ci0KLSAgICAgICAgICAgIG15ICRwYXJhbWV0ZXJJbmRleCA9IDA7Ci0gICAg
ICAgICAgICBteSAkZnVuY3Rpb25TaWcgPSAiJHJldHVyblR5cGUgJGZ1bmN0aW9uTmFtZSgiOwot
ICAgICAgICAgICAgbXkgJG1ldGhvZE5hbWUgPSAkZnVuY3Rpb25OYW1lOwotICAgICAgICAgICAg
Zm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgewotICAgICAgICAg
ICAgICAgIG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7Ci0gICAgICAgICAgICAgICAgbXkg
JHBhcmFtVHlwZSA9IEdldENQUFR5cGUoJHBhcmFtLT50eXBlLCAxKTsKLSAgICAgICAgICAgICAg
ICAkdHlwZXNUb0ZvcndhcmREZWNsYXJleyRwYXJhbS0+dHlwZX0gPSAxOwotCi0gICAgICAgICAg
ICAgICAgJGZ1bmN0aW9uU2lnIC49ICIsICIgaWYgJHBhcmFtZXRlckluZGV4ID49IDE7Ci0gICAg
ICAgICAgICAgICAgJGZ1bmN0aW9uU2lnIC49ICIkcGFyYW1UeXBlICRwYXJhbU5hbWUiOwotICAg
ICAgICAgICAgICAgICRwYXJhbWV0ZXJJbmRleCsrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgJGZ1bmN0aW9uU2lnIC49ICIpIjsKLSAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ1BQUHVyZUludGVyZmFjZSJ9KSB7Ci0gICAgICAgICAgICAgICAg
cHVzaChAaW50ZXJmYWNlRnVuY3Rpb25zLCAiICAgIHZpcnR1YWwgIiAuICRmdW5jdGlvblNpZyAu
ICIgPSAwO1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBteSAkZnVuY3Rpb25EZWNs
YXJhdGlvbiA9ICRmdW5jdGlvblNpZzsKLSAgICAgICAgICAgICRmdW5jdGlvbkRlY2xhcmF0aW9u
IC49ICI7XG4iOwotCi0gICAgICAgICAgICBmb3JlYWNoIG15ICR0eXBlIChrZXlzICV0eXBlc1Rv
Rm9yd2FyZERlY2xhcmUpIHsKLSAgICAgICAgICAgICAgICAjIGFkZCBhbnkgZm9yd2FyZCBkZWNs
YXJhdGlvbnMgdG8gdGhlIHB1YmxpYyBoZWFkZXIgaWYgYSBkZXByZWNhdGVkIHZlcnNpb24gd2ls
bCBiZSBnZW5lcmF0ZWQKLSAgICAgICAgICAgICAgICBBZGRGb3J3YXJkRGVjbGFyYXRpb25zRm9y
VHlwZSgkdHlwZSwgMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG15ICRjb25kaXRp
b25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRm
dW5jdGlvbi0+c2lnbmF0dXJlKTsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckZ1bmN0aW9ucywg
IiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwotICAg
ICAgICAgICAgcHVzaChAaGVhZGVyRnVuY3Rpb25zLCAiICAgICIpOwotICAgICAgICAgICAgcHVz
aChAaGVhZGVyRnVuY3Rpb25zLCAkZnVuY3Rpb25EZWNsYXJhdGlvbik7Ci0gICAgICAgICAgICBw
dXNoKEBoZWFkZXJGdW5jdGlvbnMsICIjZW5kaWZcbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChAaGVhZGVyRnVuY3Rpb25zID4gMCkgewotICAgICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuIikgaWYgQGhlYWRlckF0dHJpYnV0ZXMgPiAw
OwotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgQGhlYWRlckZ1bmN0aW9ucyk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKLSAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lV2l0aE5hbWVzcGFjZSogaW1w
bCgpIGNvbnN0O1xuIik7Ci0KLSAgICBpZiAoJHBhcmVudE5hbWUgZXEgIldlYkRPTU9iamVjdCIp
IHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxucHJvdGVjdGVkOlxuIik7Ci0gICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RydWN0ICR7Y2xhc3NOYW1lfVByaXZhdGU7
XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX1Qcml2
YXRlKiBtX2ltcGw7XG4iKTsKLSAgICB9Ci0KLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtc
blxuIik7Ci0KLSAgICAjIGZvciBDUFBQdXJlSW50ZXJmYWNlIGNsYXNzZXMgYWxzbyBhZGQgdGhl
IGludGVyZmFjZSB0aGF0IHRoZSBjbGllbnQgY29kZSBuZWVkcyB0bwotICAgICMgaW1wbGVtZW50
Ci0gICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDUFBQdXJlSW50ZXJm
YWNlIn0pIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzIFdlYlVzZXIkaW50
ZXJmYWNlTmFtZSB7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInB1YmxpYzpc
biIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgdm9pZCByZWYo
KSA9IDA7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIHZv
aWQgZGVyZWYoKSA9IDA7XG5cbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCBAaW50
ZXJmYWNlRnVuY3Rpb25zKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxucHJvdGVj
dGVkOlxuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVhbCB+V2Vi
VXNlciRpbnRlcmZhY2VOYW1lKCkge31cbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAifTtcblxuIik7Ci0gICAgfQotCi0gICAgbXkgJG5hbWVzcGFjZSA9IEdldE5hbWVzcGFjZUZv
ckNsYXNzKCRpbXBsQ2xhc3NOYW1lKTsKLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiJG5hbWVz
cGFjZSIgLiAiOjokaW1wbENsYXNzTmFtZSogdG9XZWJDb3JlKGNvbnN0ICRjbGFzc05hbWUmKTtc
biIpOwotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIkY2xhc3NOYW1lIHRvV2ViS2l0KCRuYW1l
c3BhY2UiIC4gIjo6JGltcGxDbGFzc05hbWUqKTtcbiIpOwotICAgIGlmICgkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ1BQUHVyZUludGVyZmFjZSJ9KSB7Ci0gICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIkY2xhc3NOYW1lIHRvV2ViS2l0KFdlYlVzZXIkaW50ZXJmYWNlTmFt
ZSopO1xuIik7Ci0gICAgfQotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiNlbmRpZlxuIik7
Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5n
fVxuXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7Ci19Ci0KLXN1YiBBZGRFYXJseVJldHVyblN0
YXRlbWVudAotewotICAgIG15ICRyZXR1cm5UeXBlID0gc2hpZnQ7Ci0KLSAgICBpZiAoIWRlZmlu
ZWQoJHJldHVyblR5cGUpIG9yICRyZXR1cm5UeXBlIGVxICJ2b2lkIikgewotICAgICAgICAkcmV0
dXJuVHlwZSA9ICIiOwotICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5
cGUoJHJldHVyblR5cGUpKSB7Ci0gICAgICAgICRyZXR1cm5UeXBlID0gIiAwIjsKLSAgICB9IGVs
c2lmICgkcmV0dXJuVHlwZSBlcSAiYm9vbCIpIHsKLSAgICAgICAgJHJldHVyblR5cGUgPSAiIGZh
bHNlIjsKLSAgICB9IGVsc2UgewotICAgICAgICAkcmV0dXJuVHlwZSA9ICIgJHJldHVyblR5cGUo
KSI7Ci0gICAgfQotCi0gICAgIyBUT0RPOiBXZSBjb3VsZCBzZXQgZXhjZXB0aW9ucyBoZXJlLCBp
ZiB3ZSB3YW50IHRoYXQKLSAgICBteSAkc3RhdGVtZW50ID0gIiAgICBpZiAoIWltcGwoKSlcbiI7
Ci0gICAgJHN0YXRlbWVudCAuPSAgICIgICAgICAgIHJldHVybiRyZXR1cm5UeXBlO1xuXG4iOwot
ICAgIHJldHVybiAkc3RhdGVtZW50OwotfQotCi1zdWIgQWRkUmV0dXJuU3RhdGVtZW50Ci17Ci0g
ICAgbXkgJHR5cGVJbmZvID0gc2hpZnQ7Ci0gICAgbXkgJHJldHVyblZhbHVlID0gc2hpZnQ7Ci0K
LSAgICAjIFVzZWQgdG8gaW52b2tlIFVSTHMgImNvbnN0IFN0cmluZyYiIG9wZXJhdG9yCi0gICAg
aWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJHR5cGVJbmZvLT5zaWduYXR1cmUtPnR5
cGUpKSB7Ci0gICAgICAgIHJldHVybiAiICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXVEY6
OlN0cmluZyY+KCRyZXR1cm5WYWx1ZSk7XG4iOwotICAgIH0KLQotICAgIHJldHVybiAiICAgIHJl
dHVybiAkcmV0dXJuVmFsdWU7XG4iOwotfQotCi1zdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgot
ewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0K
LSAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0gICAgbXkgJGNsYXNz
TmFtZSA9IEdldENsYXNzTmFtZSgkaW50ZXJmYWNlTmFtZSk7Ci0gICAgbXkgJGltcGxDbGFzc05h
bWUgPSBHZXRJbXBsQ2xhc3NOYW1lKCRpbnRlcmZhY2VOYW1lKTsKLSAgICBteSAkcGFyZW50SW1w
bENsYXNzTmFtZSA9IEdldFBhcmVudEltcGxDbGFzc05hbWUoJGludGVyZmFjZSk7Ci0gICAgbXkg
JGltcGxDbGFzc05hbWVXaXRoTmFtZXNwYWNlID0gR2V0TmFtZXNwYWNlRm9yQ2xhc3MoJGltcGxD
bGFzc05hbWUpIC4gIjo6IiAuICRpbXBsQ2xhc3NOYW1lOwotICAgIG15ICRiYXNlQ2xhc3MgPSAi
V2ViRE9NJHBhcmVudEltcGxDbGFzc05hbWUiOwotICAgIG15ICRjb25kaXRpb25hbCA9ICRpbnRl
cmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25kaXRpb25hbCJ9OwotCi0gICAgbXkgJG51
bUF0dHJpYnV0ZXMgPSBAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9OwotICAgIG15ICRudW1GdW5j
dGlvbnMgPSBAeyRpbnRlcmZhY2UtPmZ1bmN0aW9uc307Ci0KLSAgICAjIC0gQWRkIGRlZmF1bHQg
aGVhZGVyIHRlbXBsYXRlLgotICAgIEBpbXBsQ29udGVudEhlYWRlciA9IHNwbGl0KCJcciIsICRp
bXBsZW1lbnRhdGlvbkxpY2Vuc2VUZW1wbGF0ZSk7Ci0KLSAgICAjIC0gSU5DTFVERVMgLQotICAg
IHB1c2goQGltcGxDb250ZW50SGVhZGVyLCAiXG4jaW5jbHVkZSBcImNvbmZpZy5oXCJcbiIpOwot
ICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRp
dGlvbmFsU3RyaW5nKCRpbnRlcmZhY2UpOwotICAgIHB1c2goQGltcGxDb250ZW50SGVhZGVyLCAi
XG4jaWYgJHtjb25kaXRpb25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwot
ICAgIHB1c2goQGltcGxDb250ZW50SGVhZGVyLCAiI2luY2x1ZGUgXCIkY2xhc3NOYW1lLmhcIlxu
XG4iKTsKLQotICAgICRpbXBsSW5jbHVkZXN7IldlYkV4Y2VwdGlvbkhhbmRsZXIuaCJ9ID0gMTsK
LSAgICAkaW1wbEluY2x1ZGVzeyIkaW1wbENsYXNzTmFtZS5oIn0gPSAxOwotICAgICRpbXBsSW5j
bHVkZXN7Ind0Zi9HZXRQdHIuaCJ9ID0gMTsKLSAgICAkaW1wbEluY2x1ZGVzeyJ3dGYvUmVmUHRy
LmgifSA9IDE7Ci0KLSAgICBAaW1wbENvbnRlbnQgPSAoKTsKLQotICAgICMgUHJpdmF0ZSBkYXRh
c3RydWN0dXJlLCBlbmNhcHN1bGF0aW5nIFdlYkNvcmUgdHlwZXMKLSAgICBpZiAoJGJhc2VDbGFz
cyBlcSAiV2ViRE9NT2JqZWN0IikgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0cnVj
dCAke2NsYXNzTmFtZX06OiR7Y2xhc3NOYW1lfVByaXZhdGUge1xuIik7Ci0gICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfVByaXZhdGUoJGltcGxDbGFzc05hbWVXaXRo
TmFtZXNwYWNlKiBvYmplY3QgPSAwKVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICA6IGltcGwob2JqZWN0KVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHtcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG5cbiIpOwotICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JGltcGxDbGFzc05hbWVXaXRoTmFt
ZXNwYWNlPiBpbXBsO1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifTtcblxuIik7
Ci0gICAgfQotCi0gICAgIyBDb25zdHJ1Y3RvcgotICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtj
bGFzc05hbWV9OjokY2xhc3NOYW1lKClcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IDogJHtiYXNlQ2xhc3N9KClcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICwgbV9p
bXBsKDApXG4iKSBpZiAoJGJhc2VDbGFzcyBlcSAiV2ViRE9NT2JqZWN0Iik7Ci0gICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7Ci0K
LSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNzTmFtZSgkaW1wbENs
YXNzTmFtZVdpdGhOYW1lc3BhY2UqIGltcGwpXG4iKTsKLSAgICBpZiAoJGJhc2VDbGFzcyBlcSAi
V2ViRE9NT2JqZWN0IikgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICR7YmFz
ZUNsYXNzfSgpXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgLCBtX2ltcGwo
bmV3ICR7Y2xhc3NOYW1lfVByaXZhdGUoaW1wbCkpXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotCi0g
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9Ojoke2NsYXNzTmFtZX0oY29u
c3QgJHtjbGFzc05hbWV9JiBjb3B5KVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIDogJHtiYXNlQ2xhc3N9KClcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntc
biIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBtX2ltcGwgPSBjb3B5LmltcGwo
KSA/IG5ldyAke2NsYXNzTmFtZX1Qcml2YXRlKGNvcHkuaW1wbCgpKSA6IDA7XG4iKTsKLSAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotCi0gICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiJHtjbGFzc05hbWV9JiAke2NsYXNzTmFtZX06Om9wZXJhdG9yXD0oY29uc3QgJHtjbGFz
c05hbWV9JiBjb3B5KVxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0g
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGRlbGV0ZSBtX2ltcGw7XG4iKTsKLSAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgbV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcgJHtj
bGFzc05hbWV9UHJpdmF0ZShjb3B5LmltcGwoKSkgOiAwO1xuIik7Ci0gICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHJldHVybiAqdGhpcztcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIn1cblxuIik7Ci0KLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIkaW1wbENsYXNz
TmFtZVdpdGhOYW1lc3BhY2UqICR7Y2xhc3NOYW1lfTo6aW1wbCgpIGNvbnN0XG4iKTsKLSAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuIG1faW1wbCA/IFdURjo6Z2V0UHRyKG1faW1wbC0+aW1wbCkgOiAwO1xuIik7
Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKLQotICAgICAgICAjIERlc3Ry
dWN0b3IKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06On4kY2xhc3NO
YW1lKClcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBkZWxldGUgbV9pbXBsO1xuIik7Ci0gICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIG1faW1wbCA9IDA7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ9XG5cbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIDogJHtiYXNlQ2xhc3N9KGltcGwpXG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotCi0gICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiJGltcGxDbGFzc05hbWVXaXRoTmFtZXNwYWNlKiAke2Ns
YXNzTmFtZX06OmltcGwoKSBjb25zdFxuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
e1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBzdGF0aWNfY2Fz
dDwkaW1wbENsYXNzTmFtZVdpdGhOYW1lc3BhY2UqPigke2Jhc2VDbGFzc306OmltcGwoKSk7XG4i
KTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotICAgIH0KLQotICAgICMg
U1RBUlQgaW1wbGVtZW50YXRpb24KLSAgICAlYXR0cmlidXRlTmFtZXMgPSAoKTsKLQotICAgICMg
LSBBdHRyaWJ1dGVzCi0gICAgaWYgKCRudW1BdHRyaWJ1dGVzID4gMCkgewotICAgICAgICBmb3Jl
YWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKLSAgICAgICAg
ICAgIG5leHQgaWYgU2tpcEF0dHJpYnV0ZSgkYXR0cmlidXRlKTsKLSAgICAgICAgICAgIEFkZElu
Y2x1ZGVzRm9yVHlwZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOwotCi0gICAgICAgICAg
ICBteSAkaWRsVHlwZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZTsKLQotICAgICAgICAg
ICAgbXkgJGF0dHJpYnV0ZU5hbWUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7Ci0gICAg
ICAgICAgICBteSAkYXR0cmlidXRlVHlwZSA9IEdldENQUFR5cGUoJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT50eXBlLCAwKTsKLSAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVJc051bGxhYmxlID0gJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5pc051bGxhYmxlOwotCi0gICAgICAgICAgICAkYXR0cmlidXRl
TmFtZXN7JGF0dHJpYnV0ZU5hbWV9ID0gMTsKLQotICAgICAgICAgICAgIyAtIEdFVFRFUgotICAg
ICAgICAgICAgbXkgJGdldHRlclNpZyA9ICIkYXR0cmlidXRlVHlwZSAkY2xhc3NOYW1lXDpcOiRh
dHRyaWJ1dGVOYW1lKCkgY29uc3RcbiI7Ci0gICAgICAgICAgICBteSAkaGFzR2V0dGVyRXhjZXB0
aW9uID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2V0dGVy
UmFpc2VzRXhjZXB0aW9uIn07Ci0gICAgICAgICAgICBteSAoJGZ1bmN0aW9uTmFtZSwgQGFyZ3Vt
ZW50cykgPSAkY29kZUdlbmVyYXRvci0+R2V0dGVyRXhwcmVzc2lvbihcJWltcGxJbmNsdWRlcywg
JGludGVyZmFjZU5hbWUsICRhdHRyaWJ1dGUpOwotICAgICAgICAgICAgcHVzaChAYXJndW1lbnRz
LCAiaXNOdWxsIikgaWYgJGF0dHJpYnV0ZUlzTnVsbGFibGU7Ci0gICAgICAgICAgICBwdXNoKEBh
cmd1bWVudHMsICJlYyIpIGlmICRoYXNHZXR0ZXJFeGNlcHRpb247Ci0gICAgICAgICAgICBpZiAo
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRC
eSJ9KSB7Ci0gICAgICAgICAgICAgICAgbXkgJGltcGxlbWVudGVkQnkgPSAkYXR0cmlidXRlLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In07Ci0gICAgICAg
ICAgICAgICAgJGltcGxJbmNsdWRlc3siJHtpbXBsZW1lbnRlZEJ5fS5oIn0gPSAxOwotICAgICAg
ICAgICAgICAgIHVuc2hpZnQoQGFyZ3VtZW50cywgImltcGwoKSIpOwotICAgICAgICAgICAgICAg
ICRmdW5jdGlvbk5hbWUgPSAiJHtpbXBsZW1lbnRlZEJ5fTo6JHtmdW5jdGlvbk5hbWV9IjsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICJpbXBs
KCktPiR7ZnVuY3Rpb25OYW1lfSI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICMgU3Bl
Y2lhbCBjYXNlcwotICAgICAgICAgICAgbXkgJGdldHRlckNvbnRlbnRIZWFkID0gIiI7Ci0gICAg
ICAgICAgICBteSAkZ2V0dGVyQ29udGVudFRhaWwgPSAiIjsKLSAgICAgICAgICAgIG15IEBjdXN0
b21HZXR0ZXJDb250ZW50ID0gKCk7IAotICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnRUb1N0cmluZyJ9KSB7Ci0gICAgICAg
ICAgICAgICAgJGdldHRlckNvbnRlbnRIZWFkID0gIldURjo6U3RyaW5nOjpudW1iZXIoIjsKLSAg
ICAgICAgICAgICAgICAkZ2V0dGVyQ29udGVudFRhaWwgPSAiKSI7Ci0gICAgICAgICAgICB9IGVs
c2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSIpIHsKLSAgICAgICAgICAgICAgICAkZ2V0dGVyQ29udGVudFRhaWwgPSAiLT50b1N0cmluZygp
IjsKLSAgICAgICAgICAgIH0gZWxzaWYgKENvbnZlcnNpb25OZWVkZWQoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLT50eXBlKSkgewotICAgICAgICAgICAgICAgICRnZXR0ZXJDb250ZW50SGVhZCA9ICJ0
b1dlYktpdChXVEY6OmdldFB0cigiOwotICAgICAgICAgICAgICAgICRnZXR0ZXJDb250ZW50VGFp
bCA9ICIpKSI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG15ICRnZXR0ZXJDb250ZW50
ID0gIiR7Z2V0dGVyQ29udGVudEhlYWR9JHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBh
cmd1bWVudHMpIC4gIikke2dldHRlckNvbnRlbnRUYWlsfSI7Ci0gICAgICAgICAgICBteSAkYXR0
cmlidXRlQ29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRp
b25hbFN0cmluZygkYXR0cmlidXRlLT5zaWduYXR1cmUpOwotICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIjaWYgJHthdHRyaWJ1dGVDb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRhdHRy
aWJ1dGVDb25kaXRpb25hbFN0cmluZzsKLQotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICRnZXR0ZXJTaWcpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKLSAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBBZGRFYXJseVJldHVyblN0YXRlbWVudCgkYXR0
cmlidXRlVHlwZSkpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIEBjdXN0b21HZXR0
ZXJDb250ZW50KTsKLQotICAgICAgICAgICAgIyBGSVhNRTogU2hvdWxkIHdlIHJldHVybiBhIGRl
ZmF1bHQgdmFsdWUgd2hlbiBpc051bGwgPT0gdHJ1ZT8KLSAgICAgICAgICAgIGlmICgkYXR0cmli
dXRlSXNOdWxsYWJsZSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGJvb2wgaXNOdWxsID0gZmFsc2U7XG4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKCRoYXNHZXR0ZXJFeGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICAjIERpZmZlcmVudGlh
dGVkIGJldHdlZW4gd2hlbiB0aGUgcmV0dXJuIHR5cGUgaXMgYSBwb2ludGVyIGFuZAotICAgICAg
ICAgICAgICAgICMgbm90IGZvciB3aGl0ZSBzcGFjZSBpc3N1ZSAoaWUuIEZvbyAqcmVzdWx0IHZz
LiBpbnQgcmVzdWx0KS4KLSAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZVR5cGUgPX4gL1wq
JC8pIHsKLSAgICAgICAgICAgICAgICAgICAgJGdldHRlckNvbnRlbnQgPSAkYXR0cmlidXRlVHlw
ZSAuICJyZXN1bHQgPSAiIC4gJGdldHRlckNvbnRlbnQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgJGdldHRlckNvbnRlbnQgPSAkYXR0cmlidXRlVHlwZSAu
ICIgcmVzdWx0ID0gIiAuICRnZXR0ZXJDb250ZW50OwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRleGNlcHRpb25Jbml0XG4iKTsK
LSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkZ2V0dGVyQ29udGVudDtc
biIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRleGNlcHRpb25S
YWlzZU9uRXJyb3JcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBBZGRS
ZXR1cm5TdGF0ZW1lbnQoJGF0dHJpYnV0ZSwgInJlc3VsdCIpKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIEFkZFJldHVyblN0YXRlbWVu
dCgkYXR0cmlidXRlLCAkZ2V0dGVyQ29udGVudCkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotCi0gICAgICAgICAgICAjIC0gU0VUVEVS
Ci0gICAgICAgICAgICBpZiAoISRhdHRyaWJ1dGUtPmlzUmVhZE9ubHkgYW5kICEkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXBsYWNlYWJsZSJ9KSB7Ci0gICAg
ICAgICAgICAgICAgIyBFeGNlcHRpb24gaGFuZGxpbmcKLSAgICAgICAgICAgICAgICBteSAkaGFz
U2V0dGVyRXhjZXB0aW9uID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiU2V0dGVyUmFpc2VzRXhjZXB0aW9uIn07Ci0KLSAgICAgICAgICAgICAgICBteSAkY29y
ZVNldHRlck5hbWUgPSAic2V0IiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRhdHRyaWJ1
dGVOYW1lKTsKLSAgICAgICAgICAgICAgICBteSAkc2V0dGVyTmFtZSA9ICJzZXQiIC4gdWNmaXJz
dCgkYXR0cmlidXRlTmFtZSk7Ci0gICAgICAgICAgICAgICAgbXkgJGFyZ05hbWUgPSAibmV3IiAu
IHVjZmlyc3QoJGF0dHJpYnV0ZU5hbWUpOwotICAgICAgICAgICAgICAgIG15ICRhcmcgPSBHZXRD
UFBUeXBlR2V0dGVyKCRhcmdOYW1lLCAkaWRsVHlwZSk7Ci0KLSAgICAgICAgICAgICAgICBteSAk
YXR0cmlidXRlVHlwZSA9IEdldENQUFR5cGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlLCAx
KTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJGNsYXNzTmFtZVw6
XDokc2V0dGVyTmFtZSgkYXR0cmlidXRlVHlwZSAkYXJnTmFtZSlcbiIpOwotICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsIEFkZEVhcmx5UmV0dXJuU3RhdGVtZW50KCkpOwotCi0gICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgJGV4Y2VwdGlvbkluaXRcbiIpIGlmICRoYXNTZXR0ZXJF
eGNlcHRpb247Ci0KLSAgICAgICAgICAgICAgICBteSAoJGZ1bmN0aW9uTmFtZSwgQGFyZ3VtZW50
cykgPSAkY29kZUdlbmVyYXRvci0+U2V0dGVyRXhwcmVzc2lvbihcJWltcGxJbmNsdWRlcywgJGlu
dGVyZmFjZU5hbWUsICRhdHRyaWJ1dGUpOwotICAgICAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50
cywgJGFyZyk7Ci0gICAgICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCAiZWMiKSBpZiAkaGFz
U2V0dGVyRXhjZXB0aW9uOwotICAgICAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In0pIHsKLSAgICAgICAgICAg
ICAgICAgICAgbXkgJGltcGxlbWVudGVkQnkgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In07Ci0gICAgICAgICAgICAgICAgICAgICRp
bXBsSW5jbHVkZXN7IiR7aW1wbGVtZW50ZWRCeX0uaCJ9ID0gMTsKLSAgICAgICAgICAgICAgICAg
ICAgdW5zaGlmdChAYXJndW1lbnRzLCAiaW1wbCgpIik7Ci0gICAgICAgICAgICAgICAgICAgICRm
dW5jdGlvbk5hbWUgPSAiJHtpbXBsZW1lbnRlZEJ5fTo6JHtmdW5jdGlvbk5hbWV9IjsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAkZnVuY3Rpb25OYW1lID0g
ImltcGwoKS0+JHtmdW5jdGlvbk5hbWV9IjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIs
ICIsIEBhcmd1bWVudHMpIC4gIik7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAkZXhjZXB0aW9uUmFpc2VPbkVycm9yXG4iKSBpZiAkaGFzU2V0dGVyRXhjZXB0
aW9uOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZcbiIpIGlm
ICRhdHRyaWJ1dGVDb25kaXRpb25hbFN0cmluZzsKLSAgICAgICAgfQotICAgIH0KLQotICAgICMg
LSBGdW5jdGlvbnMKLSAgICBpZiAoJG51bUZ1bmN0aW9ucyA+IDApIHsKLSAgICAgICAgZm9yZWFj
aCBteSAkZnVuY3Rpb24gKEB7JGludGVyZmFjZS0+ZnVuY3Rpb25zfSkgewotICAgICAgICAgICAg
IyBUcmVhdCBDUFBQdXJlSW50ZXJmYWNlIGFzIEN1c3RvbSBhcyB3ZWxsLCBzaW5jZSB0aGUgV2Vi
Q29yZSB2ZXJzaW9ucyB3aWxsIHRha2UgYSBzY3JpcHQgY29udGV4dCBhcyB3ZWxsCi0gICAgICAg
ICAgICBuZXh0IGlmIFNraXBGdW5jdGlvbigkZnVuY3Rpb24pIHx8ICRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDUFBQdXJlSW50ZXJmYWNlIn07Ci0gICAgICAgICAgICBuZXh0IGlm
ICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSBlcSAic2V0IiBhbmQgJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IlR5cGVkQXJyYXkifSk7Ci0gICAgICAgICAgICBBZGRJbmNsdWRl
c0ZvclR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUpOwotCi0gICAgICAgICAgICBteSAk
ZnVuY3Rpb25OYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7Ci0gICAgICAgICAgICBt
eSAkcmV0dXJuVHlwZSA9IEdldENQUFR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUsIDAp
OwotICAgICAgICAgICAgbXkgJGhhc1BhcmFtZXRlcnMgPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVy
c307Ci0gICAgICAgICAgICBteSAkcmFpc2VzRXhjZXB0aW9ucyA9ICRmdW5jdGlvbi0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmFpc2VzRXhjZXB0aW9uIn07Ci0KLSAgICAgICAg
ICAgIG15IEBwYXJhbWV0ZXJOYW1lcyA9ICgpOwotICAgICAgICAgICAgbXkgQG5lZWRzQXNzZXJ0
ID0gKCk7Ci0gICAgICAgICAgICBteSAlbmVlZHNDdXN0b20gPSAoKTsKLQotICAgICAgICAgICAg
bXkgJHBhcmFtZXRlckluZGV4ID0gMDsKLQotICAgICAgICAgICAgbXkgJGZ1bmN0aW9uU2lnID0g
IiRyZXR1cm5UeXBlICRjbGFzc05hbWVcOlw6JGZ1bmN0aW9uTmFtZSgiOwotICAgICAgICAgICAg
Zm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgewotICAgICAgICAg
ICAgICAgIG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7Ci0gICAgICAgICAgICAgICAgbXkg
JHBhcmFtVHlwZSA9IEdldENQUFR5cGUoJHBhcmFtLT50eXBlLCAxKTsKLQotICAgICAgICAgICAg
ICAgICMgbWFrZSBhIG5ldyBwYXJhbWV0ZXIgbmFtZSBpZiB0aGUgb3JpZ2luYWwgY29uZmxpY3Rz
IHdpdGggYSBwcm9wZXJ0eSBuYW1lCi0gICAgICAgICAgICAgICAgJHBhcmFtTmFtZSA9ICJpbiIg
LiB1Y2ZpcnN0KCRwYXJhbU5hbWUpIGlmICRhdHRyaWJ1dGVOYW1lc3skcGFyYW1OYW1lfTsKLQot
ICAgICAgICAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkcGFyYW0tPnR5cGUpOwotCi0gICAg
ICAgICAgICAgICAgbXkgJGlkbFR5cGUgPSAkcGFyYW0tPnR5cGU7Ci0gICAgICAgICAgICAgICAg
bXkgJGltcGxHZXR0ZXIgPSBHZXRDUFBUeXBlR2V0dGVyKCRwYXJhbU5hbWUsICRpZGxUeXBlKTsK
LQotICAgICAgICAgICAgICAgIHB1c2goQHBhcmFtZXRlck5hbWVzLCAkaW1wbEdldHRlcik7Ci0g
ICAgICAgICAgICAgICAgJG5lZWRzQ3VzdG9teyJOb2RlVG9SZXR1cm4ifSA9ICRwYXJhbU5hbWUg
aWYgJHBhcmFtLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tUmV0dXJuIn07Ci0KLSAgICAg
ICAgICAgICAgICB1bmxlc3MgKCRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJGlkbFR5
cGUpIG9yICRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJGlkbFR5cGUpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHB1c2goQG5lZWRzQXNzZXJ0LCAiICAgIEFTU0VSVCgkcGFyYW1OYW1lKTtc
biIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICRmdW5jdGlvblNpZyAu
PSAiLCAiIGlmICRwYXJhbWV0ZXJJbmRleCA+PSAxOwotICAgICAgICAgICAgICAgICRmdW5jdGlv
blNpZyAuPSAiJHBhcmFtVHlwZSAkcGFyYW1OYW1lIjsKLSAgICAgICAgICAgICAgICAkcGFyYW1l
dGVySW5kZXgrKzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgJGZ1bmN0aW9uU2lnIC49
ICIpIjsKLQotICAgICAgICAgICAgbXkgQGZ1bmN0aW9uQ29udGVudCA9ICgpOwotICAgICAgICAg
ICAgcHVzaChAcGFyYW1ldGVyTmFtZXMsICJlYyIpIGlmICRyYWlzZXNFeGNlcHRpb25zOwotCi0g
ICAgICAgICAgICBteSAkY29udGVudDsKLSAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQnkifSkgewotICAgICAgICAg
ICAgICAgIG15ICRpbXBsZW1lbnRlZEJ5ID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In07Ci0gICAgICAgICAgICAgICAgJGltcGxJbmNs
dWRlc3siJHtpbXBsZW1lbnRlZEJ5fS5oIn0gPSAxOwotICAgICAgICAgICAgICAgIHVuc2hpZnQo
QHBhcmFtZXRlck5hbWVzLCAiaW1wbCgpIik7Ci0gICAgICAgICAgICAgICAgJGNvbnRlbnQgPSAi
V2ViQ29yZTo6JHtpbXBsZW1lbnRlZEJ5fTo6IiAuICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0
KCRmdW5jdGlvbk5hbWUpIC4gIigiIC4gam9pbigiLCAiLCBAcGFyYW1ldGVyTmFtZXMpIC4gIiki
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAkY29udGVudCA9ICJpbXBs
KCktPiIgLiAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkZnVuY3Rpb25OYW1lKSAuICIoIiAu
IGpvaW4oIiwgIiwgQHBhcmFtZXRlck5hbWVzKSAuICIpIjsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKCRyZXR1cm5UeXBlIGVxICJ2b2lkIikgewotICAgICAgICAgICAgICAgICMg
U3BlY2lhbCBjYXNlICd2b2lkJyByZXR1cm4gdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAoJHJh
aXNlc0V4Y2VwdGlvbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250
ZW50LCAiICAgICRleGNlcHRpb25Jbml0XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChA
ZnVuY3Rpb25Db250ZW50LCAiICAgICRjb250ZW50O1xuIik7Ci0gICAgICAgICAgICAgICAgICAg
IHB1c2goQGZ1bmN0aW9uQ29udGVudCwgIiAgICAkZXhjZXB0aW9uUmFpc2VPbkVycm9yXG4iKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBmdW5j
dGlvbkNvbnRlbnQsICIgICAgJGNvbnRlbnQ7XG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2lmIChkZWZpbmVkICRuZWVkc0N1c3RvbXsiTm9kZVRvUmV0dXJuIn0pIHsK
LSAgICAgICAgICAgICAgICAjIFRPRE86IFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuYWJsZSwgb25j
ZSB3ZSBjYXJlIGFib3V0IGN1c3RvbSBjb2RlIQotCi0gICAgICAgICAgICAgICAgIyBTcGVjaWFs
IGNhc2UgdGhlIGluc2VydEJlZm9yZSwgcmVwbGFjZUNoaWxkLCByZW1vdmVDaGlsZCAKLSAgICAg
ICAgICAgICAgICAjIGFuZCBhcHBlbmRDaGlsZCBmdW5jdGlvbnMgZnJvbSBET01Ob2RlIAotICAg
ICAgICAgICAgICAgIG15ICR0b1JldHVybiA9ICRuZWVkc0N1c3RvbXsiTm9kZVRvUmV0dXJuIn07
Ci0gICAgICAgICAgICAgICAgaWYgKCRyYWlzZXNFeGNlcHRpb25zKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHB1c2goQGZ1bmN0aW9uQ29udGVudCwgIiAgICAkZXhjZXB0aW9uSW5pdFxuIik7Ci0g
ICAgICAgICAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uQ29udGVudCwgIiAgICBpZiAoJGNvbnRl
bnQpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAg
ICAgICByZXR1cm4gJHRvUmV0dXJuO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGZ1
bmN0aW9uQ29udGVudCwgIiAgICAkZXhjZXB0aW9uUmFpc2VPbkVycm9yXG4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAgIHJldHVybiAkY2xhc3NOYW1l
KCk7XG4iKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBw
dXNoKEBmdW5jdGlvbkNvbnRlbnQsICIgICAgaWYgKCRjb250ZW50KVxuIik7Ci0gICAgICAgICAg
ICAgICAgICAgIHB1c2goQGZ1bmN0aW9uQ29udGVudCwgIiAgICAgICAgcmV0dXJuICR0b1JldHVy
bjtcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbkNvbnRlbnQsICIgICAg
cmV0dXJuIE5VTEw7XG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGlmIChDb252ZXJzaW9uTmVlZGVkKCRmdW5jdGlvbi0+c2lnbmF0
dXJlLT50eXBlKSkgewotICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICJ0b1dlYktpdChX
VEY6OmdldFB0cigkY29udGVudCkpIjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoJHJhaXNlc0V4Y2VwdGlvbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgIyBEaWZm
ZXJlbnRpYXRlZCBiZXR3ZWVuIHdoZW4gdGhlIHJldHVybiB0eXBlIGlzIGEgcG9pbnRlciBhbmQK
LSAgICAgICAgICAgICAgICAgICAgIyBub3QgZm9yIHdoaXRlIHNwYWNlIGlzc3VlIChpZS4gRm9v
ICpyZXN1bHQgdnMuIGludCByZXN1bHQpLgotICAgICAgICAgICAgICAgICAgICBpZiAoJHJldHVy
blR5cGUgPX4gL1wqJC8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gJHJl
dHVyblR5cGUgLiAicmVzdWx0ID0gIiAuICRjb250ZW50OwotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgPSAkcmV0dXJuVHlwZSAu
ICIgcmVzdWx0ID0gIiAuICRjb250ZW50OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAgICRleGNlcHRpb25Jbml0
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb25Db250ZW50LCAiICAgICRj
b250ZW50O1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uQ29udGVudCwg
IiAgICAkZXhjZXB0aW9uUmFpc2VPbkVycm9yXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVz
aChAZnVuY3Rpb25Db250ZW50LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbkNvbnRlbnQs
ICIgICAgcmV0dXJuICRjb250ZW50O1xuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRv
ci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkZnVuY3Rpb24tPnNpZ25hdHVyZSk7Ci0gICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4i
KSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7Ci0KLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiJGZ1bmN0aW9uU2lnXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xu
Iik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgQWRkRWFybHlSZXR1cm5TdGF0ZW1l
bnQoJHJldHVyblR5cGUpKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBAZnVuY3Rp
b25Db250ZW50KTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKLQot
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZcblxuIikgaWYgJGNvbmRpdGlv
bmFsU3RyaW5nOwotCi0gICAgICAgICAgICAjIENsZWFyIHRoZSBoYXNoCi0gICAgICAgICAgICAl
bmVlZHNDdXN0b20gPSAoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgICMgRU5EIGltcGxlbWVu
dGF0aW9uCi0KLSAgICAjIEdlbmVyYXRlIGludGVybmFsIGludGVyZmFjZXMKLSAgICBteSAkbmFt
ZXNwYWNlID0gR2V0TmFtZXNwYWNlRm9yQ2xhc3MoJGltcGxDbGFzc05hbWUpOwotICAgIHB1c2go
QGltcGxDb250ZW50LCAiJG5hbWVzcGFjZSIgLiAiOjokaW1wbENsYXNzTmFtZSogdG9XZWJDb3Jl
KGNvbnN0ICRjbGFzc05hbWUmIHdyYXBwZXIpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwg
IntcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiB3cmFwcGVyLmltcGwo
KTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKLQotICAgIHB1c2goQGlt
cGxDb250ZW50LCAiJGNsYXNzTmFtZSB0b1dlYktpdCgkbmFtZXNwYWNlIiAuICI6OiRpbXBsQ2xh
c3NOYW1lKiB2YWx1ZSlcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICRjbGFzc05hbWUodmFsdWUpO1xuIik7Ci0g
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKLQotICAgICMgLSBFbmQgdGhlIGlmZGVmIGNv
bmRpdGlvbmFsIGlmIG5lY2Vzc2FyeQotICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4jZW5kaWYg
Ly8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKLX0KLQot
c3ViIFdyaXRlRGF0YQotewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsKLSAgICBteSAkZGF0YU5v
ZGUgPSBzaGlmdDsKLSAgICBteSAkb3V0cHV0RGlyID0gc2hpZnQ7Ci0KLSAgICAjIE9wZW4gZmls
ZXMgZm9yIHdyaXRpbmcuLi4KLSAgICBteSAkbmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKLSAgICBt
eSAkcHJlZml4ID0gRmlsZU5hbWVQcmVmaXg7Ci0gICAgbXkgJGhlYWRlckZpbGVOYW1lID0gIiRv
dXRwdXREaXIvJHByZWZpeCRuYW1lLmgiOwotICAgIG15ICRpbXBsRmlsZU5hbWUgPSAiJG91dHB1
dERpci8kcHJlZml4JG5hbWUuY3BwIjsKLQotICAgICMgVXBkYXRlIGEgLmggZmlsZSBpZiB0aGUg
Y29udGVudHMgYXJlIGNoYW5nZWQuCi0gICAgbXkgJGNvbnRlbnRzID0gam9pbiAiIiwgQGhlYWRl
ckNvbnRlbnRIZWFkZXI7Ci0gICAgJGNvbnRlbnRzIC49ICJcbiI7Ci0gICAgZm9yZWFjaCBteSAk
Y2xhc3MgKHNvcnQga2V5cyglaGVhZGVyRm9yd2FyZERlY2xhcmF0aW9ucykpIHsKLSAgICAgICAg
aWYgKCRjbGFzcyA9fiAvOjovKSB7Ci0gICAgICAgICAgICBteSAkbmFtZXNwYWNlUGFydCA9ICRj
bGFzczsKLSAgICAgICAgICAgICRuYW1lc3BhY2VQYXJ0ID1+IHMvOjouKi8vOwotCi0gICAgICAg
ICAgICBteSAkY2xhc3NQYXJ0ID0gJGNsYXNzOwotICAgICAgICAgICAgJGNsYXNzUGFydCA9fiBz
LyR7bmFtZXNwYWNlUGFydH06Oi8vOwotCi0gICAgICAgICAgICAkY29udGVudHMgLj0gIm5hbWVz
cGFjZSAkbmFtZXNwYWNlUGFydCB7XG5jbGFzcyAkY2xhc3NQYXJ0O1xufTtcblxuIjsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICRjb250ZW50cyAuPSAiY2xhc3MgJGNsYXNzO1xuIgot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgbXkgJGhhc0ZvcndhcmREZWNsYXJhdGlvbnMgPSBrZXlz
KCVoZWFkZXJGb3J3YXJkRGVjbGFyYXRpb25zKTsKLSAgICAkY29udGVudHMgLj0gIlxuIiBpZiAk
aGFzRm9yd2FyZERlY2xhcmF0aW9uczsKLSAgICAkY29udGVudHMgLj0gam9pbiAiIiwgQGhlYWRl
ckNvbnRlbnQ7Ci0gICAgJGNvZGVHZW5lcmF0b3ItPlVwZGF0ZUZpbGUoJGhlYWRlckZpbGVOYW1l
LCAkY29udGVudHMpOwotCi0gICAgQGhlYWRlckNvbnRlbnRIZWFkZXIgPSAoKTsKLSAgICBAaGVh
ZGVyQ29udGVudCA9ICgpOwotICAgICVoZWFkZXJGb3J3YXJkRGVjbGFyYXRpb25zID0gKCk7Ci0K
LSAgICAjIFVwZGF0ZSBhIC5jcHAgZmlsZSBpZiB0aGUgY29udGVudHMgYXJlIGNoYW5nZWQuCi0g
ICAgJGNvbnRlbnRzID0gam9pbiAiIiwgQGltcGxDb250ZW50SGVhZGVyOwotCi0gICAgbXkgQGlu
Y2x1ZGVzOwotICAgIGZvcmVhY2ggbXkgJGluY2x1ZGUgKGtleXMoJWltcGxJbmNsdWRlcykpIHsK
LSAgICAgICAgaWYgKCRpbmNsdWRlID1+IC9ed3RmXC8vKSB7Ci0gICAgICAgICAgICBwdXNoKEBp
bmNsdWRlcywgIjwkaW5jbHVkZT4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1
c2goQGluY2x1ZGVzLCAiXCIkaW5jbHVkZVwiIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBm
b3JlYWNoIG15ICRpbmNsdWRlIChzb3J0IEBpbmNsdWRlcykgewotICAgICAgICAjICJjbGFzc05h
bWUuaCIgaXMgYWxyZWFkeSBpbmNsdWRlZCByaWdodCBhZnRlciBjb25maWcuaCwgc2lsZW5jZSBj
aGVjay13ZWJraXQtc3R5bGUKLSAgICAgICAgbmV4dCBpZiAkaW5jbHVkZSBlcSAiXCIkcHJlZml4
JG5hbWUuaFwiIjsKLSAgICAgICAgJGNvbnRlbnRzIC49ICIjaW5jbHVkZSAkaW5jbHVkZVxuIjsK
LSAgICB9Ci0gICAgJGNvbnRlbnRzIC49ICJcbiI7Ci0KLSAgICAkY29udGVudHMgLj0gam9pbiAi
IiwgQGltcGxDb250ZW50OwotICAgICRjb2RlR2VuZXJhdG9yLT5VcGRhdGVGaWxlKCRpbXBsRmls
ZU5hbWUsICRjb250ZW50cyk7Ci0KLSAgICBAaW1wbENvbnRlbnRIZWFkZXIgPSAoKTsKLSAgICBA
aW1wbENvbnRlbnQgPSAoKTsKLSAgICAlaW1wbEluY2x1ZGVzID0gKCk7Ci19Ci0KLTE7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL0NQUFRlc3RT
dXBwbGVtZW50YWwuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQ
UC9DUFBUZXN0U3VwcGxlbWVudGFsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjUzYTg2ZDUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0NQUC9DUFBUZXN0U3VwcGxlbWVudGFsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAs
MCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBz
Y3JpcHRzIHRoYXQgQ1BQVGVzdFN1cHBsZW1lbnRhbC5oIGFuZAotICAgIENQUFRlc3RTdXBwbGVt
ZW50YWwuY3BwIGFyZSBjcmVhdGVkIGZvciBUZXN0U3VwcGxlbWVudGFsLmlkbCwgYW5kIHRodXMK
LSAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIENQ
UFRlc3RTdXBwbGVtZW50YWwuaCBhbmQKLSAgICBDUFBUZXN0U3VwcGxlbWVudGFsLmNwcCBhdCBl
dmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCi0qLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9DUFBU
ZXN0U3VwcGxlbWVudGFsLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
Q1BQL0NQUFRlc3RTdXBwbGVtZW50YWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjUzYTg2ZDUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0NQUC9DUFBUZXN0U3VwcGxlbWVudGFsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAg
QEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2Ny
aXB0cyB0aGF0IENQUFRlc3RTdXBwbGVtZW50YWwuaCBhbmQKLSAgICBDUFBUZXN0U3VwcGxlbWVu
dGFsLmNwcCBhcmUgY3JlYXRlZCBmb3IgVGVzdFN1cHBsZW1lbnRhbC5pZGwsIGFuZCB0aHVzCi0g
ICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBDUFBU
ZXN0U3VwcGxlbWVudGFsLmggYW5kCi0gICAgQ1BQVGVzdFN1cHBsZW1lbnRhbC5jcHAgYXQgZXZl
cnkgYnVpbGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0byBjb21waWxlLgotKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9N
RmxvYXQ2NEFycmF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9D
UFAvV2ViRE9NRmxvYXQ2NEFycmF5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZGQ3NjVkYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvQ1BQL1dlYkRPTUZsb2F0NjRBcnJheS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCww
IEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgotICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldl
YkRPTUZsb2F0NjRBcnJheS5oIgotCi0jaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCi0jaW5jbHVk
ZSAiRmxvYXQ2NEFycmF5LmgiCi0jaW5jbHVkZSAiSW50MzJBcnJheS5oIgotI2luY2x1ZGUgIldl
YkRPTUZsb2F0MzJBcnJheS5oIgotI2luY2x1ZGUgIldlYkRPTUludDMyQXJyYXkuaCIKLSNpbmNs
dWRlICJXZWJFeGNlcHRpb25IYW5kbGVyLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotV2ViRE9NRmxvYXQ2NEFycmF5OjpXZWJET01GbG9hdDY0
QXJyYXkoKQotICAgIDogV2ViRE9NQXJyYXlCdWZmZXJWaWV3KCkKLXsKLX0KLQotV2ViRE9NRmxv
YXQ2NEFycmF5OjpXZWJET01GbG9hdDY0QXJyYXkoV1RGOjpGbG9hdDY0QXJyYXkqIGltcGwpCi0g
ICAgOiBXZWJET01BcnJheUJ1ZmZlclZpZXcoaW1wbCkKLXsKLX0KLQotV1RGOjpGbG9hdDY0QXJy
YXkqIFdlYkRPTUZsb2F0NjRBcnJheTo6aW1wbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdURjo6RmxvYXQ2NEFycmF5Kj4oV2ViRE9NQXJyYXlCdWZmZXJWaWV3OjppbXBsKCkp
OwotfQotCi1XZWJET01JbnQzMkFycmF5IFdlYkRPTUZsb2F0NjRBcnJheTo6Zm9vKGNvbnN0IFdl
YkRPTUZsb2F0MzJBcnJheSYgYXJyYXkpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJl
dHVybiBXZWJET01JbnQzMkFycmF5KCk7Ci0KLSAgICByZXR1cm4gdG9XZWJLaXQoV1RGOjpnZXRQ
dHIoaW1wbCgpLT5mb28odG9XZWJDb3JlKGFycmF5KSkpKTsKLX0KLQotV1RGOjpGbG9hdDY0QXJy
YXkqIHRvV2ViQ29yZShjb25zdCBXZWJET01GbG9hdDY0QXJyYXkmIHdyYXBwZXIpCi17Ci0gICAg
cmV0dXJuIHdyYXBwZXIuaW1wbCgpOwotfQotCi1XZWJET01GbG9hdDY0QXJyYXkgdG9XZWJLaXQo
V1RGOjpGbG9hdDY0QXJyYXkqIHZhbHVlKQotewotICAgIHJldHVybiBXZWJET01GbG9hdDY0QXJy
YXkodmFsdWUpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0NQUC9XZWJET01GbG9hdDY0QXJyYXkuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NRmxvYXQ2NEFycmF5LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDMwNGVlNjguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01GbG9hdDY0QXJyYXkuaAorKysgL2Rldi9udWxsCkBA
IC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21h
aWwuY29tPgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYkRPTUZsb2F0NjRBcnJheV9oCi0jZGVm
aW5lIFdlYkRPTUZsb2F0NjRBcnJheV9oCi0KLSNpbmNsdWRlIDxXZWJET01BcnJheUJ1ZmZlclZp
ZXcuaD4KLSNpbmNsdWRlIDxXZWJET01TdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFz
cyBGbG9hdDY0QXJyYXk7Ci19OwotCi1jbGFzcyBXZWJET01GbG9hdDMyQXJyYXk7Ci1jbGFzcyBX
ZWJET01JbnQzMkFycmF5OwotCi1jbGFzcyBXZWJET01GbG9hdDY0QXJyYXkgOiBwdWJsaWMgV2Vi
RE9NQXJyYXlCdWZmZXJWaWV3IHsKLXB1YmxpYzoKLSAgICBXZWJET01GbG9hdDY0QXJyYXkoKTsK
LSAgICBleHBsaWNpdCBXZWJET01GbG9hdDY0QXJyYXkoV1RGOjpGbG9hdDY0QXJyYXkqKTsKLSAg
ICB2aXJ0dWFsIH5XZWJET01GbG9hdDY0QXJyYXkoKSB7IH0KLQotICAgIFdlYkRPTUludDMyQXJy
YXkgZm9vKGNvbnN0IFdlYkRPTUZsb2F0MzJBcnJheSYgYXJyYXkpOwotCi0gICAgV1RGOjpGbG9h
dDY0QXJyYXkqIGltcGwoKSBjb25zdDsKLX07Ci0KLVdURjo6RmxvYXQ2NEFycmF5KiB0b1dlYkNv
cmUoY29uc3QgV2ViRE9NRmxvYXQ2NEFycmF5Jik7Ci1XZWJET01GbG9hdDY0QXJyYXkgdG9XZWJL
aXQoV1RGOjpGbG9hdDY0QXJyYXkqKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RBY3RpdmVET01PYmplY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0
QWN0aXZlRE9NT2JqZWN0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNhYTlj
Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQ
L1dlYkRPTVRlc3RBY3RpdmVET01PYmplY3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTExICsw
LDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCi0gKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
V2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdC5oIgotCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1
ZGUgIlRlc3RBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJX
ZWJET01Ob2RlLmgiCi0jaW5jbHVkZSAiV2ViRE9NU3RyaW5nLmgiCi0jaW5jbHVkZSAiV2ViRXhj
ZXB0aW9uSGFuZGxlci5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0KLXN0cnVjdCBX
ZWJET01UZXN0QWN0aXZlRE9NT2JqZWN0OjpXZWJET01UZXN0QWN0aXZlRE9NT2JqZWN0UHJpdmF0
ZSB7Ci0gICAgV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGUoV2ViQ29yZTo6VGVzdEFj
dGl2ZURPTU9iamVjdCogb2JqZWN0ID0gMCkKLSAgICAgICAgOiBpbXBsKG9iamVjdCkKLSAgICB7
Ci0gICAgfQotCi0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3Q+IGltcGw7
Ci19OwotCi1XZWJET01UZXN0QWN0aXZlRE9NT2JqZWN0OjpXZWJET01UZXN0QWN0aXZlRE9NT2Jq
ZWN0KCkKLSAgICA6IFdlYkRPTU9iamVjdCgpCi0gICAgLCBtX2ltcGwoMCkKLXsKLX0KLQotV2Vi
RE9NVGVzdEFjdGl2ZURPTU9iamVjdDo6V2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdChXZWJDb3Jl
OjpUZXN0QWN0aXZlRE9NT2JqZWN0KiBpbXBsKQotICAgIDogV2ViRE9NT2JqZWN0KCkKLSAgICAs
IG1faW1wbChuZXcgV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGUoaW1wbCkpCi17Ci19
Ci0KLVdlYkRPTVRlc3RBY3RpdmVET01PYmplY3Q6OldlYkRPTVRlc3RBY3RpdmVET01PYmplY3Qo
Y29uc3QgV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdCYgY29weSkKLSAgICA6IFdlYkRPTU9iamVj
dCgpCi17Ci0gICAgbV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdEFjdGl2ZURP
TU9iamVjdFByaXZhdGUoY29weS5pbXBsKCkpIDogMDsKLX0KLQotV2ViRE9NVGVzdEFjdGl2ZURP
TU9iamVjdCYgV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdDo6b3BlcmF0b3I9KGNvbnN0IFdlYkRP
TVRlc3RBY3RpdmVET01PYmplY3QmIGNvcHkpCi17Ci0gICAgZGVsZXRlIG1faW1wbDsKLSAgICBt
X2ltcGwgPSBjb3B5LmltcGwoKSA/IG5ldyBXZWJET01UZXN0QWN0aXZlRE9NT2JqZWN0UHJpdmF0
ZShjb3B5LmltcGwoKSkgOiAwOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotV2ViQ29yZTo6VGVz
dEFjdGl2ZURPTU9iamVjdCogV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdDo6aW1wbCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1faW1wbCA/IFdURjo6Z2V0UHRyKG1faW1wbC0+aW1wbCkgOiAwOwot
fQotCi1XZWJET01UZXN0QWN0aXZlRE9NT2JqZWN0Ojp+V2ViRE9NVGVzdEFjdGl2ZURPTU9iamVj
dCgpCi17Ci0gICAgZGVsZXRlIG1faW1wbDsKLSAgICBtX2ltcGwgPSAwOwotfQotCi1pbnQgV2Vi
RE9NVGVzdEFjdGl2ZURPTU9iamVjdDo6ZXhjaXRpbmdBdHRyKCkgY29uc3QKLXsKLSAgICBpZiAo
IWltcGwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gaW1wbCgpLT5leGNpdGlu
Z0F0dHIoKTsKLX0KLQotdm9pZCBXZWJET01UZXN0QWN0aXZlRE9NT2JqZWN0OjpleGNpdGluZ0Z1
bmN0aW9uKGNvbnN0IFdlYkRPTU5vZGUmIG5leHRDaGlsZCkKLXsKLSAgICBpZiAoIWltcGwoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5leGNpdGluZ0Z1bmN0aW9uKHRvV2ViQ29y
ZShuZXh0Q2hpbGQpKTsKLX0KLQotdm9pZCBXZWJET01UZXN0QWN0aXZlRE9NT2JqZWN0Ojpwb3N0
TWVzc2FnZShjb25zdCBXZWJET01TdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKCFpbXBsKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+cG9zdE1lc3NhZ2UobWVzc2FnZSk7Ci19
Ci0KLVdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3QqIHRvV2ViQ29yZShjb25zdCBXZWJET01U
ZXN0QWN0aXZlRE9NT2JqZWN0JiB3cmFwcGVyKQotewotICAgIHJldHVybiB3cmFwcGVyLmltcGwo
KTsKLX0KLQotV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdCB0b1dlYktpdChXZWJDb3JlOjpUZXN0
QWN0aXZlRE9NT2JqZWN0KiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gV2ViRE9NVGVzdEFjdGl2ZURP
TU9iamVjdCh2YWx1ZSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RBY3RpdmVET01PYmplY3QuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmQxNGRmLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEFjdGl2ZURP
TU9iamVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2Ft
dWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYg
V2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdF9oCi0jZGVmaW5lIFdlYkRPTVRlc3RBY3RpdmVET01P
YmplY3RfaAotCi0jaW5jbHVkZSA8V2ViRE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViRE9NU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFRlc3RBY3RpdmVET01PYmplY3Q7
Ci19OwotCi1jbGFzcyBXZWJET01Ob2RlOwotCi1jbGFzcyBXZWJET01UZXN0QWN0aXZlRE9NT2Jq
ZWN0IDogcHVibGljIFdlYkRPTU9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgV2ViRE9NVGVzdEFjdGl2
ZURPTU9iamVjdCgpOwotICAgIGV4cGxpY2l0IFdlYkRPTVRlc3RBY3RpdmVET01PYmplY3QoV2Vi
Q29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCopOwotICAgIFdlYkRPTVRlc3RBY3RpdmVET01PYmpl
Y3QoY29uc3QgV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdCYpOwotICAgIFdlYkRPTVRlc3RBY3Rp
dmVET01PYmplY3QmIG9wZXJhdG9yPShjb25zdCBXZWJET01UZXN0QWN0aXZlRE9NT2JqZWN0Jik7
Ci0gICAgdmlydHVhbCB+V2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdCgpOwotCi0gICAgaW50IGV4
Y2l0aW5nQXR0cigpIGNvbnN0OwotCi0gICAgdm9pZCBleGNpdGluZ0Z1bmN0aW9uKGNvbnN0IFdl
YkRPTU5vZGUmIG5leHRDaGlsZCk7Ci0gICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBXZWJET01T
dHJpbmcmIG1lc3NhZ2UpOwotCi0gICAgV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCogaW1w
bCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgc3RydWN0IFdlYkRPTVRlc3RBY3RpdmVET01P
YmplY3RQcml2YXRlOwotICAgIFdlYkRPTVRlc3RBY3RpdmVET01PYmplY3RQcml2YXRlKiBtX2lt
cGw7Ci19OwotCi1XZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0KiB0b1dlYkNvcmUoY29uc3Qg
V2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdCYpOwotV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdCB0
b1dlYktpdChXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0Kik7Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0
Q2FsbGJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9X
ZWJET01UZXN0Q2FsbGJhY2suY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGJh
N2Y3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9D
UFAvV2ViRE9NVGVzdENhbGxiYWNrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBA
Ci0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgotICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIldlYkRPTVRlc3RDYWxsYmFjay5oIgotCi0jaW5jbHVk
ZSAiRE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgotI2luY2x1ZGUg
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIlRlc3RDYWxsYmFjay5oIgotI2lu
Y2x1ZGUgIlRlc3ROb2RlLmgiCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSAiV2ViRE9NRE9N
U3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIldlYkRPTUZsb2F0MzJBcnJheS5oIgotI2luY2x1ZGUg
IldlYkRPTVN0cmluZy5oIgotI2luY2x1ZGUgIldlYkRPTVRlc3ROb2RlLmgiCi0jaW5jbHVkZSAi
V2ViRXhjZXB0aW9uSGFuZGxlci5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0KLXN0
cnVjdCBXZWJET01UZXN0Q2FsbGJhY2s6OldlYkRPTVRlc3RDYWxsYmFja1ByaXZhdGUgewotICAg
IFdlYkRPTVRlc3RDYWxsYmFja1ByaXZhdGUoV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBvYmplY3Qg
PSAwKQotICAgICAgICA6IGltcGwob2JqZWN0KQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
V2ViQ29yZTo6VGVzdENhbGxiYWNrPiBpbXBsOwotfTsKLQotV2ViRE9NVGVzdENhbGxiYWNrOjpX
ZWJET01UZXN0Q2FsbGJhY2soKQotICAgIDogV2ViRE9NT2JqZWN0KCkKLSAgICAsIG1faW1wbCgw
KQotewotfQotCi1XZWJET01UZXN0Q2FsbGJhY2s6OldlYkRPTVRlc3RDYWxsYmFjayhXZWJDb3Jl
OjpUZXN0Q2FsbGJhY2sqIGltcGwpCi0gICAgOiBXZWJET01PYmplY3QoKQotICAgICwgbV9pbXBs
KG5ldyBXZWJET01UZXN0Q2FsbGJhY2tQcml2YXRlKGltcGwpKQotewotfQotCi1XZWJET01UZXN0
Q2FsbGJhY2s6OldlYkRPTVRlc3RDYWxsYmFjayhjb25zdCBXZWJET01UZXN0Q2FsbGJhY2smIGNv
cHkpCi0gICAgOiBXZWJET01PYmplY3QoKQotewotICAgIG1faW1wbCA9IGNvcHkuaW1wbCgpID8g
bmV3IFdlYkRPTVRlc3RDYWxsYmFja1ByaXZhdGUoY29weS5pbXBsKCkpIDogMDsKLX0KLQotV2Vi
RE9NVGVzdENhbGxiYWNrJiBXZWJET01UZXN0Q2FsbGJhY2s6Om9wZXJhdG9yPShjb25zdCBXZWJE
T01UZXN0Q2FsbGJhY2smIGNvcHkpCi17Ci0gICAgZGVsZXRlIG1faW1wbDsKLSAgICBtX2ltcGwg
PSBjb3B5LmltcGwoKSA/IG5ldyBXZWJET01UZXN0Q2FsbGJhY2tQcml2YXRlKGNvcHkuaW1wbCgp
KSA6IDA7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1XZWJDb3JlOjpUZXN0Q2FsbGJhY2sqIFdl
YkRPTVRlc3RDYWxsYmFjazo6aW1wbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbCA/IFdU
Rjo6Z2V0UHRyKG1faW1wbC0+aW1wbCkgOiAwOwotfQotCi1XZWJET01UZXN0Q2FsbGJhY2s6On5X
ZWJET01UZXN0Q2FsbGJhY2soKQotewotICAgIGRlbGV0ZSBtX2ltcGw7Ci0gICAgbV9pbXBsID0g
MDsKLX0KLQotYm9vbCBXZWJET01UZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aE5vUGFyYW0oKQot
ewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
aW1wbCgpLT5jYWxsYmFja1dpdGhOb1BhcmFtKCk7Ci19Ci0KLWJvb2wgV2ViRE9NVGVzdENhbGxi
YWNrOjpjYWxsYmFja1dpdGhBcnJheVBhcmFtKGNvbnN0IFdlYkRPTUZsb2F0MzJBcnJheSYgYXJy
YXlQYXJhbSkKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIGltcGwoKS0+Y2FsbGJhY2tXaXRoQXJyYXlQYXJhbSh0b1dlYkNvcmUoYXJyYXlQ
YXJhbSkpOwotfQotCi1ib29sIFdlYkRPTVRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoU2VyaWFs
aXplZFNjcmlwdFZhbHVlUGFyYW0oY29uc3QgV2ViRE9NU3RyaW5nJiBzcnpQYXJhbSwgY29uc3Qg
V2ViRE9NU3RyaW5nJiBzdHJBcmcpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJldHVybiBpbXBsKCktPmNhbGxiYWNrV2l0aFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZVBhcmFtKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdURjo6
U3RyaW5nKHNyelBhcmFtKSksIHN0ckFyZyk7Ci19Ci0KLWludCBXZWJET01UZXN0Q2FsbGJhY2s6
OmNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBlKGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJn
KQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBp
bXBsKCktPmNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBlKHN0ckFyZyk7Ci19Ci0KLWJvb2wg
V2ViRE9NVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhTdHJpbmdMaXN0KGNvbnN0IFdlYkRPTURP
TVN0cmluZ0xpc3QmIGxpc3RQYXJhbSkKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGltcGwoKS0+Y2FsbGJhY2tXaXRoU3RyaW5nTGlzdCh0
b1dlYkNvcmUobGlzdFBhcmFtKSk7Ci19Ci0KLWJvb2wgV2ViRE9NVGVzdENhbGxiYWNrOjpjYWxs
YmFja1dpdGhCb29sZWFuKGJvb2wgYm9vbFBhcmFtKQotewotICAgIGlmICghaW1wbCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gaW1wbCgpLT5jYWxsYmFja1dpdGhCb29s
ZWFuKGJvb2xQYXJhbSk7Ci19Ci0KLWJvb2wgV2ViRE9NVGVzdENhbGxiYWNrOjpjYWxsYmFja1Jl
cXVpcmVzVGhpc1RvUGFzcyhpbnQgbG9uZ1BhcmFtLCBjb25zdCBXZWJET01UZXN0Tm9kZSYgdGVz
dE5vZGVQYXJhbSkKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIGltcGwoKS0+Y2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MobG9uZ1BhcmFt
LCB0b1dlYkNvcmUodGVzdE5vZGVQYXJhbSkpOwotfQotCi1XZWJDb3JlOjpUZXN0Q2FsbGJhY2sq
IHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0Q2FsbGJhY2smIHdyYXBwZXIpCi17Ci0gICAgcmV0
dXJuIHdyYXBwZXIuaW1wbCgpOwotfQotCi1XZWJET01UZXN0Q2FsbGJhY2sgdG9XZWJLaXQoV2Vi
Q29yZTo6VGVzdENhbGxiYWNrKiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gV2ViRE9NVGVzdENhbGxi
YWNrKHZhbHVlKTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RD
YWxsYmFjay5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJE
T01UZXN0Q2FsbGJhY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI4ZGMyMS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RDYWxsYmFjay5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpZm5kZWYgV2ViRE9NVGVzdENhbGxiYWNrX2gKLSNkZWZpbmUgV2ViRE9NVGVzdENhbGxiYWNr
X2gKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlIDxXZWJET01PYmplY3Qu
aD4KLSNpbmNsdWRlIDxXZWJET01TdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xh
c3MgVGVzdENhbGxiYWNrOwotfTsKLQotY2xhc3MgV2ViRE9NRE9NU3RyaW5nTGlzdDsKLWNsYXNz
IFdlYkRPTUZsb2F0MzJBcnJheTsKLWNsYXNzIFdlYkRPTVN0cmluZzsKLWNsYXNzIFdlYkRPTVRl
c3ROb2RlOwotCi1jbGFzcyBXZWJET01UZXN0Q2FsbGJhY2sgOiBwdWJsaWMgV2ViRE9NT2JqZWN0
IHsKLXB1YmxpYzoKLSAgICBXZWJET01UZXN0Q2FsbGJhY2soKTsKLSAgICBleHBsaWNpdCBXZWJE
T01UZXN0Q2FsbGJhY2soV2ViQ29yZTo6VGVzdENhbGxiYWNrKik7Ci0gICAgV2ViRE9NVGVzdENh
bGxiYWNrKGNvbnN0IFdlYkRPTVRlc3RDYWxsYmFjayYpOwotICAgIFdlYkRPTVRlc3RDYWxsYmFj
ayYgb3BlcmF0b3I9KGNvbnN0IFdlYkRPTVRlc3RDYWxsYmFjayYpOwotICAgIHZpcnR1YWwgfldl
YkRPTVRlc3RDYWxsYmFjaygpOwotCi0gICAgYm9vbCBjYWxsYmFja1dpdGhOb1BhcmFtKCk7Ci0g
ICAgYm9vbCBjYWxsYmFja1dpdGhBcnJheVBhcmFtKGNvbnN0IFdlYkRPTUZsb2F0MzJBcnJheSYg
YXJyYXlQYXJhbSk7Ci0gICAgYm9vbCBjYWxsYmFja1dpdGhTZXJpYWxpemVkU2NyaXB0VmFsdWVQ
YXJhbShjb25zdCBXZWJET01TdHJpbmcmIHNyelBhcmFtLCBjb25zdCBXZWJET01TdHJpbmcmIHN0
ckFyZyk7Ci0gICAgaW50IGNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBlKGNvbnN0IFdlYkRP
TVN0cmluZyYgc3RyQXJnKTsKLSAgICBib29sIGNhbGxiYWNrV2l0aFN0cmluZ0xpc3QoY29uc3Qg
V2ViRE9NRE9NU3RyaW5nTGlzdCYgbGlzdFBhcmFtKTsKLSAgICBib29sIGNhbGxiYWNrV2l0aEJv
b2xlYW4oYm9vbCBib29sUGFyYW0pOwotICAgIGJvb2wgY2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bh
c3MoaW50IGxvbmdQYXJhbSwgY29uc3QgV2ViRE9NVGVzdE5vZGUmIHRlc3ROb2RlUGFyYW0pOwot
Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBpbXBsKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoK
LSAgICBzdHJ1Y3QgV2ViRE9NVGVzdENhbGxiYWNrUHJpdmF0ZTsKLSAgICBXZWJET01UZXN0Q2Fs
bGJhY2tQcml2YXRlKiBtX2ltcGw7Ci19OwotCi1XZWJDb3JlOjpUZXN0Q2FsbGJhY2sqIHRvV2Vi
Q29yZShjb25zdCBXZWJET01UZXN0Q2FsbGJhY2smKTsKLVdlYkRPTVRlc3RDYWxsYmFjayB0b1dl
YktpdChXZWJDb3JlOjpUZXN0Q2FsbGJhY2sqKTsKLQotI2VuZGlmCi0jZW5kaWYgLy8gRU5BQkxF
KFNRTF9EQVRBQkFTRSkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0NQUC9XZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzBkZmVhLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEN1
c3RvbU5hbWVkR2V0dGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0g
KiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0g
KiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViRE9NVGVzdEN1
c3RvbU5hbWVkR2V0dGVyLmgiCi0KLSNpbmNsdWRlICJUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaCIK
LSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJXZWJET01TdHJpbmcuaCIKLSNpbmNsdWRlICJX
ZWJFeGNlcHRpb25IYW5kbGVyLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLQotc3Ry
dWN0IFdlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlcjo6V2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0
dGVyUHJpdmF0ZSB7Ci0gICAgV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJpdmF0ZShXZWJD
b3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIG9iamVjdCA9IDApCi0gICAgICAgIDogaW1wbChv
YmplY3QpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXI+IGltcGw7Ci19OwotCi1XZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OldlYkRP
TVRlc3RDdXN0b21OYW1lZEdldHRlcigpCi0gICAgOiBXZWJET01PYmplY3QoKQotICAgICwgbV9p
bXBsKDApCi17Ci19Ci0KLVdlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlcjo6V2ViRE9NVGVzdEN1
c3RvbU5hbWVkR2V0dGVyKFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRlciogaW1wbCkKLSAg
ICA6IFdlYkRPTU9iamVjdCgpCi0gICAgLCBtX2ltcGwobmV3IFdlYkRPTVRlc3RDdXN0b21OYW1l
ZEdldHRlclByaXZhdGUoaW1wbCkpCi17Ci19Ci0KLVdlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRl
cjo6V2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyKGNvbnN0IFdlYkRPTVRlc3RDdXN0b21OYW1l
ZEdldHRlciYgY29weSkKLSAgICA6IFdlYkRPTU9iamVjdCgpCi17Ci0gICAgbV9pbXBsID0gY29w
eS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJpdmF0ZShjb3B5Lmlt
cGwoKSkgOiAwOwotfQotCi1XZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXImIFdlYkRPTVRlc3RD
dXN0b21OYW1lZEdldHRlcjo6b3BlcmF0b3I9KGNvbnN0IFdlYkRPTVRlc3RDdXN0b21OYW1lZEdl
dHRlciYgY29weSkKLXsKLSAgICBkZWxldGUgbV9pbXBsOwotICAgIG1faW1wbCA9IGNvcHkuaW1w
bCgpID8gbmV3IFdlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlclByaXZhdGUoY29weS5pbXBsKCkp
IDogMDsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdl
dHRlciogV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjppbXBsKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9pbXBsID8gV1RGOjpnZXRQdHIobV9pbXBsLT5pbXBsKSA6IDA7Ci19Ci0KLVdlYkRP
TVRlc3RDdXN0b21OYW1lZEdldHRlcjo6fldlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlcigpCi17
Ci0gICAgZGVsZXRlIG1faW1wbDsKLSAgICBtX2ltcGwgPSAwOwotfQotCi12b2lkIFdlYkRPTVRl
c3RDdXN0b21OYW1lZEdldHRlcjo6YW5vdGhlckZ1bmN0aW9uKGNvbnN0IFdlYkRPTVN0cmluZyYg
c3RyKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCkt
PmFub3RoZXJGdW5jdGlvbihzdHIpOwotfQotCi1XZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIqIHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXImIHdyYXBwZXIp
Ci17Ci0gICAgcmV0dXJuIHdyYXBwZXIuaW1wbCgpOwotfQotCi1XZWJET01UZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIgdG9XZWJLaXQoV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyKiB2YWx1ZSkK
LXsKLSAgICByZXR1cm4gV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyKHZhbHVlKTsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9N
VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvQ1BQL1dlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmMWEyZDY4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0u
d2VpbmlnQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJET01UZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJfaAotI2RlZmluZSBXZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJfaAotCi0j
aW5jbHVkZSA8V2ViRE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViRE9NU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFRlc3RDdXN0b21OYW1lZEdldHRlcjsKLX07Ci0KLQot
Y2xhc3MgV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyIDogcHVibGljIFdlYkRPTU9iamVjdCB7
Ci1wdWJsaWM6Ci0gICAgV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyKCk7Ci0gICAgZXhwbGlj
aXQgV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyKFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdl
dHRlciopOwotICAgIFdlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlcihjb25zdCBXZWJET01UZXN0
Q3VzdG9tTmFtZWRHZXR0ZXImKTsKLSAgICBXZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXImIG9w
ZXJhdG9yPShjb25zdCBXZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXImKTsKLSAgICB2aXJ0dWFs
IH5XZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIoKTsKLQotICAgIHZvaWQgYW5vdGhlckZ1bmN0
aW9uKGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyKTsKLQotICAgIFdlYkNvcmU6OlRlc3RDdXN0b21O
YW1lZEdldHRlciogaW1wbCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgc3RydWN0IFdlYkRP
TVRlc3RDdXN0b21OYW1lZEdldHRlclByaXZhdGU7Ci0gICAgV2ViRE9NVGVzdEN1c3RvbU5hbWVk
R2V0dGVyUHJpdmF0ZSogbV9pbXBsOwotfTsKLQotV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0
dGVyKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyJik7Ci1XZWJE
T01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIgdG9XZWJLaXQoV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVk
R2V0dGVyKik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RFdmVudENvbnN0cnVj
dG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNhM2FjOC4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RF
dmVudENvbnN0cnVjdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgot
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgot
ICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkRPTVRlc3RF
dmVudENvbnN0cnVjdG9yLmgiCi0KLSNpbmNsdWRlICJUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgot
I2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgIldlYkRPTVN0cmluZy5oIgotI2luY2x1ZGUgIldl
YkV4Y2VwdGlvbkhhbmRsZXIuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotCi1zdHJ1
Y3QgV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3I6OldlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9y
UHJpdmF0ZSB7Ci0gICAgV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlKFdlYkNvcmU6
OlRlc3RFdmVudENvbnN0cnVjdG9yKiBvYmplY3QgPSAwKQotICAgICAgICA6IGltcGwob2JqZWN0
KQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0
b3I+IGltcGw7Ci19OwotCi1XZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6V2ViRE9NVGVzdEV2
ZW50Q29uc3RydWN0b3IoKQotICAgIDogV2ViRE9NT2JqZWN0KCkKLSAgICAsIG1faW1wbCgwKQot
ewotfQotCi1XZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6V2ViRE9NVGVzdEV2ZW50Q29uc3Ry
dWN0b3IoV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqIGltcGwpCi0gICAgOiBXZWJET01P
YmplY3QoKQotICAgICwgbV9pbXBsKG5ldyBXZWJET01UZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZh
dGUoaW1wbCkpCi17Ci19Ci0KLVdlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yOjpXZWJET01UZXN0
RXZlbnRDb25zdHJ1Y3Rvcihjb25zdCBXZWJET01UZXN0RXZlbnRDb25zdHJ1Y3RvciYgY29weSkK
LSAgICA6IFdlYkRPTU9iamVjdCgpCi17Ci0gICAgbV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcg
V2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlKGNvcHkuaW1wbCgpKSA6IDA7Ci19Ci0K
LVdlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yJiBXZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6
b3BlcmF0b3I9KGNvbnN0IFdlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yJiBjb3B5KQotewotICAg
IGRlbGV0ZSBtX2ltcGw7Ci0gICAgbV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVz
dEV2ZW50Q29uc3RydWN0b3JQcml2YXRlKGNvcHkuaW1wbCgpKSA6IDA7Ci0gICAgcmV0dXJuICp0
aGlzOwotfQotCi1XZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3RvciogV2ViRE9NVGVzdEV2ZW50
Q29uc3RydWN0b3I6OmltcGwoKSBjb25zdAotewotICAgIHJldHVybiBtX2ltcGwgPyBXVEY6Omdl
dFB0cihtX2ltcGwtPmltcGwpIDogMDsKLX0KLQotV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3I6
On5XZWJET01UZXN0RXZlbnRDb25zdHJ1Y3RvcigpCi17Ci0gICAgZGVsZXRlIG1faW1wbDsKLSAg
ICBtX2ltcGwgPSAwOwotfQotCi1XZWJET01TdHJpbmcgV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0
b3I6OmF0dHIxKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIFdl
YkRPTVN0cmluZygpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdURjo6U3RyaW5n
Jj4oaW1wbCgpLT5hdHRyMSgpKTsKLX0KLQotV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RFdmVudENv
bnN0cnVjdG9yOjphdHRyMigpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJl
dHVybiBXZWJET01TdHJpbmcoKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXVEY6
OlN0cmluZyY+KGltcGwoKS0+YXR0cjIoKSk7Ci19Ci0KLVdlYkNvcmU6OlRlc3RFdmVudENvbnN0
cnVjdG9yKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3ImIHdyYXBw
ZXIpCi17Ci0gICAgcmV0dXJuIHdyYXBwZXIuaW1wbCgpOwotfQotCi1XZWJET01UZXN0RXZlbnRD
b25zdHJ1Y3RvciB0b1dlYktpdChXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3RvciogdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIFdlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yKHZhbHVlKTsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9N
VGVzdEV2ZW50Q29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9DUFAvV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZThjNDkyOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2Vp
bmlnQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJET01UZXN0RXZlbnRDb25z
dHJ1Y3Rvcl9oCi0jZGVmaW5lIFdlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yX2gKLQotI2luY2x1
ZGUgPFdlYkRPTU9iamVjdC5oPgotI2luY2x1ZGUgPFdlYkRPTVN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci1jbGFzcyBUZXN0RXZlbnRDb25zdHJ1Y3RvcjsKLX07Ci0KLQotY2xhc3Mg
V2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IgOiBwdWJsaWMgV2ViRE9NT2JqZWN0IHsKLXB1Ymxp
YzoKLSAgICBXZWJET01UZXN0RXZlbnRDb25zdHJ1Y3RvcigpOwotICAgIGV4cGxpY2l0IFdlYkRP
TVRlc3RFdmVudENvbnN0cnVjdG9yKFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKik7Ci0g
ICAgV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IoY29uc3QgV2ViRE9NVGVzdEV2ZW50Q29uc3Ry
dWN0b3ImKTsKLSAgICBXZWJET01UZXN0RXZlbnRDb25zdHJ1Y3RvciYgb3BlcmF0b3I9KGNvbnN0
IFdlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yJik7Ci0gICAgdmlydHVhbCB+V2ViRE9NVGVzdEV2
ZW50Q29uc3RydWN0b3IoKTsKLQotICAgIFdlYkRPTVN0cmluZyBhdHRyMSgpIGNvbnN0OwotICAg
IFdlYkRPTVN0cmluZyBhdHRyMigpIGNvbnN0OwotCi0gICAgV2ViQ29yZTo6VGVzdEV2ZW50Q29u
c3RydWN0b3IqIGltcGwoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIHN0cnVjdCBXZWJET01U
ZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZhdGU7Ci0gICAgV2ViRE9NVGVzdEV2ZW50Q29uc3RydWN0
b3JQcml2YXRlKiBtX2ltcGw7Ci19OwotCi1XZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3Rvciog
dG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RFdmVudENvbnN0cnVjdG9yJik7Ci1XZWJET01UZXN0
RXZlbnRDb25zdHJ1Y3RvciB0b1dlYktpdChXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3Rvciop
OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9DUFAvV2ViRE9NVGVzdEV2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEV2ZW50VGFyZ2V0LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYWM5ZDZjYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RFdmVudFRhcmdldC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkRPTVRlc3RFdmVudFRhcmdldC5oIgotCi0jaW5jbHVk
ZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSAiVGVzdEV2ZW50VGFyZ2V0
LmgiCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSAiV2ViRE9NRXZlbnQuaCIKLSNpbmNsdWRl
ICJXZWJET01Ob2RlLmgiCi0jaW5jbHVkZSAiV2ViRE9NU3RyaW5nLmgiCi0jaW5jbHVkZSAiV2Vi
RXhjZXB0aW9uSGFuZGxlci5oIgotI2luY2x1ZGUgIldlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaCIK
LSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotCi1XZWJET01UZXN0RXZlbnRUYXJnZXQ6Oldl
YkRPTVRlc3RFdmVudFRhcmdldCgpCi0gICAgOiBXZWJET01FdmVudFRhcmdldCgpCi17Ci19Ci0K
LVdlYkRPTVRlc3RFdmVudFRhcmdldDo6V2ViRE9NVGVzdEV2ZW50VGFyZ2V0KFdlYkNvcmU6OlRl
c3RFdmVudFRhcmdldCogaW1wbCkKLSAgICA6IFdlYkRPTUV2ZW50VGFyZ2V0KGltcGwpCi17Ci19
Ci0KLVdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCogV2ViRE9NVGVzdEV2ZW50VGFyZ2V0OjppbXBs
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEV2ZW50VGFy
Z2V0Kj4oV2ViRE9NRXZlbnRUYXJnZXQ6OmltcGwoKSk7Ci19Ci0KLVdlYkRPTU5vZGUgV2ViRE9N
VGVzdEV2ZW50VGFyZ2V0OjppdGVtKHVuc2lnbmVkIGluZGV4KQotewotICAgIGlmICghaW1wbCgp
KQotICAgICAgICByZXR1cm4gV2ViRE9NTm9kZSgpOwotCi0gICAgcmV0dXJuIHRvV2ViS2l0KFdU
Rjo6Z2V0UHRyKGltcGwoKS0+aXRlbShpbmRleCkpKTsKLX0KLQotdm9pZCBXZWJET01UZXN0RXZl
bnRUYXJnZXQ6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgV2ViRE9NU3RyaW5nJiB0eXBlLCBjb25z
dCBXZWJET01FdmVudExpc3RlbmVyJiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQotewotICAg
IGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCktPmFkZEV2ZW50TGlz
dGVuZXIodHlwZSwgdG9XZWJDb3JlKGxpc3RlbmVyKSwgdXNlQ2FwdHVyZSk7Ci19Ci0KLXZvaWQg
V2ViRE9NVGVzdEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IFdlYkRPTVN0
cmluZyYgdHlwZSwgY29uc3QgV2ViRE9NRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgdXNl
Q2FwdHVyZSkKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1w
bCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHRvV2ViQ29yZShsaXN0ZW5lciksIHVzZUNh
cHR1cmUpOwotfQotCi1ib29sIFdlYkRPTVRlc3RFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChj
b25zdCBXZWJET01FdmVudCYgZXZ0KQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBib29s
IHJlc3VsdCA9IGltcGwoKS0+ZGlzcGF0Y2hFdmVudCh0b1dlYkNvcmUoZXZ0KSwgZWMpOwotICAg
IHdlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0aW9uQ29kZT4oZWMpKTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1XZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIHRvV2Vi
Q29yZShjb25zdCBXZWJET01UZXN0RXZlbnRUYXJnZXQmIHdyYXBwZXIpCi17Ci0gICAgcmV0dXJu
IHdyYXBwZXIuaW1wbCgpOwotfQotCi1XZWJET01UZXN0RXZlbnRUYXJnZXQgdG9XZWJLaXQoV2Vi
Q29yZTo6VGVzdEV2ZW50VGFyZ2V0KiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gV2ViRE9NVGVzdEV2
ZW50VGFyZ2V0KHZhbHVlKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEV2ZW50VGFyZ2V0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RFdmVudFRhcmdldC5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2E1MmRkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEV2ZW50VGFyZ2V0LmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2Vpbmln
IDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJET01UZXN0
RXZlbnRUYXJnZXRfaAotI2RlZmluZSBXZWJET01UZXN0RXZlbnRUYXJnZXRfaAotCi0jaW5jbHVk
ZSA8V2ViRE9NRXZlbnRUYXJnZXQuaD4KLSNpbmNsdWRlIDxXZWJET01TdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgVGVzdEV2ZW50VGFyZ2V0OwotfTsKLQotY2xhc3MgV2Vi
RE9NRXZlbnQ7Ci1jbGFzcyBXZWJET01FdmVudExpc3RlbmVyOwotY2xhc3MgV2ViRE9NTm9kZTsK
LQotY2xhc3MgV2ViRE9NVGVzdEV2ZW50VGFyZ2V0IDogcHVibGljIFdlYkRPTUV2ZW50VGFyZ2V0
IHsKLXB1YmxpYzoKLSAgICBXZWJET01UZXN0RXZlbnRUYXJnZXQoKTsKLSAgICBleHBsaWNpdCBX
ZWJET01UZXN0RXZlbnRUYXJnZXQoV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0Kik7Ci0gICAgdmly
dHVhbCB+V2ViRE9NVGVzdEV2ZW50VGFyZ2V0KCkgeyB9Ci0KLSAgICBXZWJET01Ob2RlIGl0ZW0o
dW5zaWduZWQgaW5kZXgpOwotICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJET01T
dHJpbmcmIHR5cGUsIGNvbnN0IFdlYkRPTUV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIHVz
ZUNhcHR1cmUpOwotICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJET01TdHJp
bmcmIHR5cGUsIGNvbnN0IFdlYkRPTUV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIHVzZUNh
cHR1cmUpOwotICAgIGJvb2wgZGlzcGF0Y2hFdmVudChjb25zdCBXZWJET01FdmVudCYgZXZ0KTsK
LQotICAgIFdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCogaW1wbCgpIGNvbnN0OwotfTsKLQotV2Vi
Q29yZTo6VGVzdEV2ZW50VGFyZ2V0KiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdEV2ZW50VGFy
Z2V0Jik7Ci1XZWJET01UZXN0RXZlbnRUYXJnZXQgdG9XZWJLaXQoV2ViQ29yZTo6VGVzdEV2ZW50
VGFyZ2V0Kik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEV4Y2VwdGlvbi5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhY2UwOTEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0RXhjZXB0aW9uLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViRE9NVGVzdEV4Y2VwdGlvbi5oIgotCi0jaW5jbHVk
ZSAiVGVzdEV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgIldlYkRPTVN0
cmluZy5oIgotI2luY2x1ZGUgIldlYkV4Y2VwdGlvbkhhbmRsZXIuaCIKLSNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZy5oPgotCi1zdHJ1Y3QgV2ViRE9NVGVzdEV4Y2VwdGlvbjo6V2ViRE9NVGVzdEV4
Y2VwdGlvblByaXZhdGUgewotICAgIFdlYkRPTVRlc3RFeGNlcHRpb25Qcml2YXRlKFdlYkNvcmU6
OlRlc3RFeGNlcHRpb24qIG9iamVjdCA9IDApCi0gICAgICAgIDogaW1wbChvYmplY3QpCi0gICAg
ewotICAgIH0KLQotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0RXhjZXB0aW9uPiBpbXBsOwotfTsK
LQotV2ViRE9NVGVzdEV4Y2VwdGlvbjo6V2ViRE9NVGVzdEV4Y2VwdGlvbigpCi0gICAgOiBXZWJE
T01PYmplY3QoKQotICAgICwgbV9pbXBsKDApCi17Ci19Ci0KLVdlYkRPTVRlc3RFeGNlcHRpb246
OldlYkRPTVRlc3RFeGNlcHRpb24oV2ViQ29yZTo6VGVzdEV4Y2VwdGlvbiogaW1wbCkKLSAgICA6
IFdlYkRPTU9iamVjdCgpCi0gICAgLCBtX2ltcGwobmV3IFdlYkRPTVRlc3RFeGNlcHRpb25Qcml2
YXRlKGltcGwpKQotewotfQotCi1XZWJET01UZXN0RXhjZXB0aW9uOjpXZWJET01UZXN0RXhjZXB0
aW9uKGNvbnN0IFdlYkRPTVRlc3RFeGNlcHRpb24mIGNvcHkpCi0gICAgOiBXZWJET01PYmplY3Qo
KQotewotICAgIG1faW1wbCA9IGNvcHkuaW1wbCgpID8gbmV3IFdlYkRPTVRlc3RFeGNlcHRpb25Q
cml2YXRlKGNvcHkuaW1wbCgpKSA6IDA7Ci19Ci0KLVdlYkRPTVRlc3RFeGNlcHRpb24mIFdlYkRP
TVRlc3RFeGNlcHRpb246Om9wZXJhdG9yPShjb25zdCBXZWJET01UZXN0RXhjZXB0aW9uJiBjb3B5
KQotewotICAgIGRlbGV0ZSBtX2ltcGw7Ci0gICAgbV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcg
V2ViRE9NVGVzdEV4Y2VwdGlvblByaXZhdGUoY29weS5pbXBsKCkpIDogMDsKLSAgICByZXR1cm4g
KnRoaXM7Ci19Ci0KLVdlYkNvcmU6OlRlc3RFeGNlcHRpb24qIFdlYkRPTVRlc3RFeGNlcHRpb246
OmltcGwoKSBjb25zdAotewotICAgIHJldHVybiBtX2ltcGwgPyBXVEY6OmdldFB0cihtX2ltcGwt
PmltcGwpIDogMDsKLX0KLQotV2ViRE9NVGVzdEV4Y2VwdGlvbjo6fldlYkRPTVRlc3RFeGNlcHRp
b24oKQotewotICAgIGRlbGV0ZSBtX2ltcGw7Ci0gICAgbV9pbXBsID0gMDsKLX0KLQotV2ViRE9N
U3RyaW5nIFdlYkRPTVRlc3RFeGNlcHRpb246Om5hbWUoKSBjb25zdAotewotICAgIGlmICghaW1w
bCgpKQotICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgV1RGOjpTdHJpbmcmPihpbXBsKCktPm5hbWUoKSk7Ci19Ci0KLVdlYkNvcmU6
OlRlc3RFeGNlcHRpb24qIHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0RXhjZXB0aW9uJiB3cmFw
cGVyKQotewotICAgIHJldHVybiB3cmFwcGVyLmltcGwoKTsKLX0KLQotV2ViRE9NVGVzdEV4Y2Vw
dGlvbiB0b1dlYktpdChXZWJDb3JlOjpUZXN0RXhjZXB0aW9uKiB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gV2ViRE9NVGVzdEV4Y2VwdGlvbih2YWx1ZSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RFeGNlcHRpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEV4Y2VwdGlv
bi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDk1YzY2Li4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEV4Y2Vw
dGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVs
IFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2Vi
RE9NVGVzdEV4Y2VwdGlvbl9oCi0jZGVmaW5lIFdlYkRPTVRlc3RFeGNlcHRpb25faAotCi0jaW5j
bHVkZSA8V2ViRE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViRE9NU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIFRlc3RFeGNlcHRpb247Ci19OwotCi0KLWNsYXNzIFdlYkRP
TVRlc3RFeGNlcHRpb24gOiBwdWJsaWMgV2ViRE9NT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBXZWJE
T01UZXN0RXhjZXB0aW9uKCk7Ci0gICAgZXhwbGljaXQgV2ViRE9NVGVzdEV4Y2VwdGlvbihXZWJD
b3JlOjpUZXN0RXhjZXB0aW9uKik7Ci0gICAgV2ViRE9NVGVzdEV4Y2VwdGlvbihjb25zdCBXZWJE
T01UZXN0RXhjZXB0aW9uJik7Ci0gICAgV2ViRE9NVGVzdEV4Y2VwdGlvbiYgb3BlcmF0b3I9KGNv
bnN0IFdlYkRPTVRlc3RFeGNlcHRpb24mKTsKLSAgICB2aXJ0dWFsIH5XZWJET01UZXN0RXhjZXB0
aW9uKCk7Ci0KLSAgICBXZWJET01TdHJpbmcgbmFtZSgpIGNvbnN0OwotCi0gICAgV2ViQ29yZTo6
VGVzdEV4Y2VwdGlvbiogaW1wbCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgc3RydWN0IFdl
YkRPTVRlc3RFeGNlcHRpb25Qcml2YXRlOwotICAgIFdlYkRPTVRlc3RFeGNlcHRpb25Qcml2YXRl
KiBtX2ltcGw7Ci19OwotCi1XZWJDb3JlOjpUZXN0RXhjZXB0aW9uKiB0b1dlYkNvcmUoY29uc3Qg
V2ViRE9NVGVzdEV4Y2VwdGlvbiYpOwotV2ViRE9NVGVzdEV4Y2VwdGlvbiB0b1dlYktpdChXZWJD
b3JlOjpUZXN0RXhjZXB0aW9uKik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDJkMTI1Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvQ1BQL1dlYkRPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDgyICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCi0gKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiV2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaCIKLQotI2luY2x1ZGUgIlRl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmgiCi0jaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5o
IgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLXN0
cnVjdCBXZWJET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6V2ViRE9NVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGVQcml2YXRlIHsKLSAgICBXZWJET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByaXZh
dGUoV2ViQ29yZTo6VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUqIG9iamVjdCA9IDApCi0gICAgICAg
IDogaW1wbChvYmplY3QpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZT4gaW1wbDsKLX07Ci0KLVdlYkRPTVRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlOjpXZWJET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSgpCi0gICAgOiBXZWJET01PYmpl
Y3QoKQotICAgICwgbV9pbXBsKDApCi17Ci19Ci0KLVdlYkRPTVRlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlOjpXZWJET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZShXZWJDb3JlOjpUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZSogaW1wbCkKLSAgICA6IFdlYkRPTU9iamVjdCgpCi0gICAgLCBtX2ltcGwobmV3
IFdlYkRPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJpdmF0ZShpbXBsKSkKLXsKLX0KLQotV2Vi
RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OldlYkRPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
KGNvbnN0IFdlYkRPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlJiBjb3B5KQotICAgIDogV2ViRE9N
T2JqZWN0KCkKLXsKLSAgICBtX2ltcGwgPSBjb3B5LmltcGwoKSA/IG5ldyBXZWJET01UZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZVByaXZhdGUoY29weS5pbXBsKCkpIDogMDsKLX0KLQotV2ViRE9NVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGUmIFdlYkRPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpvcGVy
YXRvcj0oY29uc3QgV2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUmIGNvcHkpCi17Ci0gICAg
ZGVsZXRlIG1faW1wbDsKLSAgICBtX2ltcGwgPSBjb3B5LmltcGwoKSA/IG5ldyBXZWJET01UZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZVByaXZhdGUoY29weS5pbXBsKCkpIDogMDsKLSAgICByZXR1cm4g
KnRoaXM7Ci19Ci0KLVdlYkNvcmU6OlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKiBXZWJET01UZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZTo6aW1wbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbCA/
IFdURjo6Z2V0UHRyKG1faW1wbC0+aW1wbCkgOiAwOwotfQotCi1XZWJET01UZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZTo6fldlYkRPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKCkKLXsKLSAgICBkZWxl
dGUgbV9pbXBsOwotICAgIG1faW1wbCA9IDA7Ci19Ci0KLVdlYkNvcmU6OlRlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUm
IHdyYXBwZXIpCi17Ci0gICAgcmV0dXJuIHdyYXBwZXIuaW1wbCgpOwotfQotCi1XZWJET01UZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZSB0b1dlYktpdChXZWJDb3JlOjpUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZSogdmFsdWUpCi17Ci0gICAgcmV0dXJuIFdlYkRPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
KHZhbHVlKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9DUFAvV2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ0YjhlNS4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
NiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lm
bmRlZiBXZWJET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZV9oCi0jZGVmaW5lIFdlYkRPTVRlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlX2gKLQotI2luY2x1ZGUgPFdlYkRPTU9iamVjdC5oPgotI2luY2x1
ZGUgPFdlYkRPTVN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZTsKLX07Ci0KLQotY2xhc3MgV2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUgOiBwdWJsaWMgV2ViRE9NT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBXZWJET01UZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZSgpOwotICAgIGV4cGxpY2l0IFdlYkRPTVRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlKFdlYkNvcmU6OlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKik7Ci0gICAgV2ViRE9NVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGUoY29uc3QgV2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUm
KTsKLSAgICBXZWJET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSYgb3BlcmF0b3I9KGNvbnN0IFdl
YkRPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlJik7Ci0gICAgdmlydHVhbCB+V2ViRE9NVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGUoKTsKLQotCi0gICAgV2ViQ29yZTo6VGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUqIGltcGwoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIHN0cnVjdCBXZWJET01UZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZVByaXZhdGU7Ci0gICAgV2ViRE9NVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGVQcml2YXRlKiBtX2ltcGw7Ci19OwotCi1XZWJDb3JlOjpUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZSogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlJik7Ci1X
ZWJET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSB0b1dlYktpdChXZWJDb3JlOjpUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZSopOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEltcGxlbWVudHMuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0SW1wbGVtZW50cy5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNzkxMmIuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0SW1wbGVt
ZW50cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxl
IGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0aGF0IFdlYkRPTVRlc3RJ
bXBsZW1lbnRzLmggYW5kCi0gICAgV2ViRE9NVGVzdEltcGxlbWVudHMuY3BwIGFyZSBjcmVhdGVk
IGZvciBUZXN0SW1wbGVtZW50cy5pZGwsIGFuZCB0aHVzCi0gICAgcHJldmVudCB0aGUgYnVpbGQg
c2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBXZWJET01UZXN0SW1wbGVtZW50cy5oIGFu
ZAotICAgIFdlYkRPTVRlc3RJbXBsZW1lbnRzLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxl
IG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCi0qLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0SW1wbGVtZW50cy5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0SW1wbGVt
ZW50cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTc5MTJiLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdElt
cGxlbWVudHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZp
bGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2ViRE9NVGVz
dEltcGxlbWVudHMuaCBhbmQKLSAgICBXZWJET01UZXN0SW1wbGVtZW50cy5jcHAgYXJlIGNyZWF0
ZWQgZm9yIFRlc3RJbXBsZW1lbnRzLmlkbCwgYW5kIHRodXMKLSAgICBwcmV2ZW50IHRoZSBidWls
ZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYkRPTVRlc3RJbXBsZW1lbnRzLmgg
YW5kCi0gICAgV2ViRE9NVGVzdEltcGxlbWVudHMuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZp
bGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KLSovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RJbnRlcmZhY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0SW50
ZXJmYWNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYzMmQ0Ny4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRl
c3RJbnRlcmZhY2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8qCi0gKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpCi0KLSNpbmNsdWRlICJXZWJET01UZXN0SW50ZXJmYWNlLmgi
Ci0KLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSAiVGVzdEludGVyZmFjZS5oIgotI2luY2x1
ZGUgIlRlc3RTdXBwbGVtZW50YWwuaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJXZWJE
T01Ob2RlLmgiCi0jaW5jbHVkZSAiV2ViRE9NU3RyaW5nLmgiCi0jaW5jbHVkZSAiV2ViRXhjZXB0
aW9uSGFuZGxlci5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0KLXN0cnVjdCBXZWJE
T01UZXN0SW50ZXJmYWNlOjpXZWJET01UZXN0SW50ZXJmYWNlUHJpdmF0ZSB7Ci0gICAgV2ViRE9N
VGVzdEludGVyZmFjZVByaXZhdGUoV2ViQ29yZTo6VGVzdEludGVyZmFjZSogb2JqZWN0ID0gMCkK
LSAgICAgICAgOiBpbXBsKG9iamVjdCkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPFdlYkNv
cmU6OlRlc3RJbnRlcmZhY2U+IGltcGw7Ci19OwotCi1XZWJET01UZXN0SW50ZXJmYWNlOjpXZWJE
T01UZXN0SW50ZXJmYWNlKCkKLSAgICA6IFdlYkRPTU9iamVjdCgpCi0gICAgLCBtX2ltcGwoMCkK
LXsKLX0KLQotV2ViRE9NVGVzdEludGVyZmFjZTo6V2ViRE9NVGVzdEludGVyZmFjZShXZWJDb3Jl
OjpUZXN0SW50ZXJmYWNlKiBpbXBsKQotICAgIDogV2ViRE9NT2JqZWN0KCkKLSAgICAsIG1faW1w
bChuZXcgV2ViRE9NVGVzdEludGVyZmFjZVByaXZhdGUoaW1wbCkpCi17Ci19Ci0KLVdlYkRPTVRl
c3RJbnRlcmZhY2U6OldlYkRPTVRlc3RJbnRlcmZhY2UoY29uc3QgV2ViRE9NVGVzdEludGVyZmFj
ZSYgY29weSkKLSAgICA6IFdlYkRPTU9iamVjdCgpCi17Ci0gICAgbV9pbXBsID0gY29weS5pbXBs
KCkgPyBuZXcgV2ViRE9NVGVzdEludGVyZmFjZVByaXZhdGUoY29weS5pbXBsKCkpIDogMDsKLX0K
LQotV2ViRE9NVGVzdEludGVyZmFjZSYgV2ViRE9NVGVzdEludGVyZmFjZTo6b3BlcmF0b3I9KGNv
bnN0IFdlYkRPTVRlc3RJbnRlcmZhY2UmIGNvcHkpCi17Ci0gICAgZGVsZXRlIG1faW1wbDsKLSAg
ICBtX2ltcGwgPSBjb3B5LmltcGwoKSA/IG5ldyBXZWJET01UZXN0SW50ZXJmYWNlUHJpdmF0ZShj
b3B5LmltcGwoKSkgOiAwOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotV2ViQ29yZTo6VGVzdElu
dGVyZmFjZSogV2ViRE9NVGVzdEludGVyZmFjZTo6aW1wbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1faW1wbCA/IFdURjo6Z2V0UHRyKG1faW1wbC0+aW1wbCkgOiAwOwotfQotCi1XZWJET01UZXN0
SW50ZXJmYWNlOjp+V2ViRE9NVGVzdEludGVyZmFjZSgpCi17Ci0gICAgZGVsZXRlIG1faW1wbDsK
LSAgICBtX2ltcGwgPSAwOwotfQotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMjMpCi1XZWJET01TdHJpbmcgV2ViRE9NVGVzdEludGVyZmFjZTo6aW1wbGVtZW50
c1N0cjEoKSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gV2ViRE9N
U3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV1RGOjpTdHJpbmcmPihp
bXBsKCktPmltcGxlbWVudHNTdHIxKCkpOwotfQotCi0jZW5kaWYKLSNpZiBFTkFCTEUoQ29uZGl0
aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLVdlYkRPTVN0cmluZyBXZWJET01UZXN0SW50
ZXJmYWNlOjppbXBsZW1lbnRzU3RyMigpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAg
ICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBXVEY6OlN0cmluZyY+KGltcGwoKS0+aW1wbGVtZW50c1N0cjIoKSk7Ci19Ci0KLXZvaWQgV2Vi
RE9NVGVzdEludGVyZmFjZTo6c2V0SW1wbGVtZW50c1N0cjIoY29uc3QgV2ViRE9NU3RyaW5nJiBu
ZXdJbXBsZW1lbnRzU3RyMikKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaW1wbCgpLT5zZXRJbXBsZW1lbnRzU3RyMihuZXdJbXBsZW1lbnRzU3RyMik7Ci19Ci0K
LSNlbmRpZgotI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQot
V2ViRE9NTm9kZSBXZWJET01UZXN0SW50ZXJmYWNlOjppbXBsZW1lbnRzTm9kZSgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiBXZWJET01Ob2RlKCk7Ci0KLSAgICBy
ZXR1cm4gdG9XZWJLaXQoV1RGOjpnZXRQdHIoaW1wbCgpLT5pbXBsZW1lbnRzTm9kZSgpKSk7Ci19
Ci0KLXZvaWQgV2ViRE9NVGVzdEludGVyZmFjZTo6c2V0SW1wbGVtZW50c05vZGUoY29uc3QgV2Vi
RE9NTm9kZSYgbmV3SW1wbGVtZW50c05vZGUpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGltcGwoKS0+c2V0SW1wbGVtZW50c05vZGUodG9XZWJDb3JlKG5ld0lt
cGxlbWVudHNOb2RlKSk7Ci19Ci0KLSNlbmRpZgotI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjEyKQotV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RJbnRlcmZhY2U6OnN1
cHBsZW1lbnRhbFN0cjEoKSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1
cm4gV2ViRE9NU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV1RGOjpT
dHJpbmcmPihUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIxKGltcGwoKSkpOwotfQot
Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikK
LVdlYkRPTVN0cmluZyBXZWJET01UZXN0SW50ZXJmYWNlOjpzdXBwbGVtZW50YWxTdHIyKCkgY29u
c3QKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIFdlYkRPTVN0cmluZygpOwot
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdURjo6U3RyaW5nJj4oVGVzdFN1cHBsZW1l
bnRhbDo6c3VwcGxlbWVudGFsU3RyMihpbXBsKCkpKTsKLX0KLQotdm9pZCBXZWJET01UZXN0SW50
ZXJmYWNlOjpzZXRTdXBwbGVtZW50YWxTdHIyKGNvbnN0IFdlYkRPTVN0cmluZyYgbmV3U3VwcGxl
bWVudGFsU3RyMikKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
VGVzdFN1cHBsZW1lbnRhbDo6c2V0U3VwcGxlbWVudGFsU3RyMihpbXBsKCksIG5ld1N1cHBsZW1l
bnRhbFN0cjIpOwotfQotCi0jZW5kaWYKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJM
RShDb25kaXRpb24xMikKLVdlYkRPTU5vZGUgV2ViRE9NVGVzdEludGVyZmFjZTo6c3VwcGxlbWVu
dGFsTm9kZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiBXZWJE
T01Ob2RlKCk7Ci0KLSAgICByZXR1cm4gdG9XZWJLaXQoV1RGOjpnZXRQdHIoVGVzdFN1cHBsZW1l
bnRhbDo6c3VwcGxlbWVudGFsTm9kZShpbXBsKCkpKSk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdElu
dGVyZmFjZTo6c2V0U3VwcGxlbWVudGFsTm9kZShjb25zdCBXZWJET01Ob2RlJiBuZXdTdXBwbGVt
ZW50YWxOb2RlKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBU
ZXN0U3VwcGxlbWVudGFsOjpzZXRTdXBwbGVtZW50YWxOb2RlKGltcGwoKSwgdG9XZWJDb3JlKG5l
d1N1cHBsZW1lbnRhbE5vZGUpKTsKLX0KLQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9u
MjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLXZvaWQgV2ViRE9NVGVzdEludGVyZmFjZTo6aW1w
bGVtZW50c01ldGhvZDEoKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpbXBsKCktPmltcGxlbWVudHNNZXRob2QxKCk7Ci19Ci0KLSNlbmRpZgotCi0KLSNpZiBF
TkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLXZvaWQgV2ViRE9NVGVz
dEludGVyZmFjZTo6aW1wbGVtZW50c01ldGhvZDQoKQotewotICAgIGlmICghaW1wbCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCktPmltcGxlbWVudHNNZXRob2Q0KCk7Ci19Ci0KLSNl
bmRpZgotCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikK
LXZvaWQgV2ViRE9NVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsTWV0aG9kMSgpCi17Ci0gICAg
aWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVt
ZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhvZDEoaW1wbCgpKTsKLX0KLQotI2VuZGlmCi0KLQotI2lm
IEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotdm9pZCBXZWJET01U
ZXN0SW50ZXJmYWNlOjpzdXBwbGVtZW50YWxNZXRob2Q0KCkKLXsKLSAgICBpZiAoIWltcGwoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxl
bWVudGFsTWV0aG9kNChpbXBsKCkpOwotfQotCi0jZW5kaWYKLQotV2ViQ29yZTo6VGVzdEludGVy
ZmFjZSogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RJbnRlcmZhY2UmIHdyYXBwZXIpCi17Ci0g
ICAgcmV0dXJuIHdyYXBwZXIuaW1wbCgpOwotfQotCi1XZWJET01UZXN0SW50ZXJmYWNlIHRvV2Vi
S2l0KFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIHZhbHVlKQotewotICAgIHJldHVybiBXZWJET01U
ZXN0SW50ZXJmYWNlKHZhbHVlKTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0SW50ZXJmYWNlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZmU4OWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0SW50ZXJmYWNlLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2Ft
LndlaW5pZ0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViRE9NVGVzdEludGVy
ZmFjZV9oCi0jZGVmaW5lIFdlYkRPTVRlc3RJbnRlcmZhY2VfaAotCi0jaWYgRU5BQkxFKENvbmRp
dGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotCi0jaW5jbHVkZSA8V2ViRE9NT2JqZWN0Lmg+
Ci0jaW5jbHVkZSA8V2ViRE9NU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNz
IFRlc3RJbnRlcmZhY2U7Ci19OwotCi1jbGFzcyBXZWJET01Ob2RlOwotCi1jbGFzcyBXZWJET01U
ZXN0SW50ZXJmYWNlIDogcHVibGljIFdlYkRPTU9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgV2ViRE9N
VGVzdEludGVyZmFjZSgpOwotICAgIGV4cGxpY2l0IFdlYkRPTVRlc3RJbnRlcmZhY2UoV2ViQ29y
ZTo6VGVzdEludGVyZmFjZSopOwotICAgIFdlYkRPTVRlc3RJbnRlcmZhY2UoY29uc3QgV2ViRE9N
VGVzdEludGVyZmFjZSYpOwotICAgIFdlYkRPTVRlc3RJbnRlcmZhY2UmIG9wZXJhdG9yPShjb25z
dCBXZWJET01UZXN0SW50ZXJmYWNlJik7Ci0gICAgdmlydHVhbCB+V2ViRE9NVGVzdEludGVyZmFj
ZSgpOwotCi0gICAgZW51bSB7Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMjMpCi0gICAgICAgIFdFQkRPTV9JTVBMRU1FTlRTQ09OU1RBTlQxID0gMSwKLSNlbmRp
ZgotI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotICAgICAg
ICBXRUJET01fSU1QTEVNRU5UU0NPTlNUQU5UMiA9IDIsCi0jZW5kaWYKLSNpZiBFTkFCTEUoQ29u
ZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLSAgICAgICAgV0VCRE9NX1NVUFBMRU1F
TlRBTENPTlNUQU5UMSA9IDEsCi0jZW5kaWYKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVO
QUJMRShDb25kaXRpb24xMikKLSAgICAgICAgV0VCRE9NX1NVUFBMRU1FTlRBTENPTlNUQU5UMiA9
IDIKLSNlbmRpZgotCi0gICAgfTsKLQotI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxF
KENvbmRpdGlvbjIzKQotICAgIFdlYkRPTVN0cmluZyBpbXBsZW1lbnRzU3RyMSgpIGNvbnN0Owot
I2VuZGlmCi0jaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi0g
ICAgV2ViRE9NU3RyaW5nIGltcGxlbWVudHNTdHIyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRJbXBs
ZW1lbnRzU3RyMihjb25zdCBXZWJET01TdHJpbmcmKTsKLSNlbmRpZgotI2lmIEVOQUJMRShDb25k
aXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotICAgIFdlYkRPTU5vZGUgaW1wbGVtZW50
c05vZGUoKSBjb25zdDsKLSAgICB2b2lkIHNldEltcGxlbWVudHNOb2RlKGNvbnN0IFdlYkRPTU5v
ZGUmKTsKLSNlbmRpZgotI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjEyKQotICAgIFdlYkRPTVN0cmluZyBzdXBwbGVtZW50YWxTdHIxKCkgY29uc3Q7Ci0jZW5kaWYK
LSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLSAgICBXZWJE
T01TdHJpbmcgc3VwcGxlbWVudGFsU3RyMigpIGNvbnN0OwotICAgIHZvaWQgc2V0U3VwcGxlbWVu
dGFsU3RyMihjb25zdCBXZWJET01TdHJpbmcmKTsKLSNlbmRpZgotI2lmIEVOQUJMRShDb25kaXRp
b24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotICAgIFdlYkRPTU5vZGUgc3VwcGxlbWVudGFs
Tm9kZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U3VwcGxlbWVudGFsTm9kZShjb25zdCBXZWJET01O
b2RlJik7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRp
dGlvbjIzKQotICAgIHZvaWQgaW1wbGVtZW50c01ldGhvZDEoKTsKLSNlbmRpZgotI2lmIEVOQUJM
RShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotICAgIHZvaWQgaW1wbGVtZW50
c01ldGhvZDQoKTsKLSNlbmRpZgotI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjEyKQotICAgIHZvaWQgc3VwcGxlbWVudGFsTWV0aG9kMSgpOwotI2VuZGlmCi0jaWYg
RU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgdm9pZCBzdXBw
bGVtZW50YWxNZXRob2Q0KCk7Ci0jZW5kaWYKLQotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2Uq
IGltcGwoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIHN0cnVjdCBXZWJET01UZXN0SW50ZXJm
YWNlUHJpdmF0ZTsKLSAgICBXZWJET01UZXN0SW50ZXJmYWNlUHJpdmF0ZSogbV9pbXBsOwotfTsK
LQotV2ViQ29yZTo6VGVzdEludGVyZmFjZSogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RJbnRl
cmZhY2UmKTsKLVdlYkRPTVRlc3RJbnRlcmZhY2UgdG9XZWJLaXQoV2ViQ29yZTo6VGVzdEludGVy
ZmFjZSopOwotCi0jZW5kaWYKLSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9DUFAvV2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MjkxMWQuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJE
T01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5MiAr
MCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgotICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IldlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgiCi0KLSNpbmNsdWRlICJNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIu
aCIKLSNpbmNsdWRlICJXZWJET01NZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgiCi0jaW5jbHVkZSAi
V2ViRXhjZXB0aW9uSGFuZGxlci5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+Ci0KLXN0cnVjdCBXZWJET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
cjo6V2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcml2YXRlIHsKLSAgICBXZWJET01U
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByaXZhdGUoV2ViQ29yZTo6VGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIqIG9iamVjdCA9IDApCi0gICAgICAgIDogaW1wbChvYmplY3QpCi0gICAgewot
ICAgIH0KLQotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4g
aW1wbDsKLX07Ci0KLVdlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpXZWJET01UZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcigpCi0gICAgOiBXZWJET01PYmplY3QoKQotICAgICwgbV9p
bXBsKDApCi17Ci19Ci0KLVdlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpXZWJET01U
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lciogaW1wbCkKLSAgICA6IFdlYkRPTU9iamVjdCgpCi0gICAgLCBtX2ltcGwobmV3IFdlYkRP
TVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0ZShpbXBsKSkKLXsKLX0KLQotV2ViRE9N
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OldlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyKGNvbnN0IFdlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyJiBjb3B5KQotICAgIDog
V2ViRE9NT2JqZWN0KCkKLXsKLSAgICBtX2ltcGwgPSBjb3B5LmltcGwoKSA/IG5ldyBXZWJET01U
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByaXZhdGUoY29weS5pbXBsKCkpIDogMDsKLX0KLQot
V2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXImIFdlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyOjpvcGVyYXRvcj0oY29uc3QgV2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXImIGNvcHkpCi17Ci0gICAgZGVsZXRlIG1faW1wbDsKLSAgICBtX2ltcGwgPSBjb3B5LmltcGwo
KSA/IG5ldyBXZWJET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByaXZhdGUoY29weS5pbXBs
KCkpIDogMDsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVdlYkNvcmU6OlRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyKiBXZWJET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6aW1wbCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbCA/IFdURjo6Z2V0UHRyKG1faW1wbC0+aW1wbCkgOiAw
OwotfQotCi1XZWJET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6fldlYkRPTVRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyKCkKLXsKLSAgICBkZWxldGUgbV9pbXBsOwotICAgIG1faW1wbCA9
IDA7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6Om1ldGhvZChj
b25zdCBXZWJET01NZWRpYVF1ZXJ5TGlzdExpc3RlbmVyJiBsaXN0ZW5lcikKLXsKLSAgICBpZiAo
IWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5tZXRob2QodG9XZWJDb3Jl
KGxpc3RlbmVyKSk7Ci19Ci0KLVdlYkNvcmU6OlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiB0
b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXImIHdyYXBwZXIp
Ci17Ci0gICAgcmV0dXJuIHdyYXBwZXIuaW1wbCgpOwotfQotCi1XZWJET01UZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lciB0b1dlYktpdChXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ciogdmFsdWUpCi17Ci0gICAgcmV0dXJuIFdlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
KHZhbHVlKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9DUFAvV2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY4OTgzNi4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KLSAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2lmbmRlZiBXZWJET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcl9oCi0jZGVmaW5l
IFdlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyX2gKLQotI2luY2x1ZGUgPFdlYkRPTU9i
amVjdC5oPgotI2luY2x1ZGUgPFdlYkRPTVN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1jbGFzcyBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjsKLX07Ci0KLWNsYXNzIFdlYkRPTU1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXI7Ci0KLWNsYXNzIFdlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyIDogcHVibGljIFdlYkRPTU9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgV2ViRE9NVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIoKTsKLSAgICBleHBsaWNpdCBXZWJET01UZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcihXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciopOwotICAg
IFdlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKGNvbnN0IFdlYkRPTVRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyJik7Ci0gICAgV2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIm
IG9wZXJhdG9yPShjb25zdCBXZWJET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciYpOwotICAg
IHZpcnR1YWwgfldlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKCk7Ci0KLSAgICB2b2lk
IG1ldGhvZChjb25zdCBXZWJET01NZWRpYVF1ZXJ5TGlzdExpc3RlbmVyJiBsaXN0ZW5lcik7Ci0K
LSAgICBXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogaW1wbCgpIGNvbnN0Owot
Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RydWN0IFdlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
UHJpdmF0ZTsKLSAgICBXZWJET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByaXZhdGUqIG1f
aW1wbDsKLX07Ci0KLVdlYkNvcmU6OlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiB0b1dlYkNv
cmUoY29uc3QgV2ViRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXImKTsKLVdlYkRPTVRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyKik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3ROYW1lZENvbnN0
cnVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBjMzY1Yi4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRl
c3ROYW1lZENvbnN0cnVjdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8q
Ci0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
Ci0gKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViRE9NVGVz
dE5hbWVkQ29uc3RydWN0b3IuaCIKLQotI2luY2x1ZGUgIlRlc3ROYW1lZENvbnN0cnVjdG9yLmgi
Ci0jaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLXN0cnVjdCBXZWJET01UZXN0TmFtZWRDb25z
dHJ1Y3Rvcjo6V2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlIHsKLSAgICBXZWJET01U
ZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUoV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3Iq
IG9iamVjdCA9IDApCi0gICAgICAgIDogaW1wbChvYmplY3QpCi0gICAgewotICAgIH0KLQotICAg
IFJlZlB0cjxXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4gaW1wbDsKLX07Ci0KLVdlYkRP
TVRlc3ROYW1lZENvbnN0cnVjdG9yOjpXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvcigpCi0gICAg
OiBXZWJET01PYmplY3QoKQotICAgICwgbV9pbXBsKDApCi17Ci19Ci0KLVdlYkRPTVRlc3ROYW1l
ZENvbnN0cnVjdG9yOjpXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0TmFt
ZWRDb25zdHJ1Y3RvciogaW1wbCkKLSAgICA6IFdlYkRPTU9iamVjdCgpCi0gICAgLCBtX2ltcGwo
bmV3IFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZShpbXBsKSkKLXsKLX0KLQotV2Vi
RE9NVGVzdE5hbWVkQ29uc3RydWN0b3I6OldlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yKGNvbnN0
IFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yJiBjb3B5KQotICAgIDogV2ViRE9NT2JqZWN0KCkK
LXsKLSAgICBtX2ltcGwgPSBjb3B5LmltcGwoKSA/IG5ldyBXZWJET01UZXN0TmFtZWRDb25zdHJ1
Y3RvclByaXZhdGUoY29weS5pbXBsKCkpIDogMDsKLX0KLQotV2ViRE9NVGVzdE5hbWVkQ29uc3Ry
dWN0b3ImIFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yOjpvcGVyYXRvcj0oY29uc3QgV2ViRE9N
VGVzdE5hbWVkQ29uc3RydWN0b3ImIGNvcHkpCi17Ci0gICAgZGVsZXRlIG1faW1wbDsKLSAgICBt
X2ltcGwgPSBjb3B5LmltcGwoKSA/IG5ldyBXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZh
dGUoY29weS5pbXBsKCkpIDogMDsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVdlYkNvcmU6OlRl
c3ROYW1lZENvbnN0cnVjdG9yKiBXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6aW1wbCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbCA/IFdURjo6Z2V0UHRyKG1faW1wbC0+aW1wbCkgOiAw
OwotfQotCi1XZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6fldlYkRPTVRlc3ROYW1lZENvbnN0
cnVjdG9yKCkKLXsKLSAgICBkZWxldGUgbV9pbXBsOwotICAgIG1faW1wbCA9IDA7Ci19Ci0KLVdl
YkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdE5h
bWVkQ29uc3RydWN0b3ImIHdyYXBwZXIpCi17Ci0gICAgcmV0dXJuIHdyYXBwZXIuaW1wbCgpOwot
fQotCi1XZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvciB0b1dlYktpdChXZWJDb3JlOjpUZXN0TmFt
ZWRDb25zdHJ1Y3RvciogdmFsdWUpCi17Ci0gICAgcmV0dXJuIFdlYkRPTVRlc3ROYW1lZENvbnN0
cnVjdG9yKHZhbHVlKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3Iu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ1ZGFhNy4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3ROYW1lZENv
bnN0cnVjdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBT
YW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRl
ZiBXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcl9oCi0jZGVmaW5lIFdlYkRPTVRlc3ROYW1lZENv
bnN0cnVjdG9yX2gKLQotI2luY2x1ZGUgPFdlYkRPTU9iamVjdC5oPgotI2luY2x1ZGUgPFdlYkRP
TVN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBUZXN0TmFtZWRDb25zdHJ1
Y3RvcjsKLX07Ci0KLQotY2xhc3MgV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IgOiBwdWJsaWMg
V2ViRE9NT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcigp
OwotICAgIGV4cGxpY2l0IFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yKFdlYkNvcmU6OlRlc3RO
YW1lZENvbnN0cnVjdG9yKik7Ci0gICAgV2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IoY29uc3Qg
V2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3ImKTsKLSAgICBXZWJET01UZXN0TmFtZWRDb25zdHJ1
Y3RvciYgb3BlcmF0b3I9KGNvbnN0IFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yJik7Ci0gICAg
dmlydHVhbCB+V2ViRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IoKTsKLQotCi0gICAgV2ViQ29yZTo6
VGVzdE5hbWVkQ29uc3RydWN0b3IqIGltcGwoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIHN0
cnVjdCBXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGU7Ci0gICAgV2ViRE9NVGVzdE5h
bWVkQ29uc3RydWN0b3JQcml2YXRlKiBtX2ltcGw7Ci19OwotCi1XZWJDb3JlOjpUZXN0TmFtZWRD
b25zdHJ1Y3RvciogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yJik7
Ci1XZWJET01UZXN0TmFtZWRDb25zdHJ1Y3RvciB0b1dlYktpdChXZWJDb3JlOjpUZXN0TmFtZWRD
b25zdHJ1Y3RvciopOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0Tm9kZS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGNlMTQ0OWEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0Tm9kZS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw1MiArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldlYkRPTVRlc3ROb2RlLmgiCi0KLSNpbmNsdWRlICJUZXN0Tm9kZS5oIgot
I2luY2x1ZGUgIldlYkV4Y2VwdGlvbkhhbmRsZXIuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1XZWJET01UZXN0Tm9kZTo6V2ViRE9NVGVzdE5v
ZGUoKQotICAgIDogV2ViRE9NTm9kZSgpCi17Ci19Ci0KLVdlYkRPTVRlc3ROb2RlOjpXZWJET01U
ZXN0Tm9kZShXZWJDb3JlOjpUZXN0Tm9kZSogaW1wbCkKLSAgICA6IFdlYkRPTU5vZGUoaW1wbCkK
LXsKLX0KLQotV2ViQ29yZTo6VGVzdE5vZGUqIFdlYkRPTVRlc3ROb2RlOjppbXBsKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE5vZGUqPihXZWJET01Ob2Rl
OjppbXBsKCkpOwotfQotCi1XZWJDb3JlOjpUZXN0Tm9kZSogdG9XZWJDb3JlKGNvbnN0IFdlYkRP
TVRlc3ROb2RlJiB3cmFwcGVyKQotewotICAgIHJldHVybiB3cmFwcGVyLmltcGwoKTsKLX0KLQot
V2ViRE9NVGVzdE5vZGUgdG9XZWJLaXQoV2ViQ29yZTo6VGVzdE5vZGUqIHZhbHVlKQotewotICAg
IHJldHVybiBXZWJET01UZXN0Tm9kZSh2YWx1ZSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3ROb2RlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3ROb2RlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNjNmMmQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0Tm9kZS5oCisrKyAvZGV2
L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndl
aW5pZ0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViRE9NVGVzdE5vZGVfaAot
I2RlZmluZSBXZWJET01UZXN0Tm9kZV9oCi0KLSNpbmNsdWRlIDxXZWJET01Ob2RlLmg+Ci0jaW5j
bHVkZSA8V2ViRE9NU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFRlc3RO
b2RlOwotfTsKLQotCi1jbGFzcyBXZWJET01UZXN0Tm9kZSA6IHB1YmxpYyBXZWJET01Ob2RlIHsK
LXB1YmxpYzoKLSAgICBXZWJET01UZXN0Tm9kZSgpOwotICAgIGV4cGxpY2l0IFdlYkRPTVRlc3RO
b2RlKFdlYkNvcmU6OlRlc3ROb2RlKik7Ci0gICAgdmlydHVhbCB+V2ViRE9NVGVzdE5vZGUoKSB7
IH0KLQotCi0gICAgV2ViQ29yZTo6VGVzdE5vZGUqIGltcGwoKSBjb25zdDsKLX07Ci0KLVdlYkNv
cmU6OlRlc3ROb2RlKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdE5vZGUmKTsKLVdlYkRPTVRl
c3ROb2RlIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3ROb2RlKik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2Jq
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVz
dE9iai5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZTM4YjYuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0
T2JqLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExNDggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJET01UZXN0T2JqLmgiCi0KLSNp
bmNsdWRlICJEaWN0aW9uYXJ5LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSAiU1ZHUG9pbnQuaCIKLSNp
bmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlICJUZXN0RW51bVR5cGUu
aCIKLSNpbmNsdWRlICJUZXN0Tm9kZS5oIgotI2luY2x1ZGUgIlRlc3RPYmouaCIKLSNpbmNsdWRl
ICJVUkwuaCIKLSNpbmNsdWRlICJXZWJET01EaWN0aW9uYXJ5LmgiCi0jaW5jbHVkZSAiV2ViRE9N
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJXZWJET01Ob2RlLmgiCi0jaW5jbHVkZSAiV2ViRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiV2ViRE9NU1ZHUG9pbnQuaCIKLSNpbmNsdWRlICJXZWJET01TdHJp
bmcuaCIKLSNpbmNsdWRlICJXZWJET01UZXN0RW51bVR5cGUuaCIKLSNpbmNsdWRlICJXZWJET01U
ZXN0Tm9kZS5oIgotI2luY2x1ZGUgIldlYkRPTWJvb2wuaCIKLSNpbmNsdWRlICJXZWJFeGNlcHRp
b25IYW5kbGVyLmgiCi0jaW5jbHVkZSAiV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1
ZGUgImJvb2wuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotCi1zdHJ1Y3QgV2ViRE9N
VGVzdE9iajo6V2ViRE9NVGVzdE9ialByaXZhdGUgewotICAgIFdlYkRPTVRlc3RPYmpQcml2YXRl
KFdlYkNvcmU6OlRlc3RPYmoqIG9iamVjdCA9IDApCi0gICAgICAgIDogaW1wbChvYmplY3QpCi0g
ICAgewotICAgIH0KLQotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBpbXBsOwotfTsKLQot
V2ViRE9NVGVzdE9iajo6V2ViRE9NVGVzdE9iaigpCi0gICAgOiBXZWJET01PYmplY3QoKQotICAg
ICwgbV9pbXBsKDApCi17Ci19Ci0KLVdlYkRPTVRlc3RPYmo6OldlYkRPTVRlc3RPYmooV2ViQ29y
ZTo6VGVzdE9iaiogaW1wbCkKLSAgICA6IFdlYkRPTU9iamVjdCgpCi0gICAgLCBtX2ltcGwobmV3
IFdlYkRPTVRlc3RPYmpQcml2YXRlKGltcGwpKQotewotfQotCi1XZWJET01UZXN0T2JqOjpXZWJE
T01UZXN0T2JqKGNvbnN0IFdlYkRPTVRlc3RPYmomIGNvcHkpCi0gICAgOiBXZWJET01PYmplY3Qo
KQotewotICAgIG1faW1wbCA9IGNvcHkuaW1wbCgpID8gbmV3IFdlYkRPTVRlc3RPYmpQcml2YXRl
KGNvcHkuaW1wbCgpKSA6IDA7Ci19Ci0KLVdlYkRPTVRlc3RPYmomIFdlYkRPTVRlc3RPYmo6Om9w
ZXJhdG9yPShjb25zdCBXZWJET01UZXN0T2JqJiBjb3B5KQotewotICAgIGRlbGV0ZSBtX2ltcGw7
Ci0gICAgbV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdE9ialByaXZhdGUoY29w
eS5pbXBsKCkpIDogMDsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVdlYkNvcmU6OlRlc3RPYmoq
IFdlYkRPTVRlc3RPYmo6OmltcGwoKSBjb25zdAotewotICAgIHJldHVybiBtX2ltcGwgPyBXVEY6
OmdldFB0cihtX2ltcGwtPmltcGwpIDogMDsKLX0KLQotV2ViRE9NVGVzdE9iajo6fldlYkRPTVRl
c3RPYmooKQotewotICAgIGRlbGV0ZSBtX2ltcGw7Ci0gICAgbV9pbXBsID0gMDsKLX0KLQotaW50
IFdlYkRPTVRlc3RPYmo6OnJlYWRPbmx5TG9uZ0F0dHIoKSBjb25zdAotewotICAgIGlmICghaW1w
bCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBpbXBsKCktPnJlYWRPbmx5TG9u
Z0F0dHIoKTsKLX0KLQotV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RPYmo6OnJlYWRPbmx5U3RyaW5n
QXR0cigpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiBXZWJET01T
dHJpbmcoKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXVEY6OlN0cmluZyY+KGlt
cGwoKS0+cmVhZE9ubHlTdHJpbmdBdHRyKCkpOwotfQotCi1XZWJET01UZXN0T2JqIFdlYkRPTVRl
c3RPYmo6OnJlYWRPbmx5VGVzdE9iakF0dHIoKSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQot
ICAgICAgICByZXR1cm4gV2ViRE9NVGVzdE9iaigpOwotCi0gICAgcmV0dXJuIHRvV2ViS2l0KFdU
Rjo6Z2V0UHRyKGltcGwoKS0+cmVhZE9ubHlUZXN0T2JqQXR0cigpKSk7Ci19Ci0KLWNoYXIgV2Vi
RE9NVGVzdE9iajo6Ynl0ZUF0dHIoKSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQotICAgICAg
ICByZXR1cm4gY2hhcigpOwotCi0gICAgcmV0dXJuIGltcGwoKS0+Ynl0ZUF0dHIoKTsKLX0KLQot
dm9pZCBXZWJET01UZXN0T2JqOjpzZXRCeXRlQXR0cihjaGFyIG5ld0J5dGVBdHRyKQotewotICAg
IGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCktPnNldEJ5dGVBdHRy
KG5ld0J5dGVBdHRyKTsKLX0KLQotdW5zaWduZWQgY2hhciBXZWJET01UZXN0T2JqOjpvY3RldEF0
dHIoKSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gdW5zaWduZWQg
Y2hhcigpOwotCi0gICAgcmV0dXJuIGltcGwoKS0+b2N0ZXRBdHRyKCk7Ci19Ci0KLXZvaWQgV2Vi
RE9NVGVzdE9iajo6c2V0T2N0ZXRBdHRyKHVuc2lnbmVkIGNoYXIgbmV3T2N0ZXRBdHRyKQotewot
ICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCktPnNldE9jdGV0
QXR0cihuZXdPY3RldEF0dHIpOwotfQotCi1zaG9ydCBXZWJET01UZXN0T2JqOjpzaG9ydEF0dHIo
KSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJl
dHVybiBpbXBsKCktPnNob3J0QXR0cigpOwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6OnNldFNo
b3J0QXR0cihzaG9ydCBuZXdTaG9ydEF0dHIpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGltcGwoKS0+c2V0U2hvcnRBdHRyKG5ld1Nob3J0QXR0cik7Ci19Ci0K
LXVuc2lnbmVkIHNob3J0IFdlYkRPTVRlc3RPYmo6OnVuc2lnbmVkU2hvcnRBdHRyKCkgY29uc3QK
LXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gaW1w
bCgpLT51bnNpZ25lZFNob3J0QXR0cigpOwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6OnNldFVu
c2lnbmVkU2hvcnRBdHRyKHVuc2lnbmVkIHNob3J0IG5ld1Vuc2lnbmVkU2hvcnRBdHRyKQotewot
ICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCktPnNldFVuc2ln
bmVkU2hvcnRBdHRyKG5ld1Vuc2lnbmVkU2hvcnRBdHRyKTsKLX0KLQotaW50IFdlYkRPTVRlc3RP
Ymo6OmxvbmdBdHRyKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gaW1wbCgpLT5sb25nQXR0cigpOwotfQotCi12b2lkIFdlYkRPTVRl
c3RPYmo6OnNldExvbmdBdHRyKGludCBuZXdMb25nQXR0cikKLXsKLSAgICBpZiAoIWltcGwoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5zZXRMb25nQXR0cihuZXdMb25nQXR0cik7
Ci19Ci0KLWxvbmcgbG9uZyBXZWJET01UZXN0T2JqOjpsb25nTG9uZ0F0dHIoKSBjb25zdAotewot
ICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBpbXBsKCkt
PmxvbmdMb25nQXR0cigpOwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6OnNldExvbmdMb25nQXR0
cihsb25nIGxvbmcgbmV3TG9uZ0xvbmdBdHRyKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpbXBsKCktPnNldExvbmdMb25nQXR0cihuZXdMb25nTG9uZ0F0dHIp
OwotfQotCi11bnNpZ25lZCBsb25nIGxvbmcgV2ViRE9NVGVzdE9iajo6dW5zaWduZWRMb25nTG9u
Z0F0dHIoKSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIHJldHVybiBpbXBsKCktPnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCk7Ci19Ci0KLXZvaWQgV2Vi
RE9NVGVzdE9iajo6c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIodW5zaWduZWQgbG9uZyBsb25nIG5l
d1Vuc2lnbmVkTG9uZ0xvbmdBdHRyKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpbXBsKCktPnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKG5ld1Vuc2lnbmVkTG9u
Z0xvbmdBdHRyKTsKLX0KLQotV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RPYmo6OnN0cmluZ0F0dHIo
KSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5n
KCk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV1RGOjpTdHJpbmcmPihpbXBsKCkt
PnN0cmluZ0F0dHIoKSk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6c2V0U3RyaW5nQXR0cihj
b25zdCBXZWJET01TdHJpbmcmIG5ld1N0cmluZ0F0dHIpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+c2V0U3RyaW5nQXR0cihuZXdTdHJpbmdBdHRy
KTsKLX0KLQotV2ViRE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjp0ZXN0T2JqQXR0cigpIGNvbnN0
Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiBXZWJET01UZXN0T2JqKCk7Ci0K
LSAgICByZXR1cm4gdG9XZWJLaXQoV1RGOjpnZXRQdHIoaW1wbCgpLT50ZXN0T2JqQXR0cigpKSk7
Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6c2V0VGVzdE9iakF0dHIoY29uc3QgV2ViRE9NVGVz
dE9iaiYgbmV3VGVzdE9iakF0dHIpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGltcGwoKS0+c2V0VGVzdE9iakF0dHIodG9XZWJDb3JlKG5ld1Rlc3RPYmpBdHRy
KSk7Ci19Ci0KLVdlYkRPTVRlc3RPYmogV2ViRE9NVGVzdE9iajo6WE1MT2JqQXR0cigpIGNvbnN0
Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiBXZWJET01UZXN0T2JqKCk7Ci0K
LSAgICByZXR1cm4gdG9XZWJLaXQoV1RGOjpnZXRQdHIoaW1wbCgpLT54bWxPYmpBdHRyKCkpKTsK
LX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjpzZXRYTUxPYmpBdHRyKGNvbnN0IFdlYkRPTVRlc3RP
YmomIG5ld1hNTE9iakF0dHIpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGltcGwoKS0+c2V0WE1MT2JqQXR0cih0b1dlYkNvcmUobmV3WE1MT2JqQXR0cikpOwot
fQotCi1ib29sIFdlYkRPTVRlc3RPYmo6OmNyZWF0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBs
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBpbXBsKCktPmlzQ3JlYXRl
KCk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6c2V0Q3JlYXRlKGJvb2wgbmV3Q3JlYXRlKQot
ewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCktPnNldENy
ZWF0ZShuZXdDcmVhdGUpOwotfQotCi1XZWJET01TdHJpbmcgV2ViRE9NVGVzdE9iajo6cmVmbGVj
dGVkU3RyaW5nQXR0cigpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVy
biBXZWJET01TdHJpbmcoKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXVEY6OlN0
cmluZyY+KGltcGwoKS0+ZmFzdEdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxl
Y3RlZHN0cmluZ2F0dHJBdHRyKSk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6c2V0UmVmbGVj
dGVkU3RyaW5nQXR0cihjb25zdCBXZWJET01TdHJpbmcmIG5ld1JlZmxlY3RlZFN0cmluZ0F0dHIp
Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+c2V0
QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIsIG5l
d1JlZmxlY3RlZFN0cmluZ0F0dHIpOwotfQotCi1pbnQgV2ViRE9NVGVzdE9iajo6cmVmbGVjdGVk
SW50ZWdyYWxBdHRyKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gaW1wbCgpLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIpOwotfQotCi12b2lkIFdlYkRPTVRl
c3RPYmo6OnNldFJlZmxlY3RlZEludGVncmFsQXR0cihpbnQgbmV3UmVmbGVjdGVkSW50ZWdyYWxB
dHRyKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCkt
PnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdy
YWxhdHRyQXR0ciwgbmV3UmVmbGVjdGVkSW50ZWdyYWxBdHRyKTsKLX0KLQotdW5zaWduZWQgV2Vi
RE9NVGVzdE9iajo6cmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIoKSBjb25zdAotewotICAg
IGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gdW5zaWduZWQoKTsKLQotICAgIHJldHVybiBp
bXBsKCktPmdldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpy
ZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIpOwotfQotCi12b2lkIFdlYkRPTVRlc3RP
Ymo6OnNldFJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKHVuc2lnbmVkIG5ld1JlZmxlY3Rl
ZFVuc2lnbmVkSW50ZWdyYWxBdHRyKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpbXBsKCktPnNldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIsIG5ld1JlZmxlY3Rl
ZFVuc2lnbmVkSW50ZWdyYWxBdHRyKTsKLX0KLQotYm9vbCBXZWJET01UZXN0T2JqOjpyZWZsZWN0
ZWRCb29sZWFuQXR0cigpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJldHVybiBpbXBsKCktPmZhc3RIYXNBdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIpOwotfQotCi12b2lkIFdlYkRPTVRl
c3RPYmo6OnNldFJlZmxlY3RlZEJvb2xlYW5BdHRyKGJvb2wgbmV3UmVmbGVjdGVkQm9vbGVhbkF0
dHIpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+
c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5h
dHRyQXR0ciwgbmV3UmVmbGVjdGVkQm9vbGVhbkF0dHIpOwotfQotCi1XZWJET01TdHJpbmcgV2Vi
RE9NVGVzdE9iajo6cmVmbGVjdGVkVVJMQXR0cigpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkp
Ci0gICAgICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBXVEY6OlN0cmluZyY+KGltcGwoKS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIpKTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2Jq
OjpzZXRSZWZsZWN0ZWRVUkxBdHRyKGNvbnN0IFdlYkRPTVN0cmluZyYgbmV3UmVmbGVjdGVkVVJM
QXR0cikKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgp
LT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciwg
bmV3UmVmbGVjdGVkVVJMQXR0cik7Ci19Ci0KLVdlYkRPTVN0cmluZyBXZWJET01UZXN0T2JqOjpy
ZWZsZWN0ZWRTdHJpbmdBdHRyKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAg
cmV0dXJuIFdlYkRPTVN0cmluZygpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdU
Rjo6U3RyaW5nJj4oaW1wbCgpLT5mYXN0R2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyKSk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6
c2V0UmVmbGVjdGVkU3RyaW5nQXR0cihjb25zdCBXZWJET01TdHJpbmcmIG5ld1JlZmxlY3RlZFN0
cmluZ0F0dHIpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlt
cGwoKS0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmlu
Z0F0dHJBdHRyLCBuZXdSZWZsZWN0ZWRTdHJpbmdBdHRyKTsKLX0KLQotaW50IFdlYkRPTVRlc3RP
Ymo6OnJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cigpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBs
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGltcGwoKS0+Z2V0SW50ZWdyYWxB
dHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0
cik7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6c2V0UmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxB
dHRyKGludCBuZXdSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIpCi17Ci0gICAgaWYgKCFpbXBs
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0ciwgbmV3UmVm
bGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKTsKLX0KLQotYm9vbCBXZWJET01UZXN0T2JqOjpyZWZs
ZWN0ZWRDdXN0b21Cb29sZWFuQXR0cigpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBpbXBsKCktPmZhc3RIYXNBdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyKTsKLX0KLQot
dm9pZCBXZWJET01UZXN0T2JqOjpzZXRSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0cihib29sIG5l
d1JlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpbXBsKCktPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyLCBuZXdSZWZsZWN0ZWRDdXN0b21C
b29sZWFuQXR0cik7Ci19Ci0KLVdlYkRPTVN0cmluZyBXZWJET01UZXN0T2JqOjpyZWZsZWN0ZWRD
dXN0b21VUkxBdHRyKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJu
IFdlYkRPTVN0cmluZygpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdURjo6U3Ry
aW5nJj4oaW1wbCgpLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21D
b250ZW50VVJMQXR0ckF0dHIpKTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjpzZXRSZWZsZWN0
ZWRDdXN0b21VUkxBdHRyKGNvbnN0IFdlYkRPTVN0cmluZyYgbmV3UmVmbGVjdGVkQ3VzdG9tVVJM
QXR0cikKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgp
LT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0
dHIsIG5ld1JlZmxlY3RlZEN1c3RvbVVSTEF0dHIpOwotfQotCi1pbnQgV2ViRE9NVGVzdE9iajo6
YXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oKSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IGludCByZXN1bHQgPSBpbXBsKCktPmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKTsKLSAgICB3
ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjpzZXRBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbihpbnQgbmV3QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24pCi17Ci0gICAgaWYg
KCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+c2V0QXR0cldpdGhHZXR0
ZXJFeGNlcHRpb24obmV3QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24pOwotfQotCi1pbnQgV2ViRE9N
VGVzdE9iajo6YXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSBjb25zdAotewotICAgIGlmICghaW1w
bCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBpbXBsKCktPmF0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uKCk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6c2V0QXR0cldpdGhTZXR0
ZXJFeGNlcHRpb24oaW50IG5ld0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKQotewotICAgIGlmICgh
aW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKLSAgICBpbXBsKCktPnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKG5ld0F0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uLCBlYyk7Ci0gICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxX
ZWJET01FeGNlcHRpb25Db2RlPihlYykpOwotfQotCi1XZWJET01TdHJpbmcgV2ViRE9NVGVzdE9i
ajo6c3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oKSBjb25zdAotewotICAgIGlmICghaW1w
bCgpKQotICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7Ci0KLSAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJET01TdHJpbmcgcmVzdWx0ID0gaW1wbCgpLT5zdHJp
bmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYyk7Ci0gICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0
aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBXVEY6OlN0cmluZyY+KHJlc3VsdCk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6
c2V0U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oY29uc3QgV2ViRE9NU3RyaW5nJiBuZXdT
dHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbikKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5zZXRTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bihuZXdTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbik7Ci19Ci0KLVdlYkRPTVN0cmluZyBX
ZWJET01UZXN0T2JqOjpzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKLQotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBXVEY6OlN0cmluZyY+KGltcGwoKS0+c3RyaW5nQXR0cldp
dGhTZXR0ZXJFeGNlcHRpb24oKSk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6c2V0U3RyaW5n
QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oY29uc3QgV2ViRE9NU3RyaW5nJiBuZXdTdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbikKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLT5zZXRT
dHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihuZXdTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbiwgZWMpOwotICAgIHdlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0
aW9uQ29kZT4oZWMpKTsKLX0KLQotI2lmIEVOQUJMRShDb25kaXRpb24xKQotaW50IFdlYkRPTVRl
c3RPYmo6OmNvbmRpdGlvbmFsQXR0cjEoKSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBpbXBsKCktPmNvbmRpdGlvbmFsQXR0cjEoKTsK
LX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjpzZXRDb25kaXRpb25hbEF0dHIxKGludCBuZXdDb25k
aXRpb25hbEF0dHIxKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpbXBsKCktPnNldENvbmRpdGlvbmFsQXR0cjEobmV3Q29uZGl0aW9uYWxBdHRyMSk7Ci19Ci0K
LSNlbmRpZgotI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLWlu
dCBXZWJET01UZXN0T2JqOjpjb25kaXRpb25hbEF0dHIyKCkgY29uc3QKLXsKLSAgICBpZiAoIWlt
cGwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gaW1wbCgpLT5jb25kaXRpb25h
bEF0dHIyKCk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6c2V0Q29uZGl0aW9uYWxBdHRyMihp
bnQgbmV3Q29uZGl0aW9uYWxBdHRyMikKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaW1wbCgpLT5zZXRDb25kaXRpb25hbEF0dHIyKG5ld0NvbmRpdGlvbmFsQXR0
cjIpOwotfQotCi0jZW5kaWYKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjIpCi1pbnQgV2ViRE9NVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyMygpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGltcGwoKS0+
Y29uZGl0aW9uYWxBdHRyMygpOwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6OnNldENvbmRpdGlv
bmFsQXR0cjMoaW50IG5ld0NvbmRpdGlvbmFsQXR0cjMpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+c2V0Q29uZGl0aW9uYWxBdHRyMyhuZXdDb25k
aXRpb25hbEF0dHIzKTsKLX0KLQotI2VuZGlmCi1XZWJET01PYmplY3QgV2ViRE9NVGVzdE9iajo6
YW55QXR0cmlidXRlKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJu
IFdlYkRPTU9iamVjdCgpOwotCi0gICAgcmV0dXJuIHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwo
KS0+YW55QXR0cmlidXRlKCkpKTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjpzZXRBbnlBdHRy
aWJ1dGUoY29uc3QgV2ViRE9NT2JqZWN0JiBuZXdBbnlBdHRyaWJ1dGUpCi17Ci0gICAgaWYgKCFp
bXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+c2V0QW55QXR0cmlidXRlKHRv
V2ViQ29yZShuZXdBbnlBdHRyaWJ1dGUpKTsKLX0KLQotV2ViRE9NRG9jdW1lbnQgV2ViRE9NVGVz
dE9iajo6Y29udGVudERvY3VtZW50KCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAg
ICAgcmV0dXJuIFdlYkRPTURvY3VtZW50KCk7Ci0KLSAgICByZXR1cm4gdG9XZWJLaXQoV1RGOjpn
ZXRQdHIoaW1wbCgpLT5jb250ZW50RG9jdW1lbnQoKSkpOwotfQotCi1XZWJET01TVkdQb2ludCBX
ZWJET01UZXN0T2JqOjptdXRhYmxlUG9pbnQoKSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQot
ICAgICAgICByZXR1cm4gV2ViRE9NU1ZHUG9pbnQoKTsKLQotICAgIHJldHVybiB0b1dlYktpdChX
VEY6OmdldFB0cihpbXBsKCktPm11dGFibGVQb2ludCgpKSk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVz
dE9iajo6c2V0TXV0YWJsZVBvaW50KGNvbnN0IFdlYkRPTVNWR1BvaW50JiBuZXdNdXRhYmxlUG9p
bnQpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+
c2V0TXV0YWJsZVBvaW50KHRvV2ViQ29yZShuZXdNdXRhYmxlUG9pbnQpKTsKLX0KLQotV2ViRE9N
U1ZHUG9pbnQgV2ViRE9NVGVzdE9iajo6aW1tdXRhYmxlUG9pbnQoKSBjb25zdAotewotICAgIGlm
ICghaW1wbCgpKQotICAgICAgICByZXR1cm4gV2ViRE9NU1ZHUG9pbnQoKTsKLQotICAgIHJldHVy
biB0b1dlYktpdChXVEY6OmdldFB0cihpbXBsKCktPmltbXV0YWJsZVBvaW50KCkpKTsKLX0KLQot
dm9pZCBXZWJET01UZXN0T2JqOjpzZXRJbW11dGFibGVQb2ludChjb25zdCBXZWJET01TVkdQb2lu
dCYgbmV3SW1tdXRhYmxlUG9pbnQpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGltcGwoKS0+c2V0SW1tdXRhYmxlUG9pbnQodG9XZWJDb3JlKG5ld0ltbXV0YWJs
ZVBvaW50KSk7Ci19Ci0KLWludCBXZWJET01UZXN0T2JqOjpzdHJhd2JlcnJ5KCkgY29uc3QKLXsK
LSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gaW1wbCgp
LT5ibHVlYmVycnkoKTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjpzZXRTdHJhd2JlcnJ5KGlu
dCBuZXdTdHJhd2JlcnJ5KQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpbXBsKCktPnNldEJsdWViZXJyeShuZXdTdHJhd2JlcnJ5KTsKLX0KLQotZmxvYXQgV2Vi
RE9NVGVzdE9iajo6c3RyaWN0RmxvYXQoKSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBpbXBsKCktPnN0cmljdEZsb2F0KCk7Ci19Ci0K
LXZvaWQgV2ViRE9NVGVzdE9iajo6c2V0U3RyaWN0RmxvYXQoZmxvYXQgbmV3U3RyaWN0RmxvYXQp
Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+c2V0
U3RyaWN0RmxvYXQobmV3U3RyaWN0RmxvYXQpOwotfQotCi1pbnQgV2ViRE9NVGVzdE9iajo6ZGVz
Y3JpcHRpb24oKSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHJldHVybiBpbXBsKCktPmRlc2NyaXB0aW9uKCk7Ci19Ci0KLWludCBXZWJET01UZXN0
T2JqOjppZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIGltcGwoKS0+aWQoKTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjpzZXRJ
ZChpbnQgbmV3SWQpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGltcGwoKS0+c2V0SWQobmV3SWQpOwotfQotCi1XZWJET01TdHJpbmcgV2ViRE9NVGVzdE9iajo6
aGFzaCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiBXZWJET01T
dHJpbmcoKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXVEY6OlN0cmluZyY+KGlt
cGwoKS0+aGFzaCgpKTsKLX0KLQotaW50IFdlYkRPTVRlc3RPYmo6OnJlcGxhY2VhYmxlQXR0cmli
dXRlKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICByZXR1cm4gaW1wbCgpLT5yZXBsYWNlYWJsZUF0dHJpYnV0ZSgpOwotfQotCi1kb3VibGUgV2Vi
RE9NVGVzdE9iajo6bnVsbGFibGVEb3VibGVBdHRyaWJ1dGUoKSBjb25zdAotewotICAgIGlmICgh
aW1wbCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGJvb2wgaXNOdWxsID0gZmFsc2U7Ci0g
ICAgcmV0dXJuIGltcGwoKS0+bnVsbGFibGVEb3VibGVBdHRyaWJ1dGUoaXNOdWxsKTsKLX0KLQot
aW50IFdlYkRPTVRlc3RPYmo6Om51bGxhYmxlTG9uZ0F0dHJpYnV0ZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYm9vbCBpc051bGwgPSBmYWxz
ZTsKLSAgICByZXR1cm4gaW1wbCgpLT5udWxsYWJsZUxvbmdBdHRyaWJ1dGUoaXNOdWxsKTsKLX0K
LQotYm9vbCBXZWJET01UZXN0T2JqOjpudWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGUoKSBjb25zdAot
ewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGlz
TnVsbCA9IGZhbHNlOwotICAgIHJldHVybiBpbXBsKCktPm51bGxhYmxlQm9vbGVhbkF0dHJpYnV0
ZShpc051bGwpOwotfQotCi1XZWJET01TdHJpbmcgV2ViRE9NVGVzdE9iajo6bnVsbGFibGVTdHJp
bmdBdHRyaWJ1dGUoKSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4g
V2ViRE9NU3RyaW5nKCk7Ci0KLSAgICBib29sIGlzTnVsbCA9IGZhbHNlOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBXVEY6OlN0cmluZyY+KGltcGwoKS0+bnVsbGFibGVTdHJpbmdBdHRy
aWJ1dGUoaXNOdWxsKSk7Ci19Ci0KLWludCBXZWJET01UZXN0T2JqOjpudWxsYWJsZUxvbmdTZXR0
YWJsZUF0dHJpYnV0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgYm9vbCBpc051bGwgPSBmYWxzZTsKLSAgICByZXR1cm4gaW1wbCgpLT5udWxs
YWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShpc051bGwpOwotfQotCi12b2lkIFdlYkRPTVRlc3RP
Ymo6OnNldE51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKGludCBuZXdOdWxsYWJsZUxvbmdT
ZXR0YWJsZUF0dHJpYnV0ZSkKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaW1wbCgpLT5zZXROdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShuZXdOdWxsYWJs
ZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSk7Ci19Ci0KLWludCBXZWJET01UZXN0T2JqOjpudWxsYWJs
ZVN0cmluZ1ZhbHVlKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBib29sIGlzTnVsbCA9IGZhbHNlOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIGludCByZXN1bHQgPSBpbXBsKCktPm51bGxhYmxlU3RyaW5nVmFsdWUo
aXNOdWxsLCBlYyk7Ci0gICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNl
cHRpb25Db2RlPihlYykpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgV2ViRE9NVGVz
dE9iajo6c2V0TnVsbGFibGVTdHJpbmdWYWx1ZShpbnQgbmV3TnVsbGFibGVTdHJpbmdWYWx1ZSkK
LXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5zZXRO
dWxsYWJsZVN0cmluZ1ZhbHVlKG5ld051bGxhYmxlU3RyaW5nVmFsdWUpOwotfQotCi1XZWJET01T
dHJpbmcgV2ViRE9NVGVzdE9iajo6YXR0cmlidXRlKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwo
KSkKLSAgICAgICAgcmV0dXJuIFdlYkRPTVN0cmluZygpOwotCi0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IFdURjo6U3RyaW5nJj4oaW1wbCgpLT5hdHRyaWJ1dGUoKSk7Ci19Ci0KLXZvaWQg
V2ViRE9NVGVzdE9iajo6dm9pZE1ldGhvZCgpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGltcGwoKS0+dm9pZE1ldGhvZCgpOwotfQotCi12b2lkIFdlYkRPTVRl
c3RPYmo6OnZvaWRNZXRob2RXaXRoQXJncyhpbnQgbG9uZ0FyZywgY29uc3QgV2ViRE9NU3RyaW5n
JiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZykKLXsKLSAgICBpZiAoIWltcGwo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT52b2lkTWV0aG9kV2l0aEFyZ3MobG9u
Z0FyZywgc3RyQXJnLCB0b1dlYkNvcmUob2JqQXJnKSk7Ci19Ci0KLWNoYXIgV2ViRE9NVGVzdE9i
ajo6Ynl0ZU1ldGhvZCgpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiBjaGFy
KCk7Ci0KLSAgICByZXR1cm4gaW1wbCgpLT5ieXRlTWV0aG9kKCk7Ci19Ci0KLWNoYXIgV2ViRE9N
VGVzdE9iajo6Ynl0ZU1ldGhvZFdpdGhBcmdzKGNoYXIgYnl0ZUFyZywgY29uc3QgV2ViRE9NU3Ry
aW5nJiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZykKLXsKLSAgICBpZiAoIWlt
cGwoKSkKLSAgICAgICAgcmV0dXJuIGNoYXIoKTsKLQotICAgIHJldHVybiBpbXBsKCktPmJ5dGVN
ZXRob2RXaXRoQXJncyhieXRlQXJnLCBzdHJBcmcsIHRvV2ViQ29yZShvYmpBcmcpKTsKLX0KLQot
dW5zaWduZWQgY2hhciBXZWJET01UZXN0T2JqOjpvY3RldE1ldGhvZCgpCi17Ci0gICAgaWYgKCFp
bXBsKCkpCi0gICAgICAgIHJldHVybiB1bnNpZ25lZCBjaGFyKCk7Ci0KLSAgICByZXR1cm4gaW1w
bCgpLT5vY3RldE1ldGhvZCgpOwotfQotCi11bnNpZ25lZCBjaGFyIFdlYkRPTVRlc3RPYmo6Om9j
dGV0TWV0aG9kV2l0aEFyZ3ModW5zaWduZWQgY2hhciBvY3RldEFyZywgY29uc3QgV2ViRE9NU3Ry
aW5nJiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZykKLXsKLSAgICBpZiAoIWlt
cGwoKSkKLSAgICAgICAgcmV0dXJuIHVuc2lnbmVkIGNoYXIoKTsKLQotICAgIHJldHVybiBpbXBs
KCktPm9jdGV0TWV0aG9kV2l0aEFyZ3Mob2N0ZXRBcmcsIHN0ckFyZywgdG9XZWJDb3JlKG9iakFy
ZykpOwotfQotCi1pbnQgV2ViRE9NVGVzdE9iajo6bG9uZ01ldGhvZCgpCi17Ci0gICAgaWYgKCFp
bXBsKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGltcGwoKS0+bG9uZ01ldGhv
ZCgpOwotfQotCi1pbnQgV2ViRE9NVGVzdE9iajo6bG9uZ01ldGhvZFdpdGhBcmdzKGludCBsb25n
QXJnLCBjb25zdCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2Jq
QXJnKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVy
biBpbXBsKCktPmxvbmdNZXRob2RXaXRoQXJncyhsb25nQXJnLCBzdHJBcmcsIHRvV2ViQ29yZShv
YmpBcmcpKTsKLX0KLQotV2ViRE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjpvYmpNZXRob2QoKQot
ewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gV2ViRE9NVGVzdE9iaigpOwotCi0g
ICAgcmV0dXJuIHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+b2JqTWV0aG9kKCkpKTsKLX0K
LQotV2ViRE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjpvYmpNZXRob2RXaXRoQXJncyhpbnQgbG9u
Z0FyZywgY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9i
akFyZykKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIFdlYkRPTVRlc3RPYmoo
KTsKLQotICAgIHJldHVybiB0b1dlYktpdChXVEY6OmdldFB0cihpbXBsKCktPm9iak1ldGhvZFdp
dGhBcmdzKGxvbmdBcmcsIHN0ckFyZywgdG9XZWJDb3JlKG9iakFyZykpKSk7Ci19Ci0KLXZvaWQg
V2ViRE9NVGVzdE9iajo6bWV0aG9kV2l0aEVudW1BcmcoY29uc3QgV2ViRE9NVGVzdEVudW1UeXBl
JiBlbnVtQXJnKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
bXBsKCktPm1ldGhvZFdpdGhFbnVtQXJnKHRvV2ViQ29yZShlbnVtQXJnKSk7Ci19Ci0KLVdlYkRP
TVRlc3RPYmogV2ViRE9NVGVzdE9iajo6bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93
cyhjb25zdCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJn
KQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm4gV2ViRE9NVGVzdE9iaigpOwot
Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViRE9NVGVzdE9iaiBy
ZXN1bHQgPSB0b1dlYktpdChXVEY6OmdldFB0cihpbXBsKCktPm1ldGhvZFRoYXRSZXF1aXJlc0Fs
bEFyZ3NBbmRUaHJvd3Moc3RyQXJnLCB0b1dlYkNvcmUob2JqQXJnKSwgZWMpKSk7Ci0gICAgd2Vi
RE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVl
KGNvbnN0IFdlYkRPTVN0cmluZyYgc2VyaWFsaXplZEFyZykKLXsKLSAgICBpZiAoIWltcGwoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5zZXJpYWxpemVkVmFsdWUoV2ViQ29yZTo6
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV1RGOjpTdHJpbmcoc2VyaWFsaXplZEFyZykp
KTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjpvcHRpb25zT2JqZWN0KGNvbnN0IFdlYkRPTURp
Y3Rpb25hcnkmIG9vLCBjb25zdCBXZWJET01EaWN0aW9uYXJ5JiBvb28pCi17Ci0gICAgaWYgKCFp
bXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+b3B0aW9uc09iamVjdCh0b1dl
YkNvcmUob28pLCB0b1dlYkNvcmUob29vKSk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6bWV0
aG9kV2l0aEV4Y2VwdGlvbigpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS0+bWV0aG9k
V2l0aEV4Y2VwdGlvbihlYyk7Ci0gICAgd2ViRE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJE
T01FeGNlcHRpb25Db2RlPihlYykpOwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6OmFkZEV2ZW50
TGlzdGVuZXIoY29uc3QgV2ViRE9NU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJET01FdmVudExpc3Rl
bmVyJiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQotewotICAgIGlmICghaW1wbCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdG9XZWJD
b3JlKGxpc3RlbmVyKSwgdXNlQ2FwdHVyZSk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6cmVt
b3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJET01TdHJpbmcmIHR5cGUsIGNvbnN0IFdlYkRPTUV2
ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCi17Ci0gICAgaWYgKCFpbXBs
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih0
eXBlLCB0b1dlYkNvcmUobGlzdGVuZXIpLCB1c2VDYXB0dXJlKTsKLX0KLQotdm9pZCBXZWJET01U
ZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxBcmcoaW50IG9wdCkKLXsKLSAgICBpZiAoIWltcGwo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5tZXRob2RXaXRoT3B0aW9uYWxBcmco
b3B0KTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjptZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdB
bmRPcHRpb25hbEFyZyhpbnQgbm9uT3B0LCBpbnQgb3B0KQotewotICAgIGlmICghaW1wbCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCktPm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0Fu
ZE9wdGlvbmFsQXJnKG5vbk9wdCwgb3B0KTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjptZXRo
b2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoaW50IG5vbk9wdCwgaW50IG9w
dDEsIGludCBvcHQyKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpbXBsKCktPm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhub25P
cHQsIG9wdDEsIG9wdDIpOwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6Om1ldGhvZFdpdGhPcHRp
b25hbFN0cmluZyhjb25zdCBXZWJET01TdHJpbmcmIHN0cikKLXsKLSAgICBpZiAoIWltcGwoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmco
c3RyKTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJ
c1VuZGVmaW5lZChjb25zdCBXZWJET01TdHJpbmcmIHN0cikKLXsKLSAgICBpZiAoIWltcGwoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJ
c1VuZGVmaW5lZChzdHIpOwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6Om1ldGhvZFdpdGhPcHRp
b25hbFN0cmluZ0lzTnVsbFN0cmluZyhjb25zdCBXZWJET01TdHJpbmcmIHN0cikKLXsKLSAgICBp
ZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5tZXRob2RXaXRoT3B0
aW9uYWxTdHJpbmdJc051bGxTdHJpbmcoc3RyKTsKLX0KLQotCi0jaWYgRU5BQkxFKENvbmRpdGlv
bjEpCi1XZWJET01TdHJpbmcgV2ViRE9NVGVzdE9iajo6Y29uZGl0aW9uYWxNZXRob2QxKCkKLXsK
LSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIFdlYkRPTVN0cmluZygpOwotCi0gICAg
cmV0dXJuIGltcGwoKS0+Y29uZGl0aW9uYWxNZXRob2QxKCk7Ci19Ci0KLSNlbmRpZgotCi0KLSNp
ZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCi12b2lkIFdlYkRPTVRl
c3RPYmo6OmNvbmRpdGlvbmFsTWV0aG9kMigpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGltcGwoKS0+Y29uZGl0aW9uYWxNZXRob2QyKCk7Ci19Ci0KLSNlbmRp
ZgotCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi12b2lk
IFdlYkRPTVRlc3RPYmo6OmNvbmRpdGlvbmFsTWV0aG9kMygpCi17Ci0gICAgaWYgKCFpbXBsKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+Y29uZGl0aW9uYWxNZXRob2QzKCk7Ci19
Ci0KLSNlbmRpZgotCi12b2lkIFdlYkRPTVRlc3RPYmo6OmNsYXNzTWV0aG9kKCkKLXsKLSAgICBp
ZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5jbGFzc01ldGhvZCgp
OwotfQotCi1pbnQgV2ViRE9NVGVzdE9iajo6Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoaW50IGFy
ZykKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4g
aW1wbCgpLT5jbGFzc01ldGhvZFdpdGhPcHRpb25hbChhcmcpOwotfQotCi0KLSNpZiBFTkFCTEUo
Q29uZGl0aW9uMSkKLXZvaWQgV2ViRE9NVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZDEoaW50IGFy
ZykKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5v
dmVybG9hZGVkTWV0aG9kMShhcmcpOwotfQotCi0jZW5kaWYKLQotCi0jaWYgRU5BQkxFKENvbmRp
dGlvbjEpCi12b2lkIFdlYkRPTVRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxKGNvbnN0IFdlYkRP
TVN0cmluZyYgdHlwZSkKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaW1wbCgpLT5vdmVybG9hZGVkTWV0aG9kMSh0eXBlKTsKLX0KLQotI2VuZGlmCi0KLXZvaWQg
V2ViRE9NVGVzdE9iajo6Y29udmVydDEoY29uc3QgV2ViRE9NVGVzdE5vZGUmIHZhbHVlKQotewot
ICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCktPmNvbnZlcnQx
KHRvV2ViQ29yZSh2YWx1ZSkpOwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6OmNvbnZlcnQyKGNv
bnN0IFdlYkRPTVRlc3ROb2RlJiB2YWx1ZSkKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaW1wbCgpLT5jb252ZXJ0Mih0b1dlYkNvcmUodmFsdWUpKTsKLX0KLQot
dm9pZCBXZWJET01UZXN0T2JqOjpjb252ZXJ0NChjb25zdCBXZWJET01UZXN0Tm9kZSYgdmFsdWUp
Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+Y29u
dmVydDQodG9XZWJDb3JlKHZhbHVlKSk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdE9iajo6Y29udmVy
dDUoY29uc3QgV2ViRE9NVGVzdE5vZGUmIHZhbHVlKQotewotICAgIGlmICghaW1wbCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCktPmNvbnZlcnQ1KHRvV2ViQ29yZSh2YWx1ZSkpOwot
fQotCi1XZWJET01TVkdQb2ludCBXZWJET01UZXN0T2JqOjptdXRhYmxlUG9pbnRGdW5jdGlvbigp
Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiBXZWJET01TVkdQb2ludCgpOwot
Ci0gICAgcmV0dXJuIHRvV2ViS2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+bXV0YWJsZVBvaW50RnVu
Y3Rpb24oKSkpOwotfQotCi1XZWJET01TVkdQb2ludCBXZWJET01UZXN0T2JqOjppbW11dGFibGVQ
b2ludEZ1bmN0aW9uKCkKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIFdlYkRP
TVNWR1BvaW50KCk7Ci0KLSAgICByZXR1cm4gdG9XZWJLaXQoV1RGOjpnZXRQdHIoaW1wbCgpLT5p
bW11dGFibGVQb2ludEZ1bmN0aW9uKCkpKTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjpvcmFu
Z2UoKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCkt
Pm9yYW5nZSgpOwotfQotCi1XZWJET01ib29sIFdlYkRPTVRlc3RPYmo6OnN0cmljdEZ1bmN0aW9u
KGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyLCBmbG9hdCBhLCBpbnQgYikKLXsKLSAgICBpZiAoIWlt
cGwoKSkKLSAgICAgICAgcmV0dXJuIFdlYkRPTWJvb2woKTsKLQotICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkRPTWJvb2wgcmVzdWx0ID0gdG9XZWJLaXQoV1RGOjpn
ZXRQdHIoaW1wbCgpLT5zdHJpY3RGdW5jdGlvbihzdHIsIGEsIGIsIGVjKSkpOwotICAgIHdlYkRP
TVJhaXNlRXJyb3Ioc3RhdGljX2Nhc3Q8V2ViRE9NRXhjZXB0aW9uQ29kZT4oZWMpKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6OnZhcmlhZGljU3RyaW5nTWV0
aG9kKGNvbnN0IFdlYkRPTVN0cmluZyYgaGVhZCwgY29uc3QgV2ViRE9NU3RyaW5nJiB0YWlsKQot
ewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCktPnZhcmlh
ZGljU3RyaW5nTWV0aG9kKGhlYWQsIHRhaWwpOwotfQotCi12b2lkIFdlYkRPTVRlc3RPYmo6OnZh
cmlhZGljRG91YmxlTWV0aG9kKGRvdWJsZSBoZWFkLCBkb3VibGUgdGFpbCkKLXsKLSAgICBpZiAo
IWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT52YXJpYWRpY0RvdWJsZU1l
dGhvZChoZWFkLCB0YWlsKTsKLX0KLQotdm9pZCBXZWJET01UZXN0T2JqOjp2YXJpYWRpY05vZGVN
ZXRob2QoY29uc3QgV2ViRE9NTm9kZSYgaGVhZCwgY29uc3QgV2ViRE9NTm9kZSYgdGFpbCkKLXsK
LSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT52YXJpYWRp
Y05vZGVNZXRob2QodG9XZWJDb3JlKGhlYWQpLCB0b1dlYkNvcmUodGFpbCkpOwotfQotCi12b2lk
IFdlYkRPTVRlc3RPYmo6OmFueShmbG9hdCBhLCBpbnQgYikKLXsKLSAgICBpZiAoIWltcGwoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5hbnkoYSwgYik7Ci19Ci0KLVdlYkNvcmU6
OlRlc3RPYmoqIHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0T2JqJiB3cmFwcGVyKQotewotICAg
IHJldHVybiB3cmFwcGVyLmltcGwoKTsKLX0KLQotV2ViRE9NVGVzdE9iaiB0b1dlYktpdChXZWJD
b3JlOjpUZXN0T2JqKiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gV2ViRE9NVGVzdE9iaih2YWx1ZSk7
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQ
L1dlYkRPTVRlc3RPYmouaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9D
UFAvV2ViRE9NVGVzdE9iai5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzk2MWQ4
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAv
V2ViRE9NVGVzdE9iai5oCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aWZuZGVmIFdlYkRPTVRlc3RPYmpfaAotI2RlZmluZSBXZWJET01UZXN0T2JqX2gKLQotI2luY2x1
ZGUgPFdlYkRPTU9iamVjdC5oPgotI2luY2x1ZGUgPFdlYkRPTVN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci1jbGFzcyBUZXN0T2JqOwotfTsKLQotY2xhc3MgV2ViRE9NRGljdGlvbmFy
eTsKLWNsYXNzIFdlYkRPTURvY3VtZW50OwotY2xhc3MgV2ViRE9NRXZlbnRMaXN0ZW5lcjsKLWNs
YXNzIFdlYkRPTU5vZGU7Ci1jbGFzcyBXZWJET01PYmplY3Q7Ci1jbGFzcyBXZWJET01TVkdQb2lu
dDsKLWNsYXNzIFdlYkRPTVN0cmluZzsKLWNsYXNzIFdlYkRPTVRlc3RFbnVtVHlwZTsKLWNsYXNz
IFdlYkRPTVRlc3ROb2RlOwotY2xhc3MgV2ViRE9NVGVzdE9iajsKLWNsYXNzIFdlYkRPTWJvb2w7
Ci0KLWNsYXNzIFdlYkRPTVRlc3RPYmogOiBwdWJsaWMgV2ViRE9NT2JqZWN0IHsKLXB1YmxpYzoK
LSAgICBXZWJET01UZXN0T2JqKCk7Ci0gICAgZXhwbGljaXQgV2ViRE9NVGVzdE9iaihXZWJDb3Jl
OjpUZXN0T2JqKik7Ci0gICAgV2ViRE9NVGVzdE9iaihjb25zdCBXZWJET01UZXN0T2JqJik7Ci0g
ICAgV2ViRE9NVGVzdE9iaiYgb3BlcmF0b3I9KGNvbnN0IFdlYkRPTVRlc3RPYmomKTsKLSAgICB2
aXJ0dWFsIH5XZWJET01UZXN0T2JqKCk7Ci0KLSAgICBlbnVtIHsKLSNpZiBFTkFCTEUoQ29uZGl0
aW9uMSkKLSAgICAgICAgV0VCRE9NX0NPTkRJVElPTkFMX0NPTlNUID0gMCwKLSNlbmRpZgotICAg
ICAgICBXRUJET01fQ09OU1RfVkFMVUVfMCA9IDAsCi0gICAgICAgIFdFQkRPTV9DT05TVF9WQUxV
RV8xID0gMSwKLSAgICAgICAgV0VCRE9NX0NPTlNUX1ZBTFVFXzIgPSAyLAotICAgICAgICBXRUJE
T01fQ09OU1RfVkFMVUVfNCA9IDQsCi0gICAgICAgIFdFQkRPTV9DT05TVF9WQUxVRV84ID0gOCwK
LSAgICAgICAgV0VCRE9NX0NPTlNUX1ZBTFVFXzkgPSAtMSwKLSAgICAgICAgV0VCRE9NX0NPTlNU
X1ZBTFVFXzEwID0gIm15IGNvbnN0YW50IHN0cmluZyIsCi0gICAgICAgIFdFQkRPTV9DT05TVF9W
QUxVRV8xMSA9IDB4ZmZmZmZmZmYsCi0gICAgICAgIFdFQkRPTV9DT05TVF9WQUxVRV8xMiA9IDB4
MDEsCi0gICAgICAgIFdFQkRPTV9DT05TVF9WQUxVRV8xMyA9IDBYMjAsCi0gICAgICAgIFdFQkRP
TV9DT05TVF9WQUxVRV8xNCA9IDB4MWFiYywKLSAgICAgICAgV0VCRE9NX0NPTlNUX0pBVkFTQ1JJ
UFQgPSAxNSwKLSAgICAgICAgV0VCRE9NX3JlYWRvbmx5ID0gMAotICAgIH07Ci0KLSAgICBpbnQg
cmVhZE9ubHlMb25nQXR0cigpIGNvbnN0OwotICAgIFdlYkRPTVN0cmluZyByZWFkT25seVN0cmlu
Z0F0dHIoKSBjb25zdDsKLSAgICBXZWJET01UZXN0T2JqIHJlYWRPbmx5VGVzdE9iakF0dHIoKSBj
b25zdDsKLSAgICBjaGFyIGJ5dGVBdHRyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRCeXRlQXR0cihj
aGFyKTsKLSAgICB1bnNpZ25lZCBjaGFyIG9jdGV0QXR0cigpIGNvbnN0OwotICAgIHZvaWQgc2V0
T2N0ZXRBdHRyKHVuc2lnbmVkIGNoYXIpOwotICAgIHNob3J0IHNob3J0QXR0cigpIGNvbnN0Owot
ICAgIHZvaWQgc2V0U2hvcnRBdHRyKHNob3J0KTsKLSAgICB1bnNpZ25lZCBzaG9ydCB1bnNpZ25l
ZFNob3J0QXR0cigpIGNvbnN0OwotICAgIHZvaWQgc2V0VW5zaWduZWRTaG9ydEF0dHIodW5zaWdu
ZWQgc2hvcnQpOwotICAgIGludCBsb25nQXR0cigpIGNvbnN0OwotICAgIHZvaWQgc2V0TG9uZ0F0
dHIoaW50KTsKLSAgICBsb25nIGxvbmcgbG9uZ0xvbmdBdHRyKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRMb25nTG9uZ0F0dHIobG9uZyBsb25nKTsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgdW5zaWdu
ZWRMb25nTG9uZ0F0dHIoKSBjb25zdDsKLSAgICB2b2lkIHNldFVuc2lnbmVkTG9uZ0xvbmdBdHRy
KHVuc2lnbmVkIGxvbmcgbG9uZyk7Ci0gICAgV2ViRE9NU3RyaW5nIHN0cmluZ0F0dHIoKSBjb25z
dDsKLSAgICB2b2lkIHNldFN0cmluZ0F0dHIoY29uc3QgV2ViRE9NU3RyaW5nJik7Ci0gICAgV2Vi
RE9NVGVzdE9iaiB0ZXN0T2JqQXR0cigpIGNvbnN0OwotICAgIHZvaWQgc2V0VGVzdE9iakF0dHIo
Y29uc3QgV2ViRE9NVGVzdE9iaiYpOwotICAgIFdlYkRPTVRlc3RPYmogWE1MT2JqQXR0cigpIGNv
bnN0OwotICAgIHZvaWQgc2V0WE1MT2JqQXR0cihjb25zdCBXZWJET01UZXN0T2JqJik7Ci0gICAg
Ym9vbCBjcmVhdGUoKSBjb25zdDsKLSAgICB2b2lkIHNldENyZWF0ZShib29sKTsKLSAgICBXZWJE
T01TdHJpbmcgcmVmbGVjdGVkU3RyaW5nQXR0cigpIGNvbnN0OwotICAgIHZvaWQgc2V0UmVmbGVj
dGVkU3RyaW5nQXR0cihjb25zdCBXZWJET01TdHJpbmcmKTsKLSAgICBpbnQgcmVmbGVjdGVkSW50
ZWdyYWxBdHRyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoaW50
KTsKLSAgICB1bnNpZ25lZCByZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cigpIGNvbnN0Owot
ICAgIHZvaWQgc2V0UmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIodW5zaWduZWQpOwotICAg
IGJvb2wgcmVmbGVjdGVkQm9vbGVhbkF0dHIoKSBjb25zdDsKLSAgICB2b2lkIHNldFJlZmxlY3Rl
ZEJvb2xlYW5BdHRyKGJvb2wpOwotICAgIFdlYkRPTVN0cmluZyByZWZsZWN0ZWRVUkxBdHRyKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRSZWZsZWN0ZWRVUkxBdHRyKGNvbnN0IFdlYkRPTVN0cmluZyYp
OwotICAgIFdlYkRPTVN0cmluZyByZWZsZWN0ZWRTdHJpbmdBdHRyKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRSZWZsZWN0ZWRTdHJpbmdBdHRyKGNvbnN0IFdlYkRPTVN0cmluZyYpOwotICAgIGludCBy
ZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIoKSBjb25zdDsKLSAgICB2b2lkIHNldFJlZmxlY3Rl
ZEN1c3RvbUludGVncmFsQXR0cihpbnQpOwotICAgIGJvb2wgcmVmbGVjdGVkQ3VzdG9tQm9vbGVh
bkF0dHIoKSBjb25zdDsKLSAgICB2b2lkIHNldFJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyKGJv
b2wpOwotICAgIFdlYkRPTVN0cmluZyByZWZsZWN0ZWRDdXN0b21VUkxBdHRyKCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKGNvbnN0IFdlYkRPTVN0cmluZyYpOwot
ICAgIGludCBhdHRyV2l0aEdldHRlckV4Y2VwdGlvbigpIGNvbnN0OwotICAgIHZvaWQgc2V0QXR0
cldpdGhHZXR0ZXJFeGNlcHRpb24oaW50KTsKLSAgICBpbnQgYXR0cldpdGhTZXR0ZXJFeGNlcHRp
b24oKSBjb25zdDsKLSAgICB2b2lkIHNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKGludCk7Ci0g
ICAgV2ViRE9NU3RyaW5nIHN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihjb25zdCBXZWJET01TdHJp
bmcmKTsKLSAgICBXZWJET01TdHJpbmcgc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSBj
b25zdDsKLSAgICB2b2lkIHNldFN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKGNvbnN0IFdl
YkRPTVN0cmluZyYpOwotI2lmIEVOQUJMRShDb25kaXRpb24xKQotICAgIGludCBjb25kaXRpb25h
bEF0dHIxKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb25kaXRpb25hbEF0dHIxKGludCk7Ci0jZW5k
aWYKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgaW50
IGNvbmRpdGlvbmFsQXR0cjIoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbmRpdGlvbmFsQXR0cjIo
aW50KTsKLSNlbmRpZgotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MikKLSAgICBpbnQgY29uZGl0aW9uYWxBdHRyMygpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29uZGl0
aW9uYWxBdHRyMyhpbnQpOwotI2VuZGlmCi0gICAgV2ViRE9NT2JqZWN0IGFueUF0dHJpYnV0ZSgp
IGNvbnN0OwotICAgIHZvaWQgc2V0QW55QXR0cmlidXRlKGNvbnN0IFdlYkRPTU9iamVjdCYpOwot
ICAgIFdlYkRPTURvY3VtZW50IGNvbnRlbnREb2N1bWVudCgpIGNvbnN0OwotICAgIFdlYkRPTVNW
R1BvaW50IG11dGFibGVQb2ludCgpIGNvbnN0OwotICAgIHZvaWQgc2V0TXV0YWJsZVBvaW50KGNv
bnN0IFdlYkRPTVNWR1BvaW50Jik7Ci0gICAgV2ViRE9NU1ZHUG9pbnQgaW1tdXRhYmxlUG9pbnQo
KSBjb25zdDsKLSAgICB2b2lkIHNldEltbXV0YWJsZVBvaW50KGNvbnN0IFdlYkRPTVNWR1BvaW50
Jik7Ci0gICAgaW50IHN0cmF3YmVycnkoKSBjb25zdDsKLSAgICB2b2lkIHNldFN0cmF3YmVycnko
aW50KTsKLSAgICBmbG9hdCBzdHJpY3RGbG9hdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0U3RyaWN0
RmxvYXQoZmxvYXQpOwotICAgIGludCBkZXNjcmlwdGlvbigpIGNvbnN0OwotICAgIGludCBpZCgp
IGNvbnN0OwotICAgIHZvaWQgc2V0SWQoaW50KTsKLSAgICBXZWJET01TdHJpbmcgaGFzaCgpIGNv
bnN0OwotICAgIGludCByZXBsYWNlYWJsZUF0dHJpYnV0ZSgpIGNvbnN0OwotICAgIGRvdWJsZSBu
dWxsYWJsZURvdWJsZUF0dHJpYnV0ZSgpIGNvbnN0OwotICAgIGludCBudWxsYWJsZUxvbmdBdHRy
aWJ1dGUoKSBjb25zdDsKLSAgICBib29sIG51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZSgpIGNvbnN0
OwotICAgIFdlYkRPTVN0cmluZyBudWxsYWJsZVN0cmluZ0F0dHJpYnV0ZSgpIGNvbnN0OwotICAg
IGludCBudWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0
TnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoaW50KTsKLSAgICBpbnQgbnVsbGFibGVTdHJp
bmdWYWx1ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TnVsbGFibGVTdHJpbmdWYWx1ZShpbnQpOwot
ICAgIFdlYkRPTVN0cmluZyBhdHRyaWJ1dGUoKSBjb25zdDsKLQotICAgIHZvaWQgdm9pZE1ldGhv
ZCgpOwotICAgIHZvaWQgdm9pZE1ldGhvZFdpdGhBcmdzKGludCBsb25nQXJnLCBjb25zdCBXZWJE
T01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKLSAgICBjaGFy
IGJ5dGVNZXRob2QoKTsKLSAgICBjaGFyIGJ5dGVNZXRob2RXaXRoQXJncyhjaGFyIGJ5dGVBcmcs
IGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcp
OwotICAgIHVuc2lnbmVkIGNoYXIgb2N0ZXRNZXRob2QoKTsKLSAgICB1bnNpZ25lZCBjaGFyIG9j
dGV0TWV0aG9kV2l0aEFyZ3ModW5zaWduZWQgY2hhciBvY3RldEFyZywgY29uc3QgV2ViRE9NU3Ry
aW5nJiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7Ci0gICAgaW50IGxvbmdN
ZXRob2QoKTsKLSAgICBpbnQgbG9uZ01ldGhvZFdpdGhBcmdzKGludCBsb25nQXJnLCBjb25zdCBX
ZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKLSAgICBX
ZWJET01UZXN0T2JqIG9iak1ldGhvZCgpOwotICAgIFdlYkRPTVRlc3RPYmogb2JqTWV0aG9kV2l0
aEFyZ3MoaW50IGxvbmdBcmcsIGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJE
T01UZXN0T2JqJiBvYmpBcmcpOwotICAgIHZvaWQgbWV0aG9kV2l0aEVudW1BcmcoY29uc3QgV2Vi
RE9NVGVzdEVudW1UeXBlJiBlbnVtQXJnKTsKLSAgICBXZWJET01UZXN0T2JqIG1ldGhvZFRoYXRS
ZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcsIGNvbnN0
IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7Ci0gICAgdm9pZCBzZXJpYWxpemVkVmFsdWUoY29uc3Qg
V2ViRE9NU3RyaW5nJiBzZXJpYWxpemVkQXJnKTsKLSAgICB2b2lkIG9wdGlvbnNPYmplY3QoY29u
c3QgV2ViRE9NRGljdGlvbmFyeSYgb28sIGNvbnN0IFdlYkRPTURpY3Rpb25hcnkmIG9vbyk7Ci0g
ICAgdm9pZCBtZXRob2RXaXRoRXhjZXB0aW9uKCk7Ci0gICAgdm9pZCBhZGRFdmVudExpc3RlbmVy
KGNvbnN0IFdlYkRPTVN0cmluZyYgdHlwZSwgY29uc3QgV2ViRE9NRXZlbnRMaXN0ZW5lciYgbGlz
dGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSk7Ci0gICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNv
bnN0IFdlYkRPTVN0cmluZyYgdHlwZSwgY29uc3QgV2ViRE9NRXZlbnRMaXN0ZW5lciYgbGlzdGVu
ZXIsIGJvb2wgdXNlQ2FwdHVyZSk7Ci0gICAgdm9pZCBtZXRob2RXaXRoT3B0aW9uYWxBcmcoaW50
IG9wdCk7Ci0gICAgdm9pZCBtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhp
bnQgbm9uT3B0LCBpbnQgb3B0KTsKLSAgICB2b2lkIG1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0Fu
ZFR3b09wdGlvbmFsQXJncyhpbnQgbm9uT3B0LCBpbnQgb3B0MSwgaW50IG9wdDIpOwotICAgIHZv
aWQgbWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyKTsKLSAg
ICB2b2lkIG1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkKGNvbnN0IFdlYkRPTVN0
cmluZyYgc3RyKTsKLSAgICB2b2lkIG1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbFN0cmlu
Zyhjb25zdCBXZWJET01TdHJpbmcmIHN0cik7Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCi0gICAg
V2ViRE9NU3RyaW5nIGNvbmRpdGlvbmFsTWV0aG9kMSgpOwotI2VuZGlmCi0jaWYgRU5BQkxFKENv
bmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotICAgIHZvaWQgY29uZGl0aW9uYWxNZXRo
b2QyKCk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjIpCi0gICAgdm9pZCBjb25kaXRpb25hbE1ldGhvZDMoKTsKLSNlbmRpZgotICAgIHZvaWQgY2xh
c3NNZXRob2QoKTsKLSAgICBpbnQgY2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoaW50IGFyZyk7Ci0j
aWYgRU5BQkxFKENvbmRpdGlvbjEpCi0gICAgdm9pZCBvdmVybG9hZGVkTWV0aG9kMShpbnQgYXJn
KTsKLSNlbmRpZgotI2lmIEVOQUJMRShDb25kaXRpb24xKQotICAgIHZvaWQgb3ZlcmxvYWRlZE1l
dGhvZDEoY29uc3QgV2ViRE9NU3RyaW5nJiB0eXBlKTsKLSNlbmRpZgotICAgIHZvaWQgY29udmVy
dDEoY29uc3QgV2ViRE9NVGVzdE5vZGUmIHZhbHVlKTsKLSAgICB2b2lkIGNvbnZlcnQyKGNvbnN0
IFdlYkRPTVRlc3ROb2RlJiB2YWx1ZSk7Ci0gICAgdm9pZCBjb252ZXJ0NChjb25zdCBXZWJET01U
ZXN0Tm9kZSYgdmFsdWUpOwotICAgIHZvaWQgY29udmVydDUoY29uc3QgV2ViRE9NVGVzdE5vZGUm
IHZhbHVlKTsKLSAgICBXZWJET01TVkdQb2ludCBtdXRhYmxlUG9pbnRGdW5jdGlvbigpOwotICAg
IFdlYkRPTVNWR1BvaW50IGltbXV0YWJsZVBvaW50RnVuY3Rpb24oKTsKLSAgICB2b2lkIGJhbmFu
YSgpOwotICAgIFdlYkRPTWJvb2wgc3RyaWN0RnVuY3Rpb24oY29uc3QgV2ViRE9NU3RyaW5nJiBz
dHIsIGZsb2F0IGEsIGludCBiKTsKLSAgICB2b2lkIHZhcmlhZGljU3RyaW5nTWV0aG9kKGNvbnN0
IFdlYkRPTVN0cmluZyYgaGVhZCwgY29uc3QgV2ViRE9NU3RyaW5nJiB0YWlsKTsKLSAgICB2b2lk
IHZhcmlhZGljRG91YmxlTWV0aG9kKGRvdWJsZSBoZWFkLCBkb3VibGUgdGFpbCk7Ci0gICAgdm9p
ZCB2YXJpYWRpY05vZGVNZXRob2QoY29uc3QgV2ViRE9NTm9kZSYgaGVhZCwgY29uc3QgV2ViRE9N
Tm9kZSYgdGFpbCk7Ci0gICAgdm9pZCBhbnkoZmxvYXQgYSwgaW50IGIpOwotCi0gICAgV2ViQ29y
ZTo6VGVzdE9iaiogaW1wbCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgc3RydWN0IFdlYkRP
TVRlc3RPYmpQcml2YXRlOwotICAgIFdlYkRPTVRlc3RPYmpQcml2YXRlKiBtX2ltcGw7Ci19Owot
Ci1XZWJDb3JlOjpUZXN0T2JqKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdE9iaiYpOwotV2Vi
RE9NVGVzdE9iaiB0b1dlYktpdChXZWJDb3JlOjpUZXN0T2JqKik7Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY2YTJlZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViRE9NVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgi
Ci0jaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLXN0cnVjdCBXZWJET01UZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yczo6V2ViRE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcml2YXRlIHsK
LSAgICBXZWJET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1ByaXZhdGUoV2ViQ29yZTo6VGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIG9iamVjdCA9IDApCi0gICAgICAgIDogaW1wbChvYmpl
Y3QpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycz4gaW1wbDsKLX07Ci0KLVdlYkRPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
OjpXZWJET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycygpCi0gICAgOiBXZWJET01PYmplY3Qo
KQotICAgICwgbV9pbXBsKDApCi17Ci19Ci0KLVdlYkRPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzOjpXZWJET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyhXZWJDb3JlOjpUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycyogaW1wbCkKLSAgICA6IFdlYkRPTU9iamVjdCgpCi0gICAgLCBtX2lt
cGwobmV3IFdlYkRPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJpdmF0ZShpbXBsKSkKLXsK
LX0KLQotV2ViRE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OldlYkRPTVRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzKGNvbnN0IFdlYkRPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzJiBj
b3B5KQotICAgIDogV2ViRE9NT2JqZWN0KCkKLXsKLSAgICBtX2ltcGwgPSBjb3B5LmltcGwoKSA/
IG5ldyBXZWJET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1ByaXZhdGUoY29weS5pbXBsKCkp
IDogMDsKLX0KLQotV2ViRE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMmIFdlYkRPTVRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzOjpvcGVyYXRvcj0oY29uc3QgV2ViRE9NVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnMmIGNvcHkpCi17Ci0gICAgZGVsZXRlIG1faW1wbDsKLSAgICBtX2ltcGwg
PSBjb3B5LmltcGwoKSA/IG5ldyBXZWJET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1ByaXZh
dGUoY29weS5pbXBsKCkpIDogMDsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVdlYkNvcmU6OlRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiBXZWJET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
czo6aW1wbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbCA/IFdURjo6Z2V0UHRyKG1faW1w
bC0+aW1wbCkgOiAwOwotfQotCi1XZWJET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6fldl
YkRPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKCkKLXsKLSAgICBkZWxldGUgbV9pbXBsOwot
ICAgIG1faW1wbCA9IDA7Ci19Ci0KLVdlYkNvcmU6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
KiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMmIHdyYXBw
ZXIpCi17Ci0gICAgcmV0dXJuIHdyYXBwZXIuaW1wbCgpOwotfQotCi1XZWJET01UZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycyB0b1dlYktpdChXZWJDb3JlOjpUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycyogdmFsdWUpCi17Ci0gICAgcmV0dXJuIFdlYkRPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzKHZhbHVlKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9DUFAvV2ViRE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFiODEyYi4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KLSAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2lmbmRlZiBXZWJET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc19oCi0jZGVm
aW5lIFdlYkRPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzX2gKLQotI2luY2x1ZGUgPFdlYkRP
TU9iamVjdC5oPgotI2luY2x1ZGUgPFdlYkRPTVN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1jbGFzcyBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczsKLX07Ci0KLQotY2xhc3MgV2Vi
RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMgOiBwdWJsaWMgV2ViRE9NT2JqZWN0IHsKLXB1
YmxpYzoKLSAgICBXZWJET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycygpOwotICAgIGV4cGxp
Y2l0IFdlYkRPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKFdlYkNvcmU6OlRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzKik7Ci0gICAgV2ViRE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMo
Y29uc3QgV2ViRE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMmKTsKLSAgICBXZWJET01UZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyYgb3BlcmF0b3I9KGNvbnN0IFdlYkRPTVRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzJik7Ci0gICAgdmlydHVhbCB+V2ViRE9NVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMoKTsKLQotCi0gICAgV2ViQ29yZTo6VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMq
IGltcGwoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIHN0cnVjdCBXZWJET01UZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1ByaXZhdGU7Ci0gICAgV2ViRE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNQcml2YXRlKiBtX2ltcGw7Ci19OwotCi1XZWJDb3JlOjpUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9ycyogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
Jik7Ci1XZWJET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyB0b1dlYktpdChXZWJDb3JlOjpU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyopOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvQ1BQL1dlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDE1NDY0Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAot
LyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KLSAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShDb25k
aXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLQotI2luY2x1ZGUgIldlYkRPTVRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKLQotI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oIgotI2luY2x1ZGUgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
aCIKLSNpbmNsdWRlICJXZWJFeGNlcHRpb25IYW5kbGVyLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotc3RydWN0IFdlYkRPTVRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OldlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VQcml2YXRlIHsKLSAgICBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlUHJpdmF0ZShXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
KiBvYmplY3QgPSAwKQotICAgICAgICA6IGltcGwob2JqZWN0KQotICAgIHsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8V2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4gaW1w
bDsKLX07Ci0KLVdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OldlYkRP
TVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UoKQotICAgIDogV2ViRE9NT2JqZWN0
KCkKLSAgICAsIG1faW1wbCgwKQotewotfQotCi1XZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlOjpXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKFdl
YkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcGwpCi0gICAgOiBX
ZWJET01PYmplY3QoKQotICAgICwgbV9pbXBsKG5ldyBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlUHJpdmF0ZShpbXBsKSkKLXsKLX0KLQotV2ViRE9NVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6V2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZShjb25zdCBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiBj
b3B5KQotICAgIDogV2ViRE9NT2JqZWN0KCkKLXsKLSAgICBtX2ltcGwgPSBjb3B5LmltcGwoKSA/
IG5ldyBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0ZShjb3B5
LmltcGwoKSkgOiAwOwotfQotCi1XZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlJiBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpvcGVyYXRvcj0o
Y29uc3QgV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYgY29weSkKLXsK
LSAgICBkZWxldGUgbV9pbXBsOwotICAgIG1faW1wbCA9IGNvcHkuaW1wbCgpID8gbmV3IFdlYkRP
TVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2YXRlKGNvcHkuaW1wbCgpKSA6
IDA7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1XZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlKiBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
OjppbXBsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbXBsID8gV1RGOjpnZXRQdHIobV9pbXBs
LT5pbXBsKSA6IDA7Ci19Ci0KLVdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2U6On5XZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKCkKLXsKLSAgICBk
ZWxldGUgbV9pbXBsOwotICAgIG1faW1wbCA9IDA7Ci19Ci0KLVdlYkRPTVN0cmluZyBXZWJET01U
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp2YWx1ZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKLQotICAgIHJldHVy
biBpbXBsKCktPnZhbHVlKCktPnRvU3RyaW5nKCk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6c2V0VmFsdWUoY29uc3QgV2ViRE9NU3RyaW5nJiBu
ZXdWYWx1ZSkKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1w
bCgpLT5zZXRWYWx1ZShXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXVEY6
OlN0cmluZyhuZXdWYWx1ZSkpKTsKLX0KLQotV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnJlYWRvbmx5VmFsdWUoKSBjb25zdAotewotICAgIGlm
ICghaW1wbCgpKQotICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4g
aW1wbCgpLT5yZWFkb25seVZhbHVlKCktPnRvU3RyaW5nKCk7Ci19Ci0KLVdlYkRPTVN0cmluZyBX
ZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjYWNoZWRWYWx1ZSgpIGNv
bnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsK
LQotICAgIHJldHVybiBpbXBsKCktPmNhY2hlZFZhbHVlKCktPnRvU3RyaW5nKCk7Ci19Ci0KLXZv
aWQgV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6c2V0Q2FjaGVkVmFs
dWUoY29uc3QgV2ViRE9NU3RyaW5nJiBuZXdDYWNoZWRWYWx1ZSkKLXsKLSAgICBpZiAoIWltcGwo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5zZXRDYWNoZWRWYWx1ZShXZWJDb3Jl
OjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXVEY6OlN0cmluZyhuZXdDYWNoZWRWYWx1
ZSkpKTsKLX0KLQotV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2U6OmNhY2hlZFJlYWRvbmx5VmFsdWUoKSBjb25zdAotewotICAgIGlmICghaW1wbCgp
KQotICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gaW1wbCgpLT5j
YWNoZWRSZWFkb25seVZhbHVlKCktPnRvU3RyaW5nKCk7Ci19Ci0KLVdlYkNvcmU6OlRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHRvV2ViQ29yZShjb25zdCBXZWJET01UZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiB3cmFwcGVyKQotewotICAgIHJldHVybiB3cmFw
cGVyLmltcGwoKTsKLX0KLQotV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSB0b1dlYktpdChXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiB2
YWx1ZSkKLXsKLSAgICByZXR1cm4gV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSh2YWx1ZSk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvQ1BQL1dlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk
MDNiNzVlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9DUFAvV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndl
aW5pZ0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViRE9NVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZV9oCi0jZGVmaW5lIFdlYkRPTVRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VfaAotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKQotCi0jaW5jbHVkZSA8V2ViRE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViRE9N
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2U7Ci19OwotCi1jbGFzcyBXZWJET01TdHJpbmc7Ci0KLWNsYXNzIFdl
YkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgOiBwdWJsaWMgV2ViRE9NT2Jq
ZWN0IHsKLXB1YmxpYzoKLSAgICBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKCk7Ci0gICAgZXhwbGljaXQgV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZShXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKik7Ci0gICAg
V2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZShjb25zdCBXZWJET01UZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJik7Ci0gICAgV2ViRE9NVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSYgb3BlcmF0b3I9KGNvbnN0IFdlYkRPTVRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmKTsKLSAgICB2aXJ0dWFsIH5XZWJET01UZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKCk7Ci0KLSAgICBXZWJET01TdHJpbmcgdmFsdWUoKSBj
b25zdDsKLSAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFdlYkRPTVN0cmluZyYpOwotICAgIFdlYkRP
TVN0cmluZyByZWFkb25seVZhbHVlKCkgY29uc3Q7Ci0gICAgV2ViRE9NU3RyaW5nIGNhY2hlZFZh
bHVlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDYWNoZWRWYWx1ZShjb25zdCBXZWJET01TdHJpbmcm
KTsKLSAgICBXZWJET01TdHJpbmcgY2FjaGVkUmVhZG9ubHlWYWx1ZSgpIGNvbnN0OwotCi0gICAg
V2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wbCgpIGNvbnN0
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgc3RydWN0IFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VQcml2YXRlOwotICAgIFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VQcml2YXRlKiBtX2ltcGw7Ci19OwotCi1XZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZSYpOwotV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSB0b1dlYktpdChXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKik7Ci0KLSNlbmRpZgotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMikKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0NQUC9XZWJET01UZXN0U3VwcGxlbWVudGFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFN1cHBsZW1lbnRhbC5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YWU2YTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U3VwcGxlbWVudGFsLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgZ2Vu
ZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2ViRE9NVGVzdFN1cHBsZW1l
bnRhbC5oIGFuZAotICAgIFdlYkRPTVRlc3RTdXBwbGVtZW50YWwuY3BwIGFyZSBjcmVhdGVkIGZv
ciBUZXN0U3VwcGxlbWVudGFsLmlkbCwgYW5kIHRodXMKLSAgICBwcmV2ZW50IHRoZSBidWlsZCBz
Y3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYkRPTVRlc3RTdXBwbGVtZW50YWwuaCBh
bmQKLSAgICBXZWJET01UZXN0U3VwcGxlbWVudGFsLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBm
aWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCi0qLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U3VwcGxlbWVudGFs
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RT
dXBwbGVtZW50YWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVhZTZhMC4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRP
TVRlc3RTdXBwbGVtZW50YWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotLyoKLSAg
ICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQg
V2ViRE9NVGVzdFN1cHBsZW1lbnRhbC5oIGFuZAotICAgIFdlYkRPTVRlc3RTdXBwbGVtZW50YWwu
Y3BwIGFyZSBjcmVhdGVkIGZvciBUZXN0U3VwcGxlbWVudGFsLmlkbCwgYW5kIHRodXMKLSAgICBw
cmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYkRPTVRl
c3RTdXBwbGVtZW50YWwuaCBhbmQKLSAgICBXZWJET01UZXN0U3VwcGxlbWVudGFsLmNwcCBhdCBl
dmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCi0qLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJE
T01UZXN0VHlwZWRlZnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0NQUC9XZWJET01UZXN0VHlwZWRlZnMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjMThmNTJiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9DUFAvV2ViRE9NVGVzdFR5cGVkZWZzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzNiAr
MCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgotICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IldlYkRPTVRlc3RUeXBlZGVmcy5oIgotCi0jaW5jbHVkZSAiU1ZHUG9pbnQuaCIKLSNpbmNsdWRl
ICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlICJUZXN0VHlwZWRlZnMuaCIKLSNp
bmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJXZWJET01TVkdQb2ludC5oIgotI2luY2x1ZGUgIldl
YkRPTVN0cmluZy5oIgotI2luY2x1ZGUgIldlYkV4Y2VwdGlvbkhhbmRsZXIuaCIKLSNpbmNsdWRl
IDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21pY1N0cmluZy5oPgotCi1zdHJ1Y3QgV2ViRE9NVGVzdFR5cGVkZWZzOjpXZWJET01U
ZXN0VHlwZWRlZnNQcml2YXRlIHsKLSAgICBXZWJET01UZXN0VHlwZWRlZnNQcml2YXRlKFdlYkNv
cmU6OlRlc3RUeXBlZGVmcyogb2JqZWN0ID0gMCkKLSAgICAgICAgOiBpbXBsKG9iamVjdCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RUeXBlZGVmcz4gaW1wbDsKLX07
Ci0KLVdlYkRPTVRlc3RUeXBlZGVmczo6V2ViRE9NVGVzdFR5cGVkZWZzKCkKLSAgICA6IFdlYkRP
TU9iamVjdCgpCi0gICAgLCBtX2ltcGwoMCkKLXsKLX0KLQotV2ViRE9NVGVzdFR5cGVkZWZzOjpX
ZWJET01UZXN0VHlwZWRlZnMoV2ViQ29yZTo6VGVzdFR5cGVkZWZzKiBpbXBsKQotICAgIDogV2Vi
RE9NT2JqZWN0KCkKLSAgICAsIG1faW1wbChuZXcgV2ViRE9NVGVzdFR5cGVkZWZzUHJpdmF0ZShp
bXBsKSkKLXsKLX0KLQotV2ViRE9NVGVzdFR5cGVkZWZzOjpXZWJET01UZXN0VHlwZWRlZnMoY29u
c3QgV2ViRE9NVGVzdFR5cGVkZWZzJiBjb3B5KQotICAgIDogV2ViRE9NT2JqZWN0KCkKLXsKLSAg
ICBtX2ltcGwgPSBjb3B5LmltcGwoKSA/IG5ldyBXZWJET01UZXN0VHlwZWRlZnNQcml2YXRlKGNv
cHkuaW1wbCgpKSA6IDA7Ci19Ci0KLVdlYkRPTVRlc3RUeXBlZGVmcyYgV2ViRE9NVGVzdFR5cGVk
ZWZzOjpvcGVyYXRvcj0oY29uc3QgV2ViRE9NVGVzdFR5cGVkZWZzJiBjb3B5KQotewotICAgIGRl
bGV0ZSBtX2ltcGw7Ci0gICAgbV9pbXBsID0gY29weS5pbXBsKCkgPyBuZXcgV2ViRE9NVGVzdFR5
cGVkZWZzUHJpdmF0ZShjb3B5LmltcGwoKSkgOiAwOwotICAgIHJldHVybiAqdGhpczsKLX0KLQot
V2ViQ29yZTo6VGVzdFR5cGVkZWZzKiBXZWJET01UZXN0VHlwZWRlZnM6OmltcGwoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2ltcGwgPyBXVEY6OmdldFB0cihtX2ltcGwtPmltcGwpIDogMDsKLX0K
LQotV2ViRE9NVGVzdFR5cGVkZWZzOjp+V2ViRE9NVGVzdFR5cGVkZWZzKCkKLXsKLSAgICBkZWxl
dGUgbV9pbXBsOwotICAgIG1faW1wbCA9IDA7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgbG9uZyBXZWJE
T01UZXN0VHlwZWRlZnM6OnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkgY29uc3QKLXsKLSAgICBpZiAo
IWltcGwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gaW1wbCgpLT51bnNpZ25l
ZExvbmdMb25nQXR0cigpOwotfQotCi12b2lkIFdlYkRPTVRlc3RUeXBlZGVmczo6c2V0VW5zaWdu
ZWRMb25nTG9uZ0F0dHIodW5zaWduZWQgbG9uZyBsb25nIG5ld1Vuc2lnbmVkTG9uZ0xvbmdBdHRy
KQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCktPnNl
dFVuc2lnbmVkTG9uZ0xvbmdBdHRyKG5ld1Vuc2lnbmVkTG9uZ0xvbmdBdHRyKTsKLX0KLQotV2Vi
RE9NU3RyaW5nIFdlYkRPTVRlc3RUeXBlZGVmczo6aW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZh
bHVlKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIFdlYkRPTVN0
cmluZygpOwotCi0gICAgcmV0dXJuIGltcGwoKS0+aW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZh
bHVlKCktPnRvU3RyaW5nKCk7Ci19Ci0KLXZvaWQgV2ViRE9NVGVzdFR5cGVkZWZzOjpzZXRJbW11
dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoY29uc3QgV2ViRE9NU3RyaW5nJiBuZXdJbW11dGFi
bGVTZXJpYWxpemVkU2NyaXB0VmFsdWUpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGltcGwoKS0+c2V0SW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdURjo6U3RyaW5nKG5ld0ltbXV0
YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkpKTsKLX0KLQotaW50IFdlYkRPTVRlc3RUeXBlZGVm
czo6YXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oKSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIGludCByZXN1bHQgPSBpbXBsKCktPmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKTsKLSAg
ICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBXZWJET01UZXN0VHlwZWRlZnM6OnNldEF0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGludCBuZXdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbikKLXsK
LSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5zZXRBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbihuZXdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbik7Ci19Ci0KLWlu
dCBXZWJET01UZXN0VHlwZWRlZnM6OmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkgY29uc3QKLXsK
LSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gaW1wbCgp
LT5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpOwotfQotCi12b2lkIFdlYkRPTVRlc3RUeXBlZGVm
czo6c2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oaW50IG5ld0F0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCktPnNldEF0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uKG5ld0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uLCBlYyk7Ci0gICAgd2ViRE9NUmFpc2VF
cnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOwotfQotCi1XZWJET01T
dHJpbmcgV2ViRE9NVGVzdFR5cGVkZWZzOjpzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbigp
IGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybiBXZWJET01TdHJpbmco
KTsKLQotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkRPTVN0cmlu
ZyByZXN1bHQgPSBpbXBsKCktPnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKTsKLSAg
ICB3ZWJET01SYWlzZUVycm9yKHN0YXRpY19jYXN0PFdlYkRPTUV4Y2VwdGlvbkNvZGU+KGVjKSk7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdURjo6U3RyaW5nJj4ocmVzdWx0KTsKLX0K
LQotdm9pZCBXZWJET01UZXN0VHlwZWRlZnM6OnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uKGNvbnN0IFdlYkRPTVN0cmluZyYgbmV3U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24p
Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+c2V0
U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24obmV3U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNl
cHRpb24pOwotfQotCi1XZWJET01TdHJpbmcgV2ViRE9NVGVzdFR5cGVkZWZzOjpzdHJpbmdBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAg
IHJldHVybiBXZWJET01TdHJpbmcoKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBX
VEY6OlN0cmluZyY+KGltcGwoKS0+c3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7Ci19
Ci0KLXZvaWQgV2ViRE9NVGVzdFR5cGVkZWZzOjpzZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbihjb25zdCBXZWJET01TdHJpbmcmIG5ld1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
KQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCktPnNldFN0cmluZ0F0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uKG5ld1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uLCBlYyk7Ci0gICAgd2Vi
RE9NUmFpc2VFcnJvcihzdGF0aWNfY2FzdDxXZWJET01FeGNlcHRpb25Db2RlPihlYykpOwotfQot
Ci12b2lkIFdlYkRPTVRlc3RUeXBlZGVmczo6ZnVuYyhjb25zdCBXZWJET01sb25nW10mIHgpCi17
Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+ZnVuYyh0
b1dlYkNvcmUoeCkpOwotfQotCi12b2lkIFdlYkRPTVRlc3RUeXBlZGVmczo6c2V0U2hhZG93KGZs
b2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGNvbnN0IFdlYkRPTVN0cmluZyYg
Y29sb3IsIGZsb2F0IGFscGhhKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpbXBsKCktPnNldFNoYWRvdyh3aWR0aCwgaGVpZ2h0LCBibHVyLCBjb2xvciwgYWxw
aGEpOwotfQotCi12b2lkIFdlYkRPTVRlc3RUeXBlZGVmczo6bnVsbGFibGVBcnJheUFyZyhjb25z
dCBXZWJET01ET01TdHJpbmdbXSYgYXJyYXlBcmcpCi17Ci0gICAgaWYgKCFpbXBsKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGltcGwoKS0+bnVsbGFibGVBcnJheUFyZyh0b1dlYkNvcmUoYXJy
YXlBcmcpKTsKLX0KLQotV2ViRE9NU1ZHUG9pbnQgV2ViRE9NVGVzdFR5cGVkZWZzOjppbW11dGFi
bGVQb2ludEZ1bmN0aW9uKCkKLXsKLSAgICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuIFdl
YkRPTVNWR1BvaW50KCk7Ci0KLSAgICByZXR1cm4gdG9XZWJLaXQoV1RGOjpnZXRQdHIoaW1wbCgp
LT5pbW11dGFibGVQb2ludEZ1bmN0aW9uKCkpKTsKLX0KLQotdm9pZCBXZWJET01UZXN0VHlwZWRl
ZnM6Om1ldGhvZFdpdGhFeGNlcHRpb24oKQotewotICAgIGlmICghaW1wbCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCkt
Pm1ldGhvZFdpdGhFeGNlcHRpb24oZWMpOwotICAgIHdlYkRPTVJhaXNlRXJyb3Ioc3RhdGljX2Nh
c3Q8V2ViRE9NRXhjZXB0aW9uQ29kZT4oZWMpKTsKLX0KLQotV2ViQ29yZTo6VGVzdFR5cGVkZWZz
KiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdFR5cGVkZWZzJiB3cmFwcGVyKQotewotICAgIHJl
dHVybiB3cmFwcGVyLmltcGwoKTsKLX0KLQotV2ViRE9NVGVzdFR5cGVkZWZzIHRvV2ViS2l0KFdl
YkNvcmU6OlRlc3RUeXBlZGVmcyogdmFsdWUpCi17Ci0gICAgcmV0dXJuIFdlYkRPTVRlc3RUeXBl
ZGVmcyh2YWx1ZSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RUeXBlZGVmcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0VHlwZWRlZnMuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOTY4ODI4ZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RUeXBlZGVmcy5oCisrKyAvZGV2L251bGwK
QEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0Bn
bWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViRE9NVGVzdFR5cGVkZWZzX2gKLSNk
ZWZpbmUgV2ViRE9NVGVzdFR5cGVkZWZzX2gKLQotI2luY2x1ZGUgPFdlYkRPTU9iamVjdC5oPgot
I2luY2x1ZGUgPFdlYkRPTVN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBU
ZXN0VHlwZWRlZnM7Ci19OwotCi1jbGFzcyBXZWJET01ET01TdHJpbmdbXTsKLWNsYXNzIFdlYkRP
TVNWR1BvaW50OwotY2xhc3MgV2ViRE9NU3RyaW5nOwotY2xhc3MgV2ViRE9NbG9uZ1tdOwotCi1j
bGFzcyBXZWJET01UZXN0VHlwZWRlZnMgOiBwdWJsaWMgV2ViRE9NT2JqZWN0IHsKLXB1YmxpYzoK
LSAgICBXZWJET01UZXN0VHlwZWRlZnMoKTsKLSAgICBleHBsaWNpdCBXZWJET01UZXN0VHlwZWRl
ZnMoV2ViQ29yZTo6VGVzdFR5cGVkZWZzKik7Ci0gICAgV2ViRE9NVGVzdFR5cGVkZWZzKGNvbnN0
IFdlYkRPTVRlc3RUeXBlZGVmcyYpOwotICAgIFdlYkRPTVRlc3RUeXBlZGVmcyYgb3BlcmF0b3I9
KGNvbnN0IFdlYkRPTVRlc3RUeXBlZGVmcyYpOwotICAgIHZpcnR1YWwgfldlYkRPTVRlc3RUeXBl
ZGVmcygpOwotCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIHVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRVbnNpZ25lZExvbmdMb25nQXR0cih1bnNpZ25lZCBsb25nIGxv
bmcpOwotICAgIFdlYkRPTVN0cmluZyBpbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoKSBj
b25zdDsKLSAgICB2b2lkIHNldEltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShjb25zdCBX
ZWJET01TdHJpbmcmKTsKLSAgICBpbnQgYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oKSBjb25zdDsK
LSAgICB2b2lkIHNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGludCk7Ci0gICAgaW50IGF0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbihpbnQpOwotICAgIFdlYkRPTVN0cmluZyBzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbigpIGNvbnN0OwotICAgIHZvaWQgc2V0U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24o
Y29uc3QgV2ViRE9NU3RyaW5nJik7Ci0gICAgV2ViRE9NU3RyaW5nIHN0cmluZ0F0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbihjb25zdCBXZWJET01TdHJpbmcmKTsKLQotICAgIHZvaWQgZnVuYyhjb25zdCBXZWJE
T01sb25nW10mIHgpOwotICAgIHZvaWQgc2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWln
aHQsIGZsb2F0IGJsdXIsIGNvbnN0IFdlYkRPTVN0cmluZyYgY29sb3IsIGZsb2F0IGFscGhhKTsK
LSAgICB2b2lkIG51bGxhYmxlQXJyYXlBcmcoY29uc3QgV2ViRE9NRE9NU3RyaW5nW10mIGFycmF5
QXJnKTsKLSAgICBXZWJET01TVkdQb2ludCBpbW11dGFibGVQb2ludEZ1bmN0aW9uKCk7Ci0gICAg
dm9pZCBtZXRob2RXaXRoRXhjZXB0aW9uKCk7Ci0KLSAgICBXZWJDb3JlOjpUZXN0VHlwZWRlZnMq
IGltcGwoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIHN0cnVjdCBXZWJET01UZXN0VHlwZWRl
ZnNQcml2YXRlOwotICAgIFdlYkRPTVRlc3RUeXBlZGVmc1ByaXZhdGUqIG1faW1wbDsKLX07Ci0K
LVdlYkNvcmU6OlRlc3RUeXBlZGVmcyogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RUeXBlZGVm
cyYpOwotV2ViRE9NVGVzdFR5cGVkZWZzIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RUeXBlZGVmcyop
OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9DUFAvV2ViRE9NYXR0cmlidXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9DUFAvV2ViRE9NYXR0cmlidXRlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZTZiOTViZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTWF0dHJpYnV0ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5
MyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgotICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIldlYkRPTWF0dHJpYnV0ZS5oIgotCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSAiV2Vi
RE9NU3RyaW5nLmgiCi0jaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgotI2luY2x1ZGUg
ImF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0KLXN0cnVjdCBXZWJE
T01hdHRyaWJ1dGU6OldlYkRPTWF0dHJpYnV0ZVByaXZhdGUgewotICAgIFdlYkRPTWF0dHJpYnV0
ZVByaXZhdGUoV2ViQ29yZTo6YXR0cmlidXRlKiBvYmplY3QgPSAwKQotICAgICAgICA6IGltcGwo
b2JqZWN0KQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8V2ViQ29yZTo6YXR0cmlidXRlPiBp
bXBsOwotfTsKLQotV2ViRE9NYXR0cmlidXRlOjpXZWJET01hdHRyaWJ1dGUoKQotICAgIDogV2Vi
RE9NT2JqZWN0KCkKLSAgICAsIG1faW1wbCgwKQotewotfQotCi1XZWJET01hdHRyaWJ1dGU6Oldl
YkRPTWF0dHJpYnV0ZShXZWJDb3JlOjphdHRyaWJ1dGUqIGltcGwpCi0gICAgOiBXZWJET01PYmpl
Y3QoKQotICAgICwgbV9pbXBsKG5ldyBXZWJET01hdHRyaWJ1dGVQcml2YXRlKGltcGwpKQotewot
fQotCi1XZWJET01hdHRyaWJ1dGU6OldlYkRPTWF0dHJpYnV0ZShjb25zdCBXZWJET01hdHRyaWJ1
dGUmIGNvcHkpCi0gICAgOiBXZWJET01PYmplY3QoKQotewotICAgIG1faW1wbCA9IGNvcHkuaW1w
bCgpID8gbmV3IFdlYkRPTWF0dHJpYnV0ZVByaXZhdGUoY29weS5pbXBsKCkpIDogMDsKLX0KLQot
V2ViRE9NYXR0cmlidXRlJiBXZWJET01hdHRyaWJ1dGU6Om9wZXJhdG9yPShjb25zdCBXZWJET01h
dHRyaWJ1dGUmIGNvcHkpCi17Ci0gICAgZGVsZXRlIG1faW1wbDsKLSAgICBtX2ltcGwgPSBjb3B5
LmltcGwoKSA/IG5ldyBXZWJET01hdHRyaWJ1dGVQcml2YXRlKGNvcHkuaW1wbCgpKSA6IDA7Ci0g
ICAgcmV0dXJuICp0aGlzOwotfQotCi1XZWJDb3JlOjphdHRyaWJ1dGUqIFdlYkRPTWF0dHJpYnV0
ZTo6aW1wbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbCA/IFdURjo6Z2V0UHRyKG1faW1w
bC0+aW1wbCkgOiAwOwotfQotCi1XZWJET01hdHRyaWJ1dGU6On5XZWJET01hdHRyaWJ1dGUoKQot
ewotICAgIGRlbGV0ZSBtX2ltcGw7Ci0gICAgbV9pbXBsID0gMDsKLX0KLQotV2ViRE9NU3RyaW5n
IFdlYkRPTWF0dHJpYnV0ZTo6cmVhZG9ubHkoKSBjb25zdAotewotICAgIGlmICghaW1wbCgpKQot
ICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgV1RGOjpTdHJpbmcmPihpbXBsKCktPnJlYWRvbmx5KCkpOwotfQotCi1XZWJDb3JlOjph
dHRyaWJ1dGUqIHRvV2ViQ29yZShjb25zdCBXZWJET01hdHRyaWJ1dGUmIHdyYXBwZXIpCi17Ci0g
ICAgcmV0dXJuIHdyYXBwZXIuaW1wbCgpOwotfQotCi1XZWJET01hdHRyaWJ1dGUgdG9XZWJLaXQo
V2ViQ29yZTo6YXR0cmlidXRlKiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gV2ViRE9NYXR0cmlidXRl
KHZhbHVlKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9DUFAvV2ViRE9NYXR0cmlidXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvQ1BQL1dlYkRPTWF0dHJpYnV0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyZjUzZDlkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9DUFAvV2ViRE9NYXR0cmlidXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KLSAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2lmbmRlZiBXZWJET01hdHRyaWJ1dGVfaAotI2RlZmluZSBXZWJET01hdHRy
aWJ1dGVfaAotCi0jaW5jbHVkZSA8V2ViRE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViRE9NU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIGF0dHJpYnV0ZTsKLX07Ci0KLQot
Y2xhc3MgV2ViRE9NYXR0cmlidXRlIDogcHVibGljIFdlYkRPTU9iamVjdCB7Ci1wdWJsaWM6Ci0g
ICAgV2ViRE9NYXR0cmlidXRlKCk7Ci0gICAgZXhwbGljaXQgV2ViRE9NYXR0cmlidXRlKFdlYkNv
cmU6OmF0dHJpYnV0ZSopOwotICAgIFdlYkRPTWF0dHJpYnV0ZShjb25zdCBXZWJET01hdHRyaWJ1
dGUmKTsKLSAgICBXZWJET01hdHRyaWJ1dGUmIG9wZXJhdG9yPShjb25zdCBXZWJET01hdHRyaWJ1
dGUmKTsKLSAgICB2aXJ0dWFsIH5XZWJET01hdHRyaWJ1dGUoKTsKLQotICAgIFdlYkRPTVN0cmlu
ZyByZWFkb25seSgpIGNvbnN0OwotCi0gICAgV2ViQ29yZTo6YXR0cmlidXRlKiBpbXBsKCkgY29u
c3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBzdHJ1Y3QgV2ViRE9NYXR0cmlidXRlUHJpdmF0ZTsKLSAg
ICBXZWJET01hdHRyaWJ1dGVQcml2YXRlKiBtX2ltcGw7Ci19OwotCi1XZWJDb3JlOjphdHRyaWJ1
dGUqIHRvV2ViQ29yZShjb25zdCBXZWJET01hdHRyaWJ1dGUmKTsKLVdlYkRPTWF0dHJpYnV0ZSB0
b1dlYktpdChXZWJDb3JlOjphdHRyaWJ1dGUqKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTXJlYWRvbmx5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NcmVhZG9ubHku
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmVjMTVlLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NcmVhZG9ubHku
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJET01yZWFkb25seS5oIgotCi0jaW5jbHVk
ZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgotI2luY2x1ZGUgInJlYWRvbmx5LmgiCi0jaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotc3RydWN0IFdlYkRP
TXJlYWRvbmx5OjpXZWJET01yZWFkb25seVByaXZhdGUgewotICAgIFdlYkRPTXJlYWRvbmx5UHJp
dmF0ZShXZWJDb3JlOjpyZWFkb25seSogb2JqZWN0ID0gMCkKLSAgICAgICAgOiBpbXBsKG9iamVj
dCkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPFdlYkNvcmU6OnJlYWRvbmx5PiBpbXBsOwot
fTsKLQotV2ViRE9NcmVhZG9ubHk6OldlYkRPTXJlYWRvbmx5KCkKLSAgICA6IFdlYkRPTU9iamVj
dCgpCi0gICAgLCBtX2ltcGwoMCkKLXsKLX0KLQotV2ViRE9NcmVhZG9ubHk6OldlYkRPTXJlYWRv
bmx5KFdlYkNvcmU6OnJlYWRvbmx5KiBpbXBsKQotICAgIDogV2ViRE9NT2JqZWN0KCkKLSAgICAs
IG1faW1wbChuZXcgV2ViRE9NcmVhZG9ubHlQcml2YXRlKGltcGwpKQotewotfQotCi1XZWJET01y
ZWFkb25seTo6V2ViRE9NcmVhZG9ubHkoY29uc3QgV2ViRE9NcmVhZG9ubHkmIGNvcHkpCi0gICAg
OiBXZWJET01PYmplY3QoKQotewotICAgIG1faW1wbCA9IGNvcHkuaW1wbCgpID8gbmV3IFdlYkRP
TXJlYWRvbmx5UHJpdmF0ZShjb3B5LmltcGwoKSkgOiAwOwotfQotCi1XZWJET01yZWFkb25seSYg
V2ViRE9NcmVhZG9ubHk6Om9wZXJhdG9yPShjb25zdCBXZWJET01yZWFkb25seSYgY29weSkKLXsK
LSAgICBkZWxldGUgbV9pbXBsOwotICAgIG1faW1wbCA9IGNvcHkuaW1wbCgpID8gbmV3IFdlYkRP
TXJlYWRvbmx5UHJpdmF0ZShjb3B5LmltcGwoKSkgOiAwOwotICAgIHJldHVybiAqdGhpczsKLX0K
LQotV2ViQ29yZTo6cmVhZG9ubHkqIFdlYkRPTXJlYWRvbmx5OjppbXBsKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9pbXBsID8gV1RGOjpnZXRQdHIobV9pbXBsLT5pbXBsKSA6IDA7Ci19Ci0KLVdl
YkRPTXJlYWRvbmx5Ojp+V2ViRE9NcmVhZG9ubHkoKQotewotICAgIGRlbGV0ZSBtX2ltcGw7Ci0g
ICAgbV9pbXBsID0gMDsKLX0KLQotV2ViQ29yZTo6cmVhZG9ubHkqIHRvV2ViQ29yZShjb25zdCBX
ZWJET01yZWFkb25seSYgd3JhcHBlcikKLXsKLSAgICByZXR1cm4gd3JhcHBlci5pbXBsKCk7Ci19
Ci0KLVdlYkRPTXJlYWRvbmx5IHRvV2ViS2l0KFdlYkNvcmU6OnJlYWRvbmx5KiB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gV2ViRE9NcmVhZG9ubHkodmFsdWUpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01yZWFkb25seS5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01yZWFkb25seS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTg4MWM1Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NcmVhZG9ubHkuaAorKysg
L2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNh
bS53ZWluaWdAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYkRPTXJlYWRvbmx5
X2gKLSNkZWZpbmUgV2ViRE9NcmVhZG9ubHlfaAotCi0jaW5jbHVkZSA8V2ViRE9NT2JqZWN0Lmg+
Ci0jaW5jbHVkZSA8V2ViRE9NU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNz
IHJlYWRvbmx5OwotfTsKLQotCi1jbGFzcyBXZWJET01yZWFkb25seSA6IHB1YmxpYyBXZWJET01P
YmplY3QgewotcHVibGljOgotICAgIFdlYkRPTXJlYWRvbmx5KCk7Ci0gICAgZXhwbGljaXQgV2Vi
RE9NcmVhZG9ubHkoV2ViQ29yZTo6cmVhZG9ubHkqKTsKLSAgICBXZWJET01yZWFkb25seShjb25z
dCBXZWJET01yZWFkb25seSYpOwotICAgIFdlYkRPTXJlYWRvbmx5JiBvcGVyYXRvcj0oY29uc3Qg
V2ViRE9NcmVhZG9ubHkmKTsKLSAgICB2aXJ0dWFsIH5XZWJET01yZWFkb25seSgpOwotCi0KLSAg
ICBXZWJDb3JlOjpyZWFkb25seSogaW1wbCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgc3Ry
dWN0IFdlYkRPTXJlYWRvbmx5UHJpdmF0ZTsKLSAgICBXZWJET01yZWFkb25seVByaXZhdGUqIG1f
aW1wbDsKLX07Ci0KLVdlYkNvcmU6OnJlYWRvbmx5KiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NcmVh
ZG9ubHkmKTsKLVdlYkRPTXJlYWRvbmx5IHRvV2ViS2l0KFdlYkNvcmU6OnJlYWRvbmx5Kik7Ci0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXQuaWRsIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXQuaWRsCmluZGV4IGUyNzU3MTAuLjllZDk2NTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0LmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldC5pZGwKQEAgLTMzLDExICszMyw1IEBACiAgICAgW1Ry
ZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbF0gcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmlu
ZyAgICAgICAgaHJlZjsKICAgICBbVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsXSByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICB0aXRsZTsKICAgICByZWFkb25seSBhdHRy
aWJ1dGUgTWVkaWFMaXN0ICAgICAgICBtZWRpYTsKLQotI2lmIGRlZmluZWQoTEFOR1VBR0VfQ1BQ
KSAmJiBMQU5HVUFHRV9DUFAKLSAgICAvLyBFeHRyYSBXZWJDb3JlIG1ldGhvZHMgZXhwb3NlZCB0
byBhbGxvd2UgY29tcGlsZS10aW1lIGNhc3RpbmcgaW4gQysrCi0gICAgYm9vbGVhbiBpc0NTU1N0
eWxlU2hlZXQoKTsKLSNlbmRpZgotCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQ3VzdG9tRXZlbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUV2ZW50LmlkbApp
bmRleCAxN2RjZTZmLi42MDhiYzBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3Vz
dG9tRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVudC5pZGwKQEAg
LTIzLDcgKzIzLDYgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZiAhZGVmaW5lZChMQU5H
VUFHRV9DUFApIHx8ICFMQU5HVUFHRV9DUFAKIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDM6
CiBbCiAgICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1FdmVudCwKQEAgLTM1LDUgKzM0LDQgQEAKICAg
ICAgICAgICAgICAgICAgICAgICAgICBbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGJvb2xl
YW4gY2FuY2VsYWJsZUFyZywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgW0RlZmF1bHQ9VW5k
ZWZpbmVkXSBvcHRpb25hbCBhbnkgZGV0YWlsQXJnKTsKIH07Ci0jZW5kaWYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5pZGwKaW5kZXggNTkxNGZhOS4uOWU1ZDg2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aWRsCkBAIC0yMDEsMTEgKzIwMSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwg
IUxBTkdVQUdFX0NQUAogI2lmICFkZWZpbmVkKExBTkdVQUdFX09CSkVDVElWRV9DKSB8fCAhTEFO
R1VBR0VfT0JKRUNUSVZFX0MKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0IGdldENTU0NhbnZh
c0NvbnRleHQoRE9NU3RyaW5nIGNvbnRleHRJZCwgRE9NU3RyaW5nIG5hbWUsIGxvbmcgd2lkdGgs
IGxvbmcgaGVpZ2h0KTsKICNlbmRpZgotI2VuZGlmCiAKICAgICAvLyBIVE1MIDUKICAgICBOb2Rl
TGlzdCBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwg
RE9NU3RyaW5nIHRhZ25hbWUpOwpAQCAtMzQ0LDExICszNDIsNiBAQAogI2VuZGlmIC8vIGRlZmlu
ZWQoV1RGX1BMQVRGT1JNX0lPUykgJiYgV1RGX1BMQVRGT1JNX0lPUwogI2VuZGlmCiAKLSNpZiBk
ZWZpbmVkKExBTkdVQUdFX0NQUCkgJiYgTEFOR1VBR0VfQ1BQCi0gICAgLy8gRXh0cmEgV2ViQ29y
ZSBtZXRob2RzIGV4cG9zZWQgdG8gYWxsb3cgY29tcGlsZS10aW1lIGNhc3RpbmcgaW4gQysrCi0g
ICAgYm9vbGVhbiBpc0hUTUxEb2N1bWVudCgpOwotI2VuZGlmCi0KICAgICAvLyBQYWdlIHZpc2li
aWxpdHkgQVBJLgogICAgIFtDb25kaXRpb25hbD1QQUdFX1ZJU0lCSUxJVFlfQVBJXSByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZpc2liaWxpdHlTdGF0ZTsKICAgICBbQ29uZGl0aW9uYWw9
UEFHRV9WSVNJQklMSVRZX0FQSV0gcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gaGlkZGVuOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudC5pZGwKaW5kZXggYmZiMjIxZS4uZjJmZDY2MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaWRs
CkBAIC03OSwxMSArNzksNSBAQAogICAgIFtDdXN0b21dIHJlYWRvbmx5IGF0dHJpYnV0ZSBDbGlw
Ym9hcmQgICAgICAgIGNsaXBib2FyZERhdGE7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoTEFOR1VB
R0VfQ1BQKSAmJiBMQU5HVUFHRV9DUFAKLSAgICAvLyBFeHRyYSBXZWJDb3JlIG1ldGhvZHMgZXhw
b3NlZCB0byBhbGxvdyBjb21waWxlLXRpbWUgY2FzdGluZyBpbiBDKysKLSAgICBib29sZWFuIGlz
TW91c2VFdmVudCgpOwotICAgIGJvb2xlYW4gaXNVSUV2ZW50KCk7Ci0jZW5kaWYKLQogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuaWRsCmluZGV4IDEyYjMwNDUuLmVmYjVmNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5pZGwKQEAg
LTEyMiw3ICsxMjIsNiBAQAogICAgIHZvaWQgaW5zcGVjdCgpOwogI2VuZGlmIC8qIGRlZmluZWQo
TEFOR1VBR0VfT0JKRUNUSVZFX0MpICovCiAKLSNpZiAhZGVmaW5lZChMQU5HVUFHRV9DUFApIHx8
ICFMQU5HVUFHRV9DUFAKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykgfHwgIUxB
TkdVQUdFX09CSkVDVElWRV9DCiAgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyKERPTVN0cmluZyB0
eXBlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwg
CkBAIC0xMzIsMTcgKzEzMSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlv
bmFsIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBk
aXNwYXRjaEV2ZW50KEV2ZW50IGV2ZW50KTsKICNlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVk
KExBTkdVQUdFX0NQUCkgJiYgTEFOR1VBR0VfQ1BQCi0gICAgW0N1c3RvbV0gdm9pZCBhZGRFdmVu
dExpc3RlbmVyKERPTVN0cmluZyB0eXBlLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAgW0N1c3RvbV0gdm9pZCBy
ZW1vdmVFdmVudExpc3RlbmVyKERPTVN0cmluZyB0eXBlLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAg
W1JhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiBkaXNwYXRjaEV2ZW50KEV2ZW50IGV2ZW50KTsKLSNl
bmRpZgogCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVu
dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5pZGwKaW5kZXggMDRkOTQw
OS4uOTJjN2RiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQu
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmlkbApAQCAtMjQsMTEg
KzI0LDkgQEAKICAqCiAgKi8KIAotI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdV
QUdFX0NQUAogWwogICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9RXZlbnQKIF0gaW50ZXJmYWNlIFBv
cFN0YXRlRXZlbnQgOiBFdmVudCB7CiAgICAgW0luaXRpYWxpemVkQnlFdmVudENvbnN0cnVjdG9y
LCBDYWNoZWRBdHRyaWJ1dGUsIEN1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0cmlidXRlIGFueSBz
dGF0ZTsKIH07Ci0jZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmlkbAppbmRleCA4N2I2MDlhLi42NDE5ODlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxD
YW52YXNFbGVtZW50LmlkbApAQCAtMzMsMTMgKzMzLDExIEBACiAKICAgICBbQ3VzdG9tLCBSYWlz
ZXNFeGNlcHRpb25dIERPTVN0cmluZyB0b0RhdGFVUkwoW1RyZWF0TnVsbEFzPU51bGxTdHJpbmcs
IFRyZWF0VW5kZWZpbmVkQXM9TnVsbFN0cmluZyxEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwg
RE9NU3RyaW5nIHR5cGUpOwogCi0jaWYgIWRlZmluZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VB
R0VfQ1BQCiAjaWYgIWRlZmluZWQoTEFOR1VBR0VfT0JKRUNUSVZFX0MpIHx8ICFMQU5HVUFHRV9P
QkpFQ1RJVkVfQwogICAgIC8vIFRoZSBjdXN0b20gYmluZGluZyBpcyBuZWVkZWQgdG8gaGFuZGxl
IGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcy4KICAgICBbQ3VzdG9tXSBhbnkgZ2V0Q29udGV4
dChbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIERPTVN0cmluZyBjb250ZXh0SWQpOwogICAg
IFtDdXN0b21dIGFueSBwcm9iYWJseVN1cHBvcnRzQ29udGV4dChbRGVmYXVsdD1VbmRlZmluZWRd
IG9wdGlvbmFsIERPTVN0cmluZyBjb250ZXh0SWQpOwogI2VuZGlmCi0jZW5kaWYKIAogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5pZGwKaW5kZXggNDM0MjAyYy4uYjk5
ZDkxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsCkBAIC02Miw5
ICs2Miw3IEBAIGludGVyZmFjZSBIVE1MSW5wdXRFbGVtZW50IDogSFRNTEVsZW1lbnQgewogI2Vs
c2UKICAgICBbVHJlYXROdWxsQXM9TnVsbFN0cmluZ10gYXR0cmlidXRlIERPTVN0cmluZyB2YWx1
ZTsKICNlbmRpZgotI2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAog
ICAgIFtTZXR0ZXJSYWlzZXNFeGNlcHRpb25dIGF0dHJpYnV0ZSBEYXRlIHZhbHVlQXNEYXRlOwot
I2VuZGlmCiAgICAgW1NldHRlclJhaXNlc0V4Y2VwdGlvbl0gYXR0cmlidXRlIGRvdWJsZSB2YWx1
ZUFzTnVtYmVyOwogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzdGVwVXAob3B0aW9uYWwg
bG9uZyBuKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaWRsCmluZGV4IGZmYWM4OTYuLmFmY2ZmMmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmlkbApAQCAtOTYsMTIgKzk2LDEwIEBAIGludGVyZmFjZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKICAgICB2b2lkIHNldEFscGhhKFtEZWZhdWx0
PVVuZGVmaW5lZF0gb3B0aW9uYWwgZmxvYXQgYWxwaGEpOwogICAgIHZvaWQgc2V0Q29tcG9zaXRl
T3BlcmF0aW9uKFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgRE9NU3RyaW5nIGNvbXBvc2l0
ZU9wZXJhdGlvbik7CiAKLSNpZiAhZGVmaW5lZChMQU5HVUFHRV9DUFApIHx8ICFMQU5HVUFHRV9D
UFAKICAgICB2b2lkIHNldExpbmVXaWR0aChbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGZs
b2F0IHdpZHRoKTsKICAgICB2b2lkIHNldExpbmVDYXAoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRp
b25hbCBET01TdHJpbmcgY2FwKTsKICAgICB2b2lkIHNldExpbmVKb2luKFtEZWZhdWx0PVVuZGVm
aW5lZF0gb3B0aW9uYWwgRE9NU3RyaW5nIGpvaW4pOwogICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChb
RGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGZsb2F0IGxpbWl0KTsKLSNlbmRpZgogCiAgICAg
dm9pZCBjbGVhclNoYWRvdygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKaW5kZXggYjY1
ZTFlOS4uZDYxMmFlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbApAQCAtNTEsOSArNTEs
NyBAQAogICAgIFtSZXBsYWNlYWJsZV0gcmVhZG9ubHkgYXR0cmlidXRlIE5hdmlnYXRvciBuYXZp
Z2F0b3I7CiAgICAgW1JlcGxhY2VhYmxlXSByZWFkb25seSBhdHRyaWJ1dGUgTmF2aWdhdG9yIGNs
aWVudEluZm9ybWF0aW9uOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBDcnlwdG8gY3J5cHRvOwot
I2lmICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAogICAgIFtEb05vdENo
ZWNrU2VjdXJpdHksIEN1c3RvbVNldHRlcl0gYXR0cmlidXRlIExvY2F0aW9uIGxvY2F0aW9uOwot
I2VuZGlmCiAgICAgW1JlcGxhY2VhYmxlLCBDdXN0b21HZXR0ZXJdIHJlYWRvbmx5IGF0dHJpYnV0
ZSBFdmVudCBldmVudDsKIAogICAgIERPTVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYXRpb24uaWRsIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9Mb2NhdGlvbi5pZGwKaW5kZXggN2VlYjZiZS4uYmIzZDc1MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9M
b2NhdGlvbi5pZGwKQEAgLTM3LDI2ICszNywyMiBAQAogICAgIEpTQ3VzdG9tRGVmaW5lT3duUHJv
cGVydHlPblByb3RvdHlwZSwKICAgICBPcGVyYXRpb25zTm90RGVsZXRhYmxlCiBdIGludGVyZmFj
ZSBMb2NhdGlvbiB7Ci0jaWYgIWRlZmluZWQoTEFOR1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQ
Ci0gICAgICAgICAgICAgW0RvTm90Q2hlY2tTZWN1cml0eU9uU2V0dGVyLCBDdXN0b21TZXR0ZXJd
IGF0dHJpYnV0ZSBET01TdHJpbmcgaHJlZjsKLSNlbmRpZgorICAgIFtEb05vdENoZWNrU2VjdXJp
dHlPblNldHRlciwgQ3VzdG9tU2V0dGVyXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGhyZWY7CiAKICAg
ICBbQ3VzdG9tXSB2b2lkIGFzc2lnbihbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIERPTVN0
cmluZyB1cmwpOwogICAgIFtDdXN0b21dIHZvaWQgcmVwbGFjZShbRGVmYXVsdD1VbmRlZmluZWRd
IG9wdGlvbmFsIERPTVN0cmluZyB1cmwpOwogICAgIFtDdXN0b21dIHZvaWQgcmVsb2FkKCk7CiAK
ICAgICAvLyBVUkkgZGVjb21wb3NpdGlvbiBhdHRyaWJ1dGVzCi0jaWYgIWRlZmluZWQoTEFOR1VB
R0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCi0gICAgICAgICAgICAgW0N1c3RvbVNldHRlcl0gYXR0
cmlidXRlIERPTVN0cmluZyBwcm90b2NvbDsKLSAgICAgICAgICAgICBbQ3VzdG9tU2V0dGVyXSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIGhvc3Q7Ci0gICAgICAgICAgICAgW0N1c3RvbVNldHRlcl0gYXR0
cmlidXRlIERPTVN0cmluZyBob3N0bmFtZTsKLSAgICAgICAgICAgICBbQ3VzdG9tU2V0dGVyXSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIHBvcnQ7Ci0gICAgICAgICAgICAgW0N1c3RvbVNldHRlcl0gYXR0
cmlidXRlIERPTVN0cmluZyBwYXRobmFtZTsKLSAgICAgICAgICAgICBbQ3VzdG9tU2V0dGVyXSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIHNlYXJjaDsKLSAgICAgICAgICAgICBbQ3VzdG9tU2V0dGVyXSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIGhhc2g7CisgICAgW0N1c3RvbVNldHRlcl0gYXR0cmlidXRlIERP
TVN0cmluZyBwcm90b2NvbDsKKyAgICBbQ3VzdG9tU2V0dGVyXSBhdHRyaWJ1dGUgRE9NU3RyaW5n
IGhvc3Q7CisgICAgW0N1c3RvbVNldHRlcl0gYXR0cmlidXRlIERPTVN0cmluZyBob3N0bmFtZTsK
KyAgICBbQ3VzdG9tU2V0dGVyXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHBvcnQ7CisgICAgW0N1c3Rv
bVNldHRlcl0gYXR0cmlidXRlIERPTVN0cmluZyBwYXRobmFtZTsKKyAgICBbQ3VzdG9tU2V0dGVy
XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHNlYXJjaDsKKyAgICBbQ3VzdG9tU2V0dGVyXSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGhhc2g7CiAKLSAgICAgICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIG9yaWdpbjsKLSNlbmRpZgorICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcg
b3JpZ2luOwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZ0xpc3QgYW5jZXN0b3JP
cmlnaW5zOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdv
cmtlckdsb2JhbFNjb3BlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuaWRsCmluZGV4IGNlODI0ZjYuLjkzYjJhZDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaWRsCkBA
IC0zNCwxNCArMzQsMTIgQEAKICAgICBKU05vU3RhdGljVGFibGVzLAogXSBpbnRlcmZhY2UgRGVk
aWNhdGVkV29ya2VyR2xvYmFsU2NvcGUgOiBXb3JrZXJHbG9iYWxTY29wZSB7CiAKLSNpZiAhZGVm
aW5lZChMQU5HVUFHRV9DUFApIHx8ICFMQU5HVUFHRV9DUFAKICNpZiBkZWZpbmVkKExBTkdVQUdF
X0pBVkFTQ1JJUFQpICYmIExBTkdVQUdFX0pBVkFTQ1JJUFQKICAgICBbQ3VzdG9tLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgcG9zdE1lc3NhZ2UoYW55IG1lc3NhZ2UsIG9wdGlvbmFsIEFycmF5IG1l
c3NhZ2VQb3J0cyk7CiAjZWxzZQogICAgIC8vIFRoZXJlJ3Mgbm8gZ29vZCB3YXkgdG8gZXhwb3Nl
IGFuIGFycmF5IHZpYSB0aGUgT2JqQyBiaW5kaW5ncywgc28gZm9yIG5vdyBqdXN0IGFsbG93IHBh
c3NpbmcgaW4gYSBzaW5nbGUgcG9ydC4KICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHBvc3RN
ZXNzYWdlKERPTVN0cmluZyBtZXNzYWdlLCBvcHRpb25hbCBNZXNzYWdlUG9ydCBtZXNzYWdlUG9y
dCk7CiAjZW5kaWYKLSNlbmRpZgogCiAgICAgICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVu
ZXIgb25tZXNzYWdlOwogCg==
</data>
<flag name="review"
          id="247143"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>