<?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>113989</bug_id>
          
          <creation_ts>2013-04-04 19:58:12 -0700</creation_ts>
          <short_desc>Remove Chromium&apos;s DumpRenderTree</short_desc>
          <delta_ts>2013-04-05 00:11:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>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="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>jochen</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>869525</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-04 19:58:12 -0700</bug_when>
    <thetext>Remove Chromium&apos;s DumpRenderTree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869526</commentid>
    <comment_count>1</comment_count>
      <attachid>196569</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-04 20:02:22 -0700</bug_when>
    <thetext>Created attachment 196569
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869528</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-04-04 20:05:24 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869530</commentid>
    <comment_count>3</comment_count>
      <attachid>196569</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2013-04-04 20:12:03 -0700</bug_when>
    <thetext>Comment on attachment 196569
Patch

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869566</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-04-04 22:39:15 -0700</bug_when>
    <thetext>We clearly should remove that watchlist rule which squeals about chromium api changes. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869568</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-04 22:44:34 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; We clearly should remove that watchlist rule which squeals about chromium api changes. :)

WebKit is actually an open project. We welcome patches if you feel like improving the common effort.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196569</attachid>
            <date>2013-04-04 20:02:22 -0700</date>
            <delta_ts>2013-04-04 20:12:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-113989-20130404200211.patch</filename>
            <type>text/plain</type>
            <size>921164</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3Njk0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGQzYzc4OWNkODYwZWFmYTY5NjJiYTZkNjNkYWEyZWJm
MGJjOTdiOC4uZTc4OGE1MGI2MTQ4NzY0OTEzYjdhMWNmMzQ2ZmRmYmI5NTM2NmU3NCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4
IEBACisyMDEzLTA0LTA0ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgor
CisgICAgICAgIFJlbW92ZSBDaHJvbWl1bSdzIER1bXBSZW5kZXJUcmVlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM5ODkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPbiBzZWNvbmQgdGhvdWdodCwgbGV0
J3Mgbm90IGdvIHRvIENhbWVsb3QuIEl0IGlzIGEgc2lsbHkgcGxhY2UuCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUuZ3lwOiBSZW1v
dmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGk6IFJlbW92
ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAg
ICAgICAocmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vOiBSZW1vdmVkLgorCiAyMDEzLTA0LTA0ICBEaXJrIFByYW5rZSAg
PGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIHRlbXBvcmFyaWx5IG1ha2UgZmxha2lu
ZXNzIGRhc2hib2FyZCB3b3JrIGFnYWluIHdlYmtpdC5vcmcgYm90cwpkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVuZGVyVHJlZS5n
eXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YTY2NmM1Y2ZhNDUwNjEyMzA0MjJh
YjJlN2M1ZjhjYjdiZTY1NjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5k
ZXJUcmVlLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDYwMiArMCwwIEBACi0jCi0jIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0jICAgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0j
ICAgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0j
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSMKLQotewotICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdh
aGVtX3BhdGgnOiAnLi4vLi4vRHVtcFJlbmRlclRyZWUvcXQvZm9udHMvQUhFTV9fX18uVFRGJywK
LSAgICAgICAgJ3Rvb2xzX2Rpcic6ICcuLi8uLicsCi0gICAgICAgICdzb3VyY2VfZGlyJzogJy4u
Ly4uLy4uL1NvdXJjZScsCi0gICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgIyBM
b2NhdGlvbiBvZiB0aGUgY2hyb21pdW0gc3JjIGRpcmVjdG9yeSBhbmQgdGFyZ2V0IHR5cGUgaXMg
ZGlmZmVyZW50Ci0gICAgICAgICAgICAjIGlmIHdlYmtpdCBpcyBidWlsdCBpbnNpZGUgY2hyb21p
dW0gb3IgYXMgc3RhbmRhbG9uZSBwcm9qZWN0LgotICAgICAgICAgICAgWydpbnNpZGVfY2hyb21p
dW1fYnVpbGQ9PTAnLCB7Ci0gICAgICAgICAgICAgICAgIyBXZWJraXQgaXMgYmVpbmcgYnVpbHQg
b3V0c2lkZSBvZiB0aGUgZnVsbCBjaHJvbWl1bSBwcm9qZWN0LgotICAgICAgICAgICAgICAgICMg
ZS5nLiB2aWEgYnVpbGQtd2Via2l0IC0tY2hyb21pdW0KLSAgICAgICAgICAgICAgICAnY2hyb21p
dW1fc3JjX2Rpcic6ICc8KHNvdXJjZV9kaXIpL1dlYktpdC9jaHJvbWl1bScsCi0gICAgICAgICAg
ICB9LHsKLSAgICAgICAgICAgICAgICAjIFdlYktpdCBpcyBjaGVja2VkIG91dCBpbiBzcmMvY2hy
b21pdW0vdGhpcmRfcGFydHkvV2ViS2l0Ci0gICAgICAgICAgICAgICAgJ2Nocm9taXVtX3NyY19k
aXInOiAnPCh0b29sc19kaXIpLy4uLy4uLy4uJywKLSAgICAgICAgICAgIH1dLAotICAgICAgICAg
ICAgWydPUz09ImxpbnV4IicsIHsKLSAgICAgICAgICAgICAgICAndXNlX2N1c3RvbV9mcmVldHlw
ZSUnOiAxLAotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICd1c2VfY3VzdG9tX2Zy
ZWV0eXBlJSc6IDAsCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgXSwKLSAgICB9LAotICAgICdp
bmNsdWRlcyc6IFsKLSAgICAgICAgJy4uL0R1bXBSZW5kZXJUcmVlLmd5cGknLAotICAgICAgICAn
Li4vLi4vLi4vU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpJywKLSAgICBdLAot
ICAgICd0YXJnZXRzJzogWwotICAgICAgICB7Ci0gICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAn
SW1hZ2VEaWZmJywKLSAgICAgICAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgICAg
ICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGly
KS93ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5neXA6d2Via2l0X3N1cHBvcnRfZ2Z4JywK
LSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAg
ICAgICAgICc8KERFUFRIKScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ3NvdXJjZXMn
OiBbCi0gICAgICAgICAgICAgICAgJzwodG9vbHNfZGlyKS9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9JbWFnZURpZmYuY3BwJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnY29uZGl0aW9u
cyc6IFsKLSAgICAgICAgICAgICAgICBbJ09TPT0iYW5kcm9pZCIgYW5kIGFuZHJvaWRfd2Vidmll
d19idWlsZD09MCcsIHsKLSAgICAgICAgICAgICAgICAgICAgIyBUaGUgQ2hyb21pdW0gQW5kcm9p
ZCBwb3J0IHdpbGwgY29tcGFyZSBpbWFnZXMgb24gaG9zdCByYXRoZXIKLSAgICAgICAgICAgICAg
ICAgICAgIyB0aGFuIHRhcmdldCAoYSBkZXZpY2Ugb3IgZW11bGF0b3IpIGZvciBwZXJmb3JtYW5j
ZSByZWFzb25zLgotICAgICAgICAgICAgICAgICAgICAndG9vbHNldHMnOiBbJ2hvc3QnXSwKLSAg
ICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBbJ09TPT0iYW5kcm9pZCIgYW5kIGFu
ZHJvaWRfd2Vidmlld19idWlsZD09MScsIHsKLSAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAn
bm9uZScsCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAot
ICAgICAgICB7Ci0gICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnVGVzdFJ1bm5lcicsCi0gICAg
ICAgICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAgICAgICAnZGVmaW5lcyc6
IFsKLSAgICAgICAgICAgICAgICAnV0VCVEVTVFJVTk5FUl9JTVBMRU1FTlRBVElPTj0xJywKLSAg
ICAgICAgICAgIF0sCi0gICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAg
ICAgICdUZXN0UnVubmVyX3Jlc291cmNlcycsCi0gICAgICAgICAgICAgICAgJzwoc291cmNlX2Rp
cikvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXA6d2Via2l0JywKLSAgICAgICAgICAgICAgICAn
PChzb3VyY2VfZGlyKS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cDp3ZWJraXRfdGVzdF9zdXBw
b3J0JywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAg
ICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpJywKLSAgICAgICAgICAgICAgICAnPChz
b3VyY2VfZGlyKS9XZWJLaXQvY2hyb21pdW0vcHVibGljJywKLSAgICAgICAgICAgICAgICAnPChE
RVBUSCknLAotICAgICAgICAgICAgICAgICcuLi9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYycs
Ci0gICAgICAgICAgICAgICAgJy4uL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjJywKLSAgICAgICAg
ICAgICAgICAnLi4vLi4vLi4vU291cmNlJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAn
ZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICAgICAnaW5jbHVkZV9k
aXJzJzogWwotICAgICAgICAgICAgICAgICAgICAnLi4vY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJs
aWMnLAotICAgICAgICAgICAgICAgICAgICAnLi4vLi4vLi4vU291cmNlJywKLSAgICAgICAgICAg
ICAgICBdLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAg
ICAgICAgICAgICc8QCh0ZXN0X3J1bm5lcl9maWxlcyknLAotICAgICAgICAgICAgXSwKLSAgICAg
ICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgIFsnaW5zaWRlX2Nocm9taXVt
X2J1aWxkID09IDEnLCB7Ci0gICAgICAgICAgICAgICAgICAgICd0eXBlJzogJzwoY29tcG9uZW50
KScsCi0gICAgICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAg
ICAgICAgICAgWydjb21wb25lbnQ9PSJzaGFyZWRfbGlicmFyeSInLCB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdXRUJURVNUUlVOTkVSX0RMTCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdXRUJURVNUUlVOTkVSX0lNUExFTUVOVEFUSU9OPTEnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYmFz
ZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hy
b21pdW1fc3JjX2RpcikvYnVpbGQvdGVtcF9neXAvZ29vZ2xldXJsLmd5cDpnb29nbGV1cmwnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9za2lh
L3NraWEuZ3lwOnNraWEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJv
bWl1bV9zcmNfZGlyKS92OC90b29scy9neXAvdjguZ3lwOnY4JywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXJlY3RfZGVwZW5k
ZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5l
cyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXRUJURVNUUlVOTkVS
X0RMTCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhwb3J0X2Rl
cGVuZGVudF9zZXR0aW5ncyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwo
Y2hyb21pdW1fc3JjX2RpcikvYnVpbGQvdGVtcF9neXAvZ29vZ2xldXJsLmd5cDpnb29nbGV1cmwn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS92
OC90b29scy9neXAvdjguZ3lwOnY4JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtc3ZzX3NldHRpbmdzJzogewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnVkNMaW5rZXJUb29sJzogewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWydpbmNyZW1lbnRhbF9jaHJvbWVfZGxsPT0xJywgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVXNlTGlicmFyeURlcGVu
ZGVuY3lJbnB1dHMnOiAndHJ1ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgXSwK
LSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBbJ3Rvb2xraXRfdXNlc19ndGsg
PT0gMScsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAg
ICAgICAgICAgICAnV1RGX1VTRV9HVEs9MScsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAg
ICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAg
ICAnPChjaHJvbWl1bV9zcmNfZGlyKS9idWlsZC9saW51eC9zeXN0ZW0uZ3lwOmd0aycsCi0gICAg
ICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBb
Ci0gICAgICAgICAgICAgICAgICAgICAgICAnPChzb3VyY2VfZGlyKS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL2d0aycsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfV0s
Ci0gICAgICAgICAgICAgICAgWydPUyE9IndpbiInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdz
b3VyY2VzLyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIFsnZXhjbHVkZScsICdXaW5cXC5j
cHAkJ10sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAg
ICAgICAgICBdLAotICAgICAgICAgICAgIyBEaXNhYmxlIGM0MjY3IHdhcm5pbmdzIHVudGlsIHdl
IGZpeCBzaXplX3QgdG8gaW50IHRydW5jYXRpb25zLiAKLSAgICAgICAgICAgICdtc3ZzX2Rpc2Fi
bGVkX3dhcm5pbmdzJzogWyA0MjY3LCBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAg
ICAgICAndGFyZ2V0X25hbWUnOiAnVGVzdFJ1bm5lcl9yZXNvdXJjZXMnLAotICAgICAgICAgICAg
J3R5cGUnOiAnbm9uZScsCi0gICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAg
ICAgICAgICdJbWFnZURpZmYnLAotICAgICAgICAgICAgICAgICdjb3B5X1Rlc3ROZXRzY2FwZVBs
dWdJbicsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAg
ICAgICAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdkZXBlbmRl
bmNpZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnTGF5b3V0VGVzdEhlbHBlcicsCi0g
ICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdjb3BpZXMnOiBbewot
ICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc3RpbmF0aW9uJzogJzwoUFJPRFVDVF9ESVIpJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlcyc6IFsnPChhaGVtX3BhdGgpJ10sCi0gICAg
ICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAg
IFsnT1M9PSJtYWMiJywgewotICAgICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwot
ICAgICAgICAgICAgICAgICAgICAgICAgJ0xheW91dFRlc3RIZWxwZXInLAotICAgICAgICAgICAg
ICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnYWxsX2RlcGVuZGVudF9zZXR0aW5ncyc6
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdtYWNfYnVuZGxlX3Jlc291cmNlcyc6IFsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhaGVtX3BhdGgpJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnPCh0b29sc19kaXIpL0R1bXBSZW5kZXJUcmVlL2ZvbnRzL1dlYktpdFdl
aWdodFdhdGNoZXIxMDAudHRmJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh0b29s
c19kaXIpL0R1bXBSZW5kZXJUcmVlL2ZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXIyMDAudHRmJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh0b29sc19kaXIpL0R1bXBSZW5kZXJUcmVl
L2ZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXIzMDAudHRmJywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnPCh0b29sc19kaXIpL0R1bXBSZW5kZXJUcmVlL2ZvbnRzL1dlYktpdFdlaWdodFdh
dGNoZXI0MDAudHRmJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh0b29sc19kaXIp
L0R1bXBSZW5kZXJUcmVlL2ZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXI1MDAudHRmJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnPCh0b29sc19kaXIpL0R1bXBSZW5kZXJUcmVlL2ZvbnRz
L1dlYktpdFdlaWdodFdhdGNoZXI2MDAudHRmJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnPCh0b29sc19kaXIpL0R1bXBSZW5kZXJUcmVlL2ZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXI3
MDAudHRmJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh0b29sc19kaXIpL0R1bXBS
ZW5kZXJUcmVlL2ZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXI4MDAudHRmJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnPCh0b29sc19kaXIpL0R1bXBSZW5kZXJUcmVlL2ZvbnRzL1dlYktp
dFdlaWdodFdhdGNoZXI5MDAudHRmJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChT
SEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L21pc3NpbmdJbWFnZS5wbmcnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQv
dGV4dEFyZWFSZXNpemVDb3JuZXIucG5nJywKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0g
ICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAg
ICAgWyd1c2VfeDExID09IDEnLCB7Ci0gICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMn
OiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90b29scy94
ZGlzcGxheWNoZWNrL3hkaXNwbGF5Y2hlY2suZ3lwOnhkaXNwbGF5Y2hlY2snLAotICAgICAgICAg
ICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnY29waWVzJzogW3sKLSAgICAgICAg
ICAgICAgICAgICAgICAgICdkZXN0aW5hdGlvbic6ICc8KFBST0RVQ1RfRElSKScsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAnZmlsZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
JzwoYWhlbV9wYXRoKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodG9vbHNfZGly
KS9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9mb250cy5jb25mJywKLSAgICAgICAgICAgICAgICAg
ICAgICAgIF0KLSAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgfV0sCi0g
ICAgICAgICAgICAgICAgWydPUz09ImFuZHJvaWQiJywgewotICAgICAgICAgICAgICAgICAgICAn
ZGVwZW5kZW5jaWVzISc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICdJbWFnZURpZmYnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgJ2NvcHlfVGVzdE5ldHNjYXBlUGx1Z0luJywKLSAgICAg
ICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2NvcGllcyc6IFt7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAnZGVzdGluYXRpb24nOiAnPChQUk9EVUNUX0RJUiknLAotICAg
ICAgICAgICAgICAgICAgICAgICAgJ2ZpbGVzJzogWwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICc8KGFoZW1fcGF0aCknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHRvb2xz
X2RpcikvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vYW5kcm9pZF9tYWluX2ZvbnRzLnhtbCcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodG9vbHNfZGlyKS9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9hbmRyb2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbCcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBdCi0gICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIH1dLAotICAg
ICAgICAgICAgICAgIFsnT1M9PSJhbmRyb2lkIiBhbmQgYW5kcm9pZF93ZWJ2aWV3X2J1aWxkPT0w
JywgewotICAgICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAg
ICAgICAgICAgICAgJ0ltYWdlRGlmZiNob3N0JywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAg
ICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsK
LSAgICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdEdW1wUmVuZGVyVHJlZScsCi0gICAgICAgICAg
ICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgICAgICdtYWNfYnVuZGxlJzogMSwKLSAg
ICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAgICAgJ1Rlc3RSdW5uZXIn
LAotICAgICAgICAgICAgICAgICdEdW1wUmVuZGVyVHJlZV9yZXNvdXJjZXMnLAotICAgICAgICAg
ICAgICAgICc8KHNvdXJjZV9kaXIpL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwOmluc3BlY3Rv
cl9yZXNvdXJjZXMnLAotICAgICAgICAgICAgICAgICc8KHNvdXJjZV9kaXIpL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwOndlYmtpdCcsCi0gICAgICAgICAgICAgICAgJzwoc291cmNlX2Rpcikv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXA6d2Via2l0X3d0Zl9zdXBwb3J0JywKLSAgICAgICAg
ICAgICAgICAnPChzb3VyY2VfZGlyKS9XVEYvV1RGLmd5cC9XVEYuZ3lwOnd0ZicsCi0gICAgICAg
ICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5cDp0ZXN0X3N1cHBvcnRf
YmFzZScsCi0gICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYnVpbGQvdGVtcF9n
eXAvZ29vZ2xldXJsLmd5cDpnb29nbGV1cmwnLAotICAgICAgICAgICAgICAgICc8KGNocm9taXVt
X3NyY19kaXIpL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOmljdXVjJywKLSAgICAgICAgICAgICAg
ICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9tZXNhL21lc2EuZ3lwOm9zbWVzYScs
Ci0gICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdjgvdG9vbHMvZ3lwL3Y4Lmd5
cDp2OCcsCi0gICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikvd2Via2l0L3N1cHBv
cnQvd2Via2l0X3N1cHBvcnQuZ3lwOndlYmtpdF9zdXBwb3J0JywKLSAgICAgICAgICAgIF0sCi0g
ICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgICAgICc8KGNocm9taXVt
X3NyY19kaXIpJywKLSAgICAgICAgICAgICAgICAnPChzb3VyY2VfZGlyKS9XZWJLaXQvY2hyb21p
dW0vcHVibGljJywKLSAgICAgICAgICAgICAgICAnPCh0b29sc19kaXIpL0R1bXBSZW5kZXJUcmVl
JywKLSAgICAgICAgICAgICAgICAnPChERVBUSCknLAotICAgICAgICAgICAgXSwKLSAgICAgICAg
ICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICMgVGVjaG5pY2FsbHkgbm90IGEgdW5p
dCB0ZXN0IGJ1dCByZXF1aXJlIGZ1bmN0aW9ucyBhdmFpbGFibGUgb25seSB0bwotICAgICAgICAg
ICAgICAgICMgdW5pdCB0ZXN0cy4KLSAgICAgICAgICAgICAgICAnVU5JVF9URVNUJywKLSAgICAg
ICAgICAgIF0sCi0gICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAnPEAo
ZHJ0X2ZpbGVzKScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBb
Ci0gICAgICAgICAgICAgICAgWydPUz09Im1hYyIgb3IgT1M9PSJ3aW4iIG9yIHRvb2xraXRfdXNl
c19ndGs9PTEnLCB7Ci0gICAgICAgICAgICAgICAgICAgICMgVGhlc2UgcGxhdGZvcm1zIGhhdmUg
dGhlaXIgb3duIGltcGxlbWVudGF0aW9ucyBvZgotICAgICAgICAgICAgICAgICAgICAjIGNoZWNr
TGF5b3V0VGVzdFN5c3RlbURlcGVuZGVuY2llcygpIGFuZCBvcGVuU3RhcnR1cERpYWxvZygpLgot
ICAgICAgICAgICAgICAgICAgICAnc291cmNlcy8nOiBbCi0gICAgICAgICAgICAgICAgICAgICAg
ICBbJ2V4Y2x1ZGUnLCAnVGVzdFNoZWxsU3R1YlxcLmNwcCQnXSwKLSAgICAgICAgICAgICAgICAg
ICAgXSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBbJ09TPT0id2luIics
IHsKLSAgICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9idWls
ZF9hbmdsZS5neXA6bGliRUdMJywKLSAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVt
X3NyY19kaXIpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9idWlsZF9hbmdsZS5neXA6bGliR0xFU3Yy
JywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ3Jlc291cmNl
X2luY2x1ZGVfZGlycyc6IFsnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0J10sCi0g
ICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICAgICAgICAg
IyBGSVhNRTogV2Ugc2hvdWxkIGp1c3QgdXNlIHRoZSByZXNvdXJjZXMgaW4gdGhlIC5wYWsgZmls
ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9u
ZXQvbmV0X3Jlc291cmNlcy5yYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAnPChTSEFSRURf
SU5URVJNRURJQVRFX0RJUikvd2Via2l0L3dlYmtpdF9jaHJvbWl1bV9yZXNvdXJjZXMucmMnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtp
dC93ZWJraXRfcmVzb3VyY2VzLnJjJywKLSAgICAgICAgICAgICAgICAgICAgICAgICc8KFNIQVJF
RF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvd2Via2l0X3N0cmluZ3NfZW4tVVMucmMnLAotICAg
ICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsK
LSAgICAgICAgICAgICAgICAgICAgICAgIFsnaW5zaWRlX2Nocm9taXVtX2J1aWxkPT0xJywgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWd1cmF0aW9ucyc6IHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ0RlYnVnX0Jhc2UnOiB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnbXN2c19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnVkNMaW5rZXJUb29sJzogewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTGlua0luY3JlbWVudGFsJzogJzwobXN2c19s
YXJnZV9tb2R1bGVfZGVidWdfbGlua19tb2RlKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAg
ICAgICBdLAotICAgICAgICAgICAgICAgIH0seyAjIE9TIT0id2luIgotICAgICAgICAgICAgICAg
ICAgICAnc291cmNlcy8nOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAn
V2luXFwuY3BwJCddLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1d
LAotICAgICAgICAgICAgICAgIFsnT1M9PSJtYWMiJywgewotICAgICAgICAgICAgICAgICAgICAn
ZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgJzwoc291cmNlX2Rpcikv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXA6Y29weV9tZXNhJywKLSAgICAgICAgICAgICAgICAg
ICAgXSwKLSAgICAgICAgICAgICAgICB9LHsgIyBPUyE9Im1hYyIKLSAgICAgICAgICAgICAgICAg
ICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgIyAubW0gaXMgYWxyZWFk
eSBleGNsdWRlZCBieSBjb21tb24uZ3lwaQotICAgICAgICAgICAgICAgICAgICAgICAgWydleGNs
dWRlJywgJ01hY1xcLmNwcCQnXSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAg
ICAgICB9XSwKLSAgICAgICAgICAgICAgICBbJ29zX3Bvc2l4IT0xIG9yIE9TPT0ibWFjIicsIHsK
LSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAgICAgICAgICAgICAg
ICAgWydleGNsdWRlJywgJ1Bvc2l4XFwuY3BwJCddLAotICAgICAgICAgICAgICAgICAgICBdLAot
ICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIFsndXNlX3gxMSA9PSAxJywgewot
ICAgICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICAgICAg
ICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYnVpbGQvbGludXgvc3lzdGVtLmd5cDpmb250Y29u
ZmlnJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ3Zhcmlh
Ymxlcyc6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICMgRklYTUU6IEVuYWJsZSB3YXJuaW5n
cyBvbiBvdGhlciBwbGF0Zm9ybXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAnY2hyb21pdW1f
Y29kZSc6IDEsCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICdj
b25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgWydsaW51eF91c2VfdGNtYWxs
b2MgPT0gMScsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzog
WwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9i
YXNlL2FsbG9jYXRvci9hbGxvY2F0b3IuZ3lwOmFsbG9jYXRvcicsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAg
ICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0seyAjIHVzZV94MTEgIT0gMQotICAgICAgICAg
ICAgICAgICAgICAnc291cmNlcy8nOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICBbJ2V4Y2x1
ZGUnLCAnWDExXFwuY3BwJCddLAotICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAg
ICAgfV0sCi0gICAgICAgICAgICAgICAgWyd0b29sa2l0X3VzZXNfZ3RrID09IDEnLCB7Ci0gICAg
ICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgJ1dU
Rl9VU0VfR1RLPTEnLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAg
ICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1f
c3JjX2RpcikvYnVpbGQvbGludXgvc3lzdGVtLmd5cDpndGsnLAotICAgICAgICAgICAgICAgICAg
ICBdLAotICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAg
ICAgICAgICAgICAgJzwoc291cmNlX2RpcikvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9ndGsnLAot
ICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAg
ICAgIFsnT1M9PSJhbmRyb2lkIicsIHsKLSAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAnc2hh
cmVkX2xpYnJhcnknLAotICAgICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAg
ICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5cDp0
ZXN0X3N1cHBvcnRfYmFzZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9z
cmNfZGlyKS90ZXN0aW5nL2FuZHJvaWQvbmF0aXZlX3Rlc3QuZ3lwOm5hdGl2ZV90ZXN0X25hdGl2
ZV9jb2RlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Rv
b2xzL2FuZHJvaWQvZm9yd2FyZGVyL2ZvcndhcmRlci5neXA6Zm9yd2FyZGVyJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Rvb2xzL2FuZHJvaWQvbWQ1c3Vt
L21kNXN1bS5neXA6bWQ1c3VtJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAg
ICAgICB9LCB7ICMgT1MhPSJhbmRyb2lkIgotICAgICAgICAgICAgICAgICAgICAnc291cmNlcy8n
OiBbCi0gICAgICAgICAgICAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAnQW5kcm9pZFxcLmNwcCQn
XSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAg
ICAgICAgICBbJ3VzZV9jdXN0b21fZnJlZXR5cGU9PTEnLCB7Ci0gICAgICAgICAgICAgICAgICAg
J2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3Jj
X2RpcikvdGhpcmRfcGFydHkvZnJlZXR5cGUyL2ZyZWV0eXBlMi5neXA6ZnJlZXR5cGUyJywKLSAg
ICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAg
IFsnaW5zaWRlX2Nocm9taXVtX2J1aWxkPT0wJywgewotICAgICAgICAgICAgICAgICAgICAnZGVw
ZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rp
cikvd2Via2l0L3N1cHBvcnQvc2V0dXBfdGhpcmRfcGFydHkuZ3lwOnRoaXJkX3BhcnR5X2hlYWRl
cnMnLAotICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAg
ICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAndGFyZ2V0X25hbWUn
OiAnRHVtcFJlbmRlclRyZWVfcmVzb3VyY2VzJywKLSAgICAgICAgICAgICd0eXBlJzogJ25vbmUn
LAotICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICAgICAnPChjaHJv
bWl1bV9zcmNfZGlyKS9uZXQvbmV0Lmd5cDpuZXRfcmVzb3VyY2VzJywKLSAgICAgICAgICAgICAg
ICAnPChjaHJvbWl1bV9zcmNfZGlyKS91aS91aS5neXA6dWlfcmVzb3VyY2VzJywKLSAgICAgICAg
ICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS93ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9y
dC5neXA6d2Via2l0X3Jlc291cmNlcycsCi0gICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3Jj
X2Rpcikvd2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuZ3lwOndlYmtpdF9zdHJpbmdzJywK
LSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnYWN0aW9ucyc6IFt7Ci0gICAgICAgICAgICAg
ICAgJ2FjdGlvbl9uYW1lJzogJ3JlcGFja19sb2NhbCcsCi0gICAgICAgICAgICAgICAgJ3Zhcmlh
Ymxlcyc6IHsKLSAgICAgICAgICAgICAgICAgICAgJ3JlcGFja19wYXRoJzogJzwoY2hyb21pdW1f
c3JjX2RpcikvdG9vbHMvZ3JpdC9ncml0L2Zvcm1hdC9yZXBhY2sucHknLAotICAgICAgICAgICAg
ICAgICAgICAncGFrX2lucHV0cyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8KFNIQVJF
RF9JTlRFUk1FRElBVEVfRElSKS9uZXQvbmV0X3Jlc291cmNlcy5wYWsnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3VpL2dmeC9nZnhfcmVzb3Vy
Y2VzLnBhaycsCi0gICAgICAgICAgICAgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRF
X0RJUikvd2Via2l0L3dlYmtpdF9jaHJvbWl1bV9yZXNvdXJjZXMucGFrJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvd2Via2l0X3N0
cmluZ3NfZW4tVVMucGFrJywKLSAgICAgICAgICAgICAgICAgICAgICAgICc8KFNIQVJFRF9JTlRF
Uk1FRElBVEVfRElSKS93ZWJraXQvd2Via2l0X3Jlc291cmNlc18xMDBfcGVyY2VudC5wYWsnLAot
ICAgICAgICAgICAgICAgIF19LAotICAgICAgICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAg
ICAgICAgICAgICAgICc8KHJlcGFja19wYXRoKScsCi0gICAgICAgICAgICAgICAgICAgICc8QChw
YWtfaW5wdXRzKScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAnb3V0cHV0
cyc6IFsKLSAgICAgICAgICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0R1bXBSZW5kZXJUcmVl
LnBhaycsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAnYWN0aW9uJzogWydw
eXRob24nLCAnPChyZXBhY2tfcGF0aCknLCAnPEAoX291dHB1dHMpJywgJzxAKHBha19pbnB1dHMp
J10sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAg
ICAgICAgICAgIFsnT1M9PSJtYWMiJywgewotICAgICAgICAgICAgICAgICAgICAnYWxsX2RlcGVu
ZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdtYWNfYnVuZGxlX3Jl
c291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikv
RHVtcFJlbmRlclRyZWUucGFrJywKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAg
ICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdCi0gICAg
ICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdUZXN0TmV0c2Nh
cGVQbHVnSW4nLAotICAgICAgICAgICAgJ3R5cGUnOiAnbG9hZGFibGVfbW9kdWxlJywKLSAgICAg
ICAgICAgICdzb3VyY2VzJzogWyAnPEAodGVzdF9wbHVnaW5fZmlsZXMpJyBdLAotICAgICAgICAg
ICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGly
KS90aGlyZF9wYXJ0eS9ucGFwaS9ucGFwaS5neXA6bnBhcGknLAotICAgICAgICAgICAgXSwKLSAg
ICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAgICAgJzwoY2hyb21pdW1f
c3JjX2RpciknLAotICAgICAgICAgICAgICAgICc8KHRvb2xzX2RpcikvRHVtcFJlbmRlclRyZWUv
VGVzdE5ldHNjYXBlUGx1Z0luJywKLSAgICAgICAgICAgICAgICAnPCh0b29sc19kaXIpL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3ROZXRzY2FwZVBsdWdJbi9Gb3J3YXJkaW5nSGVhZGVycycs
Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAg
ICAgICAgWydPUz09Im1hYyInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdtYWNfYnVuZGxlJzog
MSwKLSAgICAgICAgICAgICAgICAgICAgJ3Byb2R1Y3RfZXh0ZW5zaW9uJzogJ3BsdWdpbicsCi0g
ICAgICAgICAgICAgICAgICAgICdsaW5rX3NldHRpbmdzJzogewotICAgICAgICAgICAgICAgICAg
ICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJChTREtS
T09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NhcmJvbi5mcmFtZXdvcmsnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICckKFNES1JPT1QpL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29y
a3MvQ29jb2EuZnJhbWV3b3JrJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJChTREtS
T09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1F1YXJ0ekNvcmUuZnJhbWV3b3JrJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAg
ICAgICAgICAgICAgJ3hjb2RlX3NldHRpbmdzJzogewotICAgICAgICAgICAgICAgICAgICAgICAg
J0dDQ19TWU1CT0xTX1BSSVZBVEVfRVhURVJOJzogJ05PJywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICdJTkZPUExJU1RfRklMRSc6ICc8KHRvb2xzX2RpcikvRHVtcFJlbmRlclRyZWUvVGVzdE5l
dHNjYXBlUGx1Z0luL21hYy9JbmZvLnBsaXN0JywKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAg
ICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBbJ29zX3Bvc2l4ID09IDEgYW5kIE9T
ICE9ICJtYWMiJywgewotICAgICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAg
ICAgICAgICAgICAgICAgJy1mdmlzaWJpbGl0eT1kZWZhdWx0JywKLSAgICAgICAgICAgICAgICAg
ICAgXSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBbJ09TPT0id2luIics
IHsKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAg
ICAgICAjIFRoaXMgc2VlbXMgbGlrZSBhIGhhY2ssIGJ1dCB0aGlzIGlzIHdoYXQgU2FmYXJpIFdp
biBkb2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgJ3NucHJpbnRmPV9zbnByaW50ZicsCi0g
ICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwot
ICAgICAgICAgICAgICAgICAgICAgICAgJzwodG9vbHNfZGlyKS9EdW1wUmVuZGVyVHJlZS9UZXN0
TmV0c2NhcGVQbHVnSW4vd2luL1Rlc3ROZXRzY2FwZVBsdWdpbi5kZWYnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgJzwodG9vbHNfZGlyKS9EdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVn
SW4vd2luL1Rlc3ROZXRzY2FwZVBsdWdpbi5yYycsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0g
ICAgICAgICAgICAgICAgICAgICMgVGhlIC5yYyBmaWxlIHJlcXVpcmVzIHRoYXQgdGhlIG5hbWUg
b2YgdGhlIGRsbCBpcyBucFRlc3ROZXRzY2FwZVBsdWdJbi5kbGwuCi0gICAgICAgICAgICAgICAg
ICAgICdwcm9kdWN0X25hbWUnOiAnbnBUZXN0TmV0c2NhcGVQbHVnSW4nLAotICAgICAgICAgICAg
ICAgICAgICAjIERpc2FibGUgYzQyNjcgd2FybmluZ3MgdW50aWwgd2UgZml4IHNpemVfdCB0byBp
bnQgdHJ1bmNhdGlvbnMuIAotICAgICAgICAgICAgICAgICAgICAnbXN2c19kaXNhYmxlZF93YXJu
aW5ncyc6IFsgNDI2NywgXSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0g
ICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdjb3B5X1Rl
c3ROZXRzY2FwZVBsdWdJbicsCi0gICAgICAgICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICAg
ICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAgICAgJ1Rlc3ROZXRzY2FwZVBsdWdJ
bicsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAg
ICAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdjb3BpZXMnOiBb
ewotICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc3RpbmF0aW9uJzogJzwoUFJPRFVDVF9ESVIp
L3BsdWdpbnMnLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGVzJzogWyc8KFBST0RVQ1Rf
RElSKS9ucFRlc3ROZXRzY2FwZVBsdWdJbi5kbGwnXSwKLSAgICAgICAgICAgICAgICAgICAgfV0s
Ci0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgWydPUz09Im1hYyInLCB7Ci0g
ICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbJ1Rlc3ROZXRzY2FwZVBsdWdJbidd
LAotICAgICAgICAgICAgICAgICAgICAnY29waWVzJzogW3sKLSAgICAgICAgICAgICAgICAgICAg
ICAgICdkZXN0aW5hdGlvbic6ICc8KFBST0RVQ1RfRElSKS9wbHVnaW5zLycsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAnZmlsZXMnOiBbJzwoUFJPRFVDVF9ESVIpL1Rlc3ROZXRzY2FwZVBsdWdJ
bi5wbHVnaW4vJ10sCi0gICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIH1d
LAotICAgICAgICAgICAgICAgIFsnb3NfcG9zaXggPT0gMSBhbmQgT1MgIT0gIm1hYyInLCB7Ci0g
ICAgICAgICAgICAgICAgICAgICdjb3BpZXMnOiBbewotICAgICAgICAgICAgICAgICAgICAgICAg
J2Rlc3RpbmF0aW9uJzogJzwoUFJPRFVDVF9ESVIpL3BsdWdpbnMnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgJ2ZpbGVzJzogWyc8KFBST0RVQ1RfRElSKS9saWJUZXN0TmV0c2NhcGVQbHVnSW4u
c28nXSwKLSAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAg
ICAgICAgICBdLAotICAgICAgICB9LAotICAgIF0sICMgdGFyZ2V0cwotICAgICdjb25kaXRpb25z
JzogWwotICAgICAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICAgICAgICd0YXJnZXRzJzogW3sK
LSAgICAgICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnTGF5b3V0VGVzdEhlbHBlcicsCi0gICAg
ICAgICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgICAgICAgJ3NvdXJj
ZXMnOiBbJzwodG9vbHNfZGlyKS9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0SGVs
cGVyV2luLmNwcCddLAotICAgICAgICAgICAgfV0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ09T
PT0ibWFjIicsIHsKLSAgICAgICAgICAgICd0YXJnZXRzJzogW3sKLSAgICAgICAgICAgICAgICAn
dGFyZ2V0X25hbWUnOiAnTGF5b3V0VGVzdEhlbHBlcicsCi0gICAgICAgICAgICAgICAgJ3R5cGUn
OiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbJzwodG9vbHNfZGly
KS9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0SGVscGVyLm1tJ10sCi0gICAgICAg
ICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICAgICAgICdsaWJyYXJp
ZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnJChTREtST09UKS9TeXN0ZW0vTGlicmFy
eS9GcmFtZXdvcmtzL0FwcEtpdC5mcmFtZXdvcmsnLAotICAgICAgICAgICAgICAgICAgICBdLAot
ICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgfV0sCi0gICAgICAg
IFsnb3NfcG9zaXg9PTEgYW5kIE9TIT0ibWFjIiBhbmQgZ2NjX3ZlcnNpb24+PTQ2JywgewotICAg
ICAgICAgICAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAgICAgICAgICAgICAjIERpc2FibGUg
d2FybmluZ3MgYWJvdXQgYysrMHggY29tcGF0aWJpbGl0eSwgYXMgc29tZSBuYW1lcyAoc3VjaAot
ICAgICAgICAgICAgICAgICMgYXMgbnVsbHB0cikgY29uZmxpY3Qgd2l0aCB1cGNvbWluZyBjKysw
eCB0eXBlcy4KLSAgICAgICAgICAgICAgICAnY2ZsYWdzX2NjJzogWyctV25vLWMrKzB4LWNvbXBh
dCddLAotICAgICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnT1M9PSJhbmRyb2lk
IicsIHsKLSAgICAgICAgICAgICMgV3JhcCBsaWJEdW1wUmVuZGVyVHJlZS5zbyBpbnRvIGFuIGFu
ZHJvaWQgYXBrIGZvciBleGVjdXRpb24uCi0gICAgICAgICAgICAndGFyZ2V0cyc6IFt7Ci0gICAg
ICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ0R1bXBSZW5kZXJUcmVlX2FwaycsCi0gICAgICAg
ICAgICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6
IFsKLSAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5
cDpiYXNlX2phdmEnLAotICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9t
ZWRpYS9tZWRpYS5neXA6bWVkaWFfamF2YScsCi0gICAgICAgICAgICAgICAgICAgICc8KGNocm9t
aXVtX3NyY19kaXIpL25ldC9uZXQuZ3lwOm5ldF9qYXZhJywKLSAgICAgICAgICAgICAgICAgICAg
J0R1bXBSZW5kZXJUcmVlJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICd2
YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAgICAgICAgICdpbnB1dF9zaGxpYl9wYXRoJzogJzwo
U0hBUkVEX0xJQl9ESVIpLzwoU0hBUkVEX0xJQl9QUkVGSVgpRHVtcFJlbmRlclRyZWU8KFNIQVJF
RF9MSUJfU1VGRklYKScsCi0gICAgICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAg
ICAgICAgICAgICAgICAgICAgICAgWydpbnNpZGVfY2hyb21pdW1fYnVpbGQ9PTEnLCB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ2FudF9idWlsZF90b19jaHJvbWl1bV9zcmMnOiAnPChh
bnRfYnVpbGRfb3V0KS8uLi8uLi8nLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdhbnRfYnVpbGRfdG9fY2hyb21pdW1fc3JjJzogJzwo
Y2hyb21pdW1fc3JjX2RpciknLAotICAgICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAg
ICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAjIFBh
cnQgb2YgdGhlIGZvbGxvd2luZyB3YXMgY29waWVkIGZyb20gPChjaHJvbWl1bV9zcmNfZGlyKS9i
dWlsZC9hcGtfdGVzdC5ncHlpLgotICAgICAgICAgICAgICAgICMgTm90IGluY2x1ZGluZyBpdCBi
ZWNhdXNlIGd5cCBpbmNsdWRlIGRvZXNuJ3Qgc3VwcG9ydCB2YXJpYWJsZSBpbiBwYXRoIG9yIHVu
ZGVyCi0gICAgICAgICAgICAgICAgIyBjb25kaXRpb25zLiBBbmQgd2UgYWxzbyBoYXZlIHNvbWUg
ZGlmZmVyZW50IHJlcXVpcmVtZW50cy4KLSAgICAgICAgICAgICAgICAnYWN0aW9ucyc6IFt7Ci0g
ICAgICAgICAgICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdhcGtfRHVtcFJlbmRlclRyZWUnLAot
ICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdCdWlsZGluZyBEdW1wUmVuZGVyVHJlZSB0
ZXN0IGFway4nLAotICAgICAgICAgICAgICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICAg
ICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGVzdGluZy9hbmRyb2lkL0FuZHJvaWRN
YW5pZmVzdC54bWwnLAotICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rp
cikvdGVzdGluZy9hbmRyb2lkL2dlbmVyYXRlX25hdGl2ZV90ZXN0LnB5JywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICc8KGlucHV0X3NobGliX3BhdGgpJywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICc+QChpbnB1dF9qYXJzX3BhdGhzKScsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAg
ICAgICAgICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgJzwo
UFJPRFVDVF9ESVIpL0R1bXBSZW5kZXJUcmVlX2Fway9EdW1wUmVuZGVyVHJlZS1kZWJ1Zy5hcGsn
LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzog
WwotICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGVzdGluZy9h
bmRyb2lkL2dlbmVyYXRlX25hdGl2ZV90ZXN0LnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICctLW5hdGl2ZV9saWJyYXJ5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICc8KGlucHV0X3No
bGliX3BhdGgpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICctLW91dHB1dCcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRHVtcFJlbmRlclRyZWVfYXBrJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICctLXN0cmlwLWJpbmFyeT08KGFuZHJvaWRfc3RyaXApJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICctLWFudC1hcmdzJywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICctcXVpZXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgJy0tYW50LWFyZ3MnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgJy1EQU5EUk9JRF9TREs9PChhbmRyb2lkX3NkayknLAot
ICAgICAgICAgICAgICAgICAgICAgICAgJy0tYW50LWFyZ3MnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgJy1EQU5EUk9JRF9TREtfUk9PVD08KGFuZHJvaWRfc2RrX3Jvb3QpJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICctLWFudC1hcmdzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICct
REFORFJPSURfU0RLX1RPT0xTPTwoYW5kcm9pZF9zZGtfdG9vbHMpJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICctLWFudC1hcmdzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICctREFORFJP
SURfU0RLX1ZFUlNJT049PChhbmRyb2lkX3Nka192ZXJzaW9uKScsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAnLS1hbnQtYXJncycsCi0gICAgICAgICAgICAgICAgICAgICAgICAnLURBTkRST0lE
X1RPT0xDSEFJTj08KGFuZHJvaWRfdG9vbGNoYWluKScsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAnLS1hbnQtYXJncycsCi0gICAgICAgICAgICAgICAgICAgICAgICAnLURBTkRST0lEX0dEQlNF
UlZFUj08KGFuZHJvaWRfZ2Ric2VydmVyKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAnLS1h
bnQtYXJncycsCi0gICAgICAgICAgICAgICAgICAgICAgICAnLURQUk9EVUNUX0RJUj08KGFudF9i
dWlsZF9vdXQpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICctLWFudC1hcmdzJywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICctRENIUk9NSVVNX1NSQz08KGFudF9idWlsZF90b19jaHJvbWl1
bV9zcmMpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICctLWFudC1hcmdzJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICctRElOUFVUX0pBUlNfUEFUSFM9PkAoaW5wdXRfamFyc19wYXRocykn
LAotICAgICAgICAgICAgICAgICAgICAgICAgJy0tYXBwX2FiaScsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAnPChhbmRyb2lkX2FwcF9hYmkpJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAg
ICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICB9XSwKLSAgICAgICAg
WydjbGFuZz09MScsIHsKLSAgICAgICAgICAgICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgICAg
ICAgICAgICAgIyBGSVhNRTogQWRkIC1XZ2xvYmFsLWNvbnN0cnVjdG9ycyBhZnRlciBmaXhpbmcg
ZXhpc3RpbmcgYnVncy4KLSAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyctV3VudXNlZC1wYXJh
bWV0ZXInXSwKLSAgICAgICAgICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAg
ICAgICAgICAgICdXQVJOSU5HX0NGTEFHUyc6IFsnLVd1bnVzZWQtcGFyYW1ldGVyJ10sCi0gICAg
ICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgIF0sICMgY29u
ZGl0aW9ucwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRy
ZWUuZ3lwaSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMTU1ZGYxYzI0YTM5NjJhMWRiNDkwNWMyNmJjMDI2
NjUwMjAxMWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQorKysgL2Rldi9udWxsCkBA
IC0xLDEyOSArMCwwIEBACi17Ci0gICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2RydF9maWxl
cyc6IFsKLSAgICAgICAgICAgICdEdW1wUmVuZGVyVHJlZS5oJywKLSAgICAgICAgICAgICdEdW1w
UmVuZGVyVHJlZUNvbW1vbi5jcHAnLAotICAgICAgICAgICAgJ2Nocm9taXVtL0RSVERldlRvb2xz
QWdlbnQuY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9EUlREZXZUb29sc0FnZW50LmgnLAot
ICAgICAgICAgICAgJ2Nocm9taXVtL0RSVERldlRvb2xzQ2xpZW50LmNwcCcsCi0gICAgICAgICAg
ICAnY2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuaCcsCi0gICAgICAgICAgICAnY2hyb21pdW0v
RHVtcFJlbmRlclRyZWUuY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9Nb2NrUGxhdGZvcm0u
Y3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9Nb2NrUGxhdGZvcm0uaCcsCi0gICAgICAgICAg
ICAnY2hyb21pdW0vTW9ja1dlYlByZXJlbmRlcmluZ1N1cHBvcnQuY3BwJywKLSAgICAgICAgICAg
ICdjaHJvbWl1bS9Nb2NrV2ViUHJlcmVuZGVyaW5nU3VwcG9ydC5oJywKLSAgICAgICAgICAgICdj
aHJvbWl1bS9UYXNrLmgnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rhc2suY3BwJywKLSAgICAg
ICAgICAgICdjaHJvbWl1bS9UZXN0RXZlbnRQcmludGVyLmgnLAotICAgICAgICAgICAgJ2Nocm9t
aXVtL1Rlc3RFdmVudFByaW50ZXIuY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0TmF2
aWdhdGlvbkNvbnRyb2xsZXIuY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0TmF2aWdh
dGlvbkNvbnRyb2xsZXIuaCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsLmNwcCcs
Ci0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsLmgnLAotICAgICAgICAgICAgJ2Nocm9t
aXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0U2hl
bGxNYWMubW0nLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVsbFBvc2l4LmNwcCcsCi0g
ICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsU3R1Yi5jcHAnLAotICAgICAgICAgICAgJ2No
cm9taXVtL1Rlc3RTaGVsbFdpbi5jcHAnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVs
bFgxMS5jcHAnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcCcsCi0gICAg
ICAgICAgICAnY2hyb21pdW0vV2ViVmlld0hvc3QuaCcsCi0gICAgICAgIF0sCi0gICAgICAgICd0
ZXN0X3J1bm5lcl9maWxlcyc6IFsKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3B1
YmxpYy9XZWJUZXN0RGVsZWdhdGUuaCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5l
ci9wdWJsaWMvV2ViUHJlZmVyZW5jZXMuaCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1
bm5lci9wdWJsaWMvV2ViVGFzay5oJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVy
L3B1YmxpYy9XZWJUZXN0Q29tbW9uLmgnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5u
ZXIvcHVibGljL1dlYlRlc3RJbnRlcmZhY2VzLmgnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rl
c3RSdW5uZXIvcHVibGljL1dlYlRlc3RQcm94eS5oJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9U
ZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0UnVubmVyLmgnLAotICAgICAgICAgICAgJ2Nocm9taXVt
L1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwJywKLSAg
ICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ckNocm9taXVtLmgnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5jcHAnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rl
c3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5oJywKLSAgICAgICAg
ICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9DcHBCb3VuZENsYXNzLmNwcCcsCi0gICAgICAg
ICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQ3BwQm91bmRDbGFzcy5oJywKLSAgICAgICAg
ICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9DcHBWYXJpYW50LmNwcCcsCi0gICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQ3BwVmFyaWFudC5oJywKLSAgICAgICAgICAgICdj
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9FdmVudFNlbmRlci5jcHAnLAotICAgICAgICAgICAgJ2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL0V2ZW50U2VuZGVyLmgnLAotICAgICAgICAgICAgJ2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL0dhbWVwYWRDb250cm9sbGVyLmNwcCcsCi0gICAgICAgICAgICAn
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvR2FtZXBhZENvbnRyb2xsZXIuaCcsCi0gICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvS2V5Q29kZU1hcHBpbmcuY3BwJywKLSAgICAgICAg
ICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9LZXlDb2RlTWFwcGluZy5oJywKLSAgICAgICAg
ICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrQ29uc3RyYWludHMuY3BwJywKLSAgICAg
ICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrQ29uc3RyYWludHMuaCcsCi0gICAg
ICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja0dyYW1tYXJDaGVjay5jcHAnLAot
ICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tHcmFtbWFyQ2hlY2suaCcs
Ci0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1NwZWxsQ2hlY2suY3Bw
JywKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrU3BlbGxDaGVjay5o
JywKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViTWVkaWFTdHJl
YW1DZW50ZXIuY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2Nr
V2ViTWVkaWFTdHJlYW1DZW50ZXIuaCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5l
ci9zcmMvTW9ja1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5jcHAnLAotICAgICAgICAgICAgJ2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCcsCi0g
ICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlJUQ0RUTUZTZW5kZXJI
YW5kbGVyLmNwcCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dl
YlJUQ0RUTUZTZW5kZXJIYW5kbGVyLmgnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5u
ZXIvc3JjL01vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3BwJywKLSAgICAgICAgICAg
ICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVy
LmgnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hJ
bnB1dENvbnRyb2xsZXIuY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3Ny
Yy9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmgnLAotICAgICAgICAgICAgJ2Nocm9taXVt
L1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmNwcCcsCi0gICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaCcsCi0g
ICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTm90aWZpY2F0aW9uUHJlc2VudGVy
LmgnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL05vdGlmaWNhdGlvblBy
ZXNlbnRlci5jcHAnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1NwZWxs
Q2hlY2tDbGllbnQuY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9T
cGVsbENoZWNrQ2xpZW50LmgnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L1Rlc3RDb21tb24uY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9U
ZXN0Q29tbW9uLmgnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJ
bnRlcmZhY2VzLmNwcCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVz
dEludGVyZmFjZXMuaCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVz
dFBsdWdpbi5jcHAnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RQ
bHVnaW4uaCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5l
ci5jcHAnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIu
aCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGV4dElucHV0Q29udHJv
bGxlci5jcHAnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1RleHRJbnB1
dENvbnRyb2xsZXIuaCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2Vi
UGVybWlzc2lvbnMuY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9X
ZWJQZXJtaXNzaW9ucy5oJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9X
ZWJQcmVmZXJlbmNlcy5jcHAnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L1dlYlRhc2suY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJU
ZXN0SW50ZXJmYWNlcy5jcHAnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L1dlYlRlc3RQcm94eS5jcHAnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L1dlYlRlc3RUaGVtZUNvbnRyb2xXaW4uY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9XZWJUZXN0VGhlbWVDb250cm9sV2luLmgnLAotICAgICAgICAgICAgJ2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RUaGVtZUVuZ2luZU1hYy5tbScsCi0gICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFRoZW1lRW5naW5lTWFjLmgnLAotICAg
ICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RUaGVtZUVuZ2luZVdpbi5j
cHAnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RUaGVtZUVu
Z2luZVdpbi5oJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJVc2Vy
TWVkaWFDbGllbnRNb2NrLmNwcCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9z
cmMvV2ViVXNlck1lZGlhQ2xpZW50TW9jay5oJywKLSAgICAgICAgXSwKLSAgICAgICAgJ3Rlc3Rf
cGx1Z2luX2ZpbGVzJzogWwotICAgICAgICAgICAgJ1Rlc3ROZXRzY2FwZVBsdWdJbi9QbHVnaW5P
YmplY3QuY3BwJywKLSAgICAgICAgICAgICdUZXN0TmV0c2NhcGVQbHVnSW4vUGx1Z2luT2JqZWN0
LmgnLAotICAgICAgICAgICAgJ1Rlc3ROZXRzY2FwZVBsdWdJbi9QbHVnaW5PYmplY3RNYWMubW0n
LAotICAgICAgICAgICAgJ1Rlc3ROZXRzY2FwZVBsdWdJbi9QbHVnaW5UZXN0LmNwcCcsCi0gICAg
ICAgICAgICAnVGVzdE5ldHNjYXBlUGx1Z0luL1BsdWdpblRlc3QuaCcsCi0gICAgICAgICAgICAn
VGVzdE5ldHNjYXBlUGx1Z0luL1Rlc3RPYmplY3QuY3BwJywKLSAgICAgICAgICAgICdUZXN0TmV0
c2NhcGVQbHVnSW4vVGVzdE9iamVjdC5oJywKLSAgICAgICAgICAgICdUZXN0TmV0c2NhcGVQbHVn
SW4vVGVzdHMvRG9jdW1lbnRPcGVuSW5EZXN0cm95U3RyZWFtLmNwcCcsCi0gICAgICAgICAgICAn
VGVzdE5ldHNjYXBlUGx1Z0luL1Rlc3RzL0V2YWx1YXRlSlNBZnRlclJlbW92aW5nUGx1Z2luRWxl
bWVudC5jcHAnLAotICAgICAgICAgICAgJ1Rlc3ROZXRzY2FwZVBsdWdJbi9UZXN0cy9Gb3JtVmFs
dWUuY3BwJywKLSAgICAgICAgICAgICdUZXN0TmV0c2NhcGVQbHVnSW4vVGVzdHMvR2V0VVJMTm90
aWZ5V2l0aFVSTFRoYXRGYWlsc1RvTG9hZC5jcHAnLAotICAgICAgICAgICAgJ1Rlc3ROZXRzY2Fw
ZVBsdWdJbi9UZXN0cy9HZXRVUkxXaXRoSmF2YVNjcmlwdFVSTC5jcHAnLAotICAgICAgICAgICAg
J1Rlc3ROZXRzY2FwZVBsdWdJbi9UZXN0cy9HZXRVUkxXaXRoSmF2YVNjcmlwdFVSTERlc3Ryb3lp
bmdQbHVnaW4uY3BwJywKLSAgICAgICAgICAgICdUZXN0TmV0c2NhcGVQbHVnSW4vVGVzdHMvR2V0
VXNlckFnZW50V2l0aE51bGxOUFBGcm9tTlBQTmV3LmNwcCcsCi0gICAgICAgICAgICAnVGVzdE5l
dHNjYXBlUGx1Z0luL1Rlc3RzL0xvZ05QUFNldFdpbmRvdy5jcHAnLAotICAgICAgICAgICAgJ1Rl
c3ROZXRzY2FwZVBsdWdJbi9UZXN0cy9OUFBOZXdGYWlscy5jcHAnLAotICAgICAgICAgICAgJ1Rl
c3ROZXRzY2FwZVBsdWdJbi9UZXN0cy9OUFJ1bnRpbWVDYWxsc1dpdGhOdWxsTlBQLmNwcCcsCi0g
ICAgICAgICAgICAnVGVzdE5ldHNjYXBlUGx1Z0luL1Rlc3RzL05QUnVudGltZU9iamVjdEZyb21E
ZXN0cm95ZWRQbHVnaW4uY3BwJywKLSAgICAgICAgICAgICdUZXN0TmV0c2NhcGVQbHVnSW4vVGVz
dHMvTlBSdW50aW1lUmVtb3ZlUHJvcGVydHkuY3BwJywKLSAgICAgICAgICAgICdUZXN0TmV0c2Nh
cGVQbHVnSW4vVGVzdHMvTnVsbE5QUEdldFZhbHVlUG9pbnRlci5jcHAnLAotICAgICAgICAgICAg
J1Rlc3ROZXRzY2FwZVBsdWdJbi9UZXN0cy9QYXNzRGlmZmVyZW50TlBQU3RydWN0LmNwcCcsCi0g
ICAgICAgICAgICAnVGVzdE5ldHNjYXBlUGx1Z0luL1Rlc3RzL1BsdWdpblNjcmlwdGFibGVOUE9i
amVjdEludm9rZURlZmF1bHQuY3BwJywKLSAgICAgICAgICAgICdUZXN0TmV0c2NhcGVQbHVnSW4v
VGVzdHMvUGx1Z2luU2NyaXB0YWJsZU9iamVjdE92ZXJyaWRlc0FsbFByb3BlcnRpZXMuY3BwJywK
LSAgICAgICAgICAgICdUZXN0TmV0c2NhcGVQbHVnSW4vVGVzdHMvUHJpdmF0ZUJyb3dzaW5nLmNw
cCcsCi0gICAgICAgICAgICAnVGVzdE5ldHNjYXBlUGx1Z0luL21haW4uY3BwJywKLSAgICAgICAg
XSwKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9E
UlREZXZUb29sc0FnZW50LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERl
dlRvb2xzQWdlbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjNmN2VmOTdm
OTU5NmIzZDMyODZhNzA4N2NhZTg4MDRhNjE5NzcwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERl
dlRvb2xzQWdlbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiRFJURGV2VG9vbHNBZ2VudC5oIgotCi0jaW5jbHVkZSAiRFJU
RGV2VG9vbHNDbGllbnQuaCIKLQotI2luY2x1ZGUgIlRhc2suaCIKLSNpbmNsdWRlICJXZWJEZXZU
b29sc0FnZW50LmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgIndlYmtpdC9zdXBw
b3J0L3dlYmtpdF9zdXBwb3J0LmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYkNTdHJpbmcuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJUZXN0UnVubmVyOwot
Ci1EUlREZXZUb29sc0FnZW50OjpEUlREZXZUb29sc0FnZW50KCkKLSAgICA6IG1fZHJ0RGV2VG9v
bHNDbGllbnQoMCkKLSAgICAsIG1fd2ViVmlldygwKQotewotICAgIHN0YXRpYyBpbnQgZGV2VG9v
bHNBZ2VudENvdW50ZXIgPSAwOwotCi0gICAgbV9yb3V0aW5nSUQgPSArK2RldlRvb2xzQWdlbnRD
b3VudGVyOwotfQotCi12b2lkIERSVERldlRvb2xzQWdlbnQ6OnJlc2V0KCkKLXsKLSAgICBtX3Rh
c2tMaXN0LnJldm9rZUFsbCgpOwotfQotCi12b2lkIERSVERldlRvb2xzQWdlbnQ6OnNldFdlYlZp
ZXcoV2ViVmlldyogd2ViVmlldykKLXsKLSAgICBtX3dlYlZpZXcgPSB3ZWJWaWV3OwotfQotCi12
b2lkIERSVERldlRvb2xzQWdlbnQ6OnNlbmRNZXNzYWdlVG9JbnNwZWN0b3JGcm9udGVuZChjb25z
dCBXZWJTdHJpbmcmIGRhdGEpCi17Ci0gICAgaWYgKG1fZHJ0RGV2VG9vbHNDbGllbnQpCi0gICAg
ICAgICBtX2RydERldlRvb2xzQ2xpZW50LT5hc3luY0NhbGwoZGF0YSk7Ci19Ci0KLXZvaWQgRFJU
RGV2VG9vbHNBZ2VudDo6cnVudGltZVByb3BlcnR5Q2hhbmdlZChjb25zdCBXZWJTdHJpbmcmIG5h
bWUsIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4K
LX0KLQotV2ViRGV2VG9vbHNBZ2VudENsaWVudDo6V2ViS2l0Q2xpZW50TWVzc2FnZUxvb3AqIERS
VERldlRvb2xzQWdlbnQ6OmNyZWF0ZUNsaWVudE1lc3NhZ2VMb29wKCkKLXsKLSAgICByZXR1cm4g
d2Via2l0X3N1cHBvcnQ6OkNyZWF0ZURldlRvb2xzTWVzc2FnZUxvb3AoKTsKLX0KLQotdm9pZCBE
UlREZXZUb29sc0FnZW50Ojphc3luY0NhbGwoY29uc3QgV2ViU3RyaW5nJiBhcmdzKQotewotICAg
IHBvc3RUYXNrKG5ldyBBc3luY0NhbGxUYXNrKHRoaXMsIGFyZ3MpKTsKLX0KLQotdm9pZCBEUlRE
ZXZUb29sc0FnZW50OjpjYWxsKGNvbnN0IFdlYlN0cmluZyYgYXJncykKLXsKLSAgICBXZWJEZXZU
b29sc0FnZW50KiBhZ2VudCA9IHdlYkRldlRvb2xzQWdlbnQoKTsKLSAgICBpZiAoYWdlbnQpCi0g
ICAgICAgIGFnZW50LT5kaXNwYXRjaE9uSW5zcGVjdG9yQmFja2VuZChhcmdzKTsKLX0KLQotV2Vi
RGV2VG9vbHNBZ2VudCogRFJURGV2VG9vbHNBZ2VudDo6d2ViRGV2VG9vbHNBZ2VudCgpCi17Ci0g
ICAgaWYgKCFtX3dlYlZpZXcpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX3dlYlZp
ZXctPmRldlRvb2xzQWdlbnQoKTsKLX0KLQotdm9pZCBEUlREZXZUb29sc0FnZW50OjphdHRhY2go
RFJURGV2VG9vbHNDbGllbnQqIGNsaWVudCkKLXsKLSAgICBBU1NFUlQoIW1fZHJ0RGV2VG9vbHND
bGllbnQpOwotICAgIG1fZHJ0RGV2VG9vbHNDbGllbnQgPSBjbGllbnQ7Ci0gICAgV2ViRGV2VG9v
bHNBZ2VudCogYWdlbnQgPSB3ZWJEZXZUb29sc0FnZW50KCk7Ci0gICAgaWYgKGFnZW50KQotICAg
ICAgICBhZ2VudC0+YXR0YWNoKCk7Ci19Ci0KLXZvaWQgRFJURGV2VG9vbHNBZ2VudDo6ZGV0YWNo
KCkKLXsKLSAgICBBU1NFUlQobV9kcnREZXZUb29sc0NsaWVudCk7Ci0gICAgV2ViRGV2VG9vbHNB
Z2VudCogYWdlbnQgPSB3ZWJEZXZUb29sc0FnZW50KCk7Ci0gICAgaWYgKGFnZW50KQotICAgICAg
ICBhZ2VudC0+ZGV0YWNoKCk7Ci0gICAgbV9kcnREZXZUb29sc0NsaWVudCA9IDA7Ci19Ci0KLWJv
b2wgRFJURGV2VG9vbHNBZ2VudDo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJRCwg
Y29uc3Qgc3RkOjpzdHJpbmcmIHNjcmlwdCkKLXsKLSAgICBXZWJEZXZUb29sc0FnZW50KiBhZ2Vu
dCA9IHdlYkRldlRvb2xzQWdlbnQoKTsKLSAgICBpZiAoIWFnZW50KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgYWdlbnQtPmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoY2FsbElELCBXZWJTdHJp
bmc6OmZyb21VVEY4KHNjcmlwdCkpOwotICAgIHJldHVybiB0cnVlOwotfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNBZ2VudC5oIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNBZ2VudC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA5YjliOWY0MjY3NWVjNTQyYjM2NDUzNTAyNDM4ZTFkNTM0YjZkNmNj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQuaAorKysgL2Rldi9udWxsCkBA
IC0xLDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIERSVERldlRvb2xzQWdlbnRfaAotI2RlZmluZSBEUlREZXZU
b29sc0FnZW50X2gKLQotI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRDbGllbnQuaCIKLSNpbmNs
dWRlICJXZWJUYXNrLmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5oPgotI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1jbGFzcyBXZWJDU3RyaW5nOwotY2xhc3MgV2ViRGV2VG9vbHNBZ2VudDsK
LWNsYXNzIFdlYlZpZXc7Ci1zdHJ1Y3QgV2ViRGV2VG9vbHNNZXNzYWdlRGF0YTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLWNsYXNzIERSVERldlRvb2xzQ2xpZW50OwotCi1jbGFzcyBEUlRE
ZXZUb29sc0FnZW50IDogcHVibGljIFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudENsaWVudCB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRFJURGV2VG9vbHNBZ2VudCk7Ci1wdWJsaWM6Ci0gICAg
RFJURGV2VG9vbHNBZ2VudCgpOwotICAgIHZpcnR1YWwgfkRSVERldlRvb2xzQWdlbnQoKSB7IH0K
LSAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICB2b2lkIHNldFdlYlZpZXcoV2ViS2l0OjpXZWJWaWV3
Kik7Ci0KLSAgICAvLyBXZWJEZXZUb29sc0FnZW50Q2xpZW50IGltcGxlbWVudGF0aW9uLgotICAg
IHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRlbmQoY29uc3QgV2ViS2l0
OjpXZWJTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIGludCBob3N0SWRlbnRpZmllcigpIHsgcmV0dXJu
IG1fcm91dGluZ0lEOyB9Ci0gICAgdmlydHVhbCB2b2lkIHJ1bnRpbWVQcm9wZXJ0eUNoYW5nZWQo
Y29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiB2
YWx1ZSk7Ci0gICAgdmlydHVhbCBXZWJLaXRDbGllbnRNZXNzYWdlTG9vcCogY3JlYXRlQ2xpZW50
TWVzc2FnZUxvb3AoKTsKLQotICAgIHZvaWQgYXN5bmNDYWxsKGNvbnN0IFdlYktpdDo6V2ViU3Ry
aW5nJiBhcmdzKTsKLQotICAgIHZvaWQgYXR0YWNoKERSVERldlRvb2xzQ2xpZW50Kik7Ci0gICAg
dm9pZCBkZXRhY2goKTsKLQotICAgIGJvb2wgZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNh
bGxJRCwgY29uc3Qgc3RkOjpzdHJpbmcmIHNjcmlwdCk7Ci0gICAgV2ViVGVzdFJ1bm5lcjo6V2Vi
VGFza0xpc3QqIHRhc2tMaXN0KCkgeyByZXR1cm4gJm1fdGFza0xpc3Q7IH0KLQotcHJpdmF0ZToK
LSAgICB2b2lkIGNhbGwoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGFyZ3MpOwotICAgIFdlYktp
dDo6V2ViRGV2VG9vbHNBZ2VudCogd2ViRGV2VG9vbHNBZ2VudCgpOwotCi0gICAgY2xhc3MgQXN5
bmNDYWxsVGFzazogcHVibGljIFdlYlRlc3RSdW5uZXI6OldlYk1ldGhvZFRhc2s8RFJURGV2VG9v
bHNBZ2VudD4gewotICAgIHB1YmxpYzoKLSAgICAgICAgQXN5bmNDYWxsVGFzayhEUlREZXZUb29s
c0FnZW50KiBvYmplY3QsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBhcmdzKQotICAgICAgICAg
ICAgOiBXZWJUZXN0UnVubmVyOjpXZWJNZXRob2RUYXNrPERSVERldlRvb2xzQWdlbnQ+KG9iamVj
dCksIG1fYXJncyhhcmdzKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSB7
IG1fb2JqZWN0LT5jYWxsKG1fYXJncyk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFdlYktp
dDo6V2ViU3RyaW5nIG1fYXJnczsKLSAgICB9OwotCi0gICAgV2ViVGVzdFJ1bm5lcjo6V2ViVGFz
a0xpc3QgbV90YXNrTGlzdDsKLSAgICBEUlREZXZUb29sc0NsaWVudCogbV9kcnREZXZUb29sc0Ns
aWVudDsKLSAgICBpbnQgbV9yb3V0aW5nSUQ7Ci0gICAgV2ViS2l0OjpXZWJWaWV3KiBtX3dlYlZp
ZXc7Ci19OwotCi0jZW5kaWYgLy8gRFJURGV2VG9vbHNBZ2VudF9oCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5jcHAgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGY0NThhZmU5ZGM0OWUzZmU0MzJlMTE3MGQ3YTk1YzY0NzQ2NGFm
YTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRFJURGV2
VG9vbHNDbGllbnQuaCIKLQotI2luY2x1ZGUgIkRSVERldlRvb2xzQWdlbnQuaCIKLSNpbmNsdWRl
ICJUYXNrLmgiCi0jaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudC5oIgotI2luY2x1ZGUgIldlYkRl
dlRvb2xzRnJvbnRlbmQuaCIKLSNpbmNsdWRlICJXZWJGcmFtZS5oIgotI2luY2x1ZGUgIldlYlNj
cmlwdFNvdXJjZS5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlICJ3ZWJraXQvc3Vw
cG9ydC93ZWJraXRfc3VwcG9ydC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2UgV2ViVGVzdFJ1bm5lcjsKLQot
RFJURGV2VG9vbHNDbGllbnQ6OkRSVERldlRvb2xzQ2xpZW50KERSVERldlRvb2xzQWdlbnQqIGFn
ZW50LCBXZWJWaWV3KiB3ZWJWaWV3KQotICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCi0gICAgLCBt
X2RydERldlRvb2xzQWdlbnQoYWdlbnQpCi17Ci0gICAgbV93ZWJEZXZUb29sc0Zyb250ZW5kID0g
YWRvcHRQdHIoV2ViRGV2VG9vbHNGcm9udGVuZDo6Y3JlYXRlKG1fd2ViVmlldywgdGhpcywgV2Vi
U3RyaW5nOjpmcm9tVVRGOCgiZW4tVVMiKSkpOwotICAgIG1fZHJ0RGV2VG9vbHNBZ2VudC0+YXR0
YWNoKHRoaXMpOwotfQotCi1EUlREZXZUb29sc0NsaWVudDo6fkRSVERldlRvb2xzQ2xpZW50KCkK
LXsKLSAgICAvLyBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHRoZSBwYWdlIHdpbGwgYmUgZGVzdHJv
eWVkIGF0IGRldGFjaCBzdGVwIG9mCi0gICAgLy8gbV9kcnREZXZUb29sc0FnZW50IGFuZCB3ZSBz
aG91bGQgY2xlYW4gcGVuZGluZyByZXF1ZXN0cyBhIGJpdCBlYXJsaWVyLgotICAgIG1fdGFza0xp
c3QucmV2b2tlQWxsKCk7Ci0gICAgaWYgKG1fZHJ0RGV2VG9vbHNBZ2VudCkKLSAgICAgICAgbV9k
cnREZXZUb29sc0FnZW50LT5kZXRhY2goKTsKLX0KLQotdm9pZCBEUlREZXZUb29sc0NsaWVudDo6
cmVzZXQoKQotewotICAgIG1fdGFza0xpc3QucmV2b2tlQWxsKCk7Ci19Ci0KLXZvaWQgRFJURGV2
VG9vbHNDbGllbnQ6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFdlYlN0cmluZyYgZGF0YSkK
LXsKLSAgICBpZiAobV9kcnREZXZUb29sc0FnZW50KQotICAgICAgICBtX2RydERldlRvb2xzQWdl
bnQtPmFzeW5jQ2FsbChkYXRhKTsKLX0KLQotdm9pZCBEUlREZXZUb29sc0NsaWVudDo6YWN0aXZh
dGVXaW5kb3coKQotewotICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotdm9pZCBEUlREZXZU
b29sc0NsaWVudDo6Y2xvc2VXaW5kb3coKQotewotICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KLX0K
LQotdm9pZCBEUlREZXZUb29sc0NsaWVudDo6ZG9ja1dpbmRvdygpCi17Ci0gICAgLy8gTm90IGlt
cGxlbWVudGVkLgotfQotCi12b2lkIERSVERldlRvb2xzQ2xpZW50Ojp1bmRvY2tXaW5kb3coKQot
ewotICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotYm9vbCBEUlREZXZUb29sc0NsaWVudDo6
aXNVbmRlclRlc3QoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIERSVERldlRvb2xz
Q2xpZW50Ojphc3luY0NhbGwoY29uc3QgV2ViU3RyaW5nJiBhcmdzKQotewotICAgIHBvc3RUYXNr
KG5ldyBBc3luY0NhbGxUYXNrKHRoaXMsIGFyZ3MpKTsKLX0KLQotdm9pZCBEUlREZXZUb29sc0Ns
aWVudDo6Y2FsbChjb25zdCBXZWJTdHJpbmcmIGFyZ3MpCi17Ci0gICAgbV93ZWJEZXZUb29sc0Zy
b250ZW5kLT5kaXNwYXRjaE9uSW5zcGVjdG9yRnJvbnRlbmQoYXJncyk7Ci19CmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5oIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzAyNjYwYWUxZGVhMDI1YTVmOGFhODJkMmU2MTQxMjZhZDdl
ODRkMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5oCisrKyAvZGV2L251
bGwKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRFJURGV2VG9vbHNDbGllbnRfaAotI2RlZmluZSBE
UlREZXZUb29sc0NsaWVudF9oCi0KLSNpbmNsdWRlICJXZWJEZXZUb29sc0Zyb250ZW5kQ2xpZW50
LmgiCi0jaW5jbHVkZSAiV2ViVGFzay5oIgotI2luY2x1ZGUgPHB1YmxpYy9XZWJTdHJpbmcuaD4K
LSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViRGV2VG9vbHNGcm9udGVuZDsKLXN0cnVjdCBX
ZWJEZXZUb29sc01lc3NhZ2VEYXRhOwotY2xhc3MgV2ViVmlldzsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLWNsYXNzIERSVERldlRvb2xzQWdlbnQ7Ci0KLWNsYXNzIERSVERldlRvb2xzQ2xp
ZW50IDogcHVibGljIFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZENsaWVudCB7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoRFJURGV2VG9vbHNDbGllbnQpOwotcHVibGljOgotICAgIERSVERl
dlRvb2xzQ2xpZW50KERSVERldlRvb2xzQWdlbnQqLCBXZWJLaXQ6OldlYlZpZXcqKTsKLSAgICB2
aXJ0dWFsIH5EUlREZXZUb29sc0NsaWVudCgpOwotICAgIHZvaWQgcmVzZXQoKTsKLQotICAgIC8v
IFdlYkRldlRvb2xzRnJvbnRlbmRDbGllbnQgaW1wbGVtZW50YXRpb24KLSAgICB2aXJ0dWFsIHZv
aWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBhY3RpdmF0ZVdpbmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdp
bmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBkb2NrV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lk
IHVuZG9ja1dpbmRvdygpOwotICAgIHZpcnR1YWwgYm9vbCBpc1VuZGVyVGVzdCgpOwotCi0gICAg
dm9pZCBhc3luY0NhbGwoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGFyZ3MpOwotCi0gICAgdm9p
ZCBhbGxNZXNzYWdlc1Byb2Nlc3NlZCgpOwotICAgIFdlYlRlc3RSdW5uZXI6OldlYlRhc2tMaXN0
KiB0YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rhc2tMaXN0OyB9Ci0KLSBwcml2YXRlOgotICAgIHZv
aWQgY2FsbChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgYXJncyk7Ci0gICAgY2xhc3MgQXN5bmND
YWxsVGFzazogcHVibGljIFdlYlRlc3RSdW5uZXI6OldlYk1ldGhvZFRhc2s8RFJURGV2VG9vbHND
bGllbnQ+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEFzeW5jQ2FsbFRhc2soRFJURGV2VG9vbHND
bGllbnQqIG9iamVjdCwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGFyZ3MpCi0gICAgICAgICAg
ICA6IFdlYlRlc3RSdW5uZXI6OldlYk1ldGhvZFRhc2s8RFJURGV2VG9vbHNDbGllbnQ+KG9iamVj
dCksIG1fYXJncyhhcmdzKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSB7
IG1fb2JqZWN0LT5jYWxsKG1fYXJncyk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFdlYktp
dDo6V2ViU3RyaW5nIG1fYXJnczsKLSAgICB9OwotCi0gICAgV2ViVGVzdFJ1bm5lcjo6V2ViVGFz
a0xpc3QgbV90YXNrTGlzdDsKLSAgICBXZWJLaXQ6OldlYlZpZXcqIG1fd2ViVmlldzsKLSAgICBE
UlREZXZUb29sc0FnZW50KiBtX2RydERldlRvb2xzQWdlbnQ7Ci0gICAgV1RGOjpPd25QdHI8V2Vi
S2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kPiBtX3dlYkRldlRvb2xzRnJvbnRlbmQ7Ci19OwotCi0j
ZW5kaWYgLy8gRFJURGV2VG9vbHNDbGllbnRfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA4MDM4MDQwM2ZkYTc5ZWEzNzVmZmEyY2YzM2Y5ZjAzNjdmMzQzZmMxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0KLSNpbmNs
dWRlICJNb2NrUGxhdGZvcm0uaCIKLSNpbmNsdWRlICJUZXN0U2hlbGwuaCIKLSNpbmNsdWRlICJ3
ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgotI2luY2x1ZGUgPHB1YmxpYy9XZWJDb21w
b3NpdG9yU3VwcG9ydC5oPgotI2luY2x1ZGUgPHY4L2luY2x1ZGUvdjgtdGVzdGluZy5oPgotI2lu
Y2x1ZGUgPHY4L2luY2x1ZGUvdjguaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1zdGF0aWMgY29uc3Qg
Y2hhciBvcHRpb25Db21wbGV4VGV4dFtdID0gIi0tY29tcGxleC10ZXh0IjsKLXN0YXRpYyBjb25z
dCBjaGFyIG9wdGlvbkR1bXBQaXhlbHNbXSA9ICItLXBpeGVsLXRlc3RzIjsKLXN0YXRpYyBjb25z
dCBjaGFyIG9wdGlvbkR1bXBQaXhlbHNTaG9ydEZvcm1bXSA9ICItcCI7Ci1zdGF0aWMgY29uc3Qg
Y2hhciBvcHRpb25Ob3RyZWVbXSA9ICItLW5vdHJlZSI7Ci1zdGF0aWMgY29uc3QgY2hhciBvcHRp
b25UaHJlYWRlZFtdID0gIi0tdGhyZWFkZWQiOwotc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRGVi
dWdSZW5kZXJUcmVlW10gPSAiLS1kZWJ1Zy1yZW5kZXItdHJlZSI7Ci1zdGF0aWMgY29uc3QgY2hh
ciBvcHRpb25EZWJ1Z0xheWVyVHJlZVtdID0gIi0tZGVidWctbGF5ZXItdHJlZSI7Ci0KLXN0YXRp
YyBjb25zdCBjaGFyIG9wdGlvbkFsbG93RXh0ZXJuYWxQYWdlc1tdID0gIi0tYWxsb3ctZXh0ZXJu
YWwtcGFnZXMiOwotc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uU3RhcnR1cERpYWxvZ1tdID0gIi0t
dGVzdHNoZWxsLXN0YXJ0dXAtZGlhbG9nIjsKLXN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkNoZWNr
TGF5b3V0VGVzdFN5c3RlbURlcHNbXSA9ICItLWNoZWNrLWxheW91dC10ZXN0LXN5cy1kZXBzIjsK
LQotc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uSGFyZHdhcmVBY2NlbGVyYXRlZEdMW10gPSAiLS1l
bmFibGUtaGFyZHdhcmUtZ3B1IjsKLXN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZVNvZnR3
YXJlQ29tcG9zaXRpbmdbXSA9ICItLWVuYWJsZS1zb2Z0d2FyZS1jb21wb3NpdGluZyI7Ci1zdGF0
aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVUaHJlYWRlZENvbXBvc2l0aW5nW10gPSAiLS1lbmFi
bGUtdGhyZWFkZWQtY29tcG9zaXRpbmciOwotc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRm9yY2VD
b21wb3NpdGluZ01vZGVbXSA9ICItLWZvcmNlLWNvbXBvc2l0aW5nLW1vZGUiOwotc3RhdGljIGNv
bnN0IGNoYXIgb3B0aW9uRW5hYmxlQWNjZWxlcmF0ZWQyRENhbnZhc1tdID0gIi0tZW5hYmxlLWFj
Y2VsZXJhdGVkLTJkLWNhbnZhcyI7Ci1zdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW9bXSA9ICItLWVuYWJsZS1hY2NlbGVyYXRlZC12aWRl
byI7Ci1zdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVBY2NlbGVyYXRlZEZpeGVkUG9zaXRp
b25bXSA9ICItLWVuYWJsZS1hY2NlbGVyYXRlZC1maXhlZC1wb3NpdGlvbiI7Ci1zdGF0aWMgY29u
c3QgY2hhciBvcHRpb25FbmFibGVBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xsW10gPSAiLS1lbmFi
bGUtYWNjZWxlcmF0ZWQtb3ZlcmZsb3ctc2Nyb2xsIjsKLXN0YXRpYyBjb25zdCBjaGFyIG9wdGlv
bkVuYWJsZVBlclRpbGVQYWludGluZ1tdID0gIi0tZW5hYmxlLXBlci10aWxlLXBhaW50aW5nIjsK
LXN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZURlZmVycmVkSW1hZ2VEZWNvZGluZ1tdID0g
Ii0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nIjsKLXN0YXRpYyBjb25zdCBjaGFyIG9w
dGlvbkRpc2FibGVUaHJlYWRlZEhUTUxQYXJzZXJbXSA9ICItLWRpc2FibGUtdGhyZWFkZWQtaHRt
bC1wYXJzZXIiOwotCi1zdGF0aWMgY29uc3QgY2hhciBvcHRpb25TdHJlc3NPcHRbXSA9ICItLXN0
cmVzcy1vcHQiOwotc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uU3RyZXNzRGVvcHRbXSA9ICItLXN0
cmVzcy1kZW9wdCI7Ci1zdGF0aWMgY29uc3QgY2hhciBvcHRpb25KYXZhU2NyaXB0RmxhZ3NbXSA9
ICItLWpzLWZsYWdzPSI7Ci1zdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmNvZGVCaW5hcnlbXSA9
ICItLWVuY29kZS1iaW5hcnkiOwotc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uTm9UaW1lb3V0W10g
PSAiLS1uby10aW1lb3V0IjsKLXN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbldlYkNvcmVMb2dDaGFu
bmVsc1tdID0gIi0td2ViY29yZS1sb2ctY2hhbm5lbHM9IjsKLQotY2xhc3MgV2ViS2l0U3VwcG9y
dFRlc3RFbnZpcm9ubWVudCB7Ci1wdWJsaWM6Ci0gICAgV2ViS2l0U3VwcG9ydFRlc3RFbnZpcm9u
bWVudCgpCi0gICAgewotICAgICAgICBtX21vY2tQbGF0Zm9ybSA9IE1vY2tQbGF0Zm9ybTo6Y3Jl
YXRlKCk7Ci0gICAgICAgIHdlYmtpdF9zdXBwb3J0OjpTZXRVcFRlc3RFbnZpcm9ubWVudChtX21v
Y2tQbGF0Zm9ybS5nZXQoKSk7Ci0gICAgfQotICAgIH5XZWJLaXRTdXBwb3J0VGVzdEVudmlyb25t
ZW50KCkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF9zdXBwb3J0OjpUZWFyRG93blRlc3RFbnZpcm9u
bWVudCgpOwotICAgIH0KLQotICAgIE1vY2tQbGF0Zm9ybSogbW9ja1BsYXRmb3JtKCkgeyByZXR1
cm4gbV9tb2NrUGxhdGZvcm0uZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBPd25QdHI8TW9ja1Bs
YXRmb3JtPiBtX21vY2tQbGF0Zm9ybTsKLX07Ci0KLXN0YXRpYyB2b2lkIHJ1blRlc3QoVGVzdFNo
ZWxsJiBzaGVsbCwgVGVzdFBhcmFtcyYgcGFyYW1zLCBjb25zdCBzdHJpbmcmIGlucHV0TGluZSwg
Y29uc3QgYm9vbCBmb3JjZUR1bXBQaXhlbHMpCi17Ci0gICAgaW50IG9sZFRpbWVvdXRNc2VjID0g
c2hlbGwubGF5b3V0VGVzdFRpbWVvdXQoKTsKLSAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFy
c2VJbnB1dExpbmUoaW5wdXRMaW5lKTsKLSAgICBwYXJhbXMudGVzdFVybCA9IHdlYmtpdF9zdXBw
b3J0OjpDcmVhdGVVUkxGb3JQYXRoT3JVUkwoY29tbWFuZC5wYXRoT3JVUkwpOwotICAgIHBhcmFt
cy5waXhlbEhhc2ggPSBjb21tYW5kLnNob3VsZER1bXBQaXhlbHM7Ci0gICAgd2Via2l0X3N1cHBv
cnQ6OlNldEN1cnJlbnREaXJlY3RvcnlGb3JGaWxlVVJMKHBhcmFtcy50ZXN0VXJsKTsKLSAgICB2
ODo6Vjg6OlNldEZsYWdzRnJvbVN0cmluZyhzaGVsbC5qYXZhU2NyaXB0RmxhZ3MoKS5jX3N0cigp
LCBzaGVsbC5qYXZhU2NyaXB0RmxhZ3MoKS5sZW5ndGgoKSk7Ci0gICAgaWYgKHNoZWxsLnN0cmVz
c09wdCgpIHx8IHNoZWxsLnN0cmVzc0Rlb3B0KCkpIHsKLSAgICAgIGlmIChzaGVsbC5zdHJlc3NP
cHQoKSkKLSAgICAgICAgdjg6OlRlc3Rpbmc6OlNldFN0cmVzc1J1blR5cGUodjg6OlRlc3Rpbmc6
OmtTdHJlc3NUeXBlT3B0KTsKLSAgICAgIGVsc2UKLSAgICAgICAgdjg6OlRlc3Rpbmc6OlNldFN0
cmVzc1J1blR5cGUodjg6OlRlc3Rpbmc6OmtTdHJlc3NUeXBlRGVvcHQpOwotICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCB2ODo6VGVzdGluZzo6R2V0U3RyZXNzUnVucygpOyBpKyspIHsKLSAgICAg
ICAgICB2ODo6VGVzdGluZzo6UHJlcGFyZVN0cmVzc1J1bihpKTsKLSAgICAgICAgICBib29sIGlz
TGFzdExvYWQgPSAoaSA9PSAodjg6OlRlc3Rpbmc6OkdldFN0cmVzc1J1bnMoKSAtIDEpKTsKLSAg
ICAgICAgICBzaGVsbC5zZXREdW1wV2hlbkZpbmlzaGVkKGlzTGFzdExvYWQpOwotICAgICAgICAg
IHNoZWxsLnJlc2V0VGVzdENvbnRyb2xsZXIoKTsKLSAgICAgICAgICBzaGVsbC5ydW5GaWxlVGVz
dChwYXJhbXMsIGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVscyB8fCBmb3JjZUR1bXBQaXhlbHMpOwot
ICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBzaGVsbC5yZXNldFRlc3RDb250cm9sbGVyKCk7
Ci0gICAgICBzaGVsbC5ydW5GaWxlVGVzdChwYXJhbXMsIGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVs
cyB8fCBmb3JjZUR1bXBQaXhlbHMpOwotICAgIH0KLSAgICBzaGVsbC5zZXRMYXlvdXRUZXN0VGlt
ZW91dChvbGRUaW1lb3V0TXNlYyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2
W10pCi17Ci0gICAgV2ViS2l0U3VwcG9ydFRlc3RFbnZpcm9ubWVudCB0ZXN0RW52aXJvbm1lbnQ7
Ci0gICAgcGxhdGZvcm1Jbml0KCZhcmdjLCAmYXJndik7Ci0KLSAgICBUZXN0UGFyYW1zIHBhcmFt
czsKLSAgICBWZWN0b3I8c3RyaW5nPiB0ZXN0czsKLSAgICBib29sIHNlcnZlck1vZGUgPSBmYWxz
ZTsKLSAgICBib29sIGR1bXBBbGxQaXhlbHMgPSBmYWxzZTsKLSAgICBib29sIGFsbG93RXh0ZXJu
YWxQYWdlcyA9IGZhbHNlOwotICAgIGJvb2wgc3RhcnR1cERpYWxvZyA9IGZhbHNlOwotICAgIGJv
b2wgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVvRW5hYmxlZCA9IGZhbHNlOwotICAgIGJv
b2wgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkID0gZmFsc2U7
Ci0gICAgYm9vbCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVk
ID0gZmFsc2U7Ci0gICAgYm9vbCBzb2Z0d2FyZUNvbXBvc2l0aW5nRW5hYmxlZCA9IGZhbHNlOwot
ICAgIGJvb2wgdGhyZWFkZWRDb21wb3NpdGluZ0VuYWJsZWQgPSBmYWxzZTsKLSAgICBib29sIGZv
cmNlQ29tcG9zaXRpbmdNb2RlID0gZmFsc2U7Ci0gICAgYm9vbCB0aHJlYWRlZEhUTUxQYXJzZXIg
PSB0cnVlOwotICAgIGJvb2wgYWNjZWxlcmF0ZWQyRENhbnZhc0VuYWJsZWQgPSBmYWxzZTsKLSAg
ICBib29sIHBlclRpbGVQYWludGluZ0VuYWJsZWQgPSBmYWxzZTsKLSAgICBib29sIGRlZmVycmVk
SW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBmYWxzZTsKLSAgICBib29sIHN0cmVzc09wdCA9IGZhbHNl
OwotICAgIGJvb2wgc3RyZXNzRGVvcHQgPSBmYWxzZTsKLSAgICBib29sIGhhcmR3YXJlQWNjZWxl
cmF0ZWRHTCA9IGZhbHNlOwotICAgIHN0cmluZyBqYXZhU2NyaXB0RmxhZ3M7Ci0gICAgYm9vbCBl
bmNvZGVCaW5hcnkgPSBmYWxzZTsKLSAgICBib29sIG5vVGltZW91dCA9IGZhbHNlOwotICAgIGZv
ciAoaW50IGkgPSAxOyBpIDwgYXJnYzsgKytpKSB7Ci0gICAgICAgIHN0cmluZyBhcmd1bWVudChh
cmd2W2ldKTsKLSAgICAgICAgaWYgKGFyZ3VtZW50ID09ICItIikKLSAgICAgICAgICAgIHNlcnZl
ck1vZGUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25EdW1wUGl4
ZWxzIHx8IGFyZ3VtZW50ID09IG9wdGlvbkR1bXBQaXhlbHNTaG9ydEZvcm0pCi0gICAgICAgICAg
ICBkdW1wQWxsUGl4ZWxzID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0
aW9uTm90cmVlKQotICAgICAgICAgICAgcGFyYW1zLmR1bXBUcmVlID0gZmFsc2U7Ci0gICAgICAg
IGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkRlYnVnUmVuZGVyVHJlZSkKLSAgICAgICAgICAg
IHBhcmFtcy5kZWJ1Z1JlbmRlclRyZWUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmIChhcmd1bWVu
dCA9PSBvcHRpb25EZWJ1Z0xheWVyVHJlZSkKLSAgICAgICAgICAgIHBhcmFtcy5kZWJ1Z0xheWVy
VHJlZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkFsbG93RXh0
ZXJuYWxQYWdlcykKLSAgICAgICAgICAgIGFsbG93RXh0ZXJuYWxQYWdlcyA9IHRydWU7Ci0gICAg
ICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvblN0YXJ0dXBEaWFsb2cpCi0gICAgICAgICAg
ICBzdGFydHVwRGlhbG9nID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0
aW9uQ2hlY2tMYXlvdXRUZXN0U3lzdGVtRGVwcykKLSAgICAgICAgICAgIHJldHVybiBjaGVja0xh
eW91dFRlc3RTeXN0ZW1EZXBlbmRlbmNpZXMoKSA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVS
RTsKLSAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uSGFyZHdhcmVBY2NlbGVyYXRl
ZEdMKQotICAgICAgICAgICAgaGFyZHdhcmVBY2NlbGVyYXRlZEdMID0gdHJ1ZTsKLSAgICAgICAg
ZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uRW5hYmxlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zv
clZpZGVvKQotICAgICAgICAgICAgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVvRW5hYmxl
ZCA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkVuYWJsZUFjY2Vs
ZXJhdGVkRml4ZWRQb3NpdGlvbikKLSAgICAgICAgICAgIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdG
b3JGaXhlZFBvc2l0aW9uRW5hYmxlZCA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50
ID09IG9wdGlvbkVuYWJsZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwpCi0gICAgICAgICAgICBh
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkID0gdHJ1ZTsKLSAg
ICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uRW5hYmxlU29mdHdhcmVDb21wb3NpdGlu
ZykKLSAgICAgICAgICAgIHNvZnR3YXJlQ29tcG9zaXRpbmdFbmFibGVkID0gdHJ1ZTsKLSAgICAg
ICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uRW5hYmxlVGhyZWFkZWRDb21wb3NpdGluZykK
LSAgICAgICAgICAgIHRocmVhZGVkQ29tcG9zaXRpbmdFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAg
ZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uRm9yY2VDb21wb3NpdGluZ01vZGUpCi0gICAgICAg
ICAgICBmb3JjZUNvbXBvc2l0aW5nTW9kZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGFyZ3Vt
ZW50ID09IG9wdGlvbkRpc2FibGVUaHJlYWRlZEhUTUxQYXJzZXIpCi0gICAgICAgICAgICB0aHJl
YWRlZEhUTUxQYXJzZXIgPSBmYWxzZTsKLSAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0
aW9uRW5hYmxlQWNjZWxlcmF0ZWQyRENhbnZhcykKLSAgICAgICAgICAgIGFjY2VsZXJhdGVkMkRD
YW52YXNFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9u
RW5hYmxlUGVyVGlsZVBhaW50aW5nKQotICAgICAgICAgICAgcGVyVGlsZVBhaW50aW5nRW5hYmxl
ZCA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkVuYWJsZURlZmVy
cmVkSW1hZ2VEZWNvZGluZykKLSAgICAgICAgICAgIGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJs
ZWQgPSB0cnVlOwotICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25TdHJlc3NPcHQp
Ci0gICAgICAgICAgICBzdHJlc3NPcHQgPSB0cnVlOwotICAgICAgICBlbHNlIGlmIChhcmd1bWVu
dCA9PSBvcHRpb25TdHJlc3NEZW9wdCkKLSAgICAgICAgICAgIHN0cmVzc0Rlb3B0ID0gdHJ1ZTsK
LSAgICAgICAgZWxzZSBpZiAoIWFyZ3VtZW50LmZpbmQob3B0aW9uSmF2YVNjcmlwdEZsYWdzKSkK
LSAgICAgICAgICAgIGphdmFTY3JpcHRGbGFncyA9IGFyZ3VtZW50LnN1YnN0cihzdHJsZW4ob3B0
aW9uSmF2YVNjcmlwdEZsYWdzKSk7Ci0gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlv
bkVuY29kZUJpbmFyeSkKLSAgICAgICAgICAgIGVuY29kZUJpbmFyeSA9IHRydWU7Ci0gICAgICAg
IGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbk5vVGltZW91dCkKLSAgICAgICAgICAgIG5vVGlt
ZW91dCA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKCFhcmd1bWVudC5maW5kKG9wdGlvbldlYkNv
cmVMb2dDaGFubmVscykpIHsKLSAgICAgICAgICAgIHN0cmluZyBjaGFubmVscyA9IGFyZ3VtZW50
LnN1YnN0cihzdHJsZW4ob3B0aW9uV2ViQ29yZUxvZ0NoYW5uZWxzKSk7Ci0gICAgICAgICAgICB3
ZWJraXRfc3VwcG9ydDo6RW5hYmxlV2ViQ29yZUxvZ0NoYW5uZWxzKGNoYW5uZWxzKTsKLSAgICAg
ICAgfSBlbHNlIGlmIChhcmd1bWVudC5zaXplKCkgJiYgYXJndW1lbnRbMF0gPT0gJy0nKQotICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbjogJXNcbiIsIGFyZ3ZbaV0p
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0ZXN0cy5hcHBlbmQoYXJndW1lbnQpOwotICAg
IH0KLSAgICBpZiAoc3RyZXNzT3B0ICYmIHN0cmVzc0Rlb3B0KSB7Ci0gICAgICAgIGZwcmludGYo
c3RkZXJyLCAiLS1zdHJlc3Mtb3B0IGFuZCAtLXN0cmVzcy1kZW9wdCBhcmUgbXV0dWFsbHkgZXhj
bHVzaXZlLlxuIik7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotCi0gICAg
d2Via2l0X3N1cHBvcnQ6OlNldFVwR0xCaW5kaW5ncyhoYXJkd2FyZUFjY2VsZXJhdGVkR0wgPyB3
ZWJraXRfc3VwcG9ydDo6R0xfQklORElOR19ERUZBVUxUIDogd2Via2l0X3N1cHBvcnQ6OkdMX0JJ
TkRJTkdfU09GVFdBUkVfUkVOREVSRVIpOwotCi0gICAgaWYgKHN0YXJ0dXBEaWFsb2cpCi0gICAg
ICAgIG9wZW5TdGFydHVwRGlhbG9nKCk7Ci0KLSAgICB7IC8vIEV4cGxpY2l0IHNjb3BlIGZvciB0
aGUgVGVzdFNoZWxsIGluc3RhbmNlLgotICAgICAgICBUZXN0U2hlbGwgc2hlbGw7Ci0gICAgICAg
IHNoZWxsLnNldEFsbG93RXh0ZXJuYWxQYWdlcyhhbGxvd0V4dGVybmFsUGFnZXMpOwotICAgICAg
ICBzaGVsbC5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW9FbmFibGVkKGFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdGb3JWaWRlb0VuYWJsZWQpOwotICAgICAgICBzaGVsbC5zZXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoYWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKTsKLSAgICAgICAgc2hlbGwuc2V0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZChhY2NlbGVyYXRlZENvbXBvc2l0
aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkKTsKLSAgICAgICAgc2hlbGwuc2V0U29mdHdhcmVD
b21wb3NpdGluZ0VuYWJsZWQoc29mdHdhcmVDb21wb3NpdGluZ0VuYWJsZWQpOwotICAgICAgICBz
aGVsbC5zZXRUaHJlYWRlZENvbXBvc2l0aW5nRW5hYmxlZCh0aHJlYWRlZENvbXBvc2l0aW5nRW5h
YmxlZCk7Ci0gICAgICAgIHNoZWxsLnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKGZvcmNlQ29tcG9z
aXRpbmdNb2RlKTsKLSAgICAgICAgc2hlbGwuc2V0VGhyZWFkZWRIVE1MUGFyc2VyKHRocmVhZGVk
SFRNTFBhcnNlcik7Ci0gICAgICAgIHNoZWxsLnNldEFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVk
KGFjY2VsZXJhdGVkMkRDYW52YXNFbmFibGVkKTsKLSAgICAgICAgc2hlbGwuc2V0UGVyVGlsZVBh
aW50aW5nRW5hYmxlZChwZXJUaWxlUGFpbnRpbmdFbmFibGVkKTsKLSAgICAgICAgc2hlbGwuc2V0
RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChkZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVk
KTsKLSAgICAgICAgc2hlbGwuc2V0SmF2YVNjcmlwdEZsYWdzKGphdmFTY3JpcHRGbGFncyk7Ci0g
ICAgICAgIHNoZWxsLnNldFN0cmVzc09wdChzdHJlc3NPcHQpOwotICAgICAgICBzaGVsbC5zZXRT
dHJlc3NEZW9wdChzdHJlc3NEZW9wdCk7Ci0gICAgICAgIHNoZWxsLnNldEVuY29kZUJpbmFyeShl
bmNvZGVCaW5hcnkpOwotICAgICAgICBpZiAobm9UaW1lb3V0KSB7Ci0gICAgICAgICAgICAvLyAw
eDIwMDAwMDAwbXMgaXMgYmlnIGVub3VnaCBmb3IgdGhlIHB1cnBvc2UgdG8gYXZvaWQgdGltZW91
dCBpbiBkZWJ1Z2dpbmcuCi0gICAgICAgICAgICBzaGVsbC5zZXRMYXlvdXRUZXN0VGltZW91dCgw
eDIwMDAwMDAwKTsKLSAgICAgICAgfQotICAgICAgICBzaGVsbC5pbml0aWFsaXplKHRlc3RFbnZp
cm9ubWVudC5tb2NrUGxhdGZvcm0oKSk7Ci0gICAgICAgIGlmIChzZXJ2ZXJNb2RlICYmICF0ZXN0
cy5zaXplKCkpIHsKLSNpZiBPUyhBTkRST0lEKQotICAgICAgICAgICAgLy8gU2VuZCBhIHNpZ25h
bCB0byBob3N0IHRvIGluZGljYXRlIERSVCBpcyByZWFkeSB0byBwcm9jZXNzIGNvbW1hbmRzLgot
ICAgICAgICAgICAgcHV0cygiI1JFQURZIik7Ci0gICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsK
LSNlbmRpZgotICAgICAgICAgICAgcGFyYW1zLnByaW50U2VwYXJhdG9ycyA9IHRydWU7Ci0gICAg
ICAgICAgICBjaGFyIHRlc3RTdHJpbmdbMjA0OF07IC8vIDIwNDggaXMgdGhlIHNhbWUgYXMgdGhl
IHNpemVzIG9mIG90aGVyIHBsYXRmb3Jtcy4KLSAgICAgICAgICAgIHdoaWxlIChmZ2V0cyh0ZXN0
U3RyaW5nLCBzaXplb2YodGVzdFN0cmluZyksIHN0ZGluKSkgewotICAgICAgICAgICAgICAgIGNo
YXIqIG5ld0xpbmVQb3NpdGlvbiA9IHN0cmNocih0ZXN0U3RyaW5nLCAnXG4nKTsKLSAgICAgICAg
ICAgICAgICBpZiAobmV3TGluZVBvc2l0aW9uKQotICAgICAgICAgICAgICAgICAgICAqbmV3TGlu
ZVBvc2l0aW9uID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBpZiAodGVzdFN0cmluZ1swXSA9PSAn
XDAnKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAvLyBF
eHBsaWNpdGx5IHF1aXQgb24gcGxhdGZvcm1zIHdoZXJlIEVPRiBpcyBub3QgcmVsaWFibGUuCi0g
ICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAodGVzdFN0cmluZywgIlFVSVQiKSkKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcnVuVGVzdChzaGVsbCwgcGFyYW1z
LCB0ZXN0U3RyaW5nLCBkdW1wQWxsUGl4ZWxzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIGlmICghdGVzdHMuc2l6ZSgpKQotICAgICAgICAgICAgcHV0cygiI0VPRiIpOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIHBhcmFtcy5wcmludFNlcGFyYXRvcnMgPSB0ZXN0cy5zaXpl
KCkgPiAxOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRlc3RzLnNpemUo
KTsgaSsrKQotICAgICAgICAgICAgICAgIHJ1blRlc3Qoc2hlbGwsIHBhcmFtcywgdGVzdHNbaV0s
IGR1bXBBbGxQaXhlbHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgc2hlbGwuY2FsbEpTR0MoKTsK
LSAgICAgICAgc2hlbGwuY2FsbEpTR0MoKTsKLQotICAgICAgICAvLyBXaGVuIHdlIGZpbmlzaCB0
aGUgbGFzdCB0ZXN0LCBjbGVhbnVwIHRoZSBEUlRUZXN0UnVubmVyLgotICAgICAgICAvLyBJdCBt
YXkgaGF2ZSByZWZlcmVuY2VzIHRvIG5vdC15ZXQtY2xlYW5lZCB1cCB3aW5kb3dzLiBCeSBjbGVh
bmluZyB1cAotICAgICAgICAvLyBoZXJlIHdlIGhlbHAgcHVyaWZ5IHJlcG9ydHMuCi0gICAgICAg
IHNoZWxsLnJlc2V0VGVzdENvbnRyb2xsZXIoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRVhJVF9T
VUNDRVNTOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vSW1h
Z2VEaWZmLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0ltYWdlRGlmZi5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNjgxM2Q5YzhjNjMzNjJmMTdlYTNkMWQx
ZTkyOTFhOTRlMTM0YWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vSW1hZ2VEaWZmLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDUxNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gVGhpcyBmaWxlIGlucHV0IGZvcm1hdCBpcyBiYXNl
ZCBsb29zZWx5IG9uCi0vLyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9JbWFnZURpZmYubQot
Ci0vLyBUaGUgZXhhY3QgZm9ybWF0IG9mIHRoaXMgdG9vbCdzIG91dHB1dCB0byBzdGRvdXQgaXMg
aW1wb3J0YW50LCB0byBtYXRjaAotLy8gd2hhdCB0aGUgcnVuLXdlYmtpdC10ZXN0cyBzY3JpcHQg
ZXhwZWN0cy4KLQotI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0X2dmeC5o
IgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KLSNpbmNsdWRlIDxs
aW1pdHMuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1
ZGUgPHZlY3Rvcj4KLQotI2lmIGRlZmluZWQoX1dJTjMyKQotI2luY2x1ZGUgPHdpbmRvd3MuaD4K
LSNkZWZpbmUgUEFUSF9NQVggTUFYX1BBVEgKLSNkZWZpbmUgc3RydG9rX3Igc3RydG9rX3MKLSNl
bmRpZgotCi0vLyBEZWZpbmUgbWFjcm8gaGVyZSB0byBtYWtlIEltYWdlRGlmZiBpbmRlcGVuZGVu
dCBvZiBXVEYuCi0jaWZkZWYgTkRFQlVHCi0jZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGRvIHsg
fSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGRvIFwKLSAgICBp
ZiAoIShhc3NlcnRpb24pKSB7IFwKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJBU1NFUlQgZmFp
bGVkIGF0ICVzOiVkOiAiICNhc3NlcnRpb24gIi4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCi0g
ICAgICAgIGV4aXQoMSk7IFwKLSAgICB9IFwKLXdoaWxlICgwKQotI2VuZGlmCi0KLXVzaW5nIG5h
bWVzcGFjZSBzdGQ7Ci0KLS8vIENhdXNlcyB0aGUgYXBwIHRvIHJlbWFpbiBvcGVuLCB3YWl0aW5n
IGZvciBwYWlycyBvZiBmaWxlbmFtZXMgb24gc3RkaW4uCi0vLyBUaGUgY2FsbGVyIGlzIHRoZW4g
cmVzcG9uc2libGUgZm9yIHRlcm1pbmF0aW5nIHRoaXMgYXBwLgotc3RhdGljIGNvbnN0IGNoYXIg
b3B0aW9uUG9sbFN0ZGluW10gPSAiLS11c2Utc3RkaW4iOwotc3RhdGljIGNvbnN0IGNoYXIgb3B0
aW9uR2VuZXJhdGVEaWZmW10gPSAiLS1kaWZmIjsKLQotLy8gSWYgLS1kaWZmIGlzIHBhc3NlZCwg
Y2F1c2VzIHRoZSBhcHAgdG8gb3V0cHV0IHRoZSBpbWFnZSBkaWZmZXJlbmNlCi0vLyBtZXRyaWMg
KHBlcmNlbnRhZ2VEaWZmZXJlbnQoKSkgb24gc3Rkb3V0Lgotc3RhdGljIGNvbnN0IGNoYXIgb3B0
aW9uV3JpdGVbXSA9ICItLXdyaXRlLWltYWdlLWRpZmYtbWV0cmljcyI7Ci0KLS8vIFVzZSB3ZWln
aHRlZFBlcmNlbnRhZ2VEaWZmZXJlbnQoKSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGltYWdlCi0v
LyBjb21wYXJhdG9yIHByb2MuCi1zdGF0aWMgY29uc3QgY2hhciBvcHRpb25XZWlnaHRlZEludGVu
c2l0eVtdID0gIi0td2VpZ2h0ZWQtaW50ZW5zaXR5IjsKLQotLy8gUmV0dXJuIGNvZGVzIHVzZWQg
YnkgdGhpcyB1dGlsaXR5Lgotc3RhdGljIGNvbnN0IGludCBzdGF0dXNTYW1lID0gMDsKLXN0YXRp
YyBjb25zdCBpbnQgc3RhdHVzRGlmZmVyZW50ID0gMTsKLXN0YXRpYyBjb25zdCBpbnQgc3RhdHVz
RXJyb3IgPSAyOwotCi0vLyBDb2xvciBjb2Rlcy4KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQg
cmdiYVJlZCA9IDB4MDAwMDAwZmY7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJnYmFBbHBo
YSA9IDB4ZmYwMDAwMDA7Ci0KLWNsYXNzIEltYWdlIHsKLXB1YmxpYzoKLSAgICBJbWFnZSgpCi0g
ICAgICAgIDogbV93aWR0aCgwKQotICAgICAgICAsIG1faGVpZ2h0KDApIHsgfQotCi0gICAgSW1h
Z2UoY29uc3QgSW1hZ2UmIGltYWdlKQotICAgICAgICA6IG1fd2lkdGgoaW1hZ2UubV93aWR0aCkK
LSAgICAgICAgLCBtX2hlaWdodChpbWFnZS5tX2hlaWdodCkKLSAgICAgICAgLCBtX2RhdGEoaW1h
Z2UubV9kYXRhKSB7IH0KLQotICAgIGJvb2wgaGFzSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3dp
ZHRoID4gMCAmJiBtX2hlaWdodCA+IDA7IH0KLSAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3dpZHRoOyB9Ci0gICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9
Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuICZtX2RhdGEu
ZnJvbnQoKTsgfQotCi0gICAgLy8gQ3JlYXRlcyB0aGUgaW1hZ2UgZnJvbSBzdGRpbiB3aXRoIHRo
ZSBnaXZlbiBkYXRhIGxlbmd0aC4gT24gc3VjY2VzcywgaXQKLSAgICAvLyB3aWxsIHJldHVybiB0
cnVlLiBPbiBmYWlsdXJlLCBubyBvdGhlciBtZXRob2RzIHNob3VsZCBiZSBhY2Nlc3NlZC4KLSAg
ICBib29sIGNyZWF0ZUZyb21TdGRpbihzaXplX3QgYnl0ZUxlbmd0aCkKLSAgICB7Ci0gICAgICAg
IGlmICghYnl0ZUxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB1
bnNpZ25lZCBjaGFyKiBzb3VyY2UgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlTGVuZ3RoXTsKLSAg
ICAgICAgaWYgKGZyZWFkKHNvdXJjZSwgMSwgYnl0ZUxlbmd0aCwgc3RkaW4pICE9IGJ5dGVMZW5n
dGgpIHsKLSAgICAgICAgICAgIGRlbGV0ZSBbXSBzb3VyY2U7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXdlYmtpdF9zdXBwb3J0OjpEZWNvZGVQ
Tkcoc291cmNlLCBieXRlTGVuZ3RoLCAmbV9kYXRhLCAmbV93aWR0aCwgJm1faGVpZ2h0KSkgewot
ICAgICAgICAgICAgZGVsZXRlIFtdIHNvdXJjZTsKLSAgICAgICAgICAgIGNsZWFyKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlIFtdIHNvdXJj
ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlcyB0aGUgaW1h
Z2UgZnJvbSB0aGUgZ2l2ZW4gZmlsZW5hbWUgb24gZGlzaywgYW5kIHJldHVybnMgdHJ1ZSBvbgot
ICAgIC8vIHN1Y2Nlc3MuCi0gICAgYm9vbCBjcmVhdGVGcm9tRmlsZW5hbWUoY29uc3QgY2hhciog
ZmlsZW5hbWUpCi0gICAgewotICAgICAgICBGSUxFKiBmID0gZm9wZW4oZmlsZW5hbWUsICJyYiIp
OwotICAgICAgICBpZiAoIWYpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
dmVjdG9yPHVuc2lnbmVkIGNoYXI+IGNvbXByZXNzZWQ7Ci0gICAgICAgIGNvbnN0IGludCBidWZT
aXplID0gMTAyNDsKLSAgICAgICAgdW5zaWduZWQgY2hhciBidWZbYnVmU2l6ZV07Ci0gICAgICAg
IHNpemVfdCBudW1SZWFkID0gMDsKLSAgICAgICAgd2hpbGUgKChudW1SZWFkID0gZnJlYWQoYnVm
LCAxLCBidWZTaXplLCBmKSkgPiAwKQotICAgICAgICAgICAgc3RkOjpjb3B5KGJ1ZiwgJmJ1Zltu
dW1SZWFkXSwgc3RkOjpiYWNrX2luc2VydGVyKGNvbXByZXNzZWQpKTsKLQotICAgICAgICBmY2xv
c2UoZik7Ci0KLSAgICAgICAgaWYgKCF3ZWJraXRfc3VwcG9ydDo6RGVjb2RlUE5HKCZjb21wcmVz
c2VkWzBdLCBjb21wcmVzc2VkLnNpemUoKSwgJm1fZGF0YSwgJm1fd2lkdGgsICZtX2hlaWdodCkp
IHsKLSAgICAgICAgICAgIGNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhcigpCi0g
ICAgewotICAgICAgICBtX3dpZHRoID0gbV9oZWlnaHQgPSAwOwotICAgICAgICBtX2RhdGEuY2xl
YXIoKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBSR0JBIHZhbHVlIG9mIHRoZSBwaXhl
bCBhdCB0aGUgZ2l2ZW4gbG9jYXRpb24KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgcGl4ZWxBdChp
bnQgeCwgaW50IHkpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoeCA+PSAwICYmIHggPCBt
X3dpZHRoKTsKLSAgICAgICAgQVNTRVJUKHkgPj0gMCAmJiB5IDwgbV9oZWlnaHQpOwotICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oJihtX2RhdGFb
KHkgKiBtX3dpZHRoICsgeCkgKiA0XSkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0UGl4ZWxBdChp
bnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBjb2xvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIEFT
U0VSVCh4ID49IDAgJiYgeCA8IG1fd2lkdGgpOwotICAgICAgICBBU1NFUlQoeSA+PSAwICYmIHkg
PCBtX2hlaWdodCk7Ci0gICAgICAgIHZvaWQqIGFkZHIgPSAmY29uc3RfY2FzdDx1bnNpZ25lZCBj
aGFyKj4oJm1fZGF0YS5mcm9udCgpKVsoeSAqIG1fd2lkdGggKyB4KSAqIDRdOwotICAgICAgICAq
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihhZGRyKSA9IGNvbG9yOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICAvLyBwaXhlbCBkaW1lbnNpb25zIG9mIHRoZSBpbWFnZQotICAgIGludCBt
X3dpZHRoLCBtX2hlaWdodDsKLQotICAgIHZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBtX2RhdGE7Ci19
OwotCi10eXBlZGVmIGZsb2F0ICgqSW1hZ2VDb21wYXJpc29uUHJvYykgKGNvbnN0IEltYWdlJiwg
Y29uc3QgSW1hZ2UmKTsKLQotZmxvYXQgcGVyY2VudGFnZURpZmZlcmVudChjb25zdCBJbWFnZSYg
YmFzZWxpbmUsIGNvbnN0IEltYWdlJiBhY3R1YWwpCi17Ci0gICAgaW50IHcgPSBtaW4oYmFzZWxp
bmUud2lkdGgoKSwgYWN0dWFsLndpZHRoKCkpOwotICAgIGludCBoID0gbWluKGJhc2VsaW5lLmhl
aWdodCgpLCBhY3R1YWwuaGVpZ2h0KCkpOwotCi0gICAgLy8gQ29tcHV0ZSBwaXhlbHMgZGlmZmVy
ZW50IGluIHRoZSBvdmVybGFwCi0gICAgaW50IHBpeGVsc0RpZmZlcmVudCA9IDA7Ci0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoOyArK3kpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
OyArK3gpIHsKLSAgICAgICAgICAgIGlmIChiYXNlbGluZS5waXhlbEF0KHgsIHkpICE9IGFjdHVh
bC5waXhlbEF0KHgsIHkpKQotICAgICAgICAgICAgICAgIHBpeGVsc0RpZmZlcmVudCsrOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ291bnQgcGl4ZWxzIHRoYXQgYXJlIGEgZGlmZmVyZW5j
ZSBpbiBzaXplIGFzIGFsc28gYmVpbmcgZGlmZmVyZW50Ci0gICAgaW50IG1heFdpZHRoID0gbWF4
KGJhc2VsaW5lLndpZHRoKCksIGFjdHVhbC53aWR0aCgpKTsKLSAgICBpbnQgbWF4SGVpZ2h0ID0g
bWF4KGJhc2VsaW5lLmhlaWdodCgpLCBhY3R1YWwuaGVpZ2h0KCkpOwotCi0gICAgLy8gLi4ucGl4
ZWxzIG9mZiB0aGUgcmlnaHQgc2lkZSwgYnV0IG5vdCBpbmNsdWRpbmcgdGhlIGxvd2VyIHJpZ2h0
IGNvcm5lcgotICAgIHBpeGVsc0RpZmZlcmVudCArPSAobWF4V2lkdGggLSB3KSAqIGg7Ci0KLSAg
ICAvLyAuLi5waXhlbHMgYWxvbmcgdGhlIGJvdHRvbSwgaW5jbHVkaW5nIHRoZSBsb3dlciByaWdo
dCBjb3JuZXIKLSAgICBwaXhlbHNEaWZmZXJlbnQgKz0gKG1heEhlaWdodCAtIGgpICogbWF4V2lk
dGg7Ci0KLSAgICAvLyBMaWtlIHRoZSBXZWJLaXQgSW1hZ2VEaWZmIHRvb2wsIHdlIGRlZmluZSBw
ZXJjZW50YWdlIGRpZmZlcmVudCBpbiB0ZXJtcwotICAgIC8vIG9mIHRoZSBzaXplIG9mIHRoZSAn
YWN0dWFsJyBiaXRtYXAuCi0gICAgZmxvYXQgdG90YWxQaXhlbHMgPSBzdGF0aWNfY2FzdDxmbG9h
dD4oYWN0dWFsLndpZHRoKCkpICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFjdHVhbC5oZWlnaHQoKSk7
Ci0gICAgaWYgKCF0b3RhbFBpeGVscykKLSAgICAgICAgcmV0dXJuIDEwMC4wZjsgLy8gV2hlbiB0
aGUgYml0bWFwIGlzIGVtcHR5LCB0aGV5IGFyZSAxMDAlIGRpZmZlcmVudC4KLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBpeGVsc0RpZmZlcmVudCkgLyB0b3RhbFBpeGVscyAqIDEwMDsK
LX0KLQotaW5saW5lIHVuc2lnbmVkIGludCBtYXhPZjModW5zaWduZWQgaW50IGEsIHVuc2lnbmVk
IGludCBiLCB1bnNpZ25lZCBpbnQgYykKLXsKLSAgICBpZiAoYSA8IGIpCi0gICAgICAgIHJldHVy
biBzdGQ6Om1heChiLCBjKTsKLSAgICByZXR1cm4gc3RkOjptYXgoYSwgYyk7Ci19Ci0KLWlubGlu
ZSB1bnNpZ25lZCBpbnQgZ2V0UmVkQ29tcG9uZW50KHVuc2lnbmVkIGludCBjb2xvcikKLXsKLSAg
ICByZXR1cm4gKGNvbG9yIDw8IDI0KSA+PiAyNDsKLX0KLQotaW5saW5lIHVuc2lnbmVkIGludCBn
ZXRHcmVlbkNvbXBvbmVudCh1bnNpZ25lZCBpbnQgY29sb3IpCi17Ci0gICAgcmV0dXJuIChjb2xv
ciA8PCAxNikgPj4gMjQ7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBpbnQgZ2V0Qmx1ZUNvbXBvbmVu
dCh1bnNpZ25lZCBpbnQgY29sb3IpCi17Ci0gICAgcmV0dXJuIChjb2xvciA8PCA4KSA+PiAyNDsK
LX0KLQotLy8vIFJhbmsgc21hbGwtcGl4ZWwtY291bnQgaGlnaC1pbnRlbnNpdHkgY2hhbmdlcyBh
cyBtb3JlIGltcG9ydGFudCB0aGFuCi0vLy8gbGFyZ2UtcGl4ZWwtY291bnQgbG93LWludGVuc2l0
eSBjaGFuZ2VzLgotZmxvYXQgd2VpZ2h0ZWRQZXJjZW50YWdlRGlmZmVyZW50KGNvbnN0IEltYWdl
JiBiYXNlbGluZSwgY29uc3QgSW1hZ2UmIGFjdHVhbCkKLXsKLSAgICBpbnQgdyA9IG1pbihiYXNl
bGluZS53aWR0aCgpLCBhY3R1YWwud2lkdGgoKSk7Ci0gICAgaW50IGggPSBtaW4oYmFzZWxpbmUu
aGVpZ2h0KCksIGFjdHVhbC5oZWlnaHQoKSk7Ci0KLSAgICBmbG9hdCB3ZWlnaHRlZFBpeGVsc0Rp
ZmZlcmVudCA9IDA7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyArK3kpIHsKLSAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3OyArK3gpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBh
Y3R1YWxDb2xvciA9IGFjdHVhbC5waXhlbEF0KHgsIHkpOwotICAgICAgICAgICAgdW5zaWduZWQg
aW50IGJhc2VsaW5lQ29sb3IgPSBiYXNlbGluZS5waXhlbEF0KHgsIHkpOwotICAgICAgICAgICAg
aWYgKGJhc2VsaW5lQ29sb3IgIT0gYWN0dWFsQ29sb3IpIHsKLSAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgYWN0dWFsUiA9IGdldFJlZENvbXBvbmVudChhY3R1YWxDb2xvcik7Ci0gICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGFjdHVhbEcgPSBnZXRHcmVlbkNvbXBvbmVudChhY3R1YWxD
b2xvcik7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFjdHVhbEIgPSBnZXRCbHVlQ29t
cG9uZW50KGFjdHVhbENvbG9yKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZWxp
bmVSID0gZ2V0UmVkQ29tcG9uZW50KGJhc2VsaW5lQ29sb3IpOwotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCBiYXNlbGluZUcgPSBnZXRHcmVlbkNvbXBvbmVudChiYXNlbGluZUNvbG9yKTsK
LSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZWxpbmVCID0gZ2V0Qmx1ZUNvbXBvbmVu
dChiYXNlbGluZUNvbG9yKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVsdGFSID0g
c3RkOjptYXgoYWN0dWFsUiwgYmFzZWxpbmVSKQotICAgICAgICAgICAgICAgICAgICAtIHN0ZDo6
bWluKGFjdHVhbFIsIGJhc2VsaW5lUik7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRl
bHRhRyA9IHN0ZDo6bWF4KGFjdHVhbEcsIGJhc2VsaW5lRykKLSAgICAgICAgICAgICAgICAgICAg
LSBzdGQ6Om1pbihhY3R1YWxHLCBiYXNlbGluZUcpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBkZWx0YUIgPSBzdGQ6Om1heChhY3R1YWxCLCBiYXNlbGluZUIpCi0gICAgICAgICAgICAg
ICAgICAgIC0gc3RkOjptaW4oYWN0dWFsQiwgYmFzZWxpbmVCKTsKLSAgICAgICAgICAgICAgICB3
ZWlnaHRlZFBpeGVsc0RpZmZlcmVudCArPQotICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxmbG9hdD4obWF4T2YzKGRlbHRhUiwgZGVsdGFHLCBkZWx0YUIpKSAvIDI1NTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGludCBtYXhXaWR0aCA9IG1heChiYXNlbGlu
ZS53aWR0aCgpLCBhY3R1YWwud2lkdGgoKSk7Ci0gICAgaW50IG1heEhlaWdodCA9IG1heChiYXNl
bGluZS5oZWlnaHQoKSwgYWN0dWFsLmhlaWdodCgpKTsKLQotICAgIHdlaWdodGVkUGl4ZWxzRGlm
ZmVyZW50ICs9IChtYXhXaWR0aCAtIHcpICogaDsKLQotICAgIHdlaWdodGVkUGl4ZWxzRGlmZmVy
ZW50ICs9IChtYXhIZWlnaHQgLSBoKSAqIG1heFdpZHRoOwotCi0gICAgZmxvYXQgdG90YWxQaXhl
bHMgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYWN0dWFsLndpZHRoKCkpCi0gICAgICAgICogc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGFjdHVhbC5oZWlnaHQoKSk7Ci0gICAgaWYgKCF0b3RhbFBpeGVscykKLSAg
ICAgICAgcmV0dXJuIDEwMC4wZjsKLSAgICByZXR1cm4gd2VpZ2h0ZWRQaXhlbHNEaWZmZXJlbnQg
LyB0b3RhbFBpeGVscyAqIDEwMDsKLX0KLQotCi12b2lkIHByaW50SGVscCgpCi17Ci0gICAgZnBy
aW50ZihzdGRlcnIsCi0gICAgICAgICAgICAiVXNhZ2U6XG4iCi0gICAgICAgICAgICAiICBJbWFn
ZURpZmYgPGNvbXBhcmUgZmlsZT4gPHJlZmVyZW5jZSBmaWxlPlxuIgotICAgICAgICAgICAgIiAg
ICBDb21wYXJlcyB0d28gZmlsZXMgb24gZGlzaywgcmV0dXJuaW5nIDAgd2hlbiB0aGV5IGFyZSB0
aGUgc2FtZVxuIgotICAgICAgICAgICAgIiAgSW1hZ2VEaWZmIC0tdXNlLXN0ZGluXG4iCi0gICAg
ICAgICAgICAiICAgIFN0YXlzIG9wZW4gcmVhZGluZyBwYWlycyBvZiBmaWxlbmFtZXMgZnJvbSBz
dGRpbiwgY29tcGFyaW5nIHRoZW0sXG4iCi0gICAgICAgICAgICAiICAgIGFuZCBzZW5kaW5nIDAg
dG8gc3Rkb3V0IHdoZW4gdGhleSBhcmUgdGhlIHNhbWVcbiIKLSAgICAgICAgICAgICIgIEltYWdl
RGlmZiAtLWRpZmYgPGNvbXBhcmUgZmlsZT4gPHJlZmVyZW5jZSBmaWxlPiA8b3V0cHV0IGZpbGU+
XG4iCi0gICAgICAgICAgICAiICAgIENvbXBhcmVzIHR3byBmaWxlcyBvbiBkaXNrLCBvdXRwdXRz
IGFuIGltYWdlIHRoYXQgdmlzdWFsaXplcyB0aGUiCi0gICAgICAgICAgICAiICAgIGRpZmZlcmVu
Y2UgdG8gPG91dHB1dCBmaWxlPlxuIgotICAgICAgICAgICAgIiAgICAtLXdyaXRlLWltYWdlLWRp
ZmYtbWV0cmljcyBwcmludHMgYSBkaWZmZXJlbmNlIG1ldHJpYyB0byBzdGRvdXRcbiIKLSAgICAg
ICAgICAgICIgICAgLS13ZWlnaHRlZC1pbnRlbnNpdHkgd2VpZ2h0cyB0aGUgZGlmZmVyZW5jZSBt
ZXRyaWMgYnkgaW50ZW5zaXR5XG4iCi0gICAgICAgICAgICAiICAgICAgYXQgZWFjaCBwaXhlbFxu
Iik7Ci0gICAgLyogRm9yIHVuZmluaXNoZWQgd2Via2l0LWxpa2UtbW9kZSAoc2VlIGJlbG93KQot
ICAgICAgICJcbiIKLSAgICAgICAiICBJbWFnZURpZmYgLXNcbiIKLSAgICAgICAiICAgIFJlYWRz
IHN0cmVhbSBpbnB1dCBmcm9tIHN0ZGluLCBzaG91bGQgYmUgRVhBQ1RMWSBvZiB0aGUgZm9ybWF0
XG4iCi0gICAgICAgIiAgICBcIkNvbnRlbnQtbGVuZ3RoOiA8Ynl0ZSBsZW5ndGg+IDxkYXRhPkNv
bnRlbnQtbGVuZ3RoOiAuLi5cbiIKLSAgICAgICAiICAgIGl0IHdpbGwgdGFrZSBhcyBtYW55IGZp
bGUgcGFpcnMgYXMgZ2l2ZW4sIGFuZCB3aWxsIGNvbXBhcmUgdGhlbSBhc1xuIgotICAgICAgICIg
ICAgKGNtcF9maWxlLCByZWZlcmVuY2VfZmlsZSkgcGFpcnNcbiIpOwotICAgICovCi19Ci0KLWlu
dCBjb21wYXJlSW1hZ2VzKGNvbnN0IGNoYXIqIGZpbGUxLCBjb25zdCBjaGFyKiBmaWxlMiwKLSAg
ICAgICAgICAgICAgICAgIEltYWdlQ29tcGFyaXNvblByb2MgY29tcGFyYXRvcikKLXsKLSAgICBJ
bWFnZSBhY3R1YWxJbWFnZTsKLSAgICBJbWFnZSBiYXNlbGluZUltYWdlOwotCi0gICAgaWYgKCFh
Y3R1YWxJbWFnZS5jcmVhdGVGcm9tRmlsZW5hbWUoZmlsZTEpKSB7Ci0gICAgICAgIGZwcmludGYo
c3RkZXJyLCAiSW1hZ2VEaWZmOiBVbmFibGUgdG8gb3BlbiBmaWxlIFwiJXNcIlxuIiwgZmlsZTEp
OwotICAgICAgICByZXR1cm4gc3RhdHVzRXJyb3I7Ci0gICAgfQotICAgIGlmICghYmFzZWxpbmVJ
bWFnZS5jcmVhdGVGcm9tRmlsZW5hbWUoZmlsZTIpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJy
LCAiSW1hZ2VEaWZmOiBVbmFibGUgdG8gb3BlbiBmaWxlIFwiJXNcIlxuIiwgZmlsZTIpOwotICAg
ICAgICByZXR1cm4gc3RhdHVzRXJyb3I7Ci0gICAgfQotCi0gICAgZmxvYXQgcGVyY2VudCA9ICgq
Y29tcGFyYXRvcikoYWN0dWFsSW1hZ2UsIGJhc2VsaW5lSW1hZ2UpOwotICAgIGlmIChwZXJjZW50
ID4gMC4wKSB7Ci0gICAgICAgIC8vIGZhaWx1cmU6IFRoZSBXZWJLaXQgdmVyc2lvbiBhbHNvIHdy
aXRlcyB0aGUgZGlmZmVyZW5jZSBpbWFnZSB0bwotICAgICAgICAvLyBzdGRvdXQsIHdoaWNoIHNl
ZW1zIGV4Y2Vzc2l2ZSBmb3Igb3VyIG5lZWRzLgotICAgICAgICBwcmludGYoImRpZmY6ICUwMS4y
ZiUlIGZhaWxlZFxuIiwgcGVyY2VudCk7Ci0gICAgICAgIHJldHVybiBzdGF0dXNEaWZmZXJlbnQ7
Ci0gICAgfQotCi0gICAgLy8gc3VjY2VzcwotICAgIHByaW50ZigiZGlmZjogJTAxLjJmJSUgcGFz
c2VkXG4iLCBwZXJjZW50KTsKLSAgICByZXR1cm4gc3RhdHVzU2FtZTsKLQotfQotCi0vLyBVbnRl
c3RlZCBtb2RlIHRoYXQgYWN0cyBsaWtlIFdlYktpdCdzIGltYWdlIGNvbXBhcmF0b3IuIEkgd3Jv
dGUgdGhpcyBidXQKLS8vIGRlY2lkZWQgaXQncyB0b28gY29tcGxpY2F0ZWQuIFdlIG1heSB1c2Ug
aXQgaW4gdGhlIGZ1dHVyZSBpZiBpdCBsb29rcyB1c2VmdWwuCi1pbnQgdW50ZXN0ZWRDb21wYXJl
SW1hZ2VzKEltYWdlQ29tcGFyaXNvblByb2MgY29tcGFyYXRvcikKLXsKLSAgICBJbWFnZSBhY3R1
YWxJbWFnZTsKLSAgICBJbWFnZSBiYXNlbGluZUltYWdlOwotICAgIGNoYXIgYnVmZmVyWzIwNDhd
OwotICAgIHdoaWxlIChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBzdGRpbikpIHsKLSAg
ICAgICAgaWYgKCFzdHJuY21wKCJDb250ZW50LWxlbmd0aDogIiwgYnVmZmVyLCAxNikpIHsKLSAg
ICAgICAgICAgIGNoYXIqIGNvbnRleHQ7Ci0gICAgICAgICAgICBzdHJ0b2tfcihidWZmZXIsICIg
IiwgJmNvbnRleHQpOwotICAgICAgICAgICAgaW50IGltYWdlU2l6ZSA9IHN0cnRvbChzdHJ0b2tf
cigwLCAiICIsICZjb250ZXh0KSwgMCwgMTApOwotCi0gICAgICAgICAgICBib29sIHN1Y2Nlc3Mg
PSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChpbWFnZVNpemUgPiAwICYmICFhY3R1YWxJbWFnZS5o
YXNJbWFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxJbWFnZS5jcmVhdGVGcm9t
U3RkaW4oaW1hZ2VTaXplKSkgewotICAgICAgICAgICAgICAgICAgICBmcHV0cygiRXJyb3IsIGlu
cHV0IGltYWdlIGNhbid0IGJlIGRlY29kZWQuXG4iLCBzdGRlcnIpOwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KGltYWdlU2l6ZSA+IDAgJiYgIWJhc2VsaW5lSW1hZ2UuaGFzSW1hZ2UoKSkgewotICAgICAgICAg
ICAgICAgIGlmICghYmFzZWxpbmVJbWFnZS5jcmVhdGVGcm9tU3RkaW4oaW1hZ2VTaXplKSkgewot
ICAgICAgICAgICAgICAgICAgICBmcHV0cygiRXJyb3IsIGJhc2VsaW5lIGltYWdlIGNhbid0IGJl
IGRlY29kZWQuXG4iLCBzdGRlcnIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZw
dXRzKCJFcnJvciwgaW1hZ2Ugc2l6ZSBtdXN0IGJlIHNwZWNpZmllZC5cbiIsIHN0ZGVycik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoYWN0dWFsSW1hZ2UuaGFzSW1hZ2UoKSAmJiBiYXNlbGluZUltYWdlLmhhc0ltYWdl
KCkpIHsKLSAgICAgICAgICAgIGZsb2F0IHBlcmNlbnQgPSAoKmNvbXBhcmF0b3IpKGFjdHVhbElt
YWdlLCBiYXNlbGluZUltYWdlKTsKLSAgICAgICAgICAgIGlmIChwZXJjZW50ID4gMC4wKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gZmFpbHVyZTogVGhlIFdlYktpdCB2ZXJzaW9uIGFsc28gd3JpdGVz
IHRoZSBkaWZmZXJlbmNlIGltYWdlIHRvCi0gICAgICAgICAgICAgICAgLy8gc3Rkb3V0LCB3aGlj
aCBzZWVtcyBleGNlc3NpdmUgZm9yIG91ciBuZWVkcy4KLSAgICAgICAgICAgICAgICBwcmludGYo
ImRpZmY6ICUwMS4yZiUlIGZhaWxlZFxuIiwgcGVyY2VudCk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIC8vIHN1Y2Nlc3MKLSAgICAgICAgICAgICAgICBwcmludGYoImRp
ZmY6ICUwMS4yZiUlIHBhc3NlZFxuIiwgcGVyY2VudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBhY3R1YWxJbWFnZS5jbGVhcigpOwotICAgICAgICAgICAgYmFzZWxpbmVJbWFnZS5jbGVh
cigpOwotICAgICAgICB9Ci0gICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAgIH0KLSAgICByZXR1
cm4gMDsKLX0KLQotYm9vbCBjcmVhdGVJbWFnZURpZmYoY29uc3QgSW1hZ2UmIGltYWdlMSwgY29u
c3QgSW1hZ2UmIGltYWdlMiwgSW1hZ2UqIG91dCkKLXsKLSAgICBpbnQgdyA9IG1pbihpbWFnZTEu
d2lkdGgoKSwgaW1hZ2UyLndpZHRoKCkpOwotICAgIGludCBoID0gbWluKGltYWdlMS5oZWlnaHQo
KSwgaW1hZ2UyLmhlaWdodCgpKTsKLSAgICAqb3V0ID0gSW1hZ2UoaW1hZ2UxKTsKLSAgICBib29s
IHNhbWUgPSAoaW1hZ2UxLndpZHRoKCkgPT0gaW1hZ2UyLndpZHRoKCkpICYmIChpbWFnZTEuaGVp
Z2h0KCkgPT0gaW1hZ2UyLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcg
d2l0aCB0aGUgZXh0cmEgcGl4ZWxzIGlmIHRoZSBpbWFnZSBzaXplcyBhcmUgZGlmZmVyZW50Lgot
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgKyt5KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgdzsgKyt4KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZVBpeGVsID0gaW1h
Z2UxLnBpeGVsQXQoeCwgeSk7Ci0gICAgICAgICAgICBpZiAoYmFzZVBpeGVsICE9IGltYWdlMi5w
aXhlbEF0KHgsIHkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2V0IGRpZmZlcmluZyBwaXhlbHMg
cmVkLgotICAgICAgICAgICAgICAgIG91dC0+c2V0UGl4ZWxBdCh4LCB5LCByZ2JhUmVkIHwgcmdi
YUFscGhhKTsKLSAgICAgICAgICAgICAgICBzYW1lID0gZmFsc2U7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIC8vIFNldCBzYW1lIHBpeGVscyBhcyBmYWRlZC4KLSAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgYWxwaGEgPSBiYXNlUGl4ZWwgJiByZ2JhQWxwaGE7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5ld1BpeGVsID0gYmFzZVBpeGVsIC0gKChhbHBo
YSAvIDIpICYgcmdiYUFscGhhKTsKLSAgICAgICAgICAgICAgICBvdXQtPnNldFBpeGVsQXQoeCwg
eSwgbmV3UGl4ZWwpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIHNhbWU7Ci19Ci0KLXN0YXRpYyBib29sIHdyaXRlRmlsZShjb25zdCBjaGFyKiBvdXRGaWxl
LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCi17Ci0gICAgRklM
RSogZmlsZSA9IGZvcGVuKG91dEZpbGUsICJ3YiIpOwotICAgIGlmICghZmlsZSkgewotICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkltYWdlRGlmZjogVW5hYmxlIHRvIGNyZWF0ZSBmaWxlIFwiJXNc
IlxuIiwgb3V0RmlsZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGRh
dGFTaXplICE9IGZ3cml0ZShkYXRhLCAxLCBkYXRhU2l6ZSwgZmlsZSkpIHsKLSAgICAgICAgZmNs
b3NlKGZpbGUpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkltYWdlRGlmZjogVW5hYmxlIHRv
IHdyaXRlIGRhdGEgdG8gZmlsZSBcIiVzXCJcbiIsIG91dEZpbGUpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIGZjbG9zZShmaWxlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
aW50IGRpZmZJbWFnZXMoY29uc3QgY2hhciogZmlsZTEsIGNvbnN0IGNoYXIqIGZpbGUyLCBjb25z
dCBjaGFyKiBvdXRGaWxlLAotICAgICAgICAgICAgICAgYm9vbCBzaG91bGRXcml0ZVBlcmNlbnRh
Z2VzLCBJbWFnZUNvbXBhcmlzb25Qcm9jIGNvbXBhcmF0b3IpCi17Ci0gICAgSW1hZ2UgYWN0dWFs
SW1hZ2U7Ci0gICAgSW1hZ2UgYmFzZWxpbmVJbWFnZTsKLQotICAgIGlmICghYWN0dWFsSW1hZ2Uu
Y3JlYXRlRnJvbUZpbGVuYW1lKGZpbGUxKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIklt
YWdlRGlmZjogVW5hYmxlIHRvIG9wZW4gZmlsZSBcIiVzXCJcbiIsIGZpbGUxKTsKLSAgICAgICAg
cmV0dXJuIHN0YXR1c0Vycm9yOwotICAgIH0KLSAgICBpZiAoIWJhc2VsaW5lSW1hZ2UuY3JlYXRl
RnJvbUZpbGVuYW1lKGZpbGUyKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkltYWdlRGlm
ZjogVW5hYmxlIHRvIG9wZW4gZmlsZSBcIiVzXCJcbiIsIGZpbGUyKTsKLSAgICAgICAgcmV0dXJu
IHN0YXR1c0Vycm9yOwotICAgIH0KLQotICAgIEltYWdlIGRpZmZJbWFnZTsKLSAgICBib29sIHNh
bWUgPSBjcmVhdGVJbWFnZURpZmYoYmFzZWxpbmVJbWFnZSwgYWN0dWFsSW1hZ2UsICZkaWZmSW1h
Z2UpOwotICAgIGlmIChzYW1lKQotICAgICAgICByZXR1cm4gc3RhdHVzU2FtZTsKLQotICAgIHZl
Y3Rvcjx1bnNpZ25lZCBjaGFyPiBwbmdEYXRhOwotICAgIHdlYmtpdF9zdXBwb3J0OjpFbmNvZGVS
R0JBUE5HKGRpZmZJbWFnZS5kYXRhKCksIGRpZmZJbWFnZS53aWR0aCgpLCBkaWZmSW1hZ2UuaGVp
Z2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZkltYWdlLndpZHRo
KCkgKiA0LCAmcG5nRGF0YSk7Ci0gICAgaWYgKCF3cml0ZUZpbGUob3V0RmlsZSwgJnBuZ0RhdGEu
ZnJvbnQoKSwgcG5nRGF0YS5zaXplKCkpKQotICAgICAgICByZXR1cm4gc3RhdHVzRXJyb3I7Ci0K
LSAgICBpZiAoc2hvdWxkV3JpdGVQZXJjZW50YWdlcykgewotICAgICAgICBmbG9hdCBwZXJjZW50
ID0gKCpjb21wYXJhdG9yKShhY3R1YWxJbWFnZSwgYmFzZWxpbmVJbWFnZSk7Ci0gICAgICAgIGZw
cmludGYoc3Rkb3V0LCAiJS4zZlxuIiwgcGVyY2VudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0
YXR1c0RpZmZlcmVudDsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3Zb
XSkKLXsKLSAgICBzdGQ6OnZlY3Rvcjxjb25zdCBjaGFyKj4gdmFsdWVzOwotICAgIGJvb2wgcG9s
bFN0ZGluID0gZmFsc2U7Ci0gICAgYm9vbCBnZW5lcmF0ZURpZmYgPSBmYWxzZTsKLSAgICBib29s
IHNob3VsZFdyaXRlUGVyY2VudGFnZXMgPSBmYWxzZTsKLSAgICBJbWFnZUNvbXBhcmlzb25Qcm9j
IGNvbXBhcmF0b3IgPSBwZXJjZW50YWdlRGlmZmVyZW50OwotICAgIGZvciAoaW50IGkgPSAxOyBp
IDwgYXJnYzsgKytpKSB7Ci0gICAgICAgIGlmICghc3RyY21wKGFyZ3ZbaV0sIG9wdGlvblBvbGxT
dGRpbikpCi0gICAgICAgICAgICBwb2xsU3RkaW4gPSB0cnVlOwotICAgICAgICBlbHNlIGlmICgh
c3RyY21wKGFyZ3ZbaV0sIG9wdGlvbkdlbmVyYXRlRGlmZikpCi0gICAgICAgICAgICBnZW5lcmF0
ZURpZmYgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sIG9wdGlvbldy
aXRlKSkKLSAgICAgICAgICAgIHNob3VsZFdyaXRlUGVyY2VudGFnZXMgPSB0cnVlOwotICAgICAg
ICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sIG9wdGlvbldlaWdodGVkSW50ZW5zaXR5KSkKLSAg
ICAgICAgICAgIGNvbXBhcmF0b3IgPSB3ZWlnaHRlZFBlcmNlbnRhZ2VEaWZmZXJlbnQ7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVlcy5wdXNoX2JhY2soYXJndltpXSk7Ci0gICAgfQot
Ci0gICAgaWYgKHBvbGxTdGRpbikgewotICAgICAgICAvLyBXYXRjaCBzdGRpbiBmb3IgZmlsZW5h
bWVzLgotICAgICAgICBjb25zdCBzaXplX3QgYnVmZmVyU2l6ZSA9IFBBVEhfTUFYOwotICAgICAg
ICBjaGFyIHN0ZGluQnVmZmVyW2J1ZmZlclNpemVdOwotICAgICAgICBjaGFyIGZpcnN0TmFtZVti
dWZmZXJTaXplXTsKLSAgICAgICAgYm9vbCBoYXZlRmlyc3ROYW1lID0gZmFsc2U7Ci0gICAgICAg
IHdoaWxlIChmZ2V0cyhzdGRpbkJ1ZmZlciwgYnVmZmVyU2l6ZSwgc3RkaW4pKSB7Ci0gICAgICAg
ICAgICBpZiAoIXN0ZGluQnVmZmVyWzBdKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICBpZiAoaGF2ZUZpcnN0TmFtZSkgewotICAgICAgICAgICAgICAgIC8vIGNvbXBh
cmVJbWFnZXMgd3JpdGVzIHJlc3VsdHMgdG8gc3Rkb3V0IHVubGVzcyBhbiBlcnJvciBvY2N1cnJl
ZC4KLSAgICAgICAgICAgICAgICBpZiAoY29tcGFyZUltYWdlcyhmaXJzdE5hbWUsIHN0ZGluQnVm
ZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmF0b3IpID09IHN0
YXR1c0Vycm9yKQotICAgICAgICAgICAgICAgICAgICBwcmludGYoImVycm9yXG4iKTsKLSAgICAg
ICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICAgICAgICAgICAgICBoYXZlRmlyc3ROYW1l
ID0gZmFsc2U7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFNhdmUg
dGhlIGZpcnN0IGZpbGVuYW1lIGluIGFub3RoZXIgYnVmZmVyIGFuZCB3YWl0IGZvciB0aGUgc2Vj
b25kCi0gICAgICAgICAgICAgICAgLy8gZmlsZW5hbWUgdG8gYXJyaXZlIHZpYSBzdGRpbi4KLSAg
ICAgICAgICAgICAgICBzdHJjcHkoZmlyc3ROYW1lLCBzdGRpbkJ1ZmZlcik7Ci0gICAgICAgICAg
ICAgICAgaGF2ZUZpcnN0TmFtZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKGdlbmVyYXRlRGlmZikgewotICAgICAg
ICBpZiAodmFsdWVzLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgcmV0dXJuIGRpZmZJbWFnZXMo
dmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNob3VsZFdyaXRlUGVyY2VudGFnZXMsIGNvbXBhcmF0b3IpOwotICAgIH0gZWxzZSBp
ZiAodmFsdWVzLnNpemUoKSA9PSAyKQotICAgICAgICByZXR1cm4gY29tcGFyZUltYWdlcyhhcmd2
WzFdLCBhcmd2WzJdLCBjb21wYXJhdG9yKTsKLQotICAgIHByaW50SGVscCgpOwotICAgIHJldHVy
biBzdGF0dXNFcnJvcjsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL0xheW91dFRlc3RIZWxwZXIubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9M
YXlvdXRUZXN0SGVscGVyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWNhYzY2
OTI0ODJmMmU5ODM1MWNiMDdhZGVjZGQzMDMxOWYwNTdmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xh
eW91dFRlc3RIZWxwZXIubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyMTMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+Ci0jaW5j
bHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4K
LQotLy8gVGhpcyBpcyBhIHNpbXBsZSBoZWxwZXIgYXBwIHRoYXQgY2hhbmdlcyB0aGUgY29sb3Ig
c3luYyBwcm9maWxlIHRvIHRoZQotLy8gZ2VuZXJpYyBwcm9maWxlIGFuZCBiYWNrIHdoZW4gZG9u
ZS4gIFRoaXMgcHJvZ3JhbSBpcyBtYW5hZ2VkIGJ5IHRoZSBsYXlvdXQKLS8vIHRlc3Qgc2NyaXB0
LCBzbyBpdCBjYW4gZG8gdGhlIGpvYiBmb3IgbXVsdGlwbGUgRHVtcFJlbmRlclRyZWUgd2hpbGUg
dGhleSBhcmUKLS8vIHJ1bm5pbmcgbGF5b3V0IHRlc3RzLgotCi1uYW1lc3BhY2UgewotCi0jaWYg
ZGVmaW5lZChNQUNfT1NfWF9WRVJTSU9OXzEwXzcpICYmIE1BQ19PU19YX1ZFUlNJT05fTUFYX0FM
TE9XRUQgPj0gTUFDX09TX1hfVkVSU0lPTl8xMF83Ci0KLUNGVVJMUmVmIHNVc2VyQ29sb3JQcm9m
aWxlVVJMOwotCi12b2lkIGluc3RhbGxMYXlvdXRUZXN0Q29sb3JQcm9maWxlKCkKLXsKLSAgICAv
LyBUbyBtYWtlIHN1cmUgd2UgZ2V0IGNvbnNpc3RlbnQgY29sb3JzIChub3QgZGVwZW5kZW50IG9u
IHRoZSBjaG9zZW4gY29sb3IKLSAgICAvLyBzcGFjZSBvZiB0aGUgbWFpbiBkaXNwbGF5KSwgd2Ug
Zm9yY2UgdGhlIGdlbmVyaWMgUkdCIGNvbG9yIHByb2ZpbGUuCi0gICAgLy8gVGhpcyBjYXVzZXMg
YSBjaGFuZ2UgdGhlIHVzZXIgY2FuIHNlZS4KLSAgICAKLSAgICBDRlVVSURSZWYgbWFpbkRpc3Bs
YXlJRCA9IENHRGlzcGxheUNyZWF0ZVVVSURGcm9tRGlzcGxheUlEKENHTWFpbkRpc3BsYXlJRCgp
KTsKLSAgICAKLSAgICBpZiAoIXNVc2VyQ29sb3JQcm9maWxlVVJMKSB7Ci0gICAgICAgIENGRGlj
dGlvbmFyeVJlZiBkZXZpY2VJbmZvID0gQ29sb3JTeW5jRGV2aWNlQ29weURldmljZUluZm8oa0Nv
bG9yU3luY0Rpc3BsYXlEZXZpY2VDbGFzcywgbWFpbkRpc3BsYXlJRCk7Ci0KLSAgICAgICAgaWYg
KCFkZXZpY2VJbmZvKSB7Ci0gICAgICAgICAgICBOU0xvZyhAIk5vIGRpc3BsYXkgYXR0YWNoZWQg
dG8gc3lzdGVtOyBub3Qgc2V0dGluZyBtYWluIGRpc3BsYXkncyBjb2xvciBwcm9maWxlLiIpOwot
ICAgICAgICAgICAgQ0ZSZWxlYXNlKG1haW5EaXNwbGF5SUQpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb2ZpbGVJbmZvID0gKENG
RGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShkZXZpY2VJbmZvLCBrQ29sb3JTeW5j
Q3VzdG9tUHJvZmlsZXMpOwotICAgICAgICBpZiAocHJvZmlsZUluZm8pIHsKLSAgICAgICAgICAg
IHNVc2VyQ29sb3JQcm9maWxlVVJMID0gKENGVVJMUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHBy
b2ZpbGVJbmZvLCBDRlNUUigiMSIpKTsKLSAgICAgICAgICAgIENGUmV0YWluKHNVc2VyQ29sb3JQ
cm9maWxlVVJMKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByb2ZpbGVJbmZvID0g
KENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShkZXZpY2VJbmZvLCBrQ29sb3JT
eW5jRmFjdG9yeVByb2ZpbGVzKTsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeVJlZiBmYWN0b3J5
UHJvZmlsZSA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvZmlsZUlu
Zm8sIENGU1RSKCIxIikpOwotICAgICAgICAgICAgc1VzZXJDb2xvclByb2ZpbGVVUkwgPSAoQ0ZV
UkxSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmFjdG9yeVByb2ZpbGUsIGtDb2xvclN5bmNEZXZp
Y2VQcm9maWxlVVJMKTsKLSAgICAgICAgICAgIENGUmV0YWluKHNVc2VyQ29sb3JQcm9maWxlVVJM
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQ0ZSZWxlYXNlKGRldmljZUluZm8pOwot
ICAgIH0KLQotICAgIENvbG9yU3luY1Byb2ZpbGVSZWYgZ2VuZXJpY1JHQlByb2ZpbGUgPSBDb2xv
clN5bmNQcm9maWxlQ3JlYXRlV2l0aE5hbWUoa0NvbG9yU3luY0dlbmVyaWNSR0JQcm9maWxlKTsK
LSAgICBDRkVycm9yUmVmIGVycm9yOwotICAgIENGVVJMUmVmIHByb2ZpbGVVUkwgPSBDb2xvclN5
bmNQcm9maWxlR2V0VVJMKGdlbmVyaWNSR0JQcm9maWxlLCAmZXJyb3IpOwotICAgIGlmICghcHJv
ZmlsZVVSTCkgewotICAgICAgICBOU0xvZyhAIkZhaWxlZCB0byBnZXQgVVJMIG9mIEdlbmVyaWMg
UkdCIGNvbG9yIHByb2ZpbGUhIE1hbnkgcGl4ZWwgdGVzdHMgbWF5IGZhaWwgYXMgYSByZXN1bHQu
IEVycm9yOiAlQCIsIGVycm9yKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzVXNlckNvbG9yUHJv
ZmlsZVVSTCkgewotICAgICAgICAgICAgQ0ZSZWxlYXNlKHNVc2VyQ29sb3JQcm9maWxlVVJMKTsK
LSAgICAgICAgICAgIHNVc2VyQ29sb3JQcm9maWxlVVJMID0gMDsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgQ0ZSZWxlYXNlKGdlbmVyaWNSR0JQcm9maWxlKTsKLSAgICAgICAgQ0ZSZWxl
YXNlKG1haW5EaXNwbGF5SUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAg
ICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIHByb2ZpbGVJbmZvID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRl
TXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxs
QmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKLSAgICBDRkRpY3Rpb25h
cnlTZXRWYWx1ZShwcm9maWxlSW5mbywga0NvbG9yU3luY0RldmljZURlZmF1bHRQcm9maWxlSUQs
IHByb2ZpbGVVUkwpOwotICAgIAotICAgIGlmICghQ29sb3JTeW5jRGV2aWNlU2V0Q3VzdG9tUHJv
ZmlsZXMoa0NvbG9yU3luY0Rpc3BsYXlEZXZpY2VDbGFzcywgbWFpbkRpc3BsYXlJRCwgcHJvZmls
ZUluZm8pKSB7Ci0gICAgICAgIE5TTG9nKEAiRmFpbGVkIHRvIHNldCBjb2xvciBwcm9maWxlIGZv
ciBtYWluIGRpc3BsYXkhIE1hbnkgcGl4ZWwgdGVzdHMgbWF5IGZhaWwgYXMgYSByZXN1bHQuIik7
Ci0gICAgICAgIAotICAgICAgICBpZiAoc1VzZXJDb2xvclByb2ZpbGVVUkwpIHsKLSAgICAgICAg
ICAgIENGUmVsZWFzZShzVXNlckNvbG9yUHJvZmlsZVVSTCk7Ci0gICAgICAgICAgICBzVXNlckNv
bG9yUHJvZmlsZVVSTCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgQ0ZSZWxlYXNl
KHByb2ZpbGVJbmZvKTsKLSAgICBDRlJlbGVhc2UoZ2VuZXJpY1JHQlByb2ZpbGUpOwotICAgIENG
UmVsZWFzZShtYWluRGlzcGxheUlEKTsKLX0KLQotdm9pZCByZXN0b3JlVXNlckNvbG9yUHJvZmls
ZSh2b2lkKQotewotICAgIC8vIFRoaXMgaXMgdXNlZCBhcyBhIHNpZ25hbCBoYW5kbGVyLCBhbmQg
dGh1cyB0aGUgY2FsbHMgaW50byBDb2xvclN5bmMgYXJlIHVuc2FmZS4KLSAgICAvLyBCdXQgd2Ug
bWlnaHQgYXMgd2VsbCB0cnkgdG8gcmVzdG9yZSB0aGUgdXNlcidzIGNvbG9yIHByb2ZpbGUsIHdl
J3JlIGdvaW5nIGRvd24gYW55d2F5Li4uCi0gICAgCi0gICAgaWYgKCFzVXNlckNvbG9yUHJvZmls
ZVVSTCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENGVVVJRFJlZiBtYWluRGlzcGxheUlE
ID0gQ0dEaXNwbGF5Q3JlYXRlVVVJREZyb21EaXNwbGF5SUQoQ0dNYWluRGlzcGxheUlEKCkpOwot
ICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgcHJvZmlsZUluZm8gPSBDRkRpY3Rpb25hcnlDcmVh
dGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNh
bGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOwotICAgIENGRGljdGlv
bmFyeVNldFZhbHVlKHByb2ZpbGVJbmZvLCBrQ29sb3JTeW5jRGV2aWNlRGVmYXVsdFByb2ZpbGVJ
RCwgc1VzZXJDb2xvclByb2ZpbGVVUkwpOwotICAgIENvbG9yU3luY0RldmljZVNldEN1c3RvbVBy
b2ZpbGVzKGtDb2xvclN5bmNEaXNwbGF5RGV2aWNlQ2xhc3MsIG1haW5EaXNwbGF5SUQsIHByb2Zp
bGVJbmZvKTsKLSAgICBDRlJlbGVhc2UobWFpbkRpc3BsYXlJRCk7Ci0gICAgQ0ZSZWxlYXNlKHBy
b2ZpbGVJbmZvKTsKLX0KLQotI2Vsc2UgLy8gRm9yIFNub3cgTGVvcGFyZCBhbmQgYmVmb3JlLCB1
c2Ugb2xkZXIgQ00qIEFQSS4KLQotY29uc3QgY2hhciBjb2xvclByb2ZpbGVQYXRoW10gPSAiL1N5
c3RlbS9MaWJyYXJ5L0NvbG9yU3luYy9Qcm9maWxlcy9HZW5lcmljIFJHQiBQcm9maWxlLmljYyI7
Ci0KLUNNUHJvZmlsZUxvY2F0aW9uIGluaXRpYWxDb2xvclByb2ZpbGVMb2NhdGlvbjsgLy8gVGhl
IGxvY1R5cGUgZmllbGQgaXMgaW5pdGlhbGl6ZWQgdG8gMCB3aGljaCBpcyB0aGUgc2FtZSBhcyBj
bU5vUHJvZmlsZUJhc2UuCi0KLXZvaWQgaW5zdGFsbExheW91dFRlc3RDb2xvclByb2ZpbGUoKQot
ewotICAgIC8vIFRvIG1ha2Ugc3VyZSB3ZSBnZXQgY29uc2lzdGVudCBjb2xvcnMgKG5vdCBkZXBl
bmRlbnQgb24gdGhlIE1haW4gZGlzcGxheSksCi0gICAgLy8gd2UgZm9yY2UgdGhlIGdlbmVyaWMg
cmdiIGNvbG9yIHByb2ZpbGUuICBUaGlzIGNhc2VzIGEgY2hhbmdlIHRoZSB1c2VyIGNhbgotICAg
IC8vIHNlZS4KLSAgICBjb25zdCBDTURldmljZVNjb3BlIHNjb3BlID0geyBrQ0ZQcmVmZXJlbmNl
c0N1cnJlbnRVc2VyLCBrQ0ZQcmVmZXJlbmNlc0N1cnJlbnRIb3N0IH07Ci0KLSAgICBDTVByb2Zp
bGVSZWYgcHJvZmlsZSA9IDA7Ci0gICAgaW50IGVycm9yID0gQ01HZXRQcm9maWxlQnlBVklEKChD
TURpc3BsYXlJRFR5cGUpa0NHRGlyZWN0TWFpbkRpc3BsYXksICZwcm9maWxlKTsKLSAgICBpZiAo
IWVycm9yKSB7Ci0gICAgICAgIFVJbnQzMiBzaXplID0gc2l6ZW9mKGluaXRpYWxDb2xvclByb2Zp
bGVMb2NhdGlvbik7Ci0gICAgICAgIGVycm9yID0gTkNNR2V0UHJvZmlsZUxvY2F0aW9uKHByb2Zp
bGUsICZpbml0aWFsQ29sb3JQcm9maWxlTG9jYXRpb24sICZzaXplKTsKLSAgICAgICAgQ01DbG9z
ZVByb2ZpbGUocHJvZmlsZSk7Ci0gICAgfQotICAgIGlmIChlcnJvcikgewotICAgICAgICBOU0xv
ZyhAImZhaWxlZCB0byBnZXQgdGhlIGN1cnJlbnQgY29sb3IgcHJvZmlsZSwgcGl4bWFwcyB3b24n
dCBtYXRjaC4gRXJyb3I6ICVkIiwgKGludCllcnJvcik7Ci0gICAgICAgIGluaXRpYWxDb2xvclBy
b2ZpbGVMb2NhdGlvbi5sb2NUeXBlID0gY21Ob1Byb2ZpbGVCYXNlOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQ01Qcm9maWxlTG9jYXRpb24gbG9jYXRpb247Ci0gICAgbG9jYXRpb24u
bG9jVHlwZSA9IGNtUGF0aEJhc2VkUHJvZmlsZTsKLSAgICBzdHJuY3B5KGxvY2F0aW9uLnUucGF0
aExvYy5wYXRoLCBjb2xvclByb2ZpbGVQYXRoLCBzaXplb2YobG9jYXRpb24udS5wYXRoTG9jLnBh
dGgpKTsKLSAgICBlcnJvciA9IENNU2V0RGV2aWNlUHJvZmlsZShjbURpc3BsYXlEZXZpY2VDbGFz
cywgKENNRGV2aWNlSUQpa0NHRGlyZWN0TWFpbkRpc3BsYXksICZzY29wZSwgY21EZWZhdWx0UHJv
ZmlsZUlELCAmbG9jYXRpb24pOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBOU0xvZyhAImZh
aWxlZCBpbnN0YWxsIHRoZSBnZW5lcmljIGNvbG9yIHByb2ZpbGUsIHBpeG1hcHMgd29uJ3QgbWF0
Y2guIEVycm9yOiAlZCIsIChpbnQpZXJyb3IpOwotICAgICAgICBpbml0aWFsQ29sb3JQcm9maWxl
TG9jYXRpb24ubG9jVHlwZSA9IGNtTm9Qcm9maWxlQmFzZTsKLSAgICB9Ci19Ci0KLXZvaWQgcmVz
dG9yZVVzZXJDb2xvclByb2ZpbGUodm9pZCkKLXsKLSAgICAvLyBUaGlzIGlzIHVzZWQgYXMgYSBz
aWduYWwgaGFuZGxlciwgYW5kIHRodXMgdGhlIGNhbGxzIGludG8gQ29sb3JTeW5jIGFyZSB1bnNh
ZmUuCi0gICAgLy8gQnV0IHdlIG1pZ2h0IGFzIHdlbGwgdHJ5IHRvIHJlc3RvcmUgdGhlIHVzZXIn
cyBjb2xvciBwcm9maWxlLCB3ZSdyZSBnb2luZyBkb3duIGFueXdheS4uLgotICAgIGlmIChpbml0
aWFsQ29sb3JQcm9maWxlTG9jYXRpb24ubG9jVHlwZSAhPSBjbU5vUHJvZmlsZUJhc2UpIHsKLSAg
ICAgICAgY29uc3QgQ01EZXZpY2VTY29wZSBzY29wZSA9IHsga0NGUHJlZmVyZW5jZXNDdXJyZW50
VXNlciwga0NGUHJlZmVyZW5jZXNDdXJyZW50SG9zdCB9OwotICAgICAgICBpbnQgZXJyb3IgPSBD
TVNldERldmljZVByb2ZpbGUoY21EaXNwbGF5RGV2aWNlQ2xhc3MsIChDTURldmljZUlEKWtDR0Rp
cmVjdE1haW5EaXNwbGF5LCAmc2NvcGUsIGNtRGVmYXVsdFByb2ZpbGVJRCwgJmluaXRpYWxDb2xv
clByb2ZpbGVMb2NhdGlvbik7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgTlNM
b2coQCJGYWlsZWQgdG8gcmVzdG9yZSBjb2xvciBwcm9maWxlLCB1c2UgU3lzdGVtIFByZWZlcmVu
Y2VzIC0+IERpc3BsYXlzIC0+IENvbG9yIHRvIHJlc2V0LiBFcnJvcjogJWQiLCAoaW50KWVycm9y
KTsKLSAgICAgICAgfQotICAgICAgICBpbml0aWFsQ29sb3JQcm9maWxlTG9jYXRpb24ubG9jVHlw
ZSA9IGNtTm9Qcm9maWxlQmFzZTsKLSAgICB9Ci19Ci0KLSNlbmRpZgotCi12b2lkIHNpbXBsZVNp
Z25hbEhhbmRsZXIoaW50IHNpZykKLXsKLSAgICAvLyBUcnkgdG8gcmVzdG9yZSB0aGUgY29sb3Ig
cHJvZmlsZSBhbmQgdHJ5IHRvIGdvIGRvd24gY2xlYW5seQotICAgIHJlc3RvcmVVc2VyQ29sb3JQ
cm9maWxlKCk7Ci0gICAgZXhpdCgxMjggKyBzaWcpOwotfQotCi19IC8vIG5hbWVzcGFjZQotCi1p
bnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQotewotICAgIE5TQXV0b3JlbGVhc2VQb29s
KiBwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07Ci0KLSAgICAvLyBIb29r
cyB0aGUgd2F5cyB3ZSBtaWdodCBnZXQgdG9sZCB0byBjbGVhbiB1cC4uLgotICAgIHNpZ25hbChT
SUdJTlQsIHNpbXBsZVNpZ25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdIVVAsIHNpbXBsZVNp
Z25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdURVJNLCBzaW1wbGVTaWduYWxIYW5kbGVyKTsK
LQotICAgIC8vIFNhdmUgb2ZmIHRoZSBjdXJyZW50IHByb2ZpbGUsIGFuZCB0aGVuIGluc3RhbGwg
dGhlIGxheW91dCB0ZXN0IHByb2ZpbGUuCi0gICAgaW5zdGFsbExheW91dFRlc3RDb2xvclByb2Zp
bGUoKTsKLQotICAgIC8vIExldCB0aGUgc2NyaXB0IGtub3cgd2UncmUgcmVhZHkKLSAgICBwcmlu
dGYoInJlYWR5XG4iKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLQotICAgIC8vIFdhaXQgZm9yIGFu
eSBrZXkgKG9yIHNpZ25hbCkKLSAgICBnZXRjaGFyKCk7Ci0KLSAgICAvLyBSZXN0b3JlIHRoZSBw
cm9maWxlCi0gICAgcmVzdG9yZVVzZXJDb2xvclByb2ZpbGUoKTsKLQotICAgIFtwb29sIHJlbGVh
c2VdOwotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vTGF5b3V0VGVzdEhlbHBlcldpbi5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9MYXlvdXRUZXN0SGVscGVyV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjVlZmRjZGNiYjU4YWU0OTQ5ZDM2ZDUyNzJhNzZhNjg4Y2RkM2I3Yi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9MYXlvdXRUZXN0SGVscGVyV2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRl
IDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLXN0YXRpYyBCT09MIGZvbnRTbW9v
dGhpbmdFbmFibGVkID0gRkFMU0U7Ci0KLXN0YXRpYyB2b2lkIHNhdmVJbml0aWFsU2V0dGluZ3Mo
dm9pZCkKLXsKLSAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRGT05UU01PT1RISU5H
LCAwLCAmZm9udFNtb290aGluZ0VuYWJsZWQsIDApOwotfQotCi0vLyBUZWNobmljYWxseSwgYWxs
IHdlIG5lZWQgdG8gZG8gaXMgZGlzYWJsZSBDbGVhclR5cGUuIEhvd2V2ZXIsCi0vLyBmb3Igc29t
ZSByZWFzb24sIHRoZSBjYWxsIHRvIFNQSV9TRVRGT05UU01PT1RISU5HVFlQRSBkb2Vzbid0Ci0v
LyBzZWVtIHRvIHdvcmssIHNvIHdlIGp1c3QgZGlzYWJsZSBmb250IHNtb290aGluZyBhbGwgdG9n
ZXRoZXIKLS8vICh3aGljaCB3b3JrcyByZWxpYWJseSkKLXN0YXRpYyB2b2lkIGluc3RhbGxMYXlv
dXRUZXN0U2V0dGluZ3Modm9pZCkKLXsKLSAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9T
RVRGT05UU01PT1RISU5HLCBGQUxTRSwgMCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc3RvcmVJ
bml0aWFsU2V0dGluZ3Modm9pZCkKLXsKLSAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9T
RVRGT05UU01PT1RISU5HLCBzdGF0aWNfY2FzdDxVSU5UPihmb250U21vb3RoaW5nRW5hYmxlZCks
IDAsIDApOwotfQotCi1zdGF0aWMgdm9pZCBzaW1wbGVTaWduYWxIYW5kbGVyKGludCBzaWduYWxO
dW1iZXIpCi17Ci0gICAgLy8gVHJ5IHRvIHJlc3RvcmUgdGhlIHNldHRpbmdzIGFuZCB0aGVuIGdv
IGRvd24gY2xlYW5seQotICAgIHJlc3RvcmVJbml0aWFsU2V0dGluZ3MoKTsKLSAgICBleGl0KDEy
OCArIHNpZ25hbE51bWJlcik7Ci19Ci0KLWludCBtYWluKGludCwgY2hhcipbXSkKLXsKLSAgICAv
LyBIb29rcyB0aGUgd2F5cyB3ZSBtaWdodCBnZXQgdG9sZCB0byBjbGVhbiB1cC4uLgotICAgIHNp
Z25hbChTSUdJTlQsIHNpbXBsZVNpZ25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdURVJNLCBz
aW1wbGVTaWduYWxIYW5kbGVyKTsKLQotICAgIHNhdmVJbml0aWFsU2V0dGluZ3MoKTsKLQotICAg
IGluc3RhbGxMYXlvdXRUZXN0U2V0dGluZ3MoKTsKLQotICAgIC8vIExldCB0aGUgc2NyaXB0IGtu
b3cgd2UncmUgcmVhZHkKLSAgICBwcmludGYoInJlYWR5XG4iKTsKLSAgICBmZmx1c2goc3Rkb3V0
KTsKLQotICAgIC8vIFdhaXQgZm9yIGFueSBrZXkgKG9yIHNpZ25hbCkKLSAgICBnZXRjaGFyKCk7
Ci0KLSAgICByZXN0b3JlSW5pdGlhbFNldHRpbmdzKCk7Ci0KLSAgICByZXR1cm4gRVhJVF9TVUND
RVNTOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1Bs
YXRmb3JtLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tQbGF0Zm9ybS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNzliNzg4OGVkMzJhY2QzN2JlNzgy
ODc3NTkyNTY1OTY4OTMzMTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1BsYXRmb3JtLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiTW9ja1BsYXRmb3JtLmgiCi0KLSNpbmNsdWRlICJXZWJUZXN0SW50ZXJmYWNlcy5oIgotI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJNZWRpYVN0cmVhbUNlbnRlci5oPgotI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJUZXN0UnVubmVyOwotCi1QYXNzT3duUHRyPE1v
Y2tQbGF0Zm9ybT4gTW9ja1BsYXRmb3JtOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFB0
cihuZXcgTW9ja1BsYXRmb3JtKCkpOwotfQotCi1Nb2NrUGxhdGZvcm06Ok1vY2tQbGF0Zm9ybSgp
Ci17Ci19Ci0KLU1vY2tQbGF0Zm9ybTo6fk1vY2tQbGF0Zm9ybSgpCi17Ci19Ci0KLXZvaWQgTW9j
a1BsYXRmb3JtOjpzZXRJbnRlcmZhY2VzKFdlYlRlc3RJbnRlcmZhY2VzKiBpbnRlcmZhY2VzKQot
ewotICAgIG1faW50ZXJmYWNlcyA9IGludGVyZmFjZXM7Ci19Ci0KLXZvaWQgTW9ja1BsYXRmb3Jt
OjpjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyh1bnNpZ25lZCBjaGFyKiwgc2l6ZV90KQot
ewotICAgIENSQVNIKCk7Ci19Ci0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotV2ViTWVkaWFT
dHJlYW1DZW50ZXIqIE1vY2tQbGF0Zm9ybTo6Y3JlYXRlTWVkaWFTdHJlYW1DZW50ZXIoV2ViTWVk
aWFTdHJlYW1DZW50ZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICBBU1NFUlQobV9pbnRlcmZhY2Vz
KTsKLQotICAgIGlmICghbV9tb2NrTWVkaWFTdHJlYW1DZW50ZXIpCi0gICAgICAgIG1fbW9ja01l
ZGlhU3RyZWFtQ2VudGVyID0gYWRvcHRQdHIobV9pbnRlcmZhY2VzLT5jcmVhdGVNZWRpYVN0cmVh
bUNlbnRlcihjbGllbnQpKTsKLQotICAgIHJldHVybiBtX21vY2tNZWRpYVN0cmVhbUNlbnRlci5n
ZXQoKTsKLX0KLQotV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKiBNb2NrUGxhdGZvcm06OmNy
ZWF0ZVJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcihXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJD
bGllbnQqIGNsaWVudCkKLXsKLSAgICBBU1NFUlQobV9pbnRlcmZhY2VzKTsKLQotICAgIHJldHVy
biBtX2ludGVyZmFjZXMtPmNyZWF0ZVdlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcihjbGllbnQp
OwotfQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrUGxhdGZvcm0uaCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL01vY2tQbGF0Zm9ybS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2OGI4N2QyMzBmMThhY2ZjMjFkMTVkMzRkMjQwZWY3ZDYxMWJjODQ0Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL01vY2tQbGF0Zm9ybS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgTW9ja1BsYXRmb3JtX2gKLSNkZWZpbmUgTW9ja1BsYXRmb3JtX2gKLQotI2luY2x1ZGUgPHB1
YmxpYy9QbGF0Zm9ybS5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci1jbGFzcyBXZWJUZXN0
SW50ZXJmYWNlczsKLX0KLQotY2xhc3MgTW9ja1BsYXRmb3JtIDogcHVibGljIFdlYktpdDo6UGxh
dGZvcm0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tQbGF0Zm9ybT4gY3Jl
YXRlKCk7Ci0gICAgfk1vY2tQbGF0Zm9ybSgpOwotCi0gICAgdm9pZCBzZXRJbnRlcmZhY2VzKFdl
YlRlc3RSdW5uZXI6OldlYlRlc3RJbnRlcmZhY2VzKik7Ci0gICAgdmlydHVhbCB2b2lkIGNyeXB0
b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGxl
bmd0aCkgT1ZFUlJJREU7Ci0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIHZpcnR1YWwg
V2ViS2l0OjpXZWJNZWRpYVN0cmVhbUNlbnRlciogY3JlYXRlTWVkaWFTdHJlYW1DZW50ZXIoV2Vi
S2l0OjpXZWJNZWRpYVN0cmVhbUNlbnRlckNsaWVudCopIE9WRVJSSURFOwotICAgIHZpcnR1YWwg
V2ViS2l0OjpXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIqIGNyZWF0ZVJUQ1BlZXJDb25uZWN0
aW9uSGFuZGxlcihXZWJLaXQ6OldlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCopIE9W
RVJSSURFOwotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLXByaXZhdGU6Ci0gICAg
TW9ja1BsYXRmb3JtKCk7Ci0KLSAgICBXZWJUZXN0UnVubmVyOjpXZWJUZXN0SW50ZXJmYWNlcyog
bV9pbnRlcmZhY2VzOwotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBPd25QdHI8V2Vi
S2l0OjpXZWJNZWRpYVN0cmVhbUNlbnRlcj4gbV9tb2NrTWVkaWFTdHJlYW1DZW50ZXI7Ci0jZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKLX07Ci0KLSNlbmRpZiAvLyBNb2NrUGxhdGZvcm1f
aApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlByZXJl
bmRlcmluZ1N1cHBvcnQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dl
YlByZXJlbmRlcmluZ1N1cHBvcnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk
NjY3ZDg4NjUwMzU1OWM4NDlmYzI5Njc4ZDhjZDFiNGNmMDhiMTM2Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL01vY2tXZWJQcmVyZW5kZXJpbmdTdXBwb3J0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTW9ja1dlYlByZXJlbmRlcmlu
Z1N1cHBvcnQuaCIKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLU1vY2tXZWJQcmVy
ZW5kZXJpbmdTdXBwb3J0OjpNb2NrV2ViUHJlcmVuZGVyaW5nU3VwcG9ydCgpCi17Ci0gICAgQVNT
RVJUKCFjdXJyZW50KCkpOwotICAgIGluaXRpYWxpemUodGhpcyk7Ci19Ci0KLU1vY2tXZWJQcmVy
ZW5kZXJpbmdTdXBwb3J0Ojp+TW9ja1dlYlByZXJlbmRlcmluZ1N1cHBvcnQoKQotewotICAgIEFT
U0VSVChjdXJyZW50KCkgPT0gdGhpcyk7Ci0gICAgc2h1dGRvd24oKTsKLX0KLQotdm9pZCBNb2Nr
V2ViUHJlcmVuZGVyaW5nU3VwcG9ydDo6YWRkKGNvbnN0IFdlYktpdDo6V2ViUHJlcmVuZGVyJikK
LXsKLX0KLQotdm9pZCBNb2NrV2ViUHJlcmVuZGVyaW5nU3VwcG9ydDo6Y2FuY2VsKGNvbnN0IFdl
YktpdDo6V2ViUHJlcmVuZGVyJikKLXsKLX0KLQotdm9pZCBNb2NrV2ViUHJlcmVuZGVyaW5nU3Vw
cG9ydDo6YWJhbmRvbihjb25zdCBXZWJLaXQ6OldlYlByZXJlbmRlciYpCi17Ci19CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViUHJlcmVuZGVyaW5nU3Vw
cG9ydC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlByZXJlbmRlcmlu
Z1N1cHBvcnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTcwMjMwYzVjNmExODY2
YzA3OWJjYjMzM2Y0YThhODlhNmZjZTlkYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViUHJl
cmVuZGVyaW5nU3VwcG9ydC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
TW9ja1dlYlByZXJlbmRlcmluZ1N1cHBvcnRfaAotI2RlZmluZSBNb2NrV2ViUHJlcmVuZGVyaW5n
U3VwcG9ydF9oCi0KLSNpbmNsdWRlIDxwdWJsaWMvV2ViUHJlcmVuZGVyaW5nU3VwcG9ydC5oPgot
Ci1jbGFzcyBNb2NrV2ViUHJlcmVuZGVyaW5nU3VwcG9ydCA6IHB1YmxpYyBXZWJLaXQ6OldlYlBy
ZXJlbmRlcmluZ1N1cHBvcnQgewotcHVibGljOgotICAgIE1vY2tXZWJQcmVyZW5kZXJpbmdTdXBw
b3J0KCk7Ci0gICAgdmlydHVhbCB+TW9ja1dlYlByZXJlbmRlcmluZ1N1cHBvcnQoKTsKLQotcHJp
dmF0ZToKLSAgICB2b2lkIGFkZChjb25zdCBXZWJLaXQ6OldlYlByZXJlbmRlciYpIE9WRVJSSURF
OwotICAgIHZvaWQgY2FuY2VsKGNvbnN0IFdlYktpdDo6V2ViUHJlcmVuZGVyJikgT1ZFUlJJREU7
Ci0gICAgdm9pZCBhYmFuZG9uKGNvbnN0IFdlYktpdDo6V2ViUHJlcmVuZGVyJikgT1ZFUlJJREU7
Ci19OwotCi0jZW5kaWYgLy8gTW9ja1dlYlByZXJlbmRlcmluZ1N1cHBvcnRfaApkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGFzay5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UYXNrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NGQ1MTQ0ZjI1NjA4Y2QwN2U3YzY1MTc2OTQ1OTk0ZWE1NDliN2VhOS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UYXNrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiVGFzay5oIgotCi0jaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVk
ZSAiV2ViVGFzay5oIgotI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0Lmgi
Ci0jaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11
c2luZyBuYW1lc3BhY2UgV2ViVGVzdFJ1bm5lcjsKLQotbmFtZXNwYWNlIHsKLQotdm9pZCBpbnZv
a2VUYXNrKHZvaWQqIGNvbnRleHQpCi17Ci0gICAgV2ViVGFzayogdGFzayA9IHN0YXRpY19jYXN0
PFdlYlRhc2sqPihjb250ZXh0KTsKLSAgICB0YXNrLT5ydW4oKTsKLSAgICBkZWxldGUgdGFzazsK
LX0KLQotY2xhc3MgVGFza1dyYXBwZXIgOiBwdWJsaWMgd2Via2l0X3N1cHBvcnQ6OlRhc2tBZGFw
dG9yIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBUYXNrV3JhcHBlcihXZWJUYXNrKiB0YXNrKQot
ICAgICAgICA6IG1fdGFzayhhZG9wdFB0cih0YXNrKSkKLSAgICB7Ci0gICAgfQotICAgIHZpcnR1
YWwgflRhc2tXcmFwcGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIFJ1bigpCi0gICAgewotICAg
ICAgICBtX3Rhc2stPnJ1bigpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBPd25QdHI8V2ViVGFz
az4gbV90YXNrOwotfTsKLQotfQotCi12b2lkIHBvc3RUYXNrKFdlYlRhc2sqIHRhc2spCi17Ci0g
ICAgUGxhdGZvcm06OmN1cnJlbnQoKS0+Y2FsbE9uTWFpblRocmVhZChpbnZva2VUYXNrLCBzdGF0
aWNfY2FzdDx2b2lkKj4odGFzaykpOwotfQotCi12b2lkIHBvc3REZWxheWVkVGFzayhXZWJUYXNr
KiB0YXNrLCBsb25nIGxvbmcgbXMpCi17Ci0gICAgd2Via2l0X3N1cHBvcnQ6OlBvc3REZWxheWVk
VGFzayhuZXcgVGFza1dyYXBwZXIodGFzayksIG1zKTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rhc2suaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rhc2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg3NTVhODNjYjgyNjc2
OGQ3M2QwNTA2YTdmZmRjNGM3YWNmMDZmOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UYXNrLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUYXNrX2gKLSNkZWZpbmUgVGFza19o
Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLWNsYXNzIFdlYlRhc2s7Ci19Ci0KLXZvaWQg
cG9zdFRhc2soV2ViVGVzdFJ1bm5lcjo6V2ViVGFzayopOwotdm9pZCBwb3N0RGVsYXllZFRhc2so
V2ViVGVzdFJ1bm5lcjo6V2ViVGFzayosIGxvbmcgbG9uZyBtcyk7Ci0KLSNlbmRpZiAvLyBUYXNr
X2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RFdmVudFBy
aW50ZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdEV2ZW50UHJpbnRl
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMmJmODMwZjAyNzRiNzhiMTk5
YTYzODNmMGE3OThlZGMzMzM3ZjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdEV2ZW50UHJpbnRl
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJUZXN0RXZlbnRQcmludGVyLmgiCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQmFzZTY0Lmg+Ci0KLVRlc3RFdmVudFByaW50ZXI6OlRlc3RFdmVudFByaW50ZXIo
KQotICAgIDogbV9lbmNvZGVCaW5hcnkoZmFsc2UpCi17Ci19Ci0KLVRlc3RFdmVudFByaW50ZXI6
On5UZXN0RXZlbnRQcmludGVyKCkKLXsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFRlc3RFdmVu
dFByaW50ZXI6OmhhbmRsZVRlc3RIZWFkZXIoY29uc3QgY2hhciopIGNvbnN0Ci17Ci19Ci0KLXZv
aWQgVGVzdEV2ZW50UHJpbnRlcjo6aGFuZGxlVGltZWRPdXQoKSBjb25zdAotewotICAgIGZwcmlu
dGYoc3RkZXJyLCAiRkFJTDogVGltZWQgb3V0IHdhaXRpbmcgZm9yIG5vdGlmeURvbmUgdG8gYmUg
Y2FsbGVkXG4iKTsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIkZBSUw6IFRpbWVkIG91dCB3YWl0aW5n
IGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuIik7Ci19Ci0KLXZvaWQgVGVzdEV2ZW50UHJp
bnRlcjo6aGFuZGxlVGV4dEhlYWRlcigpIGNvbnN0Ci17Ci0gICAgcHJpbnRmKCJDb250ZW50LVR5
cGU6IHRleHQvcGxhaW5cbiIpOwotfQotCi12b2lkIFRlc3RFdmVudFByaW50ZXI6OmhhbmRsZVRl
eHRGb290ZXIoKSBjb25zdAotewotICAgIHByaW50ZigiI0VPRlxuIik7Ci19Ci0KLXZvaWQgVGVz
dEV2ZW50UHJpbnRlcjo6aGFuZGxlQXVkaW8oY29uc3Qgdm9pZCogYXVkaW9EYXRhLCBzaXplX3Qg
YXVkaW9TaXplKSBjb25zdAotewotICAgIHByaW50ZigiQ29udGVudC1UeXBlOiBhdWRpby93YXZc
biIpOwotICAgIGhhbmRsZUJpbmFyeShhdWRpb0RhdGEsIGF1ZGlvU2l6ZSk7Ci19Ci0KLXZvaWQg
VGVzdEV2ZW50UHJpbnRlcjo6aGFuZGxlQXVkaW9Gb290ZXIoKSBjb25zdAotewotICAgIHByaW50
ZigiI0VPRlxuIik7Ci0gICAgZnByaW50ZihzdGRlcnIsICIjRU9GXG4iKTsKLX0KLQotdm9pZCBU
ZXN0RXZlbnRQcmludGVyOjpoYW5kbGVJbWFnZShjb25zdCBjaGFyKiBhY3R1YWxIYXNoLCBjb25z
dCBjaGFyKiBleHBlY3RlZEhhc2gsIGNvbnN0IHZvaWQqIGltYWdlRGF0YSwgc2l6ZV90IGltYWdl
U2l6ZSkgY29uc3QKLXsKLSAgICBBU1NFUlQoYWN0dWFsSGFzaCk7Ci0gICAgcHJpbnRmKCJcbkFj
dHVhbEhhc2g6ICVzXG4iLCBhY3R1YWxIYXNoKTsKLSAgICBpZiAoZXhwZWN0ZWRIYXNoICYmIGV4
cGVjdGVkSGFzaFswXSkKLSAgICAgICAgcHJpbnRmKCJcbkV4cGVjdGVkSGFzaDogJXNcbiIsIGV4
cGVjdGVkSGFzaCk7Ci0gICAgaWYgKGltYWdlRGF0YSAmJiBpbWFnZVNpemUpIHsKLSAgICAgICAg
cHJpbnRmKCJDb250ZW50LVR5cGU6IGltYWdlL3BuZ1xuIik7Ci0gICAgICAgIGhhbmRsZUJpbmFy
eShpbWFnZURhdGEsIGltYWdlU2l6ZSk7Ci0gICAgfQotfQotCi12b2lkIFRlc3RFdmVudFByaW50
ZXI6OmhhbmRsZVRlc3RGb290ZXIoYm9vbCkgY29uc3QKLXsKLSAgICBwcmludGYoIiNFT0ZcbiIp
OwotICAgIGZwcmludGYoc3RkZXJyLCAiI0VPRlxuIik7Ci19Ci0KLXZvaWQgVGVzdEV2ZW50UHJp
bnRlcjo6aGFuZGxlQmluYXJ5KGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKSBjb25zdAot
ewotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjQ7Ci0gICAgaWYgKG1fZW5jb2RlQmluYXJ5KSB7Ci0g
ICAgICAgIGJhc2U2NEVuY29kZShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksIHNpemUs
IGJhc2U2NCwgQmFzZTY0SW5zZXJ0TEZzKTsKLSAgICAgICAgZGF0YSA9IGJhc2U2NC5kYXRhKCk7
Ci0gICAgICAgIHNpemUgPSBiYXNlNjQuc2l6ZSgpOwotICAgICAgICBwcmludGYoIkNvbnRlbnQt
VHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NFxuIik7Ci0gICAgfQotICAgIC8vIFByaW50ZiBmb3Jt
YXR0aW5nIGZvciBzaXplX3Qgb24gMzItYml0LCA2NC1iaXQsIGFuZCBvbiBXaW5kb3dzIGlzIGhh
cmQgc28ganVzdCBjYXN0IHRvIGFuIGludC4KLSAgICBwcmludGYoIkNvbnRlbnQtTGVuZ3RoOiAl
ZFxuIiwgc3RhdGljX2Nhc3Q8aW50PihzaXplKSk7Ci0gICAgaWYgKGZ3cml0ZShkYXRhLCAxLCBz
aXplLCBzdGRvdXQpICE9IHNpemUpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJTaG9ydCB3
cml0ZSB0byBzdGRvdXQuXG4iKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci19CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0RXZlbnRQcmludGVyLmggYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0RXZlbnRQcmludGVyLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxYTdlMmRjZDRjMDcyZGMzNGU0NjkyZmY3NTdlZmZkMWEx
MThmZWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdEV2ZW50UHJpbnRlci5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVGVzdEV2ZW50UHJpbnRlcl9oCi0jZGVmaW5lIFRl
c3RFdmVudFByaW50ZXJfaAotCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotY2xhc3Mg
VGVzdEV2ZW50UHJpbnRlciB7Ci1wdWJsaWM6Ci0gICAgVGVzdEV2ZW50UHJpbnRlcigpOwotICAg
IH5UZXN0RXZlbnRQcmludGVyKCk7Ci0gICAgdm9pZCBoYW5kbGVUZXN0SGVhZGVyKGNvbnN0IGNo
YXIqIHVybCkgY29uc3Q7Ci0gICAgdm9pZCBoYW5kbGVUaW1lZE91dCgpIGNvbnN0OwotICAgIHZv
aWQgaGFuZGxlVGV4dEhlYWRlcigpIGNvbnN0OwotICAgIHZvaWQgaGFuZGxlVGV4dEZvb3Rlcigp
IGNvbnN0OwotICAgIHZvaWQgaGFuZGxlQXVkaW8oY29uc3Qgdm9pZCogYXVkaW9EYXRhLCBzaXpl
X3QgYXVkaW9TaXplKSBjb25zdDsKLSAgICB2b2lkIGhhbmRsZUF1ZGlvRm9vdGVyKCkgY29uc3Q7
Ci0gICAgdm9pZCBoYW5kbGVJbWFnZShjb25zdCBjaGFyKiBhY3R1YWxIYXNoLCBjb25zdCBjaGFy
KiBleHBlY3RlZEhhc2gsIGNvbnN0IHZvaWQqIGltYWdlRGF0YSwgc2l6ZV90IGltYWdlU2l6ZSkg
Y29uc3Q7Ci0gICAgdm9pZCBoYW5kbGVUZXN0Rm9vdGVyKGJvb2wgZHVtcGVkQW55dGhpbmcpIGNv
bnN0OwotCi0gICAgLy8gU2V0IGlmIGJpbmFyeSBvdXRwdXQgZGF0YSBzaG91bGQgYmUgZW5jb2Rl
ZCBpbiBiYXNlNjQuIERlZmF1bHQgaXMgb2ZmLgotICAgIHZvaWQgc2V0RW5jb2RlQmluYXJ5KGJv
b2wgZW5jb2RlQmluYXJ5KSB7IG1fZW5jb2RlQmluYXJ5ID0gZW5jb2RlQmluYXJ5OyB9Ci0KLXBy
aXZhdGU6Ci0gICAgdm9pZCBoYW5kbGVCaW5hcnkoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSBj
b25zdDsKLQotICAgIGJvb2wgbV9lbmNvZGVCaW5hcnk7Ci19OwotCi0jZW5kaWYgLy8gVGVzdEV2
ZW50UHJpbnRlcl9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdE5hdmlnYXRpb25Db250cm9sbGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYWQ2ZmNmZmY0MzY4M2JiODFhMDU0N2U1ZjJmZTZkNDk5MGJlMGZmMy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdE5hdmlnYXRp
b25Db250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJUZXN0U2hlbGwuaCIKLSNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVGVzdE5hdmlnYXRpb25FbnRyeQot
Ci1QYXNzUmVmUHRyPFRlc3ROYXZpZ2F0aW9uRW50cnk+IFRlc3ROYXZpZ2F0aW9uRW50cnk6OmNy
ZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXN0TmF2aWdhdGlvbkVudHJ5KTsK
LX0KLQotUGFzc1JlZlB0cjxUZXN0TmF2aWdhdGlvbkVudHJ5PiBUZXN0TmF2aWdhdGlvbkVudHJ5
OjpjcmVhdGUoCi0gICAgaW50IHBhZ2VJRCwgY29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0IFdlYlN0
cmluZyYgdGl0bGUsIGNvbnN0IFdlYlN0cmluZyYgdGFyZ2V0RnJhbWUpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBUZXN0TmF2aWdhdGlvbkVudHJ5KHBhZ2VJRCwgdXJsLCB0aXRsZSwgdGFy
Z2V0RnJhbWUpKTsKLX0KLQotVGVzdE5hdmlnYXRpb25FbnRyeTo6VGVzdE5hdmlnYXRpb25FbnRy
eSgpCi0gICAgOiBtX3BhZ2VJRCgtMSkgeyB9Ci0KLVRlc3ROYXZpZ2F0aW9uRW50cnk6OlRlc3RO
YXZpZ2F0aW9uRW50cnkoCi0gICAgaW50IHBhZ2VJRCwgY29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0
IFdlYlN0cmluZyYgdGl0bGUsIGNvbnN0IFdlYlN0cmluZyYgdGFyZ2V0RnJhbWUpCi0gICAgOiBt
X3BhZ2VJRChwYWdlSUQpCi0gICAgLCBtX3VybCh1cmwpCi0gICAgLCBtX3RpdGxlKHRpdGxlKQot
ICAgICwgbV90YXJnZXRGcmFtZSh0YXJnZXRGcmFtZSkgeyB9Ci0KLVRlc3ROYXZpZ2F0aW9uRW50
cnk6On5UZXN0TmF2aWdhdGlvbkVudHJ5KCkgeyB9Ci0KLXZvaWQgVGVzdE5hdmlnYXRpb25FbnRy
eTo6c2V0Q29udGVudFN0YXRlKGNvbnN0IFdlYkhpc3RvcnlJdGVtJiBzdGF0ZSkKLXsKLSAgICBt
X3N0YXRlID0gc3RhdGU7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRlc3ROYXZp
Z2F0aW9uQ29udHJvbGxlcgotCi1UZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXI6OlRlc3ROYXZpZ2F0
aW9uQ29udHJvbGxlcihOYXZpZ2F0aW9uSG9zdCogaG9zdCkKLSAgICA6IG1fcGVuZGluZ0VudHJ5
KDApCi0gICAgLCBtX2xhc3RDb21taXR0ZWRFbnRyeUluZGV4KC0xKQotICAgICwgbV9wZW5kaW5n
RW50cnlJbmRleCgtMSkKLSAgICAsIG1faG9zdChob3N0KQotICAgICwgbV9tYXhQYWdlSUQoLTEp
IHsgfQotCi1UZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXI6On5UZXN0TmF2aWdhdGlvbkNvbnRyb2xs
ZXIoKQotewotICAgIGRpc2NhcmRQZW5kaW5nRW50cnkoKTsKLX0KLQotdm9pZCBUZXN0TmF2aWdh
dGlvbkNvbnRyb2xsZXI6OnJlc2V0KCkKLXsKLSAgICBtX2VudHJpZXMuY2xlYXIoKTsKLSAgICBk
aXNjYXJkUGVuZGluZ0VudHJ5KCk7Ci0KLSAgICBtX2xhc3RDb21taXR0ZWRFbnRyeUluZGV4ID0g
LTE7Ci19Ci0KLXZvaWQgVGVzdE5hdmlnYXRpb25Db250cm9sbGVyOjpyZWxvYWQoKQotewotICAg
IC8vIEJhc2UgdGhlIG5hdmlnYXRpb24gb24gd2hlcmUgd2UgYXJlIG5vdy4uLgotICAgIGludCBj
dXJyZW50SW5kZXggPSBjdXJyZW50RW50cnlJbmRleCgpOwotCi0gICAgLy8gSWYgd2UgYXJlIG5v
IHdoZXJlLCB0aGVuIHdlIGNhbid0IHJlbG9hZC4KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFk
ZCBhIENhblJlbG9hZCBtZXRob2QuCi0gICAgaWYgKGN1cnJlbnRJbmRleCA9PSAtMSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZGlzY2FyZFBlbmRpbmdFbnRyeSgpOwotCi0gICAgbV9wZW5kaW5n
RW50cnlJbmRleCA9IGN1cnJlbnRJbmRleDsKLSAgICBuYXZpZ2F0ZVRvUGVuZGluZ0VudHJ5KHRy
dWUpOwotfQotCi12b2lkIFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6Z29Ub09mZnNldChpbnQg
b2Zmc2V0KQotewotICAgIGludCBpbmRleCA9IG1fbGFzdENvbW1pdHRlZEVudHJ5SW5kZXggKyBv
ZmZzZXQ7Ci0gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBlbnRyeUNvdW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGdvVG9JbmRleChpbmRleCk7Ci19Ci0KLXZvaWQgVGVzdE5hdmln
YXRpb25Db250cm9sbGVyOjpnb1RvSW5kZXgoaW50IGluZGV4KQotewotICAgIEFTU0VSVChpbmRl
eCA+PSAwKTsKLSAgICBBU1NFUlQoaW5kZXggPCBzdGF0aWNfY2FzdDxpbnQ+KG1fZW50cmllcy5z
aXplKCkpKTsKLQotICAgIGRpc2NhcmRQZW5kaW5nRW50cnkoKTsKLQotICAgIG1fcGVuZGluZ0Vu
dHJ5SW5kZXggPSBpbmRleDsKLSAgICBuYXZpZ2F0ZVRvUGVuZGluZ0VudHJ5KGZhbHNlKTsKLX0K
LQotdm9pZCBUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXI6OmxvYWRFbnRyeShUZXN0TmF2aWdhdGlv
bkVudHJ5KiBlbnRyeSkKLXsKLSAgICAvLyBXaGVuIG5hdmlnYXRpbmcgdG8gYSBuZXcgcGFnZSwg
d2UgZG9uJ3Qga25vdyBmb3Igc3VyZSBpZiB3ZSB3aWxsIGFjdHVhbGx5Ci0gICAgLy8gZW5kIHVw
IGxlYXZpbmcgdGhlIGN1cnJlbnQgcGFnZS4gVGhlIG5ldyBwYWdlIGxvYWQgY291bGQgZm9yIGV4
YW1wbGUKLSAgICAvLyByZXN1bHQgaW4gYSBkb3dubG9hZCBvciBhICdubyBjb250ZW50JyByZXNw
b25zZSAoZS5nLiwgYSBtYWlsdG86IFVSTCkuCi0gICAgZGlzY2FyZFBlbmRpbmdFbnRyeSgpOwot
ICAgIG1fcGVuZGluZ0VudHJ5ID0gZW50cnk7Ci0gICAgbmF2aWdhdGVUb1BlbmRpbmdFbnRyeShm
YWxzZSk7Ci19Ci0KLQotVGVzdE5hdmlnYXRpb25FbnRyeSogVGVzdE5hdmlnYXRpb25Db250cm9s
bGVyOjpsYXN0Q29tbWl0dGVkRW50cnkoKSBjb25zdAotewotICAgIGlmIChtX2xhc3RDb21taXR0
ZWRFbnRyeUluZGV4ID09IC0xKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9lbnRy
aWVzW21fbGFzdENvbW1pdHRlZEVudHJ5SW5kZXhdLmdldCgpOwotfQotCi1UZXN0TmF2aWdhdGlv
bkVudHJ5KiBUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXI6OmFjdGl2ZUVudHJ5KCkgY29uc3QKLXsK
LSAgICBUZXN0TmF2aWdhdGlvbkVudHJ5KiBlbnRyeSA9IG1fcGVuZGluZ0VudHJ5LmdldCgpOwot
ICAgIGlmICghZW50cnkpCi0gICAgICAgIGVudHJ5ID0gbGFzdENvbW1pdHRlZEVudHJ5KCk7Ci0g
ICAgcmV0dXJuIGVudHJ5OwotfQotCi1pbnQgVGVzdE5hdmlnYXRpb25Db250cm9sbGVyOjpjdXJy
ZW50RW50cnlJbmRleCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcGVuZGluZ0VudHJ5SW5kZXggIT0g
LTEpCi0gICAgICAgIHJldHVybiBtX3BlbmRpbmdFbnRyeUluZGV4OwotICAgIHJldHVybiBtX2xh
c3RDb21taXR0ZWRFbnRyeUluZGV4OwotfQotCi0KLVRlc3ROYXZpZ2F0aW9uRW50cnkqIFRlc3RO
YXZpZ2F0aW9uQ29udHJvbGxlcjo6ZW50cnlBdEluZGV4KGludCBpbmRleCkgY29uc3QKLXsKLSAg
ICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGVudHJ5Q291bnQoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIG1fZW50cmllc1tpbmRleF0uZ2V0KCk7Ci19Ci0KLVRlc3ROYXZpZ2F0
aW9uRW50cnkqIFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6ZW50cnlXaXRoUGFnZUlEKGludDMy
X3QgcGFnZUlEKSBjb25zdAotewotICAgIGludCBpbmRleCA9IGVudHJ5SW5kZXhXaXRoUGFnZUlE
KHBhZ2VJRCk7Ci0gICAgcmV0dXJuIChpbmRleCAhPSAtMSkgPyBtX2VudHJpZXNbaW5kZXhdLmdl
dCgpIDogMDsKLX0KLQotdm9pZCBUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXI6OmRpZE5hdmlnYXRl
VG9FbnRyeShUZXN0TmF2aWdhdGlvbkVudHJ5KiBlbnRyeSkKLXsKLSAgICAvLyBJZiB0aGUgZW50
cnkgaXMgdGhhdCBvZiBhIHBhZ2Ugd2l0aCBQYWdlSUQgbGFyZ2VyIHRoYW4gYW55IHRoaXMgVGFi
IGhhcwotICAgIC8vIHNlZW4gYmVmb3JlLCB0aGVuIGNvbnNpZGVyIGl0IGEgbmV3IG5hdmlnYXRp
b24uCi0gICAgaWYgKGVudHJ5LT5wYWdlSUQoKSA+IG1heFBhZ2VJRCgpKSB7Ci0gICAgICAgIGlu
c2VydEVudHJ5KGVudHJ5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIE90aGVy
d2lzZSwgd2UganVzdCBuZWVkIHRvIHVwZGF0ZSBhbiBleGlzdGluZyBlbnRyeSB3aXRoIG1hdGNo
aW5nIFBhZ2VJRC4KLSAgICAvLyBJZiB0aGUgZXhpc3RpbmcgZW50cnkgY29ycmVzcG9uZHMgdG8g
dGhlIGVudHJ5IHdoaWNoIGlzIHBlbmRpbmcsIHRoZW4gd2UKLSAgICAvLyBtdXN0IHVwZGF0ZSB0
aGUgY3VycmVudCBlbnRyeSBpbmRleCBhY2NvcmRpbmdseS4gV2hlbiBuYXZpZ2F0aW5nIHRvIHRo
ZQotICAgIC8vIHNhbWUgVVJMLCBhIG5ldyBQYWdlSUQgaXMgbm90IGNyZWF0ZWQuCi0KLSAgICBp
bnQgZXhpc3RpbmdFbnRyeUluZGV4ID0gZW50cnlJbmRleFdpdGhQYWdlSUQoZW50cnktPnBhZ2VJ
RCgpKTsKLSAgICBUZXN0TmF2aWdhdGlvbkVudHJ5KiBleGlzdGluZ0VudHJ5ID0gKGV4aXN0aW5n
RW50cnlJbmRleCAhPSAtMSkgPwotICAgICAgICBtX2VudHJpZXNbZXhpc3RpbmdFbnRyeUluZGV4
XS5nZXQoKSA6IDA7Ci0gICAgaWYgKCFleGlzdGluZ0VudHJ5KSB7Ci0gICAgICAgIC8vIE5vIGV4
aXN0aW5nIGVudHJ5LCB0aGVuIHNpbXBseSBpZ25vcmUgdGhpcyBuYXZpZ2F0aW9uIQotICAgIH0g
ZWxzZSBpZiAoZXhpc3RpbmdFbnRyeSA9PSBtX3BlbmRpbmdFbnRyeS5nZXQoKSkgewotICAgICAg
ICAvLyBUaGUgZ2l2ZW4gZW50cnkgbWlnaHQgcHJvdmlkZSBhIG5ldyBVUkwuLi4gZS5nLiwgbmF2
aWdhdGluZyBiYWNrIHRvIGEKLSAgICAgICAgLy8gcGFnZSBpbiBzZXNzaW9uIGhpc3RvcnkgY291
bGQgaGF2ZSByZXN1bHRlZCBpbiBhIG5ldyBjbGllbnQgcmVkaXJlY3QuCi0gICAgICAgIGV4aXN0
aW5nRW50cnktPnNldFVSTChlbnRyeS0+VVJMKCkpOwotICAgICAgICBleGlzdGluZ0VudHJ5LT5z
ZXRDb250ZW50U3RhdGUoZW50cnktPmNvbnRlbnRTdGF0ZSgpKTsKLSAgICAgICAgbV9sYXN0Q29t
bWl0dGVkRW50cnlJbmRleCA9IG1fcGVuZGluZ0VudHJ5SW5kZXg7Ci0gICAgICAgIG1fcGVuZGlu
Z0VudHJ5SW5kZXggPSAtMTsKLSAgICAgICAgbV9wZW5kaW5nRW50cnkuY2xlYXIoKTsKLSAgICB9
IGVsc2UgaWYgKG1fcGVuZGluZ0VudHJ5ICYmIG1fcGVuZGluZ0VudHJ5LT5wYWdlSUQoKSA9PSAt
MQotICAgICAgICAgICAgICAgJiYgR1VSTChtX3BlbmRpbmdFbnRyeS0+VVJMKCkpID09IEdVUkwo
ZXhpc3RpbmdFbnRyeS0+VVJMKCkuc3BlYygpKSkgewotICAgICAgICAvLyBOb3QgYSBuZXcgbmF2
aWdhdGlvbgotICAgICAgICBkaXNjYXJkUGVuZGluZ0VudHJ5KCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgLy8gVGhlIGdpdmVuIGVudHJ5IG1pZ2h0IHByb3ZpZGUgYSBuZXcgVVJMLi4uIGUuZy4s
IG5hdmlnYXRpbmcgdG8gYSBwYWdlCi0gICAgICAgIC8vIG1pZ2h0IHJlc3VsdCBpbiBhIGNsaWVu
dCByZWRpcmVjdCwgd2hpY2ggc2hvdWxkIG92ZXJyaWRlIHRoZSBVUkwgb2YgdGhlCi0gICAgICAg
IC8vIGV4aXN0aW5nIGVudHJ5LgotICAgICAgICBleGlzdGluZ0VudHJ5LT5zZXRVUkwoZW50cnkt
PlVSTCgpKTsKLSAgICAgICAgZXhpc3RpbmdFbnRyeS0+c2V0Q29udGVudFN0YXRlKGVudHJ5LT5j
b250ZW50U3RhdGUoKSk7Ci0KLSAgICAgICAgLy8gVGhlIG5hdmlnYXRpb24gY291bGQgaGF2ZSBi
ZWVuIGlzc3VlZCBieSB0aGUgcmVuZGVyZXIsIHNvIGJlIHN1cmUgdGhhdAotICAgICAgICAvLyB3
ZSB1cGRhdGUgb3VyIGN1cnJlbnQgaW5kZXguCi0gICAgICAgIG1fbGFzdENvbW1pdHRlZEVudHJ5
SW5kZXggPSBleGlzdGluZ0VudHJ5SW5kZXg7Ci0gICAgfQotCi0gICAgdXBkYXRlTWF4UGFnZUlE
KCk7Ci19Ci0KLXZvaWQgVGVzdE5hdmlnYXRpb25Db250cm9sbGVyOjpkaXNjYXJkUGVuZGluZ0Vu
dHJ5KCkKLXsKLSAgICBtX3BlbmRpbmdFbnRyeS5jbGVhcigpOwotICAgIG1fcGVuZGluZ0VudHJ5
SW5kZXggPSAtMTsKLX0KLQotdm9pZCBUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXI6Omluc2VydEVu
dHJ5KFRlc3ROYXZpZ2F0aW9uRW50cnkqIGVudHJ5KQotewotICAgIGRpc2NhcmRQZW5kaW5nRW50
cnkoKTsKLQotICAgIC8vIFBydW5lIGFueSBlbnRyeSB3aGljaCBhcmUgaW4gZnJvbnQgb2YgdGhl
IGN1cnJlbnQgZW50cnkKLSAgICBpbnQgY3VycmVudFNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KG1f
ZW50cmllcy5zaXplKCkpOwotICAgIGlmIChjdXJyZW50U2l6ZSA+IDApIHsKLSAgICAgICAgd2hp
bGUgKG1fbGFzdENvbW1pdHRlZEVudHJ5SW5kZXggPCAoY3VycmVudFNpemUgLSAxKSkgewotICAg
ICAgICAgICAgbV9lbnRyaWVzLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIGN1cnJlbnRTaXpl
LS07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2VudHJpZXMuYXBwZW5kKFJlZlB0cjxUZXN0
TmF2aWdhdGlvbkVudHJ5PihlbnRyeSkpOwotICAgIG1fbGFzdENvbW1pdHRlZEVudHJ5SW5kZXgg
PSBzdGF0aWNfY2FzdDxpbnQ+KG1fZW50cmllcy5zaXplKCkpIC0gMTsKLSAgICB1cGRhdGVNYXhQ
YWdlSUQoKTsKLX0KLQotaW50IFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6ZW50cnlJbmRleFdp
dGhQYWdlSUQoaW50MzIgcGFnZUlEKSBjb25zdAotewotICAgIGZvciAoaW50IGkgPSBzdGF0aWNf
Y2FzdDxpbnQ+KG1fZW50cmllcy5zaXplKCkpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAg
aWYgKG1fZW50cmllc1tpXS0+cGFnZUlEKCkgPT0gcGFnZUlEKQotICAgICAgICAgICAgcmV0dXJu
IGk7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotdm9pZCBUZXN0TmF2aWdhdGlvbkNvbnRy
b2xsZXI6Om5hdmlnYXRlVG9QZW5kaW5nRW50cnkoYm9vbCByZWxvYWQpCi17Ci0gICAgLy8gRm9y
IHNlc3Npb24gaGlzdG9yeSBuYXZpZ2F0aW9ucyBvbmx5IHRoZSBwZW5kaW5nX2VudHJ5X2luZGV4
XyBpcyBzZXQuCi0gICAgaWYgKCFtX3BlbmRpbmdFbnRyeSkgewotICAgICAgICBBU1NFUlQobV9w
ZW5kaW5nRW50cnlJbmRleCAhPSAtMSk7Ci0gICAgICAgIG1fcGVuZGluZ0VudHJ5ID0gbV9lbnRy
aWVzW21fcGVuZGluZ0VudHJ5SW5kZXhdOwotICAgIH0KLQotICAgIGlmIChtX2hvc3QtPm5hdmln
YXRlKCptX3BlbmRpbmdFbnRyeS5nZXQoKSwgcmVsb2FkKSkgewotICAgICAgICAvLyBOb3RlOiB0
aGlzIGlzIHJlZHVuZGFudCBpZiBuYXZpZ2F0aW9uIGNvbXBsZXRlZCBzeW5jaHJvbm91c2x5IGJl
Y2F1c2UKLSAgICAgICAgLy8gRGlkTmF2aWdhdGVUb0VudHJ5IGNhbGwgdGhpcyBhcyB3ZWxsLgot
ICAgICAgICB1cGRhdGVNYXhQYWdlSUQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZGlzY2FyZFBl
bmRpbmdFbnRyeSgpOwotfQotCi12b2lkIFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6dXBkYXRl
TWF4UGFnZUlEKCkKLXsKLSAgICBUZXN0TmF2aWdhdGlvbkVudHJ5KiBlbnRyeSA9IGFjdGl2ZUVu
dHJ5KCk7Ci0gICAgaWYgKGVudHJ5KQotICAgICAgICBtX21heFBhZ2VJRCA9IG1heChtX21heFBh
Z2VJRCwgZW50cnktPnBhZ2VJRCgpKTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3ROYXZpZ2F0aW9uQ29udHJvbGxlci5oIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdE5hdmlnYXRpb25Db250cm9sbGVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDE0NWZjNTJhNDk5YmIwODM1NTk1OWI4OGJmYzkwMDliZDZiZjA0MDgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdE5hdmlnYXRpb25Db250cm9sbGVyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwyMTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVGVzdE5hdmlnYXRpb25Db250cm9sbGVyX2gK
LSNkZWZpbmUgVGVzdE5hdmlnYXRpb25Db250cm9sbGVyX2gKLQotI2luY2x1ZGUgIldlYkRhdGFT
b3VyY2UuaCIKLSNpbmNsdWRlICJXZWJIaXN0b3J5SXRlbS5oIgotI2luY2x1ZGUgIndlYmtpdC9z
dXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5oPgot
I2luY2x1ZGUgPHB1YmxpYy9XZWJVUkwuaD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi0vLyBBc3NvY2lhdGVkIHdpdGggYnJvd3Nlci1pbml0YXRlZCBuYXZpZ2F0
aW9ucyB0byBob2xkIHRyYWNraW5nIGRhdGEuCi1jbGFzcyBUZXN0U2hlbGxFeHRyYURhdGEgOiBw
dWJsaWMgV2ViS2l0OjpXZWJEYXRhU291cmNlOjpFeHRyYURhdGEgewotcHVibGljOgotICAgIFRl
c3RTaGVsbEV4dHJhRGF0YShpbnQzMl90IHBlbmRpbmdQYWdlSUQpCi0gICAgICAgIDogcGVuZGlu
Z1BhZ2VJRChwZW5kaW5nUGFnZUlEKQotICAgICAgICAsIHJlcXVlc3RDb21taXR0ZWQoZmFsc2Up
IHsgfQotCi0gICAgLy8gQ29udGFpbnMgdGhlIHBhZ2VfaWQgZm9yIHRoaXMgbmF2aWdhdGlvbiBv
ciAtMSBpZiB0aGVyZSBpcyBub25lIHlldC4KLSAgICBpbnQzMl90IHBlbmRpbmdQYWdlSUQ7Ci0K
LSAgICAvLyBUcnVlIGlmIHdlIGhhdmUgYWxyZWFkeSBwcm9jZXNzZWQgdGhlICJEaWRDb21taXRM
b2FkIiBldmVudCBmb3IgdGhpcwotICAgIC8vIHJlcXVlc3QuIFVzZWQgYnkgc2Vzc2lvbiBoaXN0
b3J5LgotICAgIGJvb2wgcmVxdWVzdENvbW1pdHRlZDsKLX07Ci0KLS8vIFN0b3JlcyBvbmUgYmFj
ay9mb3J3YXJkIG5hdmlnYXRpb24gc3RhdGUgZm9yIHRoZSB0ZXN0IHNoZWxsLgotY2xhc3MgVGVz
dE5hdmlnYXRpb25FbnRyeTogcHVibGljIFJlZkNvdW50ZWQ8VGVzdE5hdmlnYXRpb25FbnRyeT4g
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRlc3ROYXZpZ2F0aW9uRW50cnk+IGNy
ZWF0ZSgpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRlc3ROYXZpZ2F0aW9uRW50cnk+IGNyZWF0
ZSgKLSAgICAgICAgaW50IHBhZ2VJRCwKLSAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJVUkwmLAot
ICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgdGl0bGUsCi0gICAgICAgIGNvbnN0IFdl
YktpdDo6V2ViU3RyaW5nJiB0YXJnZXRGcmFtZSk7Ci0KLSAgICAvLyBWaXJ0dWFsIHRvIGFsbG93
IHRlc3Rfc2hlbGwgdG8gZXh0ZW5kIHRoZSBjbGFzcy4KLSAgICB2aXJ0dWFsIH5UZXN0TmF2aWdh
dGlvbkVudHJ5KCk7Ci0KLSAgICAvLyBTZXQgLyBHZXQgdGhlIFVSSQotICAgIHZvaWQgc2V0VVJM
KGNvbnN0IFdlYktpdDo6V2ViVVJMJiB1cmwpIHsgbV91cmwgPSB1cmw7IH0KLSAgICBjb25zdCBX
ZWJLaXQ6OldlYlVSTCYgVVJMKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KLQotICAgIC8vIFNl
dCAvIEdldCB0aGUgdGl0bGUKLSAgICB2b2lkIHNldFRpdGxlKGNvbnN0IFdlYktpdDo6V2ViU3Ry
aW5nJiB0aXRsZSkgeyBtX3RpdGxlID0gdGl0bGU7IH0KLSAgICBjb25zdCBXZWJLaXQ6OldlYlN0
cmluZyYgdGl0bGUoKSBjb25zdCB7IHJldHVybiBtX3RpdGxlOyB9Ci0KLSAgICAvLyBTZXQgLyBH
ZXQgYSBzdGF0ZS4KLSAgICB2b2lkIHNldENvbnRlbnRTdGF0ZShjb25zdCBXZWJLaXQ6OldlYkhp
c3RvcnlJdGVtJik7Ci0gICAgY29uc3QgV2ViS2l0OjpXZWJIaXN0b3J5SXRlbSYgY29udGVudFN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQotCi0gICAgLy8gR2V0IHRoZSBwYWdlIGlk
IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRhYidzIHN0YXRlLgotICAgIHZvaWQgc2V0UGFnZUlEKGlu
dCBwYWdlSUQpIHsgbV9wYWdlSUQgPSBwYWdlSUQ7IH0KLSAgICBpbnQzMl90IHBhZ2VJRCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFnZUlEOyB9Ci0KLSAgICBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYg
dGFyZ2V0RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEZyYW1lOyB9Ci0KLXByaXZhdGU6
Ci0gICAgVGVzdE5hdmlnYXRpb25FbnRyeSgpOwotICAgIFRlc3ROYXZpZ2F0aW9uRW50cnkoaW50
IHBhZ2VJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViVVJMJiwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiB0aXRsZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiB0YXJnZXRG
cmFtZSk7Ci0KLSAgICAvLyBEZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSB0aGF0IHRoZSB0YWIg
cmVwcmVzZW50cy4gVGhpcyBpcyBub3QgcmVsZXZhbnQKLSAgICAvLyBmb3IgYWxsIHRhYiBjb250
ZW50cyB0eXBlcy4KLSAgICBpbnQzMl90IG1fcGFnZUlEOwotCi0gICAgV2ViS2l0OjpXZWJVUkwg
bV91cmw7Ci0gICAgV2ViS2l0OjpXZWJTdHJpbmcgbV90aXRsZTsKLSAgICBXZWJLaXQ6OldlYkhp
c3RvcnlJdGVtIG1fc3RhdGU7Ci0gICAgV2ViS2l0OjpXZWJTdHJpbmcgbV90YXJnZXRGcmFtZTsK
LX07Ci0KLWNsYXNzIE5hdmlnYXRpb25Ib3N0IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wg
bmF2aWdhdGUoY29uc3QgVGVzdE5hdmlnYXRpb25FbnRyeSYsIGJvb2wgcmVsb2FkKSA9IDA7Ci19
OwotCi0vLyBUZXN0IHNoZWxsJ3MgTmF2aWdhdGlvbkNvbnRyb2xsZXIuIFRoZSBnb2FsIGlzIHRv
IGJlIGFzIGNsb3NlIHRvIHRoZSBDaHJvbWUKLS8vIHZlcnNpb24gYXMgcG9zc2libGUuCi1jbGFz
cyBUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRl
c3ROYXZpZ2F0aW9uQ29udHJvbGxlcik7Ci1wdWJsaWM6Ci0gICAgVGVzdE5hdmlnYXRpb25Db250
cm9sbGVyKE5hdmlnYXRpb25Ib3N0Kik7Ci0gICAgflRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcigp
OwotCi0gICAgdm9pZCByZXNldCgpOwotCi0gICAgLy8gQ2F1c2VzIHRoZSBjb250cm9sbGVyIHRv
IHJlbG9hZCB0aGUgY3VycmVudCAob3IgcGVuZGluZykgZW50cnkuCi0gICAgdm9pZCByZWxvYWQo
KTsKLQotICAgIC8vIENhdXNlcyB0aGUgY29udHJvbGxlciB0byBnbyB0byB0aGUgc3BlY2lmaWVk
IG9mZnNldCBmcm9tIGN1cnJlbnQuIERvZXMKLSAgICAvLyBub3RoaW5nIGlmIG91dCBvZiBib3Vu
ZHMuCi0gICAgdm9pZCBnb1RvT2Zmc2V0KGludCk7Ci0KLSAgICAvLyBDYXVzZXMgdGhlIGNvbnRy
b2xsZXIgdG8gZ28gdG8gdGhlIHNwZWNpZmllZCBpbmRleC4KLSAgICB2b2lkIGdvVG9JbmRleChp
bnQpOwotCi0gICAgLy8gQ2F1c2VzIHRoZSBjb250cm9sbGVyIHRvIGxvYWQgdGhlIHNwZWNpZmll
ZCBlbnRyeS4KLSAgICAvLyBOT1RFOiBEbyBub3QgcGFzcyBhbiBlbnRyeSB0aGF0IHRoZSBjb250
cm9sbGVyIGFscmVhZHkgb3ducyEKLSAgICB2b2lkIGxvYWRFbnRyeShUZXN0TmF2aWdhdGlvbkVu
dHJ5Kik7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBsYXN0IGNvbW1pdHRlZCBlbnRyeSwgd2hpY2gg
bWF5IGJlIG51bGwgaWYgdGhlcmUgYXJlIG5vCi0gICAgLy8gY29tbWl0dGVkIGVudHJpZXMuCi0g
ICAgVGVzdE5hdmlnYXRpb25FbnRyeSogbGFzdENvbW1pdHRlZEVudHJ5KCkgY29uc3Q7Ci0KLSAg
ICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgTmF2aWdhdGlvbkNvbnRy
b2xsZXJCYXNlLCBleGNsdWRpbmcKLSAgICAvLyB0aGUgcGVuZGluZyBlbnRyeSBpZiB0aGVyZSBp
cyBvbmUuCi0gICAgaW50IGVudHJ5Q291bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KG1fZW50cmllcy5zaXplKCkpOyB9Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBhY3RpdmUgZW50
cnksIHdoaWNoIGlzIHRoZSBwZW5kaW5nIGVudHJ5IGlmIGEgbmF2aWdhdGlvbiBpcyBpbgotICAg
IC8vIHByb2dyZXNzIG9yIHRoZSBsYXN0IGNvbW1pdHRlZCBlbnRyeSBvdGhlcndpc2UuIE5PVEU6
IFRoaXMgY2FuIGJlIDAhIQotICAgIC8vCi0gICAgLy8gSWYgeW91IGFyZSB0cnlpbmcgdG8gZ2V0
IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBOYXZpZ2F0aW9uQ29udHJvbGxlckJhc2UsCi0gICAg
Ly8gdGhpcyBpcyB0aGUgbWV0aG9kIHlvdSB3aWxsIHR5cGljYWxseSB3YW50IHRvIGNhbGwuCi0g
ICAgVGVzdE5hdmlnYXRpb25FbnRyeSogYWN0aXZlRW50cnkoKSBjb25zdDsKLQotICAgIC8vIFJl
dHVybnMgdGhlIGluZGV4IGZyb20gd2hpY2ggd2Ugd291bGQgZ28gYmFjay9mb3J3YXJkIG9yIHJl
bG9hZC4gVGhpcyBpcwotICAgIC8vIHRoZSBtX2xhc3RDb21taXR0ZWRFbnRyeUluZGV4IGlmIG1f
cGVuZGluZ0VudHJ5SW5kZXggaXMgLTEuIE90aGVyd2lzZSwKLSAgICAvLyBpdCBpcyB0aGUgbV9w
ZW5kaW5nRW50cnlJbmRleC4KLSAgICBpbnQgY3VycmVudEVudHJ5SW5kZXgoKSBjb25zdDsKLQot
ICAgIC8vIFJldHVybnMgdGhlIGVudHJ5IGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguIFJldHVybnMg
MCBpZiBvdXQgb2YgYm91bmRzLgotICAgIFRlc3ROYXZpZ2F0aW9uRW50cnkqIGVudHJ5QXRJbmRl
eChpbnQpIGNvbnN0OwotCi0gICAgLy8gUmV0dXJuIHRoZSBlbnRyeSB3aXRoIHRoZSBjb3JyZXNw
b25kaW5nIHR5cGUgYW5kIHBhZ2UgSUQsIG9yIDAgaWYKLSAgICAvLyBub3QgZm91bmQuCi0gICAg
VGVzdE5hdmlnYXRpb25FbnRyeSogZW50cnlXaXRoUGFnZUlEKGludDMyX3QpIGNvbnN0OwotCi0g
ICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3QgY29tbWl0dGVkIGVudHJ5LgotICAg
IGludCBsYXN0Q29tbWl0dGVkRW50cnlJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdENvbW1p
dHRlZEVudHJ5SW5kZXg7IH0KLQotICAgIC8vIFVzZWQgdG8gaW5mb3JtIHVzIG9mIGEgbmF2aWdh
dGlvbiBiZWluZyBjb21taXR0ZWQgZm9yIGEgdGFiLiBBbnkgZW50cnkKLSAgICAvLyBsb2NhdGVk
IGZvcndhcmQgdG8gdGhlIGN1cnJlbnQgZW50cnkgd2lsbCBiZSBkZWxldGVkLiBUaGUgbmV3IGVu
dHJ5Ci0gICAgLy8gYmVjb21lcyB0aGUgY3VycmVudCBlbnRyeS4KLSAgICB2b2lkIGRpZE5hdmln
YXRlVG9FbnRyeShUZXN0TmF2aWdhdGlvbkVudHJ5Kik7Ci0KLSAgICAvLyBVc2VkIHRvIGluZm9y
bSB1cyB0byBkaXNjYXJkIGl0cyBwZW5kaW5nIGVudHJ5LgotICAgIHZvaWQgZGlzY2FyZFBlbmRp
bmdFbnRyeSgpOwotCi1wcml2YXRlOgotICAgIC8vIEluc2VydHMgYW4gZW50cnkgYWZ0ZXIgdGhl
IGN1cnJlbnQgcG9zaXRpb24sIHJlbW92aW5nIGFsbCBlbnRyaWVzIGFmdGVyIGl0LgotICAgIC8v
IFRoZSBuZXcgZW50cnkgd2lsbCBiZWNvbWUgdGhlIGFjdGl2ZSBvbmUuCi0gICAgdm9pZCBpbnNl
cnRFbnRyeShUZXN0TmF2aWdhdGlvbkVudHJ5Kik7Ci0KLSAgICBpbnQgbWF4UGFnZUlEKCkgY29u
c3QgeyByZXR1cm4gbV9tYXhQYWdlSUQ7IH0KLSAgICB2b2lkIG5hdmlnYXRlVG9QZW5kaW5nRW50
cnkoYm9vbCByZWxvYWQpOwotCi0gICAgLy8gUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgZW50cnkg
d2l0aCB0aGUgY29ycmVzcG9uZGluZyB0eXBlIGFuZCBwYWdlIElELAotICAgIC8vIG9yIC0xIGlm
IG5vdCBmb3VuZC4KLSAgICBpbnQgZW50cnlJbmRleFdpdGhQYWdlSUQoaW50MzJfdCkgY29uc3Q7
Ci0KLSAgICAvLyBVcGRhdGVzIHRoZSBtYXggcGFnZSBJRCB3aXRoIHRoYXQgb2YgdGhlIGdpdmVu
IGVudHJ5LCBpZiBpcyBsYXJnZXIuCi0gICAgdm9pZCB1cGRhdGVNYXhQYWdlSUQoKTsKLQotICAg
IC8vIExpc3Qgb2YgTmF2aWdhdGlvbkVudHJ5IGZvciB0aGlzIHRhYgotICAgIHR5cGVkZWYgVmVj
dG9yPFJlZlB0cjxUZXN0TmF2aWdhdGlvbkVudHJ5PiA+IE5hdmlnYXRpb25FbnRyeUxpc3Q7Ci0g
ICAgdHlwZWRlZiBOYXZpZ2F0aW9uRW50cnlMaXN0OjppdGVyYXRvciBOYXZpZ2F0aW9uRW50cnlM
aXN0SXRlcmF0b3I7Ci0gICAgTmF2aWdhdGlvbkVudHJ5TGlzdCBtX2VudHJpZXM7Ci0KLSAgICAv
LyBBbiBlbnRyeSB3ZSBoYXZlbid0IGdvdHRlbiBhIHJlc3BvbnNlIGZvciB5ZXQuIFRoaXMgd2ls
bCBiZSBkaXNjYXJkZWQKLSAgICAvLyB3aGVuIHdlIG5hdmlnYXRlIGFnYWluLiBJdCdzIHVzZWQg
b25seSBzbyB3ZSBrbm93IHdoYXQgdGhlIGN1cnJlbnRseQotICAgIC8vIGRpc3BsYXllZCB0YWIg
aXMuCi0gICAgUmVmUHRyPFRlc3ROYXZpZ2F0aW9uRW50cnk+IG1fcGVuZGluZ0VudHJ5OwotCi0g
ICAgLy8gY3VycmVudGx5IHZpc2libGUgZW50cnkKLSAgICBpbnQgbV9sYXN0Q29tbWl0dGVkRW50
cnlJbmRleDsKLQotICAgIC8vIGluZGV4IG9mIHBlbmRpbmcgZW50cnkgaWYgaXQgaXMgaW4gZW50
cmllc18sIG9yIC0xIGlmIHBlbmRpbmdfZW50cnlfIGlzIGEKLSAgICAvLyBuZXcgZW50cnkgKGNy
ZWF0ZWQgYnkgTG9hZFVSTCkuCi0gICAgaW50IG1fcGVuZGluZ0VudHJ5SW5kZXg7Ci0KLSAgICBO
YXZpZ2F0aW9uSG9zdCogbV9ob3N0OwotICAgIGludCBtX21heFBhZ2VJRDsKLX07Ci0KLSNlbmRp
ZiAvLyBUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXJfaAotCmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0TmV0c2NhcGVQbHVnSW4vRm9yd2FyZGluZ0hlYWRlcnMv
V2ViS2l0L25wYXBpLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0TmV0c2Nh
cGVQbHVnSW4vRm9yd2FyZGluZ0hlYWRlcnMvV2ViS2l0L25wYXBpLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDlmYTNmZmYzYjNmYWI5YjI2OGE3Zjg5OGQzMDA1MWFkNTRlZmI0OWEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdE5ldHNjYXBlUGx1Z0luL0ZvcndhcmRpbmdIZWFkZXJz
L1dlYktpdC9ucGFwaS5oCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jaW5jbHVkZSAi
YmluZGluZ3MvbnBhcGkuaCIKLQotLy8gVGhlc2UgYXJlIGRlZmluZWQgaW4gV2ViQ29yZS9icmRp
Z2UvbnBhcGkuaCBhbmQgd2UgbmVlZCB0aGVtIG9uIExpbnV4L1dpbi4KLSNpZm5kZWYgRkFMU0UK
LSNkZWZpbmUgRkFMU0UgKDApCi0jZW5kaWYKLSNpZm5kZWYgVFJVRQotI2RlZmluZSBUUlVFICgx
KQotI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
TmV0c2NhcGVQbHVnSW4vRm9yd2FyZGluZ0hlYWRlcnMvV2ViS2l0L25wZnVuY3Rpb25zLmggYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0TmV0c2NhcGVQbHVnSW4vRm9yd2FyZGlu
Z0hlYWRlcnMvV2ViS2l0L25wZnVuY3Rpb25zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDU5YWU2NjZiOWY4NTg3ZTQ4Nzc5ZGRhMjgyYTkzOTBiNWRkNWZmMWIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdE5ldHNjYXBlUGx1Z0luL0ZvcndhcmRpbmdIZWFkZXJzL1dlYktpdC9ucGZ1
bmN0aW9ucy5oCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jaW5jbHVkZSAibnBhcGku
aCIKLSNpbmNsdWRlICJiaW5kaW5ncy9ucGZ1bmN0aW9ucy5oIgotCi0vLyBOb24tc3RhbmRhcmQg
ZXZlbnQgdHlwZXMgY2FuIGJlIHBhc3NlZCB0byBIYW5kbGVFdmVudC4KLS8vIG5wYXBpLmggdGhh
dCBjb21lcyB3aXRoIFdlYktpdC5mcmFtZXdvcmsgYWRkcyB0aGVzZSBldmVudHMuCi0jZGVmaW5l
IGdldEZvY3VzRXZlbnQgICAgICAgKG9zRXZ0ICsgMTYpCi0jZGVmaW5lIGxvc2VGb2N1c0V2ZW50
ICAgICAgKG9zRXZ0ICsgMTcpCi0jZGVmaW5lIGFkanVzdEN1cnNvckV2ZW50ICAgKG9zRXZ0ICsg
MTgpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0TmV0c2Nh
cGVQbHVnSW4vRm9yd2FyZGluZ0hlYWRlcnMvV2ViS2l0L25wcnVudGltZS5oIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdE5ldHNjYXBlUGx1Z0luL0ZvcndhcmRpbmdIZWFkZXJz
L1dlYktpdC9ucHJ1bnRpbWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk3ZDRh
ZDdjMzYzN2Y3NmViNzczOGNiZTgwNGJhZDg2MTM0ZmRhOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0TmV0c2NhcGVQbHVnSW4vRm9yd2FyZGluZ0hlYWRlcnMvV2ViS2l0L25wcnVudGltZS5oCisr
KyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgImJpbmRpbmdzL25wcnVudGltZS5o
IgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9w
dWJsaWMvV2ViUHJlZmVyZW5jZXMuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvcHVibGljL1dlYlByZWZlcmVuY2VzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGJmY2U1YWZlZWViMmRmZjY2YmQ5ZDhkZTkyMTgzMmE3N2U2ZDc2YTAuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViUHJlZmVyZW5jZXMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDExNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJQcmVmZXJlbmNlc19oCi0jZGVmaW5lIFdl
YlByZWZlcmVuY2VzX2gKLQotI2luY2x1ZGUgIlBsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJT
dHJpbmcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVVJMLmgiCi0j
aW5jbHVkZSAiV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oIgotI2luY2x1ZGUg
IldlYlRlc3RDb21tb24uaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJWaWV3Owot
fQotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLXN0cnVjdCBXRUJURVNUUlVOTkVSX0VY
UE9SVCBXZWJQcmVmZXJlbmNlcyB7Ci0gICAgV2ViS2l0OjpXZWJTdHJpbmcgc3RhbmRhcmRGb250
RmFtaWx5OwotICAgIFdlYktpdDo6V2ViU3RyaW5nIGZpeGVkRm9udEZhbWlseTsKLSAgICBXZWJL
aXQ6OldlYlN0cmluZyBzZXJpZkZvbnRGYW1pbHk7Ci0gICAgV2ViS2l0OjpXZWJTdHJpbmcgc2Fu
c1NlcmlmRm9udEZhbWlseTsKLSAgICBXZWJLaXQ6OldlYlN0cmluZyBjdXJzaXZlRm9udEZhbWls
eTsKLSAgICBXZWJLaXQ6OldlYlN0cmluZyBmYW50YXN5Rm9udEZhbWlseTsKLQotICAgIGludCBk
ZWZhdWx0Rm9udFNpemU7Ci0gICAgaW50IGRlZmF1bHRGaXhlZEZvbnRTaXplOwotICAgIGludCBt
aW5pbXVtRm9udFNpemU7Ci0gICAgaW50IG1pbmltdW1Mb2dpY2FsRm9udFNpemU7Ci0gICAgaW50
IG1pbmltdW1BY2NlbGVyYXRlZDJkQ2FudmFzU2l6ZTsKLQotICAgIGJvb2wgRE9NUGFzdGVBbGxv
d2VkOwotICAgIGJvb2wgWFNTQXVkaXRvckVuYWJsZWQ7Ci0gICAgYm9vbCBhbGxvd0Rpc3BsYXlP
Zkluc2VjdXJlQ29udGVudDsKLSAgICBib29sIGFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMczsK
LSAgICBib29sIGFsbG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50OwotICAgIGJvb2wgYXV0aG9y
QW5kVXNlclN0eWxlc0VuYWJsZWQ7Ci0gICAgV2ViS2l0OjpXZWJTdHJpbmcgZGVmYXVsdFRleHRF
bmNvZGluZ05hbWU7Ci0gICAgYm9vbCBkZXZlbG9wZXJFeHRyYXNFbmFibGVkOwotICAgIGJvb2wg
ZXhwZXJpbWVudGFsV2ViR0xFbmFibGVkOwotICAgIGJvb2wgZXhwZXJpbWVudGFsQ1NTUmVnaW9u
c0VuYWJsZWQ7Ci0gICAgYm9vbCBleHBlcmltZW50YWxDU1NHcmlkTGF5b3V0RW5hYmxlZDsKLSAg
ICBib29sIGphdmFFbmFibGVkOwotICAgIGJvb2wgamF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2Fy
ZDsKLSAgICBib29sIGphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHk7Ci0gICAg
Ym9vbCBzdXBwb3J0c011bHRpcGxlV2luZG93czsKLSAgICBib29sIGphdmFTY3JpcHRFbmFibGVk
OwotICAgIGJvb2wgbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5OwotICAgIGJvb2wgbG9jYWxTdG9y
YWdlRW5hYmxlZDsKLSAgICBib29sIG9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZDsK
LSAgICBib29sIHBsdWdpbnNFbmFibGVkOwotICAgIGJvb2wgc2hyaW5rc1N0YW5kYWxvbmVJbWFn
ZXNUb0ZpdDsKLSAgICBib29sIHRleHRBcmVhc0FyZVJlc2l6YWJsZTsKLSAgICBXZWJLaXQ6Oldl
YlVSTCB1c2VyU3R5bGVTaGVldExvY2F0aW9uOwotICAgIGJvb2wgdXNlc1BhZ2VDYWNoZTsKLSAg
ICBib29sIHBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2luczsKLSAgICBib29sIHdlYlNlY3VyaXR5RW5h
YmxlZDsKLSAgICBib29sIGFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzOwotICAgIFdl
YktpdDo6V2ViU2V0dGluZ3M6OkVkaXRpbmdCZWhhdmlvciBlZGl0aW5nQmVoYXZpb3I7Ci0gICAg
Ym9vbCB0YWJzVG9MaW5rczsKLSAgICBib29sIGh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZDsKLSAg
ICBib29sIGNhcmV0QnJvd3NpbmdFbmFibGVkOwotICAgIGJvb2wgYWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0ZvclZpZGVvRW5hYmxlZDsKLSAgICBib29sIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JG
aXhlZFBvc2l0aW9uRW5hYmxlZDsKLSAgICBib29sIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JP
dmVyZmxvd1Njcm9sbEVuYWJsZWQ7Ci0gICAgYm9vbCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5h
YmxlZDsKLSAgICBib29sIGZvcmNlQ29tcG9zaXRpbmdNb2RlOwotICAgIGJvb2wgdGhyZWFkZWRI
VE1MUGFyc2VyOwotICAgIGJvb2wgYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQ7Ci0gICAgYm9v
bCBwZXJUaWxlUGFpbnRpbmdFbmFibGVkOwotICAgIGJvb2wgYWNjZWxlcmF0ZWRBbmltYXRpb25F
bmFibGVkOwotICAgIGJvb2wgZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZDsKLSAgICBib29s
IG1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlOwotICAgIGJvb2wgbW9ja1Njcm9sbGJh
cnNFbmFibGVkOwotICAgIGJvb2wgY3NzQ3VzdG9tRmlsdGVyRW5hYmxlZDsKLSAgICBib29sIHNo
b3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uOwotICAgIGJvb2wgYXN5bmNocm9ub3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQ7Ci0gICAgYm9vbCB0b3VjaERyYWdEcm9wRW5hYmxlZDsKLQotICAgIFdl
YlByZWZlcmVuY2VzKCkgeyByZXNldCgpOyB9Ci0gICAgdm9pZCByZXNldCgpOwotICAgIHZvaWQg
YXBwbHlUbyhXZWJLaXQ6OldlYlZpZXcqKTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFdlYlByZWZl
cmVuY2VzX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvcHVibGljL1dlYlRhc2suaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvcHVibGljL1dlYlRhc2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzNiYzA5Y2MxY2VlYWFmNjFlODVjYzUzNzNjY2U2MTc5MmIxNDQ1Yy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUYXNrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgV2ViVGFza19oCi0jZGVmaW5lIFdlYlRhc2tfaAotCi0jaW5jbHVkZSAi
V2ViVGVzdENvbW1vbi5oIgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotbmFtZXNwYWNlIFdlYlRlc3RS
dW5uZXIgewotCi1jbGFzcyBXZWJUYXNrTGlzdDsKLQotLy8gV2ViVGFzayByZXByZXNlbnRzIGEg
dGFzayB3aGljaCBjYW4gcnVuIGJ5IFdlYlRlc3REZWxlZ2F0ZTo6cG9zdFRhc2soKSBvcgotLy8g
V2ViVGVzdERlbGVnYXRlOjpwb3N0RGVsYXllZFRhc2soKS4KLWNsYXNzIFdFQlRFU1RSVU5ORVJf
RVhQT1JUIFdlYlRhc2sgewotcHVibGljOgotICAgIGV4cGxpY2l0IFdlYlRhc2soV2ViVGFza0xp
c3QqKTsKLSAgICB2aXJ0dWFsIH5XZWJUYXNrKCk7Ci0KLSAgICAvLyBUaGUgbWFpbiBjb2RlIG9m
IHRoaXMgdGFzay4KLSAgICAvLyBBbiBpbXBsZW1lbnRhdGlvbiBvZiBydW4oKSBzaG91bGQgcmV0
dXJuIGltbWVkaWF0ZWx5IGlmIGNhbmNlbCgpIHdhcyBjYWxsZWQuCi0gICAgdmlydHVhbCB2b2lk
IHJ1bigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCkgPSAwOwotCi1wcm90ZWN0ZWQ6
Ci0gICAgV2ViVGFza0xpc3QqIG1fdGFza0xpc3Q7Ci19OwotCi1jbGFzcyBXRUJURVNUUlVOTkVS
X0VYUE9SVCBXZWJUYXNrTGlzdCB7Ci1wdWJsaWM6Ci0gICAgV2ViVGFza0xpc3QoKTsKLSAgICB+
V2ViVGFza0xpc3QoKTsKLSAgICB2b2lkIHJlZ2lzdGVyVGFzayhXZWJUYXNrKik7Ci0gICAgdm9p
ZCB1bnJlZ2lzdGVyVGFzayhXZWJUYXNrKik7Ci0gICAgdm9pZCByZXZva2VBbGwoKTsKLQotcHJp
dmF0ZToKLSAgICBzdGQ6OnZlY3RvcjxXZWJUYXNrKj4gbV90YXNrczsKLX07Ci0KLS8vIEEgdGFz
ayBjb250YWluaW5nIGFuIG9iamVjdCBwb2ludGVyIG9mIGNsYXNzIFQuIERlcml2ZWQgY2xhc3Nl
cyBzaG91bGQKLS8vIG92ZXJyaWRlIHJ1bklmVmFsaWQoKSB3aGljaCBpbiB0dXJuIGNhbiBzYWZl
bHkgaW52b2tlIG1ldGhvZHMgb24gdGhlCi0vLyBtX29iamVjdC4gVGhlIENsYXNzIFQgbXVzdCBo
YXZlICJXZWJUYXNrTGlzdCogdGFza0xpc3QoKSIuCi10ZW1wbGF0ZTxjbGFzcyBUPgotY2xhc3Mg
V2ViTWV0aG9kVGFzayA6IHB1YmxpYyBXZWJUYXNrIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBX
ZWJNZXRob2RUYXNrKFQqIG9iamVjdCkKLSAgICAgICAgOiBXZWJUYXNrKG9iamVjdC0+dGFza0xp
c3QoKSkKLSAgICAgICAgLCBtX29iamVjdChvYmplY3QpCi0gICAgewotICAgIH0KLQotICAgIHZp
cnR1YWwgfldlYk1ldGhvZFRhc2soKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBydW4oKQotICAg
IHsKLSAgICAgICAgaWYgKG1fb2JqZWN0KQotICAgICAgICAgICAgcnVuSWZWYWxpZCgpOwotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwoKQotICAgIHsKLSAgICAgICAgbV9vYmplY3Qg
PSAwOwotICAgICAgICBtX3Rhc2tMaXN0LT51bnJlZ2lzdGVyVGFzayh0aGlzKTsKLSAgICAgICAg
bV90YXNrTGlzdCA9IDA7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSA9
IDA7Ci0KLXByb3RlY3RlZDoKLSAgICBUKiBtX29iamVjdDsKLX07Ci0KLX0KLQotI2VuZGlmIC8v
IFdlYlRhc2tfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9wdWJsaWMvV2ViVGVzdENvbW1vbi5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdENvbW1vbi5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhMzQ0MmM2YTkzZGIxY2ZiZDQ2MjdhZTBmOGNiZTNiZDZkYjY1NzdkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RDb21tb24uaAorKysg
L2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlRlc3RDb21tb25faAotI2RlZmlu
ZSBXZWJUZXN0Q29tbW9uX2gKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIERlZmF1bHQg
Y29uZmlndXJhdGlvbgotCi0jaWYgIWRlZmluZWQoV0VCVEVTVFJVTk5FUl9JTVBMRU1FTlRBVElP
TikKLSNkZWZpbmUgV0VCVEVTVFJVTk5FUl9JTVBMRU1FTlRBVElPTiAwCi0jZW5kaWYKLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEV4cG9ydGVkIHN5bWJvbHMgbmVlZCB0byBiZSBhbm5v
dGF0ZWQgd2l0aCBXRUJURVNUUlVOTkVSX0VYUE9SVAotCi0jaWYgZGVmaW5lZChXRUJURVNUUlVO
TkVSX0RMTCkKLQotI2lmIGRlZmluZWQoV0lOMzIpCi0jaWYgV0VCVEVTVFJVTk5FUl9JTVBMRU1F
TlRBVElPTgotI2RlZmluZSBXRUJURVNUUlVOTkVSX0VYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9y
dCkKLSNlbHNlCi0jZGVmaW5lIFdFQlRFU1RSVU5ORVJfRVhQT1JUIF9fZGVjbHNwZWMoZGxsaW1w
b3J0KQotI2VuZGlmCi0KLSNlbHNlIC8vIGRlZmluZWQoV0lOMzIpCi0KLSNpZiBXRUJURVNUUlVO
TkVSX0lNUExFTUVOVEFUSU9OCi0jZGVmaW5lIFdFQlRFU1RSVU5ORVJfRVhQT1JUIF9fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCi0jZWxzZQotI2RlZmluZSBXRUJURVNUUlVO
TkVSX0VYUE9SVAotI2VuZGlmCi0KLSNlbmRpZgotCi0jZWxzZSAvLyBkZWZpbmVkKFdFQlRFU1RS
VU5ORVJfRExMKQotCi0jZGVmaW5lIFdFQlRFU1RSVU5ORVJfRVhQT1JUCi0KLSNlbmRpZgotCi0j
ZW5kaWYgLy8gV2ViVGVzdENvbW1vbl9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0RGVsZWdhdGUuaCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3REZWxlZ2F0ZS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzk3OTcyMjMwYWZhZTQ3NWU0N2QxNTM2
MmUyMjJhODQ3YzEzMjVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dl
YlRlc3REZWxlZ2F0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdl
YlRlc3REZWxlZ2F0ZV9oCi0jZGVmaW5lIFdlYlRlc3REZWxlZ2F0ZV9oCi0KLSNpbmNsdWRlICJQ
bGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViU3RyaW5nLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm0v
Y2hyb21pdW0vcHVibGljL1dlYlVSTC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtL2Nocm9taXVtL3B1
YmxpYy9XZWJWZWN0b3IuaCIKLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNkZWZpbmUgV0VCVEVTVFJV
Tk5FUl9ORVdfSElTVE9SWV9DQVBUVVJFCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2Vi
R2FtZXBhZHM7Ci1jbGFzcyBXZWJIaXN0b3J5SXRlbTsKLXN0cnVjdCBXZWJSZWN0Owotc3RydWN0
IFdlYlVSTEVycm9yOwotfQotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLXN0cnVjdCBX
ZWJQcmVmZXJlbmNlczsKLWNsYXNzIFdlYlRhc2s7Ci1jbGFzcyBXZWJUZXN0UHJveHlCYXNlOwot
Ci1jbGFzcyBXZWJUZXN0RGVsZWdhdGUgewotcHVibGljOgotICAgIC8vIFNldCBhbmQgY2xlYXIg
dGhlIGVkaXQgY29tbWFuZCB0byBleGVjdXRlIG9uIHRoZSBuZXh0IGNhbGwgdG8KLSAgICAvLyBX
ZWJWaWV3Q2xpZW50OjpoYW5kbGVDdXJyZW50S2V5Ym9hcmRFdmVudCgpLgotICAgIHZpcnR1YWwg
dm9pZCBjbGVhckVkaXRDb21tYW5kKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRFZGl0Q29t
bWFuZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKSA9
IDA7Ci0KLSAgICAvLyBTZXQgdGhlIGdhbWVwYWRzIHRvIHJldHVybiBmcm9tIFBsYXRmb3JtOjpz
YW1wbGVHYW1lcGFkcygpLgotICAgIHZpcnR1YWwgdm9pZCBzZXRHYW1lcGFkRGF0YShjb25zdCBX
ZWJLaXQ6OldlYkdhbWVwYWRzJikgPSAwOwotCi0gICAgLy8gQWRkIGEgbWVzc2FnZSB0byB0aGUg
dGV4dCBkdW1wIGZvciB0aGUgbGF5b3V0IHRlc3QuCi0gICAgdmlydHVhbCB2b2lkIHByaW50TWVz
c2FnZShjb25zdCBzdGQ6OnN0cmluZyYgbWVzc2FnZSkgPSAwOwotCi0gICAgLy8gVGhlIGRlbGVn
YXRlIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgV2ViVGFzayBvYmplY3RzIGFuZCBpcyByZXNwb25z
aWJsZQotICAgIC8vIGZvciBkZWxldGluZyB0aGVtLgotICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFz
ayhXZWJUYXNrKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0RGVsYXllZFRhc2soV2ViVGFz
ayosIGxvbmcgbG9uZyBtcykgPSAwOwotCi0gICAgLy8gUmVnaXN0ZXIgYSBuZXcgaXNvbGF0ZWQg
ZmlsZXN5c3RlbSB3aXRoIHRoZSBnaXZlbiBmaWxlcywgYW5kIHJldHVybiB0aGUKLSAgICAvLyBu
ZXcgZmlsZXN5c3RlbSBpZC4KLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViU3RyaW5nIHJlZ2lzdGVy
SXNvbGF0ZWRGaWxlU3lzdGVtKGNvbnN0IFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViU3Ry
aW5nPiYgYWJzb2x1dGVGaWxlbmFtZXMpID0gMDsKLQotICAgIC8vIEdldHMgdGhlIGN1cnJlbnQg
dGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2guCi0gICAgdmlydHVhbCBs
b25nIGxvbmcgZ2V0Q3VycmVudFRpbWVJbk1pbGxpc2Vjb25kKCkgPSAwOwotCi0gICAgLy8gQ29u
dmVydCB0aGUgcHJvdmlkZWQgcmVsYXRpdmUgcGF0aCBpbnRvIGFuIGFic29sdXRlIHBhdGguCi0g
ICAgdmlydHVhbCBXZWJLaXQ6OldlYlN0cmluZyBnZXRBYnNvbHV0ZVdlYlN0cmluZ0Zyb21VVEY4
UGF0aChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCkgPSAwOwotCi0gICAgLy8gUmVhZHMgaW4gdGhl
IGdpdmVuIGZpbGUgYW5kIHJldHVybnMgaXRzIGNvbnRlbnRzIGFzIGRhdGEgVVJMLgotICAgIHZp
cnR1YWwgV2ViS2l0OjpXZWJVUkwgbG9jYWxGaWxlVG9EYXRhVVJMKGNvbnN0IFdlYktpdDo6V2Vi
VVJMJikgPSAwOwotCi0gICAgLy8gUmVwbGFjZXMgZmlsZTovLy90bXAvTGF5b3V0VGVzdHMvIHdp
dGggdGhlIGFjdHVhbCBwYXRoIHRvIHRoZQotICAgIC8vIExheW91dFRlc3RzIGRpcmVjdG9yeS4K
LSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViVVJMIHJld3JpdGVMYXlvdXRUZXN0c1VSTChjb25zdCBz
dGQ6OnN0cmluZyYgdXRmOFVSTCkgPSAwOwotCi0gICAgLy8gTWFuYWdlcyB0aGUgc2V0dGluZ3Mg
dG8gdXNlZCBmb3IgbGF5b3V0IHRlc3RzLgotICAgIHZpcnR1YWwgV2ViUHJlZmVyZW5jZXMqIHBy
ZWZlcmVuY2VzKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVByZWZlcmVuY2VzKCkgPSAw
OwotCi0gICAgLy8gUmV0dXJucyBhIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgZ2l2ZW4gZXJyb3Iu
Ci0gICAgdmlydHVhbCBzdGQ6OnN0cmluZyBtYWtlVVJMRXJyb3JEZXNjcmlwdGlvbihjb25zdCBX
ZWJLaXQ6OldlYlVSTEVycm9yJikgPSAwOwotCi0gICAgLy8gUmVzaXplcyB0aGUgV2ViVmlldyB0
byB0aGUgZ2l2ZW4gc2l6ZS4KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpZW50V2luZG93UmVjdChj
b25zdCBXZWJLaXQ6OldlYlJlY3QmKSA9IDA7Ci0KLSAgICAvLyBPcGVucyBhbmQgY2xvc2VzIHRo
ZSBpbnNwZWN0b3IuCi0gICAgdmlydHVhbCB2b2lkIHNob3dEZXZUb29scygpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgY2xvc2VEZXZUb29scygpID0gMDsKLQotICAgIC8vIEV2YWx1YXRlIHRoZSBn
aXZlbiBzY3JpcHQgaW4gdGhlIERldlRvb2xzIGFnZW50LgotICAgIHZpcnR1YWwgdm9pZCBldmFs
dWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElELCBjb25zdCBzdGQ6OnN0cmluZyYgc2NyaXB0
KSA9IDA7Ci0KLSAgICAvLyBDb250cm9scyBXZWJTUUwgZGF0YWJhc2VzLgotICAgIHZpcnR1YWwg
dm9pZCBjbGVhckFsbERhdGFiYXNlcygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YWJh
c2VRdW90YShpbnQpID0gMDsKLQotICAgIC8vIENvbnRyb2xzIHRoZSBkZXZpY2Ugc2NhbGUgZmFj
dG9yIG9mIHRoZSBtYWluIFdlYlZpZXcgZm9yIGhpZHBpIHRlc3RzLgotICAgIHZpcnR1YWwgdm9p
ZCBzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgPSAwOwotCi0gICAgLy8gQ29udHJvbHMgd2hp
Y2ggV2ViVmlldyBzaG91bGQgYmUgZm9jdXNlZC4KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMo
V2ViVGVzdFByb3h5QmFzZSosIGJvb2wpID0gMDsKLQotICAgIC8vIENvbnRyb2xzIHdoZXRoZXIg
YWxsIGNvb2tpZXMgc2hvdWxkIGJlIGFjY2VwdGVkIG9yIHdyaXRpbmcgY29va2llcyBpbiBhCi0g
ICAgLy8gdGhpcmQtcGFydHkgY29udGV4dCBpcyBibG9ja2VkLgotICAgIHZpcnR1YWwgdm9pZCBz
ZXRBY2NlcHRBbGxDb29raWVzKGJvb2wpID0gMDsKLQotICAgIC8vIFRoZSBzYW1lIGFzIHJld3Jp
dGVMYXlvdXRUZXN0c1VSTCB1bmxlc3MgdGhlIHJlc291cmNlIGlzIGEgcGF0aCBzdGFydGluZwot
ICAgIC8vIHdpdGggL3RtcC8sIHRoZW4gcmV0dXJuIGEgZmlsZSBVUkwgdG8gYSB0ZW1wb3Jhcnkg
ZmlsZS4KLSAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIHBhdGhUb0xvY2FsUmVzb3VyY2UoY29uc3Qg
c3RkOjpzdHJpbmcmIHJlc291cmNlKSA9IDA7Ci0KLSAgICAvLyBTZXRzIHRoZSBQT1NJWCBsb2Nh
bGUgb2YgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TG9jYWxlKGNv
bnN0IHN0ZDo6c3RyaW5nJikgPSAwOwotCi0gICAgLy8gSW52b2tlZCB3aGVuIHRoZSB0ZXN0IGZp
bmlzaGVkLgotICAgIHZpcnR1YWwgdm9pZCB0ZXN0RmluaXNoZWQoKSA9IDA7Ci0KLSAgICAvLyBJ
bnZva2VkIGlmIHRoZSB0ZXN0IHRpbWVkIG91dC4KLSAgICB2aXJ0dWFsIHZvaWQgdGVzdFRpbWVk
T3V0KCkgPSAwOwotCi0gICAgLy8gSWYgdHJ1ZSwgbmV2ZXIgYWJvcnQgYSB0ZXN0IGJlY2F1c2Ug
b2YgYSB0aW1lb3V0LgotICAgIHZpcnR1YWwgYm9vbCBpc0JlaW5nRGVidWdnZWQoKSA9IDA7Ci0K
LSAgICAvLyBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgYWZ0ZXIgd2hpY2ggYSB0ZXN0IGlzIGNv
bnNpZGVyZWQgdG8gaGF2ZSB0aW1lZAotICAgIC8vIG91dC4KLSAgICB2aXJ0dWFsIGludCBsYXlv
dXRUZXN0VGltZW91dCgpID0gMDsKLQotICAgIC8vIEludm9rZWQgd2hlbiB0aGUgZW1iZWRkZXIg
c2hvdWxkIGNsb3NlIGFsbCBidXQgdGhlIG1haW4gV2ViVmlldy4KLSAgICB2aXJ0dWFsIHZvaWQg
Y2xvc2VSZW1haW5pbmdXaW5kb3dzKCkgPSAwOwotCi0gICAgLy8gUmV0dXJucyB0aGUgbGVuZ3Ro
IG9mIHRoZSBiYWNrL2ZvcndhcmQgaGlzdG9yeSBvZiB0aGUgbWFpbiBXZWJWaWV3LgotICAgIHZp
cnR1YWwgaW50IG5hdmlnYXRpb25FbnRyeUNvdW50KCkgPSAwOwotCi0gICAgLy8gVGhlIGZvbGxv
d2luZyB0cmlnZ2VyIG5hdmlnYXRpb25zIG9uIHRoZSBtYWluIFdlYlZpd2UuCi0gICAgdmlydHVh
bCB2b2lkIGdvVG9PZmZzZXQoaW50IG9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWxv
YWQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRVUkxGb3JGcmFtZShjb25zdCBXZWJLaXQ6
OldlYlVSTCYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmcmFtZU5hbWUpID0gMDsKLQotICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiByZXNvdXJjZSByZXF1ZXN0cyB0byBleHRlcm5hbCBVUkxzIHNob3VsZCBi
ZSBwZXJtaXR0ZWQuCi0gICAgdmlydHVhbCBib29sIGFsbG93RXh0ZXJuYWxQYWdlcygpID0gMDsK
LQotICAgIC8vIFJldHVybnMgdGhlIGJhY2svZm9yd2FyZCBoaXN0b3J5IGZvciB0aGUgV2ViVmll
dyBhc3NvY2lhdGVkIHdpdGggdGhlCi0gICAgLy8gZ2l2ZW4gV2ViVGVzdFByb3h5QmFzZSBhcyB3
ZWxsIGFzIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBlbnRyeS4KLSAgICB2aXJ0dWFsIHZvaWQg
Y2FwdHVyZUhpc3RvcnlGb3JXaW5kb3coV2ViVGVzdFByb3h5QmFzZSosIFdlYktpdDo6V2ViVmVj
dG9yPFdlYktpdDo6V2ViSGlzdG9yeUl0ZW0+Kiwgc2l6ZV90KiBjdXJyZW50RW50cnlJbmRleCkg
PSAwOwotfTsKLQotfQotCi0jZW5kaWYgLy8gV2ViVGVzdERlbGVnYXRlX2gKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RJ
bnRlcmZhY2VzLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1
YmxpYy9XZWJUZXN0SW50ZXJmYWNlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
OGJmZjgwZmMzNTQ5NDU4Y2MwODdhMDdlMWY4NDk3YWE3ODg5YjNiLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RJbnRlcmZhY2VzLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJUZXN0SW50ZXJmYWNlc19oCi0jZGVmaW5lIFdlYlRl
c3RJbnRlcmZhY2VzX2gKLQotI2luY2x1ZGUgIldlYlRlc3RDb21tb24uaCIKLSNpbmNsdWRlIDxt
ZW1vcnk+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViRnJhbWU7Ci1jbGFzcyBXZWJN
ZWRpYVN0cmVhbUNlbnRlcjsKLWNsYXNzIFdlYk1lZGlhU3RyZWFtQ2VudGVyQ2xpZW50OwotY2xh
c3MgV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyOwotY2xhc3MgV2ViUlRDUGVlckNvbm5lY3Rp
b25IYW5kbGVyQ2xpZW50OwotY2xhc3MgV2ViVGhlbWVFbmdpbmU7Ci1jbGFzcyBXZWJVUkw7Ci1j
bGFzcyBXZWJWaWV3OwotfQotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLWNsYXNzIFRl
c3RJbnRlcmZhY2VzOwotY2xhc3MgV2ViVGVzdERlbGVnYXRlOwotY2xhc3MgV2ViVGVzdFByb3h5
QmFzZTsKLWNsYXNzIFdlYlRlc3RSdW5uZXI7Ci0KLWNsYXNzIFdFQlRFU1RSVU5ORVJfRVhQT1JU
IFdlYlRlc3RJbnRlcmZhY2VzIHsKLXB1YmxpYzoKLSAgICBXZWJUZXN0SW50ZXJmYWNlcygpOwot
ICAgIH5XZWJUZXN0SW50ZXJmYWNlcygpOwotCi0gICAgdm9pZCBzZXRXZWJWaWV3KFdlYktpdDo6
V2ViVmlldyosIFdlYlRlc3RQcm94eUJhc2UqKTsKLSAgICB2b2lkIHNldERlbGVnYXRlKFdlYlRl
c3REZWxlZ2F0ZSopOwotICAgIHZvaWQgYmluZFRvKFdlYktpdDo6V2ViRnJhbWUqKTsKLSAgICB2
b2lkIHJlc2V0QWxsKCk7Ci0gICAgdm9pZCBzZXRUZXN0SXNSdW5uaW5nKGJvb2wpOwotICAgIHZv
aWQgY29uZmlndXJlRm9yVGVzdFdpdGhVUkwoY29uc3QgV2ViS2l0OjpXZWJVUkwmLCBib29sIGdl
bmVyYXRlUGl4ZWxzKTsKLQotICAgIFdlYlRlc3RSdW5uZXIqIHRlc3RSdW5uZXIoKTsKLSAgICBX
ZWJLaXQ6OldlYlRoZW1lRW5naW5lKiB0aGVtZUVuZ2luZSgpOwotCi0gICAgV2ViS2l0OjpXZWJN
ZWRpYVN0cmVhbUNlbnRlciogY3JlYXRlTWVkaWFTdHJlYW1DZW50ZXIoV2ViS2l0OjpXZWJNZWRp
YVN0cmVhbUNlbnRlckNsaWVudCopOwotICAgIFdlYktpdDo6V2ViUlRDUGVlckNvbm5lY3Rpb25I
YW5kbGVyKiBjcmVhdGVXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIoV2ViS2l0OjpXZWJSVENQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQqKTsKLQotI2lmIFdFQlRFU1RSVU5ORVJfSU1QTEVN
RU5UQVRJT04KLSAgICBUZXN0SW50ZXJmYWNlcyogdGVzdEludGVyZmFjZXMoKTsKLSNlbmRpZgot
Ci1wcml2YXRlOgotICAgIHN0ZDo6YXV0b19wdHI8VGVzdEludGVyZmFjZXM+IG1faW50ZXJmYWNl
czsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFdlYlRlc3RJbnRlcmZhY2VzX2gKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RQ
cm94eS5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMv
V2ViVGVzdFByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ZTFkNjA0Zjdk
OWQ1ZjQ5ZDg3ZDZmMDJmYzg4NjMwMmQwNWIwZWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9wdWJsaWMvV2ViVGVzdFByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MDQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgV2ViVGVzdFByb3h5X2gKLSNkZWZpbmUgV2ViVGVzdFByb3h5X2gKLQotI2luY2x1
ZGUgIlBsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJSZWN0LmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm0vY2hyb21pdW0vcHVibGljL1dlYlVSTEVycm9yLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm0vY2hy
b21pdW0vcHVibGljL1dlYlVSTFJlcXVlc3QuaCIKLSNpbmNsdWRlICJXZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24uaCIKLSNpbmNsdWRlICJXZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkRPTU1lc3NhZ2VFdmVudC5oIgotI2luY2x1ZGUgIldlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViRHJhZ09wZXJhdGlvbi5oIgotI2luY2x1ZGUgIldlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViRWRpdGluZ0FjdGlvbi5oIgotI2luY2x1ZGUgIldlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViSWNvblVSTC5oIgotI2luY2x1ZGUgIldlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViTmF2aWdhdGlvblBvbGljeS5oIgotI2luY2x1ZGUgIldlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViTmF2aWdhdGlvblR5cGUuaCIKLSNpbmNsdWRlICJXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJU
ZXh0QWZmaW5pdHkuaCIKLSNpbmNsdWRlICJXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlRleHRE
aXJlY3Rpb24uaCIKLSNpbmNsdWRlICJXZWJUZXN0Q29tbW9uLmgiCi0jaW5jbHVkZSA8bWFwPgot
I2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotY2xhc3MgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDsKLWNsYXNzIFdlYkNhY2hlZFVSTFJlcXVl
c3Q7Ci1jbGFzcyBXZWJEYXRhU291cmNlOwotY2xhc3MgV2ViRGV2aWNlT3JpZW50YXRpb25DbGll
bnQ7Ci1jbGFzcyBXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2s7Ci1jbGFzcyBXZWJEcmFn
RGF0YTsKLWNsYXNzIFdlYkZyYW1lOwotY2xhc3MgV2ViR2VvbG9jYXRpb25DbGllbnQ7Ci1jbGFz
cyBXZWJHZW9sb2NhdGlvbkNsaWVudE1vY2s7Ci1jbGFzcyBXZWJJbWFnZTsKLWNsYXNzIFdlYk5v
ZGU7Ci1jbGFzcyBXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI7Ci1jbGFzcyBXZWJQbHVnaW47Ci1j
bGFzcyBXZWJSYW5nZTsKLWNsYXNzIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKLWNsYXNzIFdl
YlNwZWVjaElucHV0Q29udHJvbGxlcjsKLWNsYXNzIFdlYlNwZWVjaElucHV0TGlzdGVuZXI7Ci1j
bGFzcyBXZWJTcGVlY2hSZWNvZ25pemVyOwotY2xhc3MgV2ViU3BlbGxDaGVja0NsaWVudDsKLWNs
YXNzIFdlYlN0cmluZzsKLWNsYXNzIFdlYlVSTDsKLWNsYXNzIFdlYlVSTFJlc3BvbnNlOwotY2xh
c3MgV2ViVXNlck1lZGlhQ2xpZW50OwotY2xhc3MgV2ViVmlldzsKLXN0cnVjdCBXZWJDb25zb2xl
TWVzc2FnZTsKLXN0cnVjdCBXZWJDb250ZXh0TWVudURhdGE7Ci1zdHJ1Y3QgV2ViUGx1Z2luUGFy
YW1zOwotc3RydWN0IFdlYlBvaW50Owotc3RydWN0IFdlYlNpemU7Ci1zdHJ1Y3QgV2ViV2luZG93
RmVhdHVyZXM7Ci19Ci0KLWNsYXNzIFNrQ2FudmFzOwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5l
ciB7Ci0KLWNsYXNzIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI7Ci1jbGFzcyBNb2NrV2Vi
U3BlZWNoUmVjb2duaXplcjsKLWNsYXNzIFNwZWxsQ2hlY2tDbGllbnQ7Ci1jbGFzcyBUZXN0SW50
ZXJmYWNlczsKLWNsYXNzIFdlYlRlc3REZWxlZ2F0ZTsKLWNsYXNzIFdlYlRlc3RJbnRlcmZhY2Vz
OwotY2xhc3MgV2ViVGVzdFJ1bm5lcjsKLWNsYXNzIFdlYlVzZXJNZWRpYUNsaWVudE1vY2s7Ci0K
LWNsYXNzIFdFQlRFU1RSVU5ORVJfRVhQT1JUIFdlYlRlc3RQcm94eUJhc2UgewotcHVibGljOgot
ICAgIHZvaWQgc2V0SW50ZXJmYWNlcyhXZWJUZXN0SW50ZXJmYWNlcyopOwotICAgIHZvaWQgc2V0
RGVsZWdhdGUoV2ViVGVzdERlbGVnYXRlKik7Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICBX
ZWJLaXQ6OldlYlNwZWxsQ2hlY2tDbGllbnQgKnNwZWxsQ2hlY2tDbGllbnQoKSBjb25zdDsKLQot
ICAgIHN0ZDo6c3RyaW5nIGNhcHR1cmVUcmVlKGJvb2wgZGVidWdSZW5kZXJUcmVlKTsKLSAgICBT
a0NhbnZhcyogY2FwdHVyZVBpeGVscygpOwotCi0gICAgdm9pZCBzZXRMb2dDb25zb2xlT3V0cHV0
KGJvb2wgZW5hYmxlZCk7Ci0KLSAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHByaXZhdGUgYWdhaW4u
Ci0gICAgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpOwotCi0jaWYgV0VCVEVTVFJVTk5FUl9JTVBM
RU1FTlRBVElPTgotICAgIHZvaWQgZGlzcGxheSgpOwotICAgIHZvaWQgZGlzcGxheUludmFsaWRh
dGVkUmVnaW9uKCk7Ci0gICAgdm9pZCBkaXNjYXJkQmFja2luZ1N0b3JlKCk7Ci0KLSAgICBXZWJL
aXQ6OldlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jayogZGV2aWNlT3JpZW50YXRpb25DbGll
bnRNb2NrKCk7Ci0gICAgV2ViS2l0OjpXZWJHZW9sb2NhdGlvbkNsaWVudE1vY2sqIGdlb2xvY2F0
aW9uQ2xpZW50TW9jaygpOwotICAgIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIqIHNwZWVj
aElucHV0Q29udHJvbGxlck1vY2soKTsKLSAgICBNb2NrV2ViU3BlZWNoUmVjb2duaXplciogc3Bl
ZWNoUmVjb2duaXplck1vY2soKTsKLSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgV2ViVGVzdFBy
b3h5QmFzZSgpOwotICAgIH5XZWJUZXN0UHJveHlCYXNlKCk7Ci0KLSAgICB2b2lkIGRpZEludmFs
aWRhdGVSZWN0KGNvbnN0IFdlYktpdDo6V2ViUmVjdCYpOwotICAgIHZvaWQgZGlkU2Nyb2xsUmVj
dChpbnQsIGludCwgY29uc3QgV2ViS2l0OjpXZWJSZWN0Jik7Ci0gICAgdm9pZCBzY2hlZHVsZUFu
aW1hdGlvbigpOwotICAgIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBXZWJLaXQ6OldlYlJlY3Qm
KTsKLSAgICB2b2lkIHNob3coV2ViS2l0OjpXZWJOYXZpZ2F0aW9uUG9saWN5KTsKLSAgICB2b2lk
IGRpZEF1dG9SZXNpemUoY29uc3QgV2ViS2l0OjpXZWJTaXplJik7Ci0gICAgdm9pZCBwb3N0QWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmpl
Y3QmLCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24pOwotICAgIHZvaWQgc3Rh
cnREcmFnZ2luZyhXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJEcmFnRGF0YSYs
IFdlYktpdDo6V2ViRHJhZ09wZXJhdGlvbnNNYXNrLCBjb25zdCBXZWJLaXQ6OldlYkltYWdlJiwg
Y29uc3QgV2ViS2l0OjpXZWJQb2ludCYpOwotICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNv
bnN0IFdlYktpdDo6V2ViUmFuZ2UmKTsKLSAgICBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3Qg
V2ViS2l0OjpXZWJSYW5nZSYpOwotICAgIGJvb2wgc2hvdWxkSW5zZXJ0Tm9kZShjb25zdCBXZWJL
aXQ6OldlYk5vZGUmLCBjb25zdCBXZWJLaXQ6OldlYlJhbmdlJiwgV2ViS2l0OjpXZWJFZGl0aW5n
QWN0aW9uKTsKLSAgICBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgV2ViS2l0OjpXZWJTdHJp
bmcmIHRleHQsIGNvbnN0IFdlYktpdDo6V2ViUmFuZ2UmLCBXZWJLaXQ6OldlYkVkaXRpbmdBY3Rp
b24pOwotICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBXZWJLaXQ6Oldl
YlJhbmdlJiBmcm9tUmFuZ2UsIGNvbnN0IFdlYktpdDo6V2ViUmFuZ2UmIHRvUmFuZ2UsIFdlYktp
dDo6V2ViVGV4dEFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKTsKLSAgICBib29sIHNob3Vs
ZERlbGV0ZVJhbmdlKGNvbnN0IFdlYktpdDo6V2ViUmFuZ2UmKTsKLSAgICBib29sIHNob3VsZEFw
cGx5U3R5bGUoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHN0eWxlLCBjb25zdCBXZWJLaXQ6Oldl
YlJhbmdlJik7Ci0gICAgdm9pZCBkaWRCZWdpbkVkaXRpbmcoKTsKLSAgICB2b2lkIGRpZENoYW5n
ZVNlbGVjdGlvbihib29sIGlzRW1wdHlTZWxlY3Rpb24pOwotICAgIHZvaWQgZGlkQ2hhbmdlQ29u
dGVudHMoKTsKLSAgICB2b2lkIGRpZEVuZEVkaXRpbmcoKTsKLSAgICBib29sIGNyZWF0ZVZpZXco
V2ViS2l0OjpXZWJGcmFtZSogY3JlYXRvciwgY29uc3QgV2ViS2l0OjpXZWJVUkxSZXF1ZXN0Jiwg
Y29uc3QgV2ViS2l0OjpXZWJXaW5kb3dGZWF0dXJlcyYsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5n
JiBmcmFtZU5hbWUsIFdlYktpdDo6V2ViTmF2aWdhdGlvblBvbGljeSk7Ci0gICAgV2ViS2l0OjpX
ZWJQbHVnaW4qIGNyZWF0ZVBsdWdpbihXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpX
ZWJQbHVnaW5QYXJhbXMmKTsKLSAgICB2b2lkIHNldFN0YXR1c1RleHQoY29uc3QgV2ViS2l0OjpX
ZWJTdHJpbmcmKTsKLSAgICB2b2lkIGRpZFN0b3BMb2FkaW5nKCk7Ci0gICAgdm9pZCBzaG93Q29u
dGV4dE1lbnUoV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViQ29udGV4dE1lbnVE
YXRhJik7Ci0gICAgV2ViS2l0OjpXZWJVc2VyTWVkaWFDbGllbnQqIHVzZXJNZWRpYUNsaWVudCgp
OwotICAgIHZvaWQgcHJpbnRQYWdlKFdlYktpdDo6V2ViRnJhbWUqKTsKLSAgICBXZWJLaXQ6Oldl
Yk5vdGlmaWNhdGlvblByZXNlbnRlciogbm90aWZpY2F0aW9uUHJlc2VudGVyKCk7Ci0gICAgV2Vi
S2l0OjpXZWJHZW9sb2NhdGlvbkNsaWVudCogZ2VvbG9jYXRpb25DbGllbnQoKTsKLSAgICBXZWJL
aXQ6OldlYlNwZWVjaElucHV0Q29udHJvbGxlciogc3BlZWNoSW5wdXRDb250cm9sbGVyKFdlYktp
dDo6V2ViU3BlZWNoSW5wdXRMaXN0ZW5lciopOwotICAgIFdlYktpdDo6V2ViU3BlZWNoUmVjb2du
aXplciogc3BlZWNoUmVjb2duaXplcigpOwotICAgIFdlYktpdDo6V2ViRGV2aWNlT3JpZW50YXRp
b25DbGllbnQqIGRldmljZU9yaWVudGF0aW9uQ2xpZW50KCk7Ci0gICAgYm9vbCByZXF1ZXN0UG9p
bnRlckxvY2soKTsKLSAgICB2b2lkIHJlcXVlc3RQb2ludGVyVW5sb2NrKCk7Ci0gICAgYm9vbCBp
c1BvaW50ZXJMb2NrZWQoKTsKLSAgICB2b2lkIGRpZEZvY3VzKCk7Ci0gICAgdm9pZCBkaWRCbHVy
KCk7Ci0KLSAgICB2b2lkIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV2ViS2l0OjpXZWJGcmFt
ZSosIGNvbnN0IFdlYktpdDo6V2ViVVJMJiBmcm9tLCBjb25zdCBXZWJLaXQ6OldlYlVSTCYgdG8s
IGRvdWJsZSBpbnRlcnZhbCwgZG91YmxlIGZpcmVfdGltZSk7Ci0gICAgdm9pZCBkaWRDYW5jZWxD
bGllbnRSZWRpcmVjdChXZWJLaXQ6OldlYkZyYW1lKik7Ci0gICAgdm9pZCBkaWRTdGFydFByb3Zp
c2lvbmFsTG9hZChXZWJLaXQ6OldlYkZyYW1lKik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlU2VydmVy
UmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQoV2ViS2l0OjpXZWJGcmFtZSopOwotICAgIHZvaWQg
ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZChXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpX
ZWJVUkxFcnJvciYpOwotICAgIHZvaWQgZGlkQ29tbWl0UHJvdmlzaW9uYWxMb2FkKFdlYktpdDo6
V2ViRnJhbWUqLCBib29sIGlzTmV3TmF2aWdhdGlvbik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlVGl0
bGUoV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiB0aXRsZSwgV2Vi
S2l0OjpXZWJUZXh0RGlyZWN0aW9uKTsKLSAgICB2b2lkIGRpZENoYW5nZUljb24oV2ViS2l0OjpX
ZWJGcmFtZSosIFdlYktpdDo6V2ViSWNvblVSTDo6VHlwZSk7Ci0gICAgdm9pZCBkaWRGaW5pc2hE
b2N1bWVudExvYWQoV2ViS2l0OjpXZWJGcmFtZSopOwotICAgIHZvaWQgZGlkSGFuZGxlT25sb2Fk
RXZlbnRzKFdlYktpdDo6V2ViRnJhbWUqKTsKLSAgICB2b2lkIGRpZEZhaWxMb2FkKFdlYktpdDo6
V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlVSTEVycm9yJik7Ci0gICAgdm9pZCBkaWRGaW5p
c2hMb2FkKFdlYktpdDo6V2ViRnJhbWUqKTsKLSAgICB2b2lkIGRpZENoYW5nZUxvY2F0aW9uV2l0
aGluUGFnZShXZWJLaXQ6OldlYkZyYW1lKik7Ci0gICAgdm9pZCBkaWREaXNwbGF5SW5zZWN1cmVD
b250ZW50KFdlYktpdDo6V2ViRnJhbWUqKTsKLSAgICB2b2lkIGRpZFJ1bkluc2VjdXJlQ29udGVu
dChXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJTZWN1cml0eU9yaWdpbiYsIGNv
bnN0IFdlYktpdDo6V2ViVVJMJiBpbnNlY3VyZVVSTCk7Ci0gICAgdm9pZCBkaWREZXRlY3RYU1Mo
V2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViVVJMJiBpbnNlY3VyZVVSTCwgYm9v
bCBkaWRCbG9ja0VudGlyZVBhZ2UpOwotICAgIHZvaWQgYXNzaWduSWRlbnRpZmllclRvUmVxdWVz
dChXZWJLaXQ6OldlYkZyYW1lKiwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgV2ViS2l0OjpX
ZWJVUkxSZXF1ZXN0Jik7Ci0gICAgdm9pZCB3aWxsUmVxdWVzdFJlc291cmNlKFdlYktpdDo6V2Vi
RnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYkNhY2hlZFVSTFJlcXVlc3QmKTsKLSAgICBib29sIGNh
bkhhbmRsZVJlcXVlc3QoV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViVVJMUmVx
dWVzdCYpOwotICAgIFdlYktpdDo6V2ViVVJMRXJyb3IgY2Fubm90SGFuZGxlUmVxdWVzdEVycm9y
KFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlVSTFJlcXVlc3QmKTsKLSAgICB2
b2lkIGRpZENyZWF0ZURhdGFTb3VyY2UoV2ViS2l0OjpXZWJGcmFtZSosIFdlYktpdDo6V2ViRGF0
YVNvdXJjZSopOwotICAgIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFdlYktpdDo6V2ViRnJhbWUqLCB1
bnNpZ25lZCBpZGVudGlmaWVyLCBXZWJLaXQ6OldlYlVSTFJlcXVlc3QmLCBjb25zdCBXZWJLaXQ6
OldlYlVSTFJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVS
ZXNwb25zZShXZWJLaXQ6OldlYkZyYW1lKiwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgV2Vi
S2l0OjpXZWJVUkxSZXNwb25zZSYpOwotICAgIHZvaWQgZGlkQ2hhbmdlUmVzb3VyY2VQcmlvcml0
eShXZWJLaXQ6OldlYkZyYW1lKiwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgV2ViS2l0OjpX
ZWJVUkxSZXF1ZXN0OjpQcmlvcml0eSYpOwotICAgIHZvaWQgZGlkRmluaXNoUmVzb3VyY2VMb2Fk
KFdlYktpdDo6V2ViRnJhbWUqLCB1bnNpZ25lZCBpZGVudGlmaWVyKTsKLSAgICB2b2lkIGRpZEZh
aWxSZXNvdXJjZUxvYWQoV2ViS2l0OjpXZWJGcmFtZSosIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNv
bnN0IFdlYktpdDo6V2ViVVJMRXJyb3ImKTsKLSAgICB2b2lkIHVuYWJsZVRvSW1wbGVtZW50UG9s
aWN5V2l0aEVycm9yKFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlVSTEVycm9y
Jik7Ci0gICAgdm9pZCBkaWRBZGRNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFdlYktpdDo6V2ViQ29u
c29sZU1lc3NhZ2UmLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgc291cmNlTmFtZSwgdW5zaWdu
ZWQgc291cmNlTGluZSk7Ci0gICAgdm9pZCBydW5Nb2RhbEFsZXJ0RGlhbG9nKFdlYktpdDo6V2Vi
RnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYpOwotICAgIGJvb2wgcnVuTW9kYWxDb25m
aXJtRGlhbG9nKFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYpOwot
ICAgIGJvb2wgcnVuTW9kYWxQcm9tcHREaWFsb2coV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdl
YktpdDo6V2ViU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZGVmYXVs
dFZhbHVlLCBXZWJLaXQ6OldlYlN0cmluZyogYWN0dWFsVmFsdWUpOwotICAgIGJvb2wgcnVuTW9k
YWxCZWZvcmVVbmxvYWREaWFsb2coV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2Vi
U3RyaW5nJik7Ci0gICAgV2ViS2l0OjpXZWJOYXZpZ2F0aW9uUG9saWN5IGRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb24oV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViVVJMUmVxdWVz
dCYsIFdlYktpdDo6V2ViTmF2aWdhdGlvblR5cGUsIGNvbnN0IFdlYktpdDo6V2ViTm9kZSYgb3Jp
Z2luYXRpbmdOb2RlLCBXZWJLaXQ6OldlYk5hdmlnYXRpb25Qb2xpY3kgZGVmYXVsdFBvbGljeSwg
Ym9vbCBpc1JlZGlyZWN0KTsKLSAgICBib29sIHdpbGxDaGVja0FuZERpc3BhdGNoTWVzc2FnZUV2
ZW50KFdlYktpdDo6V2ViRnJhbWUqIHNvdXJjZUZyYW1lLCBXZWJLaXQ6OldlYkZyYW1lKiB0YXJn
ZXRGcmFtZSwgV2ViS2l0OjpXZWJTZWN1cml0eU9yaWdpbiB0YXJnZXQsIFdlYktpdDo6V2ViRE9N
TWVzc2FnZUV2ZW50KTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGxvY2F0aW9uQ2hhbmdlRG9uZShX
ZWJLaXQ6OldlYkZyYW1lKik7Ci0gICAgdm9pZCBwYWludFJlY3QoY29uc3QgV2ViS2l0OjpXZWJS
ZWN0Jik7Ci0gICAgdm9pZCBwYWludEludmFsaWRhdGVkUmVnaW9uKCk7Ci0gICAgdm9pZCBwYWlu
dFBhZ2VzV2l0aEJvdW5kYXJpZXMoKTsKLSAgICBTa0NhbnZhcyogY2FudmFzKCk7Ci0gICAgdm9p
ZCBkaXNwbGF5UmVwYWludE1hc2soKTsKLQotICAgIFRlc3RJbnRlcmZhY2VzKiBtX3Rlc3RJbnRl
cmZhY2VzOwotICAgIFdlYlRlc3REZWxlZ2F0ZSogbV9kZWxlZ2F0ZTsKLQotICAgIHN0ZDo6YXV0
b19wdHI8U3BlbGxDaGVja0NsaWVudD4gbV9zcGVsbGNoZWNrOwotICAgIHN0ZDo6YXV0b19wdHI8
V2ViVXNlck1lZGlhQ2xpZW50TW9jaz4gbV91c2VyTWVkaWFDbGllbnQ7Ci0KLSAgICAvLyBQYWlu
dGluZy4KLSAgICBzdGQ6OmF1dG9fcHRyPFNrQ2FudmFzPiBtX2NhbnZhczsKLSAgICBXZWJLaXQ6
OldlYlJlY3QgbV9wYWludFJlY3Q7Ci0gICAgYm9vbCBtX2lzUGFpbnRpbmc7Ci0gICAgc3RkOjpt
YXA8dW5zaWduZWQsIHN0ZDo6c3RyaW5nPiBtX3Jlc291cmNlSWRlbnRpZmllck1hcDsKLSAgICBz
dGQ6Om1hcDx1bnNpZ25lZCwgV2ViS2l0OjpXZWJVUkxSZXF1ZXN0PiBtX3JlcXVlc3RNYXA7Ci0K
LSAgICBib29sIG1fbG9nQ29uc29sZU91dHB1dDsKLQotICAgIHN0ZDo6YXV0b19wdHI8V2ViS2l0
OjpXZWJHZW9sb2NhdGlvbkNsaWVudE1vY2s+IG1fZ2VvbG9jYXRpb25DbGllbnQ7Ci0gICAgc3Rk
OjphdXRvX3B0cjxXZWJLaXQ6OldlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jaz4gbV9kZXZp
Y2VPcmllbnRhdGlvbkNsaWVudDsKLSAgICBzdGQ6OmF1dG9fcHRyPE1vY2tXZWJTcGVlY2hSZWNv
Z25pemVyPiBtX3NwZWVjaFJlY29nbml6ZXI7Ci0gICAgc3RkOjphdXRvX3B0cjxNb2NrV2ViU3Bl
ZWNoSW5wdXRDb250cm9sbGVyPiBtX3NwZWVjaElucHV0Q29udHJvbGxlcjsKLQotcHJpdmF0ZToK
LSAgICBXZWJUZXN0UHJveHlCYXNlKFdlYlRlc3RQcm94eUJhc2UmKTsKLSAgICBXZWJUZXN0UHJv
eHlCYXNlJiBvcGVyYXRvcj0oY29uc3QgV2ViVGVzdFByb3h5QmFzZSYpOwotfTsKLQotLy8gVXNl
IHRoaXMgdGVtcGxhdGUgdG8gaW5qZWN0IG1ldGhvZHMgaW50byB5b3VyIFdlYlZpZXdDbGllbnQv
V2ViRnJhbWVDbGllbnQKLS8vIGltcGxlbWVudGF0aW9uIHJlcXVpcmVkIGZvciB0aGUgcnVubmlu
ZyBsYXlvdXQgdGVzdHMuCi10ZW1wbGF0ZTxjbGFzcyBCYXNlLCB0eXBlbmFtZSBUPgotY2xhc3Mg
V2ViVGVzdFByb3h5IDogcHVibGljIEJhc2UsIHB1YmxpYyBXZWJUZXN0UHJveHlCYXNlIHsKLXB1
YmxpYzoKLSAgICBleHBsaWNpdCBXZWJUZXN0UHJveHkoVCB0KQotICAgICAgICA6IEJhc2UodCkK
LSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+V2ViVGVzdFByb3h5KCkgeyB9Ci0KLSAgICAv
LyBXZWJWaWV3Q2xpZW50IGltcGxlbWVudGF0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBkaWRJbnZh
bGlkYXRlUmVjdChjb25zdCBXZWJLaXQ6OldlYlJlY3QmIHJlY3QpCi0gICAgewotICAgICAgICBX
ZWJUZXN0UHJveHlCYXNlOjpkaWRJbnZhbGlkYXRlUmVjdChyZWN0KTsKLSAgICAgICAgQmFzZTo6
ZGlkSW52YWxpZGF0ZVJlY3QocmVjdCk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRTY3Jv
bGxSZWN0KGludCBkeCwgaW50IGR5LCBjb25zdCBXZWJLaXQ6OldlYlJlY3QmIGNsaXBSZWN0KQot
ICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6ZGlkU2Nyb2xsUmVjdChkeCwgZHksIGNs
aXBSZWN0KTsKLSAgICAgICAgQmFzZTo6ZGlkU2Nyb2xsUmVjdChkeCwgZHksIGNsaXBSZWN0KTsK
LSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkKLSAgICB7Ci0gICAg
ICAgIFdlYlRlc3RQcm94eUJhc2U6OnNjaGVkdWxlQ29tcG9zaXRlKCk7Ci0gICAgICAgIEJhc2U6
OnNjaGVkdWxlQ29tcG9zaXRlKCk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFu
aW1hdGlvbigpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpzY2hlZHVsZUFuaW1h
dGlvbigpOwotICAgICAgICBCYXNlOjpzY2hlZHVsZUFuaW1hdGlvbigpOwotICAgIH0KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBXZWJLaXQ6OldlYlJlY3QmIHJlY3QpCi0g
ICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpzZXRXaW5kb3dSZWN0KHJlY3QpOwotICAg
ICAgICBCYXNlOjpzZXRXaW5kb3dSZWN0KHJlY3QpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQg
c2hvdyhXZWJLaXQ6OldlYk5hdmlnYXRpb25Qb2xpY3kgcG9saWN5KQotICAgIHsKLSAgICAgICAg
V2ViVGVzdFByb3h5QmFzZTo6c2hvdyhwb2xpY3kpOwotICAgICAgICBCYXNlOjpzaG93KHBvbGlj
eSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRBdXRvUmVzaXplKGNvbnN0IFdlYktpdDo6
V2ViU2l6ZSYgbmV3U2l6ZSkKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OmRpZEF1
dG9SZXNpemUobmV3U2l6ZSk7Ci0gICAgICAgIEJhc2U6OmRpZEF1dG9SZXNpemUobmV3U2l6ZSk7
Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwb3N0QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihj
b25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCwgV2ViS2l0OjpXZWJB
Y2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikKLSAgICB7Ci0gICAgICAgIFdl
YlRlc3RQcm94eUJhc2U6OnBvc3RBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKG9iamVjdCwgbm90
aWZpY2F0aW9uKTsKLSAgICAgICAgQmFzZTo6cG9zdEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24o
b2JqZWN0LCBub3RpZmljYXRpb24pOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFn
Z2luZyhXZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViS2l0OjpXZWJEcmFnRGF0YSYg
ZGF0YSwgV2ViS2l0OjpXZWJEcmFnT3BlcmF0aW9uc01hc2sgbWFzaywgY29uc3QgV2ViS2l0OjpX
ZWJJbWFnZSYgaW1hZ2UsIGNvbnN0IFdlYktpdDo6V2ViUG9pbnQmIHBvaW50KQotICAgIHsKLSAg
ICAgICAgV2ViVGVzdFByb3h5QmFzZTo6c3RhcnREcmFnZ2luZyhmcmFtZSwgZGF0YSwgbWFzaywg
aW1hZ2UsIHBvaW50KTsKLSAgICAgICAgQmFzZTo6c3RhcnREcmFnZ2luZyhmcmFtZSwgZGF0YSwg
bWFzaywgaW1hZ2UsIHBvaW50KTsKLSAgICB9Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEJlZ2lu
RWRpdGluZyhjb25zdCBXZWJLaXQ6OldlYlJhbmdlJiByYW5nZSkKLSAgICB7Ci0gICAgICAgIFdl
YlRlc3RQcm94eUJhc2U6OnNob3VsZEJlZ2luRWRpdGluZyhyYW5nZSk7Ci0gICAgICAgIHJldHVy
biBCYXNlOjpzaG91bGRCZWdpbkVkaXRpbmcocmFuZ2UpOwotICAgIH0KLSAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkRW5kRWRpdGluZyhjb25zdCBXZWJLaXQ6OldlYlJhbmdlJiByYW5nZSkKLSAgICB7
Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OnNob3VsZEVuZEVkaXRpbmcocmFuZ2UpOwotICAg
ICAgICByZXR1cm4gQmFzZTo6c2hvdWxkRW5kRWRpdGluZyhyYW5nZSk7Ci0gICAgfQotICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2RlKGNvbnN0IFdlYktpdDo6V2ViTm9kZSYgbm9kZSwg
Y29uc3QgV2ViS2l0OjpXZWJSYW5nZSYgcmFuZ2UsIFdlYktpdDo6V2ViRWRpdGluZ0FjdGlvbiBh
Y3Rpb24pCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpzaG91bGRJbnNlcnROb2Rl
KG5vZGUsIHJhbmdlLCBhY3Rpb24pOwotICAgICAgICByZXR1cm4gQmFzZTo6c2hvdWxkSW5zZXJ0
Tm9kZShub2RlLCByYW5nZSwgYWN0aW9uKTsKLSAgICB9Ci0gICAgdmlydHVhbCBib29sIHNob3Vs
ZEluc2VydFRleHQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHRleHQsIGNvbnN0IFdlYktpdDo6
V2ViUmFuZ2UmIHJhbmdlLCBXZWJLaXQ6OldlYkVkaXRpbmdBY3Rpb24gYWN0aW9uKQotICAgIHsK
LSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCByYW5nZSwg
YWN0aW9uKTsKLSAgICAgICAgcmV0dXJuIEJhc2U6OnNob3VsZEluc2VydFRleHQodGV4dCwgcmFu
Z2UsIGFjdGlvbik7Ci0gICAgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rl
ZFJhbmdlKGNvbnN0IFdlYktpdDo6V2ViUmFuZ2UmIGZyb21SYW5nZSwgY29uc3QgV2ViS2l0OjpX
ZWJSYW5nZSYgdG9SYW5nZSwgV2ViS2l0OjpXZWJUZXh0QWZmaW5pdHkgYWZmaW5pdHksIGJvb2wg
c3RpbGxTZWxlY3RpbmcpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpzaG91bGRD
aGFuZ2VTZWxlY3RlZFJhbmdlKGZyb21SYW5nZSwgdG9SYW5nZSwgYWZmaW5pdHksIHN0aWxsU2Vs
ZWN0aW5nKTsKLSAgICAgICAgcmV0dXJuIEJhc2U6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uo
ZnJvbVJhbmdlLCB0b1JhbmdlLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwotICAgIH0KLSAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgV2ViS2l0OjpXZWJSYW5nZSYg
cmFuZ2UpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpzaG91bGREZWxldGVSYW5n
ZShyYW5nZSk7Ci0gICAgICAgIHJldHVybiBCYXNlOjpzaG91bGREZWxldGVSYW5nZShyYW5nZSk7
Ci0gICAgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBcHBseVN0eWxlKGNvbnN0IFdlYktpdDo6
V2ViU3RyaW5nJiBzdHlsZSwgY29uc3QgV2ViS2l0OjpXZWJSYW5nZSYgcmFuZ2UpCi0gICAgewot
ICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpzaG91bGRBcHBseVN0eWxlKHN0eWxlLCByYW5nZSk7
Ci0gICAgICAgIHJldHVybiBCYXNlOjpzaG91bGRBcHBseVN0eWxlKHN0eWxlLCByYW5nZSk7Ci0g
ICAgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRCZWdpbkVkaXRpbmcoKQotICAgIHsKLSAgICAgICAg
V2ViVGVzdFByb3h5QmFzZTo6ZGlkQmVnaW5FZGl0aW5nKCk7Ci0gICAgICAgIEJhc2U6OmRpZEJl
Z2luRWRpdGluZygpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU2VsZWN0aW9u
KGJvb2wgaXNFbXB0eVNlbGVjdGlvbikKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6
OmRpZENoYW5nZVNlbGVjdGlvbihpc0VtcHR5U2VsZWN0aW9uKTsKLSAgICAgICAgQmFzZTo6ZGlk
Q2hhbmdlU2VsZWN0aW9uKGlzRW1wdHlTZWxlY3Rpb24pOwotICAgIH0KLSAgICB2aXJ0dWFsIHZv
aWQgZGlkQ2hhbmdlQ29udGVudHMoKQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6
ZGlkQ2hhbmdlQ29udGVudHMoKTsKLSAgICAgICAgQmFzZTo6ZGlkQ2hhbmdlQ29udGVudHMoKTsK
LSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEVuZEVkaXRpbmcoKQotICAgIHsKLSAgICAgICAg
V2ViVGVzdFByb3h5QmFzZTo6ZGlkRW5kRWRpdGluZygpOwotICAgICAgICBCYXNlOjpkaWRFbmRF
ZGl0aW5nKCk7Ci0gICAgfQotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJWaWV3KiBjcmVhdGVWaWV3
KFdlYktpdDo6V2ViRnJhbWUqIGNyZWF0b3IsIGNvbnN0IFdlYktpdDo6V2ViVVJMUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgV2ViS2l0OjpXZWJXaW5kb3dGZWF0dXJlcyYgZmVhdHVyZXMsIGNvbnN0
IFdlYktpdDo6V2ViU3RyaW5nJiBmcmFtZU5hbWUsIFdlYktpdDo6V2ViTmF2aWdhdGlvblBvbGlj
eSBwb2xpY3kpCi0gICAgewotICAgICAgICBpZiAoIVdlYlRlc3RQcm94eUJhc2U6OmNyZWF0ZVZp
ZXcoY3JlYXRvciwgcmVxdWVzdCwgZmVhdHVyZXMsIGZyYW1lTmFtZSwgcG9saWN5KSkKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gQmFzZTo6Y3JlYXRlVmlldyhjcmVhdG9y
LCByZXF1ZXN0LCBmZWF0dXJlcywgZnJhbWVOYW1lLCBwb2xpY3kpOwotICAgIH0KLSAgICBXZWJL
aXQ6OldlYlBsdWdpbiogY3JlYXRlUGx1Z2luKFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lLCBjb25z
dCBXZWJLaXQ6OldlYlBsdWdpblBhcmFtcyYgcGFyYW1zKQotICAgIHsKLSAgICAgICAgV2ViS2l0
OjpXZWJQbHVnaW4qIHBsdWdpbiA9IFdlYlRlc3RQcm94eUJhc2U6OmNyZWF0ZVBsdWdpbihmcmFt
ZSwgcGFyYW1zKTsKLSAgICAgICAgaWYgKHBsdWdpbikKLSAgICAgICAgICAgIHJldHVybiBwbHVn
aW47Ci0gICAgICAgIHJldHVybiBCYXNlOjpjcmVhdGVQbHVnaW4oZnJhbWUsIHBhcmFtcyk7Ci0g
ICAgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXNUZXh0KGNvbnN0IFdlYktpdDo6V2ViU3Ry
aW5nJiB0ZXh0KQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6c2V0U3RhdHVzVGV4
dCh0ZXh0KTsKLSAgICAgICAgQmFzZTo6c2V0U3RhdHVzVGV4dCh0ZXh0KTsKLSAgICB9Ci0gICAg
dmlydHVhbCB2b2lkIGRpZFN0b3BMb2FkaW5nKCkKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94
eUJhc2U6OmRpZFN0b3BMb2FkaW5nKCk7Ci0gICAgICAgIEJhc2U6OmRpZFN0b3BMb2FkaW5nKCk7
Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBzaG93Q29udGV4dE1lbnUoV2ViS2l0OjpXZWJGcmFt
ZSogZnJhbWUsIGNvbnN0IFdlYktpdDo6V2ViQ29udGV4dE1lbnVEYXRhJiBjb250ZXh0TWVudURh
dGEpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpzaG93Q29udGV4dE1lbnUoZnJh
bWUsIGNvbnRleHRNZW51RGF0YSk7Ci0gICAgICAgIEJhc2U6OnNob3dDb250ZXh0TWVudShmcmFt
ZSwgY29udGV4dE1lbnVEYXRhKTsKLSAgICB9Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlVzZXJN
ZWRpYUNsaWVudCogdXNlck1lZGlhQ2xpZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXZWJU
ZXN0UHJveHlCYXNlOjp1c2VyTWVkaWFDbGllbnQoKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lk
IHByaW50UGFnZShXZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSkKLSAgICB7Ci0gICAgICAgIFdlYlRl
c3RQcm94eUJhc2U6OnByaW50UGFnZShmcmFtZSk7Ci0gICAgfQotICAgIHZpcnR1YWwgV2ViS2l0
OjpXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIqIG5vdGlmaWNhdGlvblByZXNlbnRlcigpCi0gICAg
ewotICAgICAgICByZXR1cm4gV2ViVGVzdFByb3h5QmFzZTo6bm90aWZpY2F0aW9uUHJlc2VudGVy
KCk7Ci0gICAgfQotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJHZW9sb2NhdGlvbkNsaWVudCogZ2Vv
bG9jYXRpb25DbGllbnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYlRlc3RQcm94eUJhc2U6
Omdlb2xvY2F0aW9uQ2xpZW50KCk7Ci0gICAgfQotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJTcGVl
Y2hJbnB1dENvbnRyb2xsZXIqIHNwZWVjaElucHV0Q29udHJvbGxlcihXZWJLaXQ6OldlYlNwZWVj
aElucHV0TGlzdGVuZXIqIGxpc3RlbmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYlRlc3RQ
cm94eUJhc2U6OnNwZWVjaElucHV0Q29udHJvbGxlcihsaXN0ZW5lcik7Ci0gICAgfQotICAgIHZp
cnR1YWwgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyKiBzcGVlY2hSZWNvZ25pemVyKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBXZWJUZXN0UHJveHlCYXNlOjpzcGVlY2hSZWNvZ25pemVyKCk7
Ci0gICAgfQotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudCog
ZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYlRlc3RQ
cm94eUJhc2U6OmRldmljZU9yaWVudGF0aW9uQ2xpZW50KCk7Ci0gICAgfQotICAgIHZpcnR1YWwg
Ym9vbCByZXF1ZXN0UG9pbnRlckxvY2soKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYlRlc3RQ
cm94eUJhc2U6OnJlcXVlc3RQb2ludGVyTG9jaygpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQg
cmVxdWVzdFBvaW50ZXJVbmxvY2soKQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6
cmVxdWVzdFBvaW50ZXJVbmxvY2soKTsKLSAgICB9Ci0gICAgdmlydHVhbCBib29sIGlzUG9pbnRl
ckxvY2tlZCgpCi0gICAgewotICAgICAgICByZXR1cm4gV2ViVGVzdFByb3h5QmFzZTo6aXNQb2lu
dGVyTG9ja2VkKCk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRGb2N1cygpCi0gICAgewot
ICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpkaWRGb2N1cygpOwotICAgICAgICBCYXNlOjpkaWRG
b2N1cygpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQmx1cigpCi0gICAgewotICAgICAg
ICBXZWJUZXN0UHJveHlCYXNlOjpkaWRCbHVyKCk7Ci0gICAgICAgIEJhc2U6OmRpZEJsdXIoKTsK
LSAgICB9Ci0KLSAgICAvLyBXZWJGcmFtZUNsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0
dWFsIHZvaWQgd2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChXZWJLaXQ6OldlYkZyYW1lKiBmcmFt
ZSwgY29uc3QgV2ViS2l0OjpXZWJVUkwmIGZyb20sIGNvbnN0IFdlYktpdDo6V2ViVVJMJiB0bywg
ZG91YmxlIGludGVydmFsLCBkb3VibGUgZmlyZVRpbWUpCi0gICAgewotICAgICAgICBXZWJUZXN0
UHJveHlCYXNlOjp3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KGZyYW1lLCBmcm9tLCB0bywgaW50
ZXJ2YWwsIGZpcmVUaW1lKTsKLSAgICAgICAgQmFzZTo6d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVj
dChmcmFtZSwgZnJvbSwgdG8sIGludGVydmFsLCBmaXJlVGltZSk7Ci0gICAgfQotICAgIHZpcnR1
YWwgdm9pZCBkaWRDYW5jZWxDbGllbnRSZWRpcmVjdChXZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSkK
LSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OmRpZENhbmNlbENsaWVudFJlZGlyZWN0
KGZyYW1lKTsKLSAgICAgICAgQmFzZTo6ZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3QoZnJhbWUpOwot
ICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRQcm92aXNpb25hbExvYWQoV2ViS2l0OjpX
ZWJGcmFtZSogZnJhbWUpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpkaWRTdGFy
dFByb3Zpc2lvbmFsTG9hZChmcmFtZSk7Ci0gICAgICAgIEJhc2U6OmRpZFN0YXJ0UHJvdmlzaW9u
YWxMb2FkKGZyYW1lKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVTZXJ2ZXJS
ZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZChXZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSkKLSAgICB7
Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTG9hZChmcmFtZSk7Ci0gICAgICAgIEJhc2U6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRp
cmVjdEZvclByb3Zpc2lvbmFsTG9hZChmcmFtZSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBk
aWRGYWlsUHJvdmlzaW9uYWxMb2FkKFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJL
aXQ6OldlYlVSTEVycm9yJiBlcnJvcikKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6
OmRpZEZhaWxQcm92aXNpb25hbExvYWQoZnJhbWUsIGVycm9yKTsKLSAgICAgICAgQmFzZTo6ZGlk
RmFpbFByb3Zpc2lvbmFsTG9hZChmcmFtZSwgZXJyb3IpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZv
aWQgZGlkQ29tbWl0UHJvdmlzaW9uYWxMb2FkKFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lLCBib29s
IGlzTmV3TmF2aWdhdGlvbikKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OmRpZENv
bW1pdFByb3Zpc2lvbmFsTG9hZChmcmFtZSwgaXNOZXdOYXZpZ2F0aW9uKTsKLSAgICAgICAgQmFz
ZTo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxMb2FkKGZyYW1lLCBpc05ld05hdmlnYXRpb24pOwotICAg
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVRpdGxlKFdlYktpdDo6V2ViRnJhbWUqIGZy
YW1lLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgdGl0bGUsIFdlYktpdDo6V2ViVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24pCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpkaWRSZWNl
aXZlVGl0bGUoZnJhbWUsIHRpdGxlLCBkaXJlY3Rpb24pOwotICAgICAgICBCYXNlOjpkaWRSZWNl
aXZlVGl0bGUoZnJhbWUsIHRpdGxlLCBkaXJlY3Rpb24pOwotICAgIH0KLSAgICB2aXJ0dWFsIHZv
aWQgZGlkQ2hhbmdlSWNvbihXZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSwgV2ViS2l0OjpXZWJJY29u
VVJMOjpUeXBlIGljb25UeXBlKQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6ZGlk
Q2hhbmdlSWNvbihmcmFtZSwgaWNvblR5cGUpOwotICAgICAgICBCYXNlOjpkaWRDaGFuZ2VJY29u
KGZyYW1lLCBpY29uVHlwZSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hEb2N1
bWVudExvYWQoV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUpCi0gICAgewotICAgICAgICBXZWJUZXN0
UHJveHlCYXNlOjpkaWRGaW5pc2hEb2N1bWVudExvYWQoZnJhbWUpOwotICAgICAgICBCYXNlOjpk
aWRGaW5pc2hEb2N1bWVudExvYWQoZnJhbWUpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlk
SGFuZGxlT25sb2FkRXZlbnRzKFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lKQotICAgIHsKLSAgICAg
ICAgV2ViVGVzdFByb3h5QmFzZTo6ZGlkSGFuZGxlT25sb2FkRXZlbnRzKGZyYW1lKTsKLSAgICAg
ICAgQmFzZTo6ZGlkSGFuZGxlT25sb2FkRXZlbnRzKGZyYW1lKTsKLSAgICB9Ci0gICAgdmlydHVh
bCB2b2lkIGRpZEZhaWxMb2FkKFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJLaXQ6
OldlYlVSTEVycm9yJiBlcnJvcikKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OmRp
ZEZhaWxMb2FkKGZyYW1lLCBlcnJvcik7Ci0gICAgICAgIEJhc2U6OmRpZEZhaWxMb2FkKGZyYW1l
LCBlcnJvcik7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkKFdlYktpdDo6
V2ViRnJhbWUqIGZyYW1lKQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6ZGlkRmlu
aXNoTG9hZChmcmFtZSk7Ci0gICAgICAgIEJhc2U6OmRpZEZpbmlzaExvYWQoZnJhbWUpOwotICAg
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlKFdlYktpdDo6
V2ViRnJhbWUqIGZyYW1lKQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6ZGlkQ2hh
bmdlTG9jYXRpb25XaXRoaW5QYWdlKGZyYW1lKTsKLSAgICAgICAgQmFzZTo6ZGlkQ2hhbmdlTG9j
YXRpb25XaXRoaW5QYWdlKGZyYW1lKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZERpc3Bs
YXlJbnNlY3VyZUNvbnRlbnQoV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUpCi0gICAgewotICAgICAg
ICBXZWJUZXN0UHJveHlCYXNlOjpkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50KGZyYW1lKTsKLSAg
ICAgICAgQmFzZTo6ZGlkRGlzcGxheUluc2VjdXJlQ29udGVudChmcmFtZSk7Ci0gICAgfQotICAg
IHZpcnR1YWwgdm9pZCBkaWRSdW5JbnNlY3VyZUNvbnRlbnQoV2ViS2l0OjpXZWJGcmFtZSogZnJh
bWUsIGNvbnN0IFdlYktpdDo6V2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgY29uc3QgV2ViS2l0
OjpXZWJVUkwmIGluc2VjdXJlVVJMKQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6
ZGlkUnVuSW5zZWN1cmVDb250ZW50KGZyYW1lLCBvcmlnaW4sIGluc2VjdXJlVVJMKTsKLSAgICAg
ICAgQmFzZTo6ZGlkUnVuSW5zZWN1cmVDb250ZW50KGZyYW1lLCBvcmlnaW4sIGluc2VjdXJlVVJM
KTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZERldGVjdFhTUyhXZWJLaXQ6OldlYkZyYW1l
KiBmcmFtZSwgY29uc3QgV2ViS2l0OjpXZWJVUkwmIGluc2VjdXJlVVJMLCBib29sIGRpZEJsb2Nr
RW50aXJlUGFnZSkKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OmRpZERldGVjdFhT
UyhmcmFtZSwgaW5zZWN1cmVVUkwsIGRpZEJsb2NrRW50aXJlUGFnZSk7Ci0gICAgICAgIEJhc2U6
OmRpZERldGVjdFhTUyhmcmFtZSwgaW5zZWN1cmVVUkwsIGRpZEJsb2NrRW50aXJlUGFnZSk7Ci0g
ICAgfQotICAgIHZpcnR1YWwgdm9pZCBhc3NpZ25JZGVudGlmaWVyVG9SZXF1ZXN0KFdlYktpdDo6
V2ViRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBXZWJLaXQ6OldlYlVS
TFJlcXVlc3QmIHJlcXVlc3QpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjphc3Np
Z25JZGVudGlmaWVyVG9SZXF1ZXN0KGZyYW1lLCBpZGVudGlmaWVyLCByZXF1ZXN0KTsKLSAgICAg
ICAgQmFzZTo6YXNzaWduSWRlbnRpZmllclRvUmVxdWVzdChmcmFtZSwgaWRlbnRpZmllciwgcmVx
dWVzdCk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVxdWVzdFJlc291cmNlKFdlYktp
dDo6V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJLaXQ6OldlYkNhY2hlZFVSTFJlcXVlc3QmIHJl
cXVlc3QpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjp3aWxsUmVxdWVzdFJlc291
cmNlKGZyYW1lLCByZXF1ZXN0KTsKLSAgICAgICAgQmFzZTo6d2lsbFJlcXVlc3RSZXNvdXJjZShm
cmFtZSwgcmVxdWVzdCk7Ci0gICAgfQotICAgIHZpcnR1YWwgYm9vbCBjYW5IYW5kbGVSZXF1ZXN0
KFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJLaXQ6OldlYlVSTFJlcXVlc3QmIHJl
cXVlc3QpCi0gICAgewotICAgICAgICBpZiAoIVdlYlRlc3RQcm94eUJhc2U6OmNhbkhhbmRsZVJl
cXVlc3QoZnJhbWUsIHJlcXVlc3QpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICByZXR1cm4gQmFzZTo6Y2FuSGFuZGxlUmVxdWVzdChmcmFtZSwgcmVxdWVzdCk7Ci0gICAgfQot
ICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJVUkxFcnJvciBjYW5ub3RIYW5kbGVSZXF1ZXN0RXJyb3Io
V2ViS2l0OjpXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYktpdDo6V2ViVVJMUmVxdWVzdCYgcmVx
dWVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXZWJUZXN0UHJveHlCYXNlOjpjYW5ub3RIYW5k
bGVSZXF1ZXN0RXJyb3IoZnJhbWUsIHJlcXVlc3QpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ3JlYXRlRGF0YVNvdXJjZShXZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSwgV2ViS2l0OjpXZWJE
YXRhU291cmNlKiBkcykKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OmRpZENyZWF0
ZURhdGFTb3VyY2UoZnJhbWUsIGRzKTsKLSAgICAgICAgQmFzZTo6ZGlkQ3JlYXRlRGF0YVNvdXJj
ZShmcmFtZSwgZHMpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFdl
YktpdDo6V2ViRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBXZWJLaXQ6OldlYlVS
TFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYktpdDo6V2ViVVJMUmVzcG9uc2UmIHJlZGlyZWN0
UmVzcG9uc2UpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjp3aWxsU2VuZFJlcXVl
c3QoZnJhbWUsIGlkZW50aWZpZXIsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwotICAgICAg
ICBCYXNlOjp3aWxsU2VuZFJlcXVlc3QoZnJhbWUsIGlkZW50aWZpZXIsIHJlcXVlc3QsIHJlZGly
ZWN0UmVzcG9uc2UpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNl
KFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBXZWJL
aXQ6OldlYlVSTFJlc3BvbnNlJiByZXNwb25zZSkKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94
eUJhc2U6OmRpZFJlY2VpdmVSZXNwb25zZShmcmFtZSwgaWRlbnRpZmllciwgcmVzcG9uc2UpOwot
ICAgICAgICBCYXNlOjpkaWRSZWNlaXZlUmVzcG9uc2UoZnJhbWUsIGlkZW50aWZpZXIsIHJlc3Bv
bnNlKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVJlc291cmNlUHJpb3JpdHko
V2ViS2l0OjpXZWJGcmFtZSogZnJhbWUsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFdlYktp
dDo6V2ViVVJMUmVxdWVzdDo6UHJpb3JpdHkmIHByaW9yaXR5KQotICAgIHsKLSAgICAgICAgV2Vi
VGVzdFByb3h5QmFzZTo6ZGlkQ2hhbmdlUmVzb3VyY2VQcmlvcml0eShmcmFtZSwgaWRlbnRpZmll
ciwgcHJpb3JpdHkpOwotICAgICAgICBCYXNlOjpkaWRDaGFuZ2VSZXNvdXJjZVByaW9yaXR5KGZy
YW1lLCBpZGVudGlmaWVyLCBwcmlvcml0eSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRG
aW5pc2hSZXNvdXJjZUxvYWQoV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUsIHVuc2lnbmVkIGlkZW50
aWZpZXIpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpkaWRGaW5pc2hSZXNvdXJj
ZUxvYWQoZnJhbWUsIGlkZW50aWZpZXIpOwotICAgICAgICBCYXNlOjpkaWRGaW5pc2hSZXNvdXJj
ZUxvYWQoZnJhbWUsIGlkZW50aWZpZXIpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmFp
bFJlc291cmNlTG9hZChXZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSwgdW5zaWduZWQgaWRlbnRpZmll
ciwgY29uc3QgV2ViS2l0OjpXZWJVUkxFcnJvciYgZXJyb3IpCi0gICAgewotICAgICAgICBXZWJU
ZXN0UHJveHlCYXNlOjpkaWRGYWlsUmVzb3VyY2VMb2FkKGZyYW1lLCBpZGVudGlmaWVyLCBlcnJv
cik7Ci0gICAgICAgIEJhc2U6OmRpZEZhaWxSZXNvdXJjZUxvYWQoZnJhbWUsIGlkZW50aWZpZXIs
IGVycm9yKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHVuYWJsZVRvSW1wbGVtZW50UG9saWN5
V2l0aEVycm9yKFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJLaXQ6OldlYlVSTEVy
cm9yJiBlcnJvcikKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OnVuYWJsZVRvSW1w
bGVtZW50UG9saWN5V2l0aEVycm9yKGZyYW1lLCBlcnJvcik7Ci0gICAgICAgIEJhc2U6OnVuYWJs
ZVRvSW1wbGVtZW50UG9saWN5V2l0aEVycm9yKGZyYW1lLCBlcnJvcik7Ci0gICAgfQotICAgIHZp
cnR1YWwgdm9pZCBkaWRBZGRNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFdlYktpdDo6V2ViQ29uc29s
ZU1lc3NhZ2UmIG1lc3NhZ2UsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBzb3VyY2VOYW1lLCB1
bnNpZ25lZCBzb3VyY2VMaW5lKQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6ZGlk
QWRkTWVzc2FnZVRvQ29uc29sZShtZXNzYWdlLCBzb3VyY2VOYW1lLCBzb3VyY2VMaW5lKTsKLSAg
ICAgICAgQmFzZTo6ZGlkQWRkTWVzc2FnZVRvQ29uc29sZShtZXNzYWdlLCBzb3VyY2VOYW1lLCBz
b3VyY2VMaW5lKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHJ1bk1vZGFsQWxlcnREaWFsb2co
V2ViS2l0OjpXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBtZXNzYWdl
KQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6cnVuTW9kYWxBbGVydERpYWxvZyhm
cmFtZSwgbWVzc2FnZSk7Ci0gICAgICAgIEJhc2U6OnJ1bk1vZGFsQWxlcnREaWFsb2coZnJhbWUs
IG1lc3NhZ2UpOwotICAgIH0KLSAgICB2aXJ0dWFsIGJvb2wgcnVuTW9kYWxDb25maXJtRGlhbG9n
KFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbWVzc2Fn
ZSkKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OnJ1bk1vZGFsQ29uZmlybURpYWxv
ZyhmcmFtZSwgbWVzc2FnZSk7Ci0gICAgICAgIHJldHVybiBCYXNlOjpydW5Nb2RhbENvbmZpcm1E
aWFsb2coZnJhbWUsIG1lc3NhZ2UpOwotICAgIH0KLSAgICB2aXJ0dWFsIGJvb2wgcnVuTW9kYWxQ
cm9tcHREaWFsb2coV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYktpdDo6V2ViU3Ry
aW5nJiBtZXNzYWdlLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZGVmYXVsdFZhbHVlLCBXZWJL
aXQ6OldlYlN0cmluZyogYWN0dWFsVmFsdWUpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlC
YXNlOjpydW5Nb2RhbFByb21wdERpYWxvZyhmcmFtZSwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCBh
Y3R1YWxWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBCYXNlOjpydW5Nb2RhbFByb21wdERpYWxvZyhm
cmFtZSwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCBhY3R1YWxWYWx1ZSk7Ci0gICAgfQotICAgIHZp
cnR1YWwgYm9vbCBydW5Nb2RhbEJlZm9yZVVubG9hZERpYWxvZyhXZWJLaXQ6OldlYkZyYW1lKiBm
cmFtZSwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIG1lc3NhZ2UpCi0gICAgewotICAgICAgICBy
ZXR1cm4gV2ViVGVzdFByb3h5QmFzZTo6cnVuTW9kYWxCZWZvcmVVbmxvYWREaWFsb2coZnJhbWUs
IG1lc3NhZ2UpOwotICAgIH0KLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViTmF2aWdhdGlvblBvbGlj
eSBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uKFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lLCBjb25z
dCBXZWJLaXQ6OldlYlVSTFJlcXVlc3QmIHJlcXVlc3QsIFdlYktpdDo6V2ViTmF2aWdhdGlvblR5
cGUgdHlwZSwgY29uc3QgV2ViS2l0OjpXZWJOb2RlJiBvcmlnaW5hdGluZ05vZGUsIFdlYktpdDo6
V2ViTmF2aWdhdGlvblBvbGljeSBkZWZhdWx0UG9saWN5LCBib29sIGlzUmVkaXJlY3QpCi0gICAg
ewotICAgICAgICBXZWJLaXQ6OldlYk5hdmlnYXRpb25Qb2xpY3kgcG9saWN5ID0gV2ViVGVzdFBy
b3h5QmFzZTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbihmcmFtZSwgcmVxdWVzdCwgdHlwZSwg
b3JpZ2luYXRpbmdOb2RlLCBkZWZhdWx0UG9saWN5LCBpc1JlZGlyZWN0KTsKLSAgICAgICAgaWYg
KHBvbGljeSA9PSBXZWJLaXQ6OldlYk5hdmlnYXRpb25Qb2xpY3lJZ25vcmUpCi0gICAgICAgICAg
ICByZXR1cm4gcG9saWN5OwotICAgICAgICByZXR1cm4gQmFzZTo6ZGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbihmcmFtZSwgcmVxdWVzdCwgdHlwZSwgb3JpZ2luYXRpbmdOb2RlLCBkZWZhdWx0UG9s
aWN5LCBpc1JlZGlyZWN0KTsKLSAgICB9Ci0gICAgdmlydHVhbCBib29sIHdpbGxDaGVja0FuZERp
c3BhdGNoTWVzc2FnZUV2ZW50KFdlYktpdDo6V2ViRnJhbWUqIHNvdXJjZUZyYW1lLCBXZWJLaXQ6
OldlYkZyYW1lKiB0YXJnZXRGcmFtZSwgV2ViS2l0OjpXZWJTZWN1cml0eU9yaWdpbiB0YXJnZXQs
IFdlYktpdDo6V2ViRE9NTWVzc2FnZUV2ZW50IGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKFdl
YlRlc3RQcm94eUJhc2U6OndpbGxDaGVja0FuZERpc3BhdGNoTWVzc2FnZUV2ZW50KHNvdXJjZUZy
YW1lLCB0YXJnZXRGcmFtZSwgdGFyZ2V0LCBldmVudCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgcmV0dXJuIEJhc2U6OndpbGxDaGVja0FuZERpc3BhdGNoTWVzc2FnZUV2ZW50
KHNvdXJjZUZyYW1lLCB0YXJnZXRGcmFtZSwgdGFyZ2V0LCBldmVudCk7Ci0gICAgfQotfTsKLQot
fQotCi0jZW5kaWYgLy8gV2ViVGVzdFByb3h5X2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RSdW5uZXIuaCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RSdW5uZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM4Y2MzZTBiYTY5ZDdkZDU1NjkzZTdl
M2UwMWM5M2QwNzEyZTc1NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9X
ZWJUZXN0UnVubmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJU
ZXN0UnVubmVyX2gKLSNkZWZpbmUgV2ViVGVzdFJ1bm5lcl9oCi0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotY2xhc3MgV2ViQXJyYXlCdWZmZXJWaWV3OwotY2xhc3MgV2ViUGVybWlzc2lvbkNsaWVudDsK
LX0KLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1jbGFzcyBXZWJUZXN0UnVubmVyIHsK
LXB1YmxpYzoKLSAgICAvLyBSZXR1cm5zIGEgbW9jayBXZWJQZXJtaXNzaW9uQ2xpZW50IHRoYXQg
aXMgdXNlZCBmb3IgbGF5b3V0IHRlc3RzLiBBbgotICAgIC8vIGVtYmVkZGVyIHNob3VsZCB1c2Ug
dGhpcyBmb3IgYWxsIFdlYlZpZXdzIGl0IGNyZWF0ZXMuCi0gICAgdmlydHVhbCBXZWJLaXQ6Oldl
YlBlcm1pc3Npb25DbGllbnQqIHdlYlBlcm1pc3Npb25zKCkgY29uc3QgPSAwOwotCi0gICAgLy8g
QWZ0ZXIgV2ViVGVzdERlbGVnYXRlOjp0ZXN0RmluaXNoZWQgd2FzIGludm9rZWQsIHRoZSBmb2xs
b3dpbmcgbWV0aG9kcwotICAgIC8vIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGF0IGtpbmQg
b2YgZHVtcCB0aGUgbWFpbiBXZWJUZXN0UHJveHkgY2FuCi0gICAgLy8gcHJvdmlkZS4KLQotICAg
IC8vIElmIHRydWUsIFdlYlRlc3REZWxlZ2F0ZTo6YXVkaW9EYXRhIHJldHVybnMgYW4gYXVkaW8g
ZHVtcCBhbmQgbm8gdGV4dAotICAgIC8vIG9yIHBpeGVsIHJlc3VsdHMgYXJlIGF2YWlsYWJsZS4K
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcEFzQXVkaW8oKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBjb25zdCBXZWJLaXQ6OldlYkFycmF5QnVmZmVyVmlldyogYXVkaW9EYXRhKCkgY29uc3Qg
PSAwOwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjYWxsIHRvIFdlYlRlc3RQcm94eTo6
Y2FwdHVyZVRyZWUgd2lsbCBpbnZva2UKLSAgICAvLyBXZWJUZXN0RGVsZWdhdGU6OmNhcHR1cmVI
aXN0b3J5Rm9yV2luZG93LgotICAgIHZpcnR1YWwgYm9vbCBzaG91bGREdW1wQmFja0ZvcndhcmRM
aXN0KCkgY29uc3QgPSAwOwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIFdlYlRlc3RQcm94eTo6
Y2FwdHVyZVBpeGVscyBzaG91bGQgYmUgaW52b2tlZCBhZnRlcgotICAgIC8vIGNhcHR1cmluZyB0
ZXh0IHJlc3VsdHMuCi0gICAgdmlydHVhbCBib29sIHNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRz
KCkgPSAwOwotfTsKLQotfQotCi0jZW5kaWYgLy8gV2ViVGVzdFJ1bm5lcl9oCmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlckNocm9taXVtLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDNkMjljYzFiMGI0YmI1OWY1YjFiNjQxNjE3MTA5
NWY5M2JmYjg5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyQ2hyb21pdW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJv
bWl1bS5oIgotCi0jaW5jbHVkZSAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oIgotI2luY2x1ZGUg
IldlYkVsZW1lbnQuaCIKLSNpbmNsdWRlICJXZWJGcmFtZS5oIgotI2luY2x1ZGUgIldlYk5vZGUu
aCIKLSNpbmNsdWRlICJXZWJUZXN0RGVsZWdhdGUuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0j
aW5jbHVkZSA8cHVibGljL1dlYkNTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
LQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQotICAgIDogbV9sb2dBY2Nlc3NpYmlsaXR5RXZlbnRz
KGZhbHNlKQotewotCi0gICAgYmluZE1ldGhvZCgibG9nQWNjZXNzaWJpbGl0eUV2ZW50cyIsICZB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bG9nQWNjZXNzaWJpbGl0eUV2ZW50c0NhbGxiYWNrKTsK
LSAgICBiaW5kTWV0aG9kKCJhZGROb3RpZmljYXRpb25MaXN0ZW5lciIsICZBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayk7Ci0gICAgYmluZE1l
dGhvZCgicmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2spOwotCi0gICAgYmluZFByb3Bl
cnR5KCJmb2N1c2VkRWxlbWVudCIsICZBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Zm9jdXNlZEVs
ZW1lbnRHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJyb290RWxlbWVudCIsICZB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cm9vdEVsZW1lbnRHZXR0ZXJDYWxsYmFjayk7Ci0KLSAg
ICBiaW5kTWV0aG9kKCJhY2Nlc3NpYmxlRWxlbWVudEJ5SWQiLCAmQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OmFjY2Vzc2libGVFbGVtZW50QnlJZEdldHRlckNhbGxiYWNrKTsKLQotICAgIGJpbmRG
YWxsYmFja01ldGhvZCgmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZhbGxiYWNrQ2FsbGJhY2sp
OwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpiaW5kVG9KYXZhc2NyaXB0KFdl
YkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiBjbGFzc25hbWUpCi17Ci0gICAgV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdDo6ZW5hYmxlQWNjZXNzaWJpbGl0eSgpOwotICAgIENwcEJvdW5kQ2xh
c3M6OmJpbmRUb0phdmFzY3JpcHQoZnJhbWUsIGNsYXNzbmFtZSk7Ci19Ci0KLXZvaWQgQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OnJlc2V0KCkKLXsKLSAgICBtX3Jvb3RFbGVtZW50ID0gV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdCgpOwotICAgIG1fZm9jdXNlZEVsZW1lbnQgPSBXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0KCk7Ci0gICAgbV9lbGVtZW50cy5jbGVhcigpOwotCi0gICAgbV9sb2dBY2Nlc3Np
YmlsaXR5RXZlbnRzID0gZmFsc2U7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OnNldEZvY3VzZWRFbGVtZW50KGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmIGZvY3VzZWRF
bGVtZW50KQotewotICAgIG1fZm9jdXNlZEVsZW1lbnQgPSBmb2N1c2VkRWxlbWVudDsKLX0KLQot
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmdldEZvY3Vz
ZWRFbGVtZW50KCkKLXsKLSAgICBpZiAobV9mb2N1c2VkRWxlbWVudC5pc051bGwoKSkKLSAgICAg
ICAgbV9mb2N1c2VkRWxlbWVudCA9IG1fd2ViVmlldy0+YWNjZXNzaWJpbGl0eU9iamVjdCgpOwot
ICAgIHJldHVybiBtX2VsZW1lbnRzLmdldE9yQ3JlYXRlKG1fZm9jdXNlZEVsZW1lbnQpOwotfQot
Ci1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0Um9v
dEVsZW1lbnQoKQotewotICAgIGlmIChtX3Jvb3RFbGVtZW50LmlzTnVsbCgpKQotICAgICAgICBt
X3Jvb3RFbGVtZW50ID0gbV93ZWJWaWV3LT5hY2Nlc3NpYmlsaXR5T2JqZWN0KCk7Ci0gICAgcmV0
dXJuIG1fZWxlbWVudHMuY3JlYXRlUm9vdChtX3Jvb3RFbGVtZW50KTsKLX0KLQotQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZpbmRBY2Nlc3NpYmxlRWxl
bWVudEJ5SWRSZWN1cnNpdmUoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqLCBjb25z
dCBXZWJTdHJpbmcmIGlkKQotewotICAgIGlmIChvYmouaXNOdWxsKCkgfHwgb2JqLmlzRGV0YWNo
ZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBXZWJOb2RlIG5vZGUgPSBvYmoubm9kZSgp
OwotICAgIGlmICghbm9kZS5pc051bGwoKSAmJiBub2RlLmlzRWxlbWVudE5vZGUoKSkgewotICAg
ICAgICBXZWJFbGVtZW50IGVsZW1lbnQgPSBub2RlLnRvPFdlYkVsZW1lbnQ+KCk7Ci0gICAgICAg
IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpOwotICAgICAgICBpZiAoZWxlbWVudC5nZXRBdHRy
aWJ1dGUoImlkIikgPT0gaWQpIAotICAgICAgICAgICAgcmV0dXJuIG1fZWxlbWVudHMuZ2V0T3JD
cmVhdGUob2JqKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjaGlsZENvdW50ID0gb2JqLmNoaWxk
Q291bnQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7
Ci0gICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiByZXN1bHQgPSBmaW5kQWNjZXNz
aWJsZUVsZW1lbnRCeUlkUmVjdXJzaXZlKG9iai5jaGlsZEF0KGkpLCBpZCkpCi0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1BY2Nlc3NpYmls
aXR5VUlFbGVtZW50KiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0QWNjZXNzaWJsZUVsZW1l
bnRCeUlkKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCkKLXsKLSAgICBpZiAobV9yb290RWxlbWVudC5p
c051bGwoKSkKLSAgICAgICAgbV9yb290RWxlbWVudCA9IG1fd2ViVmlldy0+YWNjZXNzaWJpbGl0
eU9iamVjdCgpOwotCi0gICAgaWYgKCFtX3Jvb3RFbGVtZW50LnVwZGF0ZUJhY2tpbmdTdG9yZUFu
ZENoZWNrVmFsaWRpdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZmluZEFj
Y2Vzc2libGVFbGVtZW50QnlJZFJlY3Vyc2l2ZShtX3Jvb3RFbGVtZW50LCBXZWJTdHJpbmc6OmZy
b21VVEY4KGlkLmNfc3RyKCkpKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
c2hvdWxkTG9nQWNjZXNzaWJpbGl0eUV2ZW50cygpCi17Ci0gICAgcmV0dXJuIG1fbG9nQWNjZXNz
aWJpbGl0eUV2ZW50czsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bm90aWZp
Y2F0aW9uUmVjZWl2ZWQoY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiB0YXJn
ZXQsIGNvbnN0IGNoYXIqIG5vdGlmaWNhdGlvbk5hbWUpCi17Ci0gICAgLy8gQ2FsbCBub3RpZmlj
YXRpb24gbGlzdGVuZXJzIG9uIHRoZSBlbGVtZW50LgotICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQqIGVsZW1lbnQgPSBtX2VsZW1lbnRzLmdldE9yQ3JlYXRlKHRhcmdldCk7Ci0gICAgZWxlbWVu
dC0+bm90aWZpY2F0aW9uUmVjZWl2ZWQobm90aWZpY2F0aW9uTmFtZSk7Ci0KLSAgICAvLyBDYWxs
IGdsb2JhbCBub3RpZmljYXRpb24gbGlzdGVuZXJzLgotICAgIHNpemVfdCBjYWxsYmFja0NvdW50
ID0gbV9ub3RpZmljYXRpb25DYWxsYmFja3Muc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY2FsbGJhY2tDb3VudDsgaSsrKSB7Ci0gICAgICAgIENwcFZhcmlhbnQgYXJndW1lbnRz
WzJdOwotICAgICAgICBhcmd1bWVudHNbMF0uc2V0KCplbGVtZW50LT5nZXRBc0NwcFZhcmlhbnQo
KSk7Ci0gICAgICAgIGFyZ3VtZW50c1sxXS5zZXQobm90aWZpY2F0aW9uTmFtZSk7Ci0gICAgICAg
IENwcFZhcmlhbnQgaW52b2tlUmVzdWx0OwotICAgICAgICBtX25vdGlmaWNhdGlvbkNhbGxiYWNr
c1tpXS5pbnZva2VEZWZhdWx0KGFyZ3VtZW50cywgMiwgaW52b2tlUmVzdWx0KTsKLSAgICB9Ci19
Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmxvZ0FjY2Vzc2liaWxpdHlFdmVudHND
YWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0g
ICAgbV9sb2dBY2Nlc3NpYmlsaXR5RXZlbnRzID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwo
KTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlz
dGVuZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRz
WzBdLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtX25vdGlmaWNhdGlvbkNhbGxiYWNrcy5wdXNoX2JhY2soYXJn
dW1lbnRzWzBdKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzLgotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpmb2N1c2VkRWxlbWVudEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldCgqKGdldEZvY3VzZWRFbGVtZW50KCktPmdldEFz
Q3BwVmFyaWFudCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJvb3RF
bGVtZW50R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+
c2V0KCooZ2V0Um9vdEVsZW1lbnQoKS0+Z2V0QXNDcHBWYXJpYW50KCkpKTsKLX0KLQotdm9pZCBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkR2V0dGVyQ2FsbGJh
Y2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwg
MSB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0
ZDo6c3RyaW5nIGlkID0gYXJndW1lbnRzWzBdLnRvU3RyaW5nKCk7Ci0gICAgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudCogZm91bmRFbGVtZW50ID0gZ2V0QWNjZXNzaWJsZUVsZW1lbnRCeUlkKGlkKTsK
LSAgICBpZiAoIWZvdW5kRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVzdWx0LT5z
ZXQoKihmb3VuZEVsZW1lbnQtPmdldEFzQ3BwVmFyaWFudCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OmZhbGxiYWNrQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgi
Q09OU09MRSBNRVNTQUdFOiBKYXZhU2NyaXB0IEVSUk9SOiB1bmtub3duIG1ldGhvZCBjYWxsZWQg
b24gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJcbiIpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwot
fQotCi19CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3NyYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmggYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNo
cm9taXVtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMzAwNTgwMzhhY2Q2YjI3
ZDU0YzlhYzMzODIxZDIxNjExN2E0NzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9z
cmMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5oCisrKyAvZGV2L251bGwKQEAgLTEs
OTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bV9oCi0jZGVm
aW5lIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW1faAotCi0jaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eVVJRWxlbWVudENocm9taXVtLmgiCi0jaW5jbHVkZSAiQ3BwQm91bmRDbGFzcy5oIgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q7Ci1jbGFz
cyBXZWJGcmFtZTsKLWNsYXNzIFdlYlZpZXc7Ci19Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVy
IHsKLQotY2xhc3MgV2ViVGVzdERlbGVnYXRlOwotCi1jbGFzcyBBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlciA6IHB1YmxpYyBDcHBCb3VuZENsYXNzIHsKLXB1YmxpYzoKLSAgICBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcigpOwotCi0gICAgLy8gU2hhZG93IHRvIGluY2x1ZGUgYWNjZXNzaWJpbGl0eSBp
bml0aWFsaXphdGlvbi4KLSAgICB2b2lkIGJpbmRUb0phdmFzY3JpcHQoV2ViS2l0OjpXZWJGcmFt
ZSosIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBjbGFzc25hbWUpOwotICAgIHZvaWQgcmVzZXQo
KTsKLQotICAgIHZvaWQgc2V0Rm9jdXNlZEVsZW1lbnQoY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0Jik7Ci0gICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZ2V0Rm9jdXNlZEVs
ZW1lbnQoKTsKLSAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBnZXRSb290RWxlbWVudCgpOwot
ICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGdldEFjY2Vzc2libGVFbGVtZW50QnlJZChjb25z
dCBzdGQ6OnN0cmluZyYgaWQpOwotCi0gICAgYm9vbCBzaG91bGRMb2dBY2Nlc3NpYmlsaXR5RXZl
bnRzKCk7Ci0KLSAgICB2b2lkIG5vdGlmaWNhdGlvblJlY2VpdmVkKGNvbnN0IFdlYktpdDo6V2Vi
QWNjZXNzaWJpbGl0eU9iamVjdCYgdGFyZ2V0LCBjb25zdCBjaGFyKiBub3RpZmljYXRpb25OYW1l
KTsKLQotICAgIHZvaWQgc2V0RGVsZWdhdGUoV2ViVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSkgeyBt
X2RlbGVnYXRlID0gZGVsZWdhdGU7IH0KLSAgICB2b2lkIHNldFdlYlZpZXcoV2ViS2l0OjpXZWJW
aWV3KiB3ZWJWaWV3KSB7IG1fd2ViVmlldyA9IHdlYlZpZXc7IH0KLQotcHJpdmF0ZToKLSAgICAv
LyBJZiB0cnVlLCB3aWxsIGxvZyBhbGwgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb25zLgotICAg
IGJvb2wgbV9sb2dBY2Nlc3NpYmlsaXR5RXZlbnRzOwotCi0gICAgLy8gQm91bmQgbWV0aG9kcyBh
bmQgcHJvcGVydGllcwotICAgIHZvaWQgbG9nQWNjZXNzaWJpbGl0eUV2ZW50c0NhbGxiYWNrKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGZhbGxiYWNrQ2Fs
bGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgYWRk
Tm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7Ci0gICAgdm9pZCByZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIHZvaWQgZm9jdXNlZEVs
ZW1lbnRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCByb290RWxlbWVudEdl
dHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGFjY2Vzc2libGVFbGVtZW50QnlJ
ZEdldHRlckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQot
ICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGZpbmRBY2Nlc3NpYmxlRWxlbWVudEJ5SWRSZWN1
cnNpdmUoY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiwgY29uc3QgV2ViS2l0
OjpXZWJTdHJpbmcmIGlkKTsKLQotICAgIFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCBt
X2ZvY3VzZWRFbGVtZW50OwotICAgIFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCBtX3Jv
b3RFbGVtZW50OwotCi0gICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudExpc3QgbV9lbGVtZW50czsK
LQotICAgIHN0ZDo6dmVjdG9yPENwcFZhcmlhbnQ+IG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzOwot
Ci0gICAgV2ViVGVzdERlbGVnYXRlKiBtX2RlbGVnYXRlOwotICAgIFdlYktpdDo6V2ViVmlldyog
bV93ZWJWaWV3OwotfTsKLQotfQotCi0jZW5kaWYgLy8gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJD
aHJvbWl1bV9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dENocm9taXVtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q5NzYyN2YwOGM2
NTI1NjY5NjQyNmVjNjBhZTI4Nzk1MDdiZjJlMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3NyYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTA0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5oIgotCi0jaW5jbHVkZSAiVGVzdENvbW1vbi5oIgotI2lu
Y2x1ZGUgIldlYkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKLSNpbmNsdWRlIDxwdWJsaWMvV2ViQ1N0
cmluZy5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJQb2ludC5oPgotI2luY2x1ZGUgPHB1YmxpYy9X
ZWJSZWN0Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5u
ZXIgewotCi1uYW1lc3BhY2UgewotCi0vLyBNYXAgcm9sZSB2YWx1ZSB0byBzdHJpbmcsIG1hdGNo
aW5nIFNhZmFyaS9NYWMgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24gdG8KLS8vIGF2b2lkIHJlYmFz
ZWxpbmluZyBsYXlvdXQgdGVzdHMuCi1zdHJpbmcgcm9sZVRvU3RyaW5nKFdlYkFjY2Vzc2liaWxp
dHlSb2xlIHJvbGUpCi17Ci0gICAgc3RyaW5nIHJlc3VsdCA9ICJBWFJvbGU6IEFYIjsKLSAgICBz
d2l0Y2ggKHJvbGUpIHsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQnV0dG9uOgotICAg
ICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQnV0dG9uIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3Np
YmlsaXR5Um9sZVJhZGlvQnV0dG9uOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiUmFk
aW9CdXR0b24iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQ2hlY2tCb3g6Ci0gICAg
ICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJDaGVja0JveCIpOwotICAgIGNhc2UgV2ViQWNjZXNz
aWJpbGl0eVJvbGVTbGlkZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJTbGlkZXIi
KTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlVGFiR3JvdXA6Ci0gICAgICAgIHJldHVy
biByZXN1bHQuYXBwZW5kKCJUYWJHcm91cCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJv
bGVUZXh0RmllbGQ6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJUZXh0RmllbGQiKTsK
LSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU3RhdGljVGV4dDoKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC5hcHBlbmQoIlN0YXRpY1RleHQiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlVGV4dEFyZWE6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJUZXh0QXJlYSIpOwot
ICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVTY3JvbGxBcmVhOgotICAgICAgICByZXR1cm4g
cmVzdWx0LmFwcGVuZCgiU2Nyb2xsQXJlYSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJv
bGVQb3BVcEJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlBvcFVwQnV0dG9u
Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZU1lbnVCdXR0b246Ci0gICAgICAgIHJl
dHVybiByZXN1bHQuYXBwZW5kKCJNZW51QnV0dG9uIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZVRhYmxlOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVGFibGUiKTsKLSAg
ICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQXBwbGljYXRpb246Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQuYXBwZW5kKCJBcHBsaWNhdGlvbiIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJv
bGVHcm91cDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkdyb3VwIik7Ci0gICAgY2Fz
ZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVJhZGlvR3JvdXA6Ci0gICAgICAgIHJldHVybiByZXN1bHQu
YXBwZW5kKCJSYWRpb0dyb3VwIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxpc3Q6
Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMaXN0Iik7Ci0gICAgY2FzZSBXZWJBY2Nl
c3NpYmlsaXR5Um9sZVNjcm9sbEJhcjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlNj
cm9sbEJhciIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVWYWx1ZUluZGljYXRvcjoK
LSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlZhbHVlSW5kaWNhdG9yIik7Ci0gICAgY2Fz
ZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUltYWdlOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVu
ZCgiSW1hZ2UiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTWVudUJhcjoKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIk1lbnVCYXIiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2li
aWxpdHlSb2xlTWVudToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIk1lbnUiKTsKLSAg
ICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTWVudUl0ZW06Ci0gICAgICAgIHJldHVybiByZXN1
bHQuYXBwZW5kKCJNZW51SXRlbSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVDb2x1
bW46Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJDb2x1bW4iKTsKLSAgICBjYXNlIFdl
YkFjY2Vzc2liaWxpdHlSb2xlUm93OgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiUm93
Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVRvb2xiYXI6Ci0gICAgICAgIHJldHVy
biByZXN1bHQuYXBwZW5kKCJUb29sYmFyIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9s
ZUJ1c3lJbmRpY2F0b3I6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJCdXN5SW5kaWNh
dG9yIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVByb2dyZXNzSW5kaWNhdG9yOgot
ICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiUHJvZ3Jlc3NJbmRpY2F0b3IiKTsKLSAgICBj
YXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlV2luZG93OgotICAgICAgICByZXR1cm4gcmVzdWx0LmFw
cGVuZCgiV2luZG93Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZURyYXdlcjoKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkRyYXdlciIpOwotICAgIGNhc2UgV2ViQWNjZXNz
aWJpbGl0eVJvbGVTeXN0ZW1XaWRlOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiU3lz
dGVtV2lkZSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVPdXRsaW5lOgotICAgICAg
ICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiT3V0bGluZSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJp
bGl0eVJvbGVJbmNyZW1lbnRvcjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkluY3Jl
bWVudG9yIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUJyb3dzZXI6Ci0gICAgICAg
IHJldHVybiByZXN1bHQuYXBwZW5kKCJCcm93c2VyIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZUNvbWJvQm94OgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQ29tYm9Cb3gi
KTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU3BsaXRHcm91cDoKLSAgICAgICAgcmV0
dXJuIHJlc3VsdC5hcHBlbmQoIlNwbGl0R3JvdXAiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxp
dHlSb2xlU3BsaXR0ZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJTcGxpdHRlciIp
OwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVDb2xvcldlbGw6Ci0gICAgICAgIHJldHVy
biByZXN1bHQuYXBwZW5kKCJDb2xvcldlbGwiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlR3Jvd0FyZWE6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJHcm93QXJlYSIpOwot
ICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVTaGVldDoKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIlNoZWV0Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUhlbHBUYWc6
Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJIZWxwVGFnIik7Ci0gICAgY2FzZSBXZWJB
Y2Nlc3NpYmlsaXR5Um9sZU1hdHRlOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTWF0
dGUiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlUnVsZXI6Ci0gICAgICAgIHJldHVy
biByZXN1bHQuYXBwZW5kKCJSdWxlciIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVS
dWxlck1hcmtlcjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlJ1bGVyTWFya2VyIik7
Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxpbms6Ci0gICAgICAgIHJldHVybiByZXN1
bHQuYXBwZW5kKCJMaW5rIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZURpc2Nsb3N1
cmVUcmlhbmdsZToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkRpc2Nsb3N1cmVUcmlh
bmdsZSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVHcmlkOgotICAgICAgICByZXR1
cm4gcmVzdWx0LmFwcGVuZCgiR3JpZCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVD
ZWxsOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQ2VsbCIpOwotICAgIGNhc2UgV2Vi
QWNjZXNzaWJpbGl0eVJvbGVDb2x1bW5IZWFkZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBw
ZW5kKCJDb2x1bW5IZWFkZXIiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlUm93SGVh
ZGVyOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiUm93SGVhZGVyIik7Ci0gICAgY2Fz
ZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVdlYkNvcmVMaW5rOgotICAgICAgICAvLyBNYXBzIHRvIExp
bmsgcm9sZS4KLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxpbmsiKTsKLSAgICBjYXNl
IFdlYkFjY2Vzc2liaWxpdHlSb2xlSW1hZ2VNYXBMaW5rOgotICAgICAgICByZXR1cm4gcmVzdWx0
LmFwcGVuZCgiSW1hZ2VNYXBMaW5rIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUlt
YWdlTWFwOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiSW1hZ2VNYXAiKTsKLSAgICBj
YXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGlzdE1hcmtlcjoKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIkxpc3RNYXJrZXIiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlV2Vi
QXJlYToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIldlYkFyZWEiKTsKLSAgICBjYXNl
IFdlYkFjY2Vzc2liaWxpdHlSb2xlSGVhZGluZzoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBl
bmQoIkhlYWRpbmciKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGlzdEJveDoKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxpc3RCb3giKTsKLSAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlSb2xlTGlzdEJveE9wdGlvbjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
Ikxpc3RCb3hPcHRpb24iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlVGFibGVIZWFk
ZXJDb250YWluZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJUYWJsZUhlYWRlckNv
bnRhaW5lciIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVEZWZpbml0aW9uOgotICAg
ICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiRGVmaW5pdGlvbiIpOwotICAgIGNhc2UgV2ViQWNj
ZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbkxpc3Q6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBw
ZW5kKCJEZXNjcmlwdGlvbkxpc3QiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlRGVz
Y3JpcHRpb25MaXN0VGVybToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkRlc2NyaXB0
aW9uTGlzdFRlcm0iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb25M
aXN0RGV0YWlsOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiRGVzY3JpcHRpb25MaXN0
RGV0YWlsIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUFubm90YXRpb246Ci0gICAg
ICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJBbm5vdGF0aW9uIik7Ci0gICAgY2FzZSBXZWJBY2Nl
c3NpYmlsaXR5Um9sZVNsaWRlclRodW1iOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgi
U2xpZGVyVGh1bWIiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGFuZG1hcmtBcHBs
aWNhdGlvbjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxhbmRtYXJrQXBwbGljYXRp
b24iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGFuZG1hcmtCYW5uZXI6Ci0gICAg
ICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMYW5kbWFya0Jhbm5lciIpOwotICAgIGNhc2UgV2Vi
QWNjZXNzaWJpbGl0eVJvbGVMYW5kbWFya0NvbXBsZW1lbnRhcnk6Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQuYXBwZW5kKCJMYW5kbWFya0NvbXBsZW1lbnRhcnkiKTsKLSAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlSb2xlTGFuZG1hcmtDb250ZW50SW5mbzoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5h
cHBlbmQoIkxhbmRtYXJrQ29udGVudEluZm8iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlTGFuZG1hcmtNYWluOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTGFuZG1hcmtN
YWluIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhbmRtYXJrTmF2aWdhdGlvbjoK
LSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxhbmRtYXJrTmF2aWdhdGlvbiIpOwotICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVMYW5kbWFya1NlYXJjaDoKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC5hcHBlbmQoIkxhbmRtYXJrU2VhcmNoIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZUFwcGxpY2F0aW9uTG9nOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQXBw
bGljYXRpb25Mb2ciKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQXBwbGljYXRpb25N
YXJxdWVlOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQXBwbGljYXRpb25NYXJxdWVl
Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUFwcGxpY2F0aW9uU3RhdHVzOgotICAg
ICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQXBwbGljYXRpb25TdGF0dXMiKTsKLSAgICBjYXNl
IFdlYkFjY2Vzc2liaWxpdHlSb2xlQXBwbGljYXRpb25UaW1lcjoKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC5hcHBlbmQoIkFwcGxpY2F0aW9uVGltZXIiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxp
dHlSb2xlRG9jdW1lbnQ6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJEb2N1bWVudCIp
OwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVEb2N1bWVudEFydGljbGU6Ci0gICAgICAg
IHJldHVybiByZXN1bHQuYXBwZW5kKCJEb2N1bWVudEFydGljbGUiKTsKLSAgICBjYXNlIFdlYkFj
Y2Vzc2liaWxpdHlSb2xlRG9jdW1lbnROb3RlOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVu
ZCgiRG9jdW1lbnROb3RlIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZURvY3VtZW50
UmVnaW9uOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiRG9jdW1lbnRSZWdpb24iKTsK
LSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlVXNlckludGVyZmFjZVRvb2x0aXA6Ci0gICAg
ICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJVc2VySW50ZXJmYWNlVG9vbHRpcCIpOwotICAgIGNh
c2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVUb2dnbGVCdXR0b246Ci0gICAgICAgIHJldHVybiByZXN1
bHQuYXBwZW5kKCJUb2dnbGVCdXR0b24iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xl
Q2FudmFzOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQ2FudmFzIik7Ci0gICAgY2Fz
ZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVBhcmFncmFwaDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5h
cHBlbmQoIlBhcmFncmFwaCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVEaXY6Ci0g
ICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJEaXYiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2li
aWxpdHlSb2xlTGFiZWw6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMYWJlbCIpOwot
ICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVGb3JtOgotICAgICAgICByZXR1cm4gcmVzdWx0
LmFwcGVuZCgiRm9ybSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVIb3Jpem9udGFs
UnVsZToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkhvcml6b250YWxSdWxlIik7Ci0g
ICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxlZ2VuZDoKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIkxlZ2VuZCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVBcHBsaWNh
dGlvbkFsZXJ0OgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQWxlcnQiKTsKLSAgICBj
YXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQXBwbGljYXRpb25BbGVydERpYWxvZzoKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIkFsZXJ0RGlhbG9nIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3Np
YmlsaXR5Um9sZUFwcGxpY2F0aW9uRGlhbG9nOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVu
ZCgiQXBwbGljYXRpb25EaWFsb2ciKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlRGly
ZWN0b3J5OgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiRGlyZWN0b3J5Iik7Ci0gICAg
Y2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZURvY3VtZW50TWF0aDoKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC5hcHBlbmQoIk1hdGgiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlRWRpdGFi
bGVUZXh0OgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiRWRpdGFibGVUZXh0Iik7Ci0g
ICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUZvb3RlcjoKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIkZvb3RlciIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVJZ25vcmVk
OgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiSWdub3JlZCIpOwotICAgIGNhc2UgV2Vi
QWNjZXNzaWJpbGl0eVJvbGVMaXN0SXRlbToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
Ikxpc3RJdGVtIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZU1lbnVMaXN0UG9wdXA6
Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJNZW51TGlzdFBvcHVwIik7Ci0gICAgY2Fz
ZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZU1lbnVMaXN0T3B0aW9uOgotICAgICAgICByZXR1cm4gcmVz
dWx0LmFwcGVuZCgiTWVudUxpc3RPcHRpb24iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlUHJlc2VudGF0aW9uYWw6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJQcmVzZW50
YXRpb25hbCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVTcGluQnV0dG9uOgotICAg
ICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiU3BpbkJ1dHRvbiIpOwotICAgIGNhc2UgV2ViQWNj
ZXNzaWJpbGl0eVJvbGVTcGluQnV0dG9uUGFydDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBl
bmQoIlNwaW5CdXR0b25QYXJ0Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVRhYkxp
c3Q6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJUYWJMaXN0Iik7Ci0gICAgY2FzZSBX
ZWJBY2Nlc3NpYmlsaXR5Um9sZVRhYlBhbmVsOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVu
ZCgiVGFiUGFuZWwiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlVGFiOgotICAgICAg
ICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVGFiIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5
Um9sZVRyZWVSb2xlOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVHJlZSIpOwotICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVUcmVlR3JpZDoKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIlRyZWVHcmlkIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVRyZWVJ
dGVtUm9sZToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlRyZWVJdGVtIik7Ci0gICAg
Y2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVVua25vd246Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIlVua25vd24iKTsKLSAgICB9Ci19Ci0KLXN0cmluZyBnZXRE
ZXNjcmlwdGlvbihjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCi17Ci0gICAg
c3RyaW5nIGRlc2NyaXB0aW9uID0gb2JqZWN0LmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpLnV0
ZjgoKTsKLSAgICByZXR1cm4gZGVzY3JpcHRpb24uaW5zZXJ0KDAsICJBWERlc2NyaXB0aW9uOiAi
KTsKLX0KLQotc3RyaW5nIGdldEhlbHBUZXh0KGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3Qm
IG9iamVjdCkKLXsKLSAgICBzdHJpbmcgaGVscFRleHQgPSBvYmplY3QuaGVscFRleHQoKS51dGY4
KCk7Ci0gICAgcmV0dXJuIGhlbHBUZXh0Lmluc2VydCgwLCAiQVhIZWxwOiAiKTsKLX0KLQotc3Ry
aW5nIGdldFN0cmluZ1ZhbHVlKGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkK
LXsKLSAgICBzdHJpbmcgdmFsdWU7Ci0gICAgaWYgKG9iamVjdC5yb2xlVmFsdWUoKSA9PSBXZWJB
Y2Nlc3NpYmlsaXR5Um9sZUNvbG9yV2VsbCkgewotICAgICAgICBpbnQgciwgZywgYjsKLSAgICAg
ICAgY2hhciBidWZmZXJbMTAwXTsKLSAgICAgICAgb2JqZWN0LmNvbG9yVmFsdWUociwgZywgYik7
Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICJyZ2IgJTcuNWYgJTcu
NWYgJTcuNWYgMSIsIHIgLyAyNTUuLCBnIC8gMjU1LiwgYiAvIDI1NS4pOwotICAgICAgICB2YWx1
ZSA9IGJ1ZmZlcjsKLSAgICB9IGVsc2UKLSAgICAgICAgdmFsdWUgPSBvYmplY3Quc3RyaW5nVmFs
dWUoKS51dGY4KCk7Ci0gICAgcmV0dXJuIHZhbHVlLmluc2VydCgwLCAiQVhWYWx1ZTogIik7Ci19
Ci0KLXN0cmluZyBnZXRSb2xlKGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkK
LXsKLSAgICBzdHJpbmcgcm9sZVN0cmluZyA9IHJvbGVUb1N0cmluZyhvYmplY3Qucm9sZVZhbHVl
KCkpOwotCi0gICAgLy8gU3BlY2lhbC1jYXNlIGNhbnZhcyB3aXRoIGZhbGxiYWNrIGNvbnRlbnQg
YmVjYXVzZSBDaHJvbWl1bSB3YW50cyB0bwotICAgIC8vIHRyZWF0IHRoaXMgYXMgZXNzZW50aWFs
bHkgYSBzZXBhcmF0ZSByb2xlIHRoYXQgaXQgY2FuIG1hcCBkaWZmZXJlbnRseSBkZXBlbmRpbmcK
LSAgICAvLyBvbiB0aGUgcGxhdGZvcm0uCi0gICAgaWYgKG9iamVjdC5yb2xlVmFsdWUoKSA9PSBX
ZWJBY2Nlc3NpYmlsaXR5Um9sZUNhbnZhcyAmJiBvYmplY3QuY2FudmFzSGFzRmFsbGJhY2tDb250
ZW50KCkpCi0gICAgICAgIHJvbGVTdHJpbmcgKz0gIldpdGhGYWxsYmFja0NvbnRlbnQiOwotCi0g
ICAgcmV0dXJuIHJvbGVTdHJpbmc7Ci19Ci0KLXN0cmluZyBnZXRUaXRsZShjb25zdCBXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCi17Ci0gICAgc3RyaW5nIHRpdGxlID0gb2JqZWN0LnRp
dGxlKCkudXRmOCgpOwotICAgIHJldHVybiB0aXRsZS5pbnNlcnQoMCwgIkFYVGl0bGU6ICIpOwot
fQotCi1zdHJpbmcgZ2V0T3JpZW50YXRpb24oY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYg
b2JqZWN0KQotewotICAgIGlmIChvYmplY3QuaXNWZXJ0aWNhbCgpKQotICAgICAgICByZXR1cm4g
IkFYT3JpZW50YXRpb246IEFYVmVydGljYWxPcmllbnRhdGlvbiI7Ci0KLSAgICByZXR1cm4gIkFY
T3JpZW50YXRpb246IEFYSG9yaXpvbnRhbE9yaWVudGF0aW9uIjsKLX0KLQotc3RyaW5nIGdldFZh
bHVlRGVzY3JpcHRpb24oY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KQotewot
ICAgIHN0cmluZyB2YWx1ZURlc2NyaXB0aW9uID0gb2JqZWN0LnZhbHVlRGVzY3JpcHRpb24oKS51
dGY4KCk7Ci0gICAgcmV0dXJuIHZhbHVlRGVzY3JpcHRpb24uaW5zZXJ0KDAsICJBWFZhbHVlRGVz
Y3JpcHRpb246ICIpOwotfQotCi1zdHJpbmcgZ2V0QXR0cmlidXRlcyhjb25zdCBXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0JiBvYmplY3QpCi17Ci0gICAgLy8gRklYTUU6IENvbmNhdGVuYXRlIGFsbCBh
dHRyaWJ1dGVzIG9mIHRoZSBBY2Nlc3NpYmlsaXR5T2JqZWN0LgotICAgIHN0cmluZyBhdHRyaWJ1
dGVzKGdldFRpdGxlKG9iamVjdCkpOwotICAgIGF0dHJpYnV0ZXMuYXBwZW5kKCJcbiIpOwotICAg
IGF0dHJpYnV0ZXMuYXBwZW5kKGdldFJvbGUob2JqZWN0KSk7Ci0gICAgYXR0cmlidXRlcy5hcHBl
bmQoIlxuIik7Ci0gICAgYXR0cmlidXRlcy5hcHBlbmQoZ2V0RGVzY3JpcHRpb24ob2JqZWN0KSk7
Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZXM7Ci19Ci0KLQotLy8gQ29sbGVjdHMgYXR0cmlidXRlcyBp
bnRvIGEgc3RyaW5nLCBkZWxpbWl0ZWQgYnkgZGFzaGVzLiBVc2VkIGJ5IGFsbCBtZXRob2RzCi0v
LyB0aGF0IG91dHB1dCBsaXN0cyBvZiBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzT2ZMaW5rZWRVSUVs
ZW1lbnRzQ2FsbGJhY2ssCi0vLyBBdHRyaWJ1dGVzT2ZDaGlsZHJlbkNhbGxiYWNrLCBldGMuCi1j
bGFzcyBBdHRyaWJ1dGVzQ29sbGVjdG9yIHsKLXB1YmxpYzoKLSAgICB2b2lkIGNvbGxlY3RBdHRy
aWJ1dGVzKGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkKLSAgICB7Ci0gICAg
ICAgIG1fYXR0cmlidXRlcy5hcHBlbmQoIlxuLS0tLS0tLS0tLS0tXG4iKTsKLSAgICAgICAgbV9h
dHRyaWJ1dGVzLmFwcGVuZChnZXRBdHRyaWJ1dGVzKG9iamVjdCkpOwotICAgIH0KLQotICAgIHN0
cmluZyBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9Ci0KLXByaXZh
dGU6Ci0gICAgc3RyaW5nIG1fYXR0cmlidXRlczsKLX07Ci0KLX0KLQotQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0JiBvYmplY3QsIEZhY3RvcnkqIGZhY3RvcnkpCi0gICAgOiBtX2FjY2Vzc2liaWxpdHlPYmpl
Y3Qob2JqZWN0KQotICAgICwgbV9mYWN0b3J5KGZhY3RvcnkpCi17Ci0KLSAgICBXRUJLSVRfQVNT
RVJUKGZhY3RvcnkpOwotCi0gICAgLy8KLSAgICAvLyBQcm9wZXJ0aWVzCi0gICAgLy8KLQotICAg
IGJpbmRQcm9wZXJ0eSgicm9sZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlR2V0dGVy
Q2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgidGl0bGUiLCAmQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6dGl0bGVHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJkZXNjcmlwdGlv
biIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbkdldHRlckNhbGxiYWNrKTsK
LSAgICBiaW5kUHJvcGVydHkoImhlbHBUZXh0IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhl
bHBUZXh0R2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgic3RyaW5nVmFsdWUiLCAm
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFsdWVHZXR0ZXJDYWxsYmFjayk7Ci0gICAg
YmluZFByb3BlcnR5KCJ4IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnhHZXR0ZXJDYWxsYmFj
ayk7Ci0gICAgYmluZFByb3BlcnR5KCJ5IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnlHZXR0
ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJ3aWR0aCIsICZBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp3aWR0aEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImhlaWdodCIs
ICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWlnaHRHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmlu
ZFByb3BlcnR5KCJpbnRWYWx1ZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZUdl
dHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoIm1pblZhbHVlIiwgJkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6Om1pblZhbHVlR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgi
bWF4VmFsdWUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWF4VmFsdWVHZXR0ZXJDYWxsYmFj
ayk7Ci0gICAgYmluZFByb3BlcnR5KCJ2YWx1ZURlc2NyaXB0aW9uIiwgJkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnZhbHVlRGVzY3JpcHRpb25HZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3Bl
cnR5KCJjaGlsZHJlbkNvdW50IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxkcmVuQ291
bnRHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJpbnNlcnRpb25Qb2ludExpbmVO
dW1iZXIiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVy
R2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgic2VsZWN0ZWRUZXh0UmFuZ2UiLCAm
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2VHZXR0ZXJDYWxsYmFjayk7
Ci0gICAgYmluZFByb3BlcnR5KCJpc0VuYWJsZWQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNFbmFibGVkR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaXNSZXF1aXJlZCIs
ICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1JlcXVpcmVkR2V0dGVyQ2FsbGJhY2spOwotICAg
IGJpbmRQcm9wZXJ0eSgiaXNGb2N1c2VkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9j
dXNlZEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImlzRm9jdXNhYmxlIiwgJkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNhYmxlR2V0dGVyQ2FsbGJhY2spOwotICAgIGJp
bmRQcm9wZXJ0eSgiaXNTZWxlY3RlZCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVj
dGVkR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaXNTZWxlY3RhYmxlIiwgJkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZUdldHRlckNhbGxiYWNrKTsKLSAgICBi
aW5kUHJvcGVydHkoImlzTXVsdGlTZWxlY3RhYmxlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzTXVsdGlTZWxlY3RhYmxlR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaXNT
ZWxlY3RlZE9wdGlvbkFjdGl2ZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVk
T3B0aW9uQWN0aXZlR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaXNFeHBhbmRl
ZCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0V4cGFuZGVkR2V0dGVyQ2FsbGJhY2spOwot
ICAgIGJpbmRQcm9wZXJ0eSgiaXNDaGVja2VkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
Q2hlY2tlZEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImlzVmlzaWJsZSIsICZB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGVHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmlu
ZFByb3BlcnR5KCJpc09mZlNjcmVlbiIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNj
cmVlbkdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImlzQ29sbGFwc2VkIiwgJkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ29sbGFwc2VkR2V0dGVyQ2FsbGJhY2spOwotICAgIGJp
bmRQcm9wZXJ0eSgiaGFzUG9wdXAiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9wdXBH
ZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJpc1ZhbGlkIiwgJkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzVmFsaWRHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJp
c1JlYWRPbmx5IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVhZE9ubHlHZXR0ZXJDYWxs
YmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJvcmllbnRhdGlvbiIsICZBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpvcmllbnRhdGlvbkdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImNs
aWNrUG9pbnRYIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRYR2V0dGVyQ2Fs
bGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiY2xpY2tQb2ludFkiLCAmQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6Y2xpY2tQb2ludFlHZXR0ZXJDYWxsYmFjayk7Ci0KLSAgICAvLwotICAgIC8vIE1l
dGhvZHMKLSAgICAvLwotCi0gICAgYmluZE1ldGhvZCgiYWxsQXR0cmlidXRlcyIsICZBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2Qo
ImF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50c0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJh
dHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJp
YnV0ZXNPZkRvY3VtZW50TGlua3NDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiYXR0cmlidXRl
c09mQ2hpbGRyZW4iLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRy
ZW5DYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgibGluZUZvckluZGV4IiwgJkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmxpbmVGb3JJbmRleENhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJib3Vu
ZHNGb3JSYW5nZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZUNhbGxi
YWNrKTsKLSAgICBiaW5kTWV0aG9kKCJzdHJpbmdGb3JSYW5nZSIsICZBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzdHJpbmdGb3JSYW5nZUNhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJjaGlsZEF0
SW5kZXgiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRBdEluZGV4Q2FsbGJhY2spOwot
ICAgIGJpbmRNZXRob2QoImVsZW1lbnRBdFBvaW50IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmVsZW1lbnRBdFBvaW50Q2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoImF0dHJpYnV0ZXNPZkNv
bHVtbkhlYWRlcnMiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1u
SGVhZGVyc0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZSb3dIZWFkZXJz
IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnNDYWxsYmFj
ayk7Ci0gICAgYmluZE1ldGhvZCgiYXR0cmlidXRlc09mQ29sdW1ucyIsICZBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2Qo
ImF0dHJpYnV0ZXNPZlJvd3MiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
Um93c0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMi
LCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzQ2FsbGJh
Y2spOwotICAgIGJpbmRNZXRob2QoImF0dHJpYnV0ZXNPZkhlYWRlciIsICZBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXJDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgi
aW5kZXhJblRhYmxlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5UYWJsZUNhbGxi
YWNrKTsKLSAgICBiaW5kTWV0aG9kKCJyb3dJbmRleFJhbmdlIiwgJkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnJvd0luZGV4UmFuZ2VDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiY29sdW1uSW5k
ZXhSYW5nZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5JbmRleFJhbmdlQ2FsbGJh
Y2spOwotICAgIGJpbmRNZXRob2QoImNlbGxGb3JDb2x1bW5BbmRSb3ciLCAmQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFuZFJvd0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9k
KCJ0aXRsZVVJRWxlbWVudCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVu
dENhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRTZWxlY3RlZFRleHRSYW5nZSIsICZBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZUNhbGxiYWNrKTsKLSAgICBi
aW5kTWV0aG9kKCJhdHRyaWJ1dGVWYWx1ZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVWYWx1ZUNhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJpc0F0dHJpYnV0ZVNldHRhYmxl
IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU2V0dGFibGVDYWxsYmFjayk7
Ci0gICAgYmluZE1ldGhvZCgiaXNQcmVzc0FjdGlvblN1cHBvcnRlZCIsICZBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc1ByZXNzQWN0aW9uU3VwcG9ydGVkQ2FsbGJhY2spOwotICAgIGJpbmRNZXRo
b2QoImlzSW5jcmVtZW50QWN0aW9uU3VwcG9ydGVkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzSW5jcmVtZW50QWN0aW9uU3VwcG9ydGVkQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoImlz
RGVjcmVtZW50QWN0aW9uU3VwcG9ydGVkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRGVj
cmVtZW50QWN0aW9uU3VwcG9ydGVkQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoInBhcmVudEVs
ZW1lbnQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyZW50RWxlbWVudENhbGxiYWNrKTsK
LSAgICBiaW5kTWV0aG9kKCJpbmNyZW1lbnQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5j
cmVtZW50Q2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoImRlY3JlbWVudCIsICZBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpkZWNyZW1lbnRDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgic2hvd01l
bnUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2hvd01lbnVDYWxsYmFjayk7Ci0gICAgYmlu
ZE1ldGhvZCgicHJlc3MiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJlc3NDYWxsYmFjayk7
Ci0gICAgYmluZE1ldGhvZCgiaXNFcXVhbCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0Vx
dWFsQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoImFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyIiwg
JkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2sp
OwotICAgIGJpbmRNZXRob2QoInJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyIiwgJkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2spOwotICAg
IGJpbmRNZXRob2QoInRha2VGb2N1cyIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9j
dXNDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgic2Nyb2xsVG9NYWtlVmlzaWJsZSIsICZBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlQ2FsbGJhY2spOwotICAgIGJp
bmRNZXRob2QoInNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMiLCAmQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1c0NhbGxiYWNrKTsKLSAg
ICBiaW5kTWV0aG9kKCJzY3JvbGxUb0dsb2JhbFBvaW50IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnRDYWxsYmFjayk7Ci0KLSAgICBiaW5kRmFsbGJhY2tNZXRo
b2QoJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmZhbGxiYWNrQ2FsbGJhY2spOwotfQotCi1BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50KiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZEF0SW5k
ZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgcmV0dXJuIG1fZmFjdG9yeS0+Z2V0T3JDcmVhdGUo
YWNjZXNzaWJpbGl0eU9iamVjdCgpLmNoaWxkQXQoaW5kZXgpKTsKLX0KLQotYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc0VxdWFsKGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9i
amVjdCYgb3RoZXIpCi17Ci0gICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlPYmplY3QoKS5lcXVhbHMo
b3RoZXIpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om5vdGlmaWNhdGlvblJl
Y2VpdmVkKGNvbnN0IGNoYXIqIG5vdGlmaWNhdGlvbk5hbWUpCi17Ci0gICAgc2l6ZV90IGNhbGxi
YWNrQ291bnQgPSBtX25vdGlmaWNhdGlvbkNhbGxiYWNrcy5zaXplKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjYWxsYmFja0NvdW50OyBpKyspIHsKLSAgICAgICAgQ3BwVmFyaWFudCBu
b3RpZmljYXRpb25OYW1lQXJndW1lbnQ7Ci0gICAgICAgIG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVu
dC5zZXQobm90aWZpY2F0aW9uTmFtZSk7Ci0gICAgICAgIENwcFZhcmlhbnQgaW52b2tlUmVzdWx0
OwotICAgICAgICBtX25vdGlmaWNhdGlvbkNhbGxiYWNrc1tpXS5pbnZva2VEZWZhdWx0KCZub3Rp
ZmljYXRpb25OYW1lQXJndW1lbnQsIDEsIGludm9rZVJlc3VsdCk7Ci0gICAgfQotfQotCi0vLwot
Ly8gUHJvcGVydGllcwotLy8KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlR2V0
dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGdldFJv
bGUoYWNjZXNzaWJpbGl0eU9iamVjdCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6dGl0bGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVz
dWx0LT5zZXQoZ2V0VGl0bGUoYWNjZXNzaWJpbGl0eU9iamVjdCgpKSk7Ci19Ci0KLXZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb25HZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoZ2V0RGVzY3JpcHRpb24oYWNjZXNzaWJpbGl0
eU9iamVjdCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRleHRH
ZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoZ2V0
SGVscFRleHQoYWNjZXNzaWJpbGl0eU9iamVjdCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c3RyaW5nVmFsdWVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgcmVzdWx0LT5zZXQoZ2V0U3RyaW5nVmFsdWUoYWNjZXNzaWJpbGl0eU9iamVjdCgp
KSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eEdldHRlckNhbGxiYWNrKENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0
KCkuYm91bmRpbmdCb3hSZWN0KCkueCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6eUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNl
dChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuYm91bmRpbmdCb3hSZWN0KCkueSk7Ci19Ci0KLXZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6d2lkdGhHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmJvdW5kaW5n
Qm94UmVjdCgpLndpZHRoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWln
aHRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQo
YWNjZXNzaWJpbGl0eU9iamVjdCgpLmJvdW5kaW5nQm94UmVjdCgpLmhlaWdodCk7Ci19Ci0KLXZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWVHZXR0ZXJDYWxsYmFjayhDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFjY2Vzc2liaWxpdHlPYmplY3QoKS5zdXBwb3J0c1Jh
bmdlVmFsdWUoKSkKLSAgICAgICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLnZh
bHVlRm9yUmFuZ2UoKSk7Ci0gICAgZWxzZSBpZiAoYWNjZXNzaWJpbGl0eU9iamVjdCgpLnJvbGVW
YWx1ZSgpID09IFdlYkFjY2Vzc2liaWxpdHlSb2xlSGVhZGluZykKLSAgICAgICAgcmVzdWx0LT5z
ZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmhlYWRpbmdMZXZlbCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIHJlc3VsdC0+c2V0KGF0b2koYWNjZXNzaWJpbGl0eU9iamVjdCgpLnN0cmluZ1ZhbHVlKCku
dXRmOCgpLmRhdGEoKSkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1pblZh
bHVlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0
KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5taW5WYWx1ZUZvclJhbmdlKCkpOwotfQotCi12b2lkIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1heFZhbHVlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5tYXhWYWx1
ZUZvclJhbmdlKCkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnZhbHVlRGVz
Y3JpcHRpb25HZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0
LT5zZXQoZ2V0VmFsdWVEZXNjcmlwdGlvbihhY2Nlc3NpYmlsaXR5T2JqZWN0KCkpKTsKLX0KLQot
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZHJlbkNvdW50R2V0dGVyQ2FsbGJhY2so
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGludCBjb3VudCA9IDE7IC8vIFJvb3Qgb2JqZWN0
IGFsd2F5cyBoYXMgb25seSBvbmUgY2hpbGQsIHRoZSBXZWJWaWV3LgotICAgIGlmICghaXNSb290
KCkpCi0gICAgICAgIGNvdW50ID0gYWNjZXNzaWJpbGl0eU9iamVjdCgpLmNoaWxkQ291bnQoKTsK
LSAgICByZXN1bHQtPnNldChjb3VudCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIGlmICghYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzRm9jdXNlZCgpKSB7Ci0g
ICAgICAgIHJlc3VsdC0+c2V0KC0xKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlu
dCBsaW5lTnVtYmVyID0gYWNjZXNzaWJpbGl0eU9iamVjdCgpLnNlbGVjdGlvbkVuZExpbmVOdW1i
ZXIoKTsKLSAgICByZXN1bHQtPnNldChsaW5lTnVtYmVyKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCA9IGFjY2Vzc2liaWxpdHlP
YmplY3QoKS5zZWxlY3Rpb25TdGFydCgpOwotICAgIHVuc2lnbmVkIHNlbGVjdGlvbkVuZCA9IGFj
Y2Vzc2liaWxpdHlPYmplY3QoKS5zZWxlY3Rpb25FbmQoKTsKLSAgICBjaGFyIGJ1ZmZlclsxMDBd
OwotICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICJ7JWQsICVkfSIsIHNlbGVj
dGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQgLSBzZWxlY3Rpb25TdGFydCk7Ci0KLSAgICByZXN1bHQt
PnNldChzdGQ6OnN0cmluZyhidWZmZXIpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc0VuYWJsZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
cmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzRW5hYmxlZCgpKTsKLX0KLQotdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1JlcXVpcmVkR2V0dGVyQ2FsbGJhY2soQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5p
c1JlcXVpcmVkKCkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNl
ZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChh
Y2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNGb2N1c2VkKCkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzRm9jdXNhYmxlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5jYW5TZXRGb2N1c0F0
dHJpYnV0ZSgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVk
R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGFj
Y2Vzc2liaWxpdHlPYmplY3QoKS5pc1NlbGVjdGVkKCkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuY2FuU2V0U2VsZWN0
ZWRBdHRyaWJ1dGUoKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNNdWx0
aVNlbGVjdGFibGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVz
dWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzTXVsdGlTZWxlY3RhYmxlKCkpOwotfQot
Ci12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWRPcHRpb25BY3RpdmVHZXR0
ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNz
aWJpbGl0eU9iamVjdCgpLmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUoKSk7Ci19Ci0KLXZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFeHBhbmRlZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldCghYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzQ29s
bGFwc2VkKCkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ2hlY2tlZEdl
dHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nl
c3NpYmlsaXR5T2JqZWN0KCkuaXNDaGVja2VkKCkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzVmlzaWJsZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNWaXNpYmxlKCkpOwotfQot
Ci12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzT2ZmU2NyZWVuR2V0dGVyQ2FsbGJhY2so
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmpl
Y3QoKS5pc09mZlNjcmVlbigpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c0NvbGxhcHNlZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1
bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNDb2xsYXBzZWQoKSk7Ci19Ci0KLXZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9wdXBHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmFyaWFI
YXNQb3B1cCgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ZhbGlkR2V0
dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KCFhY2Nl
c3NpYmlsaXR5T2JqZWN0KCkuaXNEZXRhY2hlZCgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc1JlYWRPbmx5R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5pc1JlYWRPbmx5KCkpOwot
fQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0aW9uR2V0dGVyQ2FsbGJh
Y2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGdldE9yaWVudGF0aW9u
KGFjY2Vzc2liaWxpdHlPYmplY3QoKSkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmNsaWNrUG9pbnRYR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5jbGlja1BvaW50KCkueCk7Ci19Ci0K
LXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2ludFlHZXR0ZXJDYWxsYmFjayhD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVj
dCgpLmNsaWNrUG9pbnQoKS55KTsKLX0KLQotLy8KLS8vIE1ldGhvZHMKLS8vCi0KLXZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChnZXRBdHRy
aWJ1dGVzKGFjY2Vzc2liaWxpdHlPYmplY3QoKSkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHNDYWxsYmFjayhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1l
bnRMaW5rc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbkNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgQXR0cmlidXRlc0NvbGxl
Y3RvciBjb2xsZWN0b3I7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGFjY2Vzc2liaWxpdHlPYmplY3Qo
KS5jaGlsZENvdW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkK
LSAgICAgICAgY29sbGVjdG9yLmNvbGxlY3RBdHRyaWJ1dGVzKGFjY2Vzc2liaWxpdHlPYmplY3Qo
KS5jaGlsZEF0KGkpKTsKLSAgICByZXN1bHQtPnNldChjb2xsZWN0b3IuYXR0cmlidXRlcygpKTsK
LX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0cml6ZWRBdHRyaWJ1dGVO
YW1lc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpsaW5lRm9ySW5kZXhDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmICghYXJndW1lbnRzLnNpemUoKSB8fCAh
YXJndW1lbnRzWzBdLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgaW5kZXggPSBhcmd1bWVudHNbMF0udG9J
bnQzMigpOwotCi0gICAgV2ViVmVjdG9yPGludD4gbGluZUJyZWFrczsKLSAgICBhY2Nlc3NpYmls
aXR5T2JqZWN0KCkubGluZUJyZWFrcyhsaW5lQnJlYWtzKTsKLSAgICBpbnQgbGluZSA9IDA7Ci0g
ICAgaW50IHZlY3RvclNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KGxpbmVCcmVha3Muc2l6ZSgpKTsK
LSAgICB3aGlsZSAobGluZSA8IHZlY3RvclNpemUgJiYgbGluZUJyZWFrc1tsaW5lXSA8PSBpbmRl
eCkKLSAgICAgICAgbGluZSsrOwotICAgIHJlc3VsdC0+c2V0KGxpbmUpOwotfQotCi12b2lkIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclJhbmdlQ2FsbGJh
Y2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxk
QXRJbmRleENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgaWYgKCFhcmd1bWVudHMuc2l6ZSgpIHx8ICFhcmd1bWVudHNb
MF0uaXNOdW1iZXIoKSkgewotICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGNoaWxkID0gZ2V0Q2hp
bGRBdEluZGV4KGFyZ3VtZW50c1swXS50b0ludDMyKCkpOwotICAgIGlmICghY2hpbGQpIHsKLSAg
ICAgICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBy
ZXN1bHQtPnNldCgqKGNoaWxkLT5nZXRBc0NwcFZhcmlhbnQoKSkpOwotfQotCi12b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmVsZW1lbnRBdFBvaW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNl
dE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIgfHwgIWFyZ3VtZW50c1sw
XS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaW50IHggPSBhcmd1bWVudHNbMF0udG9JbnQzMigpOwotICAgIGludCB5ID0gYXJn
dW1lbnRzWzFdLnRvSW50MzIoKTsKLSAgICBXZWJQb2ludCBwb2ludCh4LCB5KTsKLSAgICBXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0IG9iaiA9IGFjY2Vzc2liaWxpdHlPYmplY3QoKS5oaXRUZXN0KHBv
aW50KTsKLSAgICBpZiAob2JqLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZXN1
bHQtPnNldCgqKG1fZmFjdG9yeS0+Z2V0T3JDcmVhdGUob2JqKS0+Z2V0QXNDcHBWYXJpYW50KCkp
KTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5I
ZWFkZXJzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0K
LXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uc0NhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1
bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1
dGVzT2ZSb3dzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxsc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXJDYWxs
YmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5k
ZXhJblRhYmxlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnJvd0luZGV4UmFuZ2VDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uSW5kZXhSYW5nZUNhbGxiYWNrKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5k
Um93Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnRpdGxlVUlFbGVtZW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Qgb2JqID0gYWNjZXNz
aWJpbGl0eU9iamVjdCgpLnRpdGxlVUlFbGVtZW50KCk7Ci0gICAgaWYgKG9iai5pc051bGwoKSkg
ewotICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIHJlc3VsdC0+c2V0KCoobV9mYWN0b3J5LT5nZXRPckNyZWF0ZShvYmopLT5nZXRBc0NwcFZh
cmlhbnQoKSkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVk
VGV4dFJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JmFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpICE9IDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNb
MV0uaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHNlbGVjdGlvblN0YXJ0
ID0gYXJndW1lbnRzWzBdLnRvSW50MzIoKTsKLSAgICBpbnQgc2VsZWN0aW9uRW5kID0gc2VsZWN0
aW9uU3RhcnQgKyBhcmd1bWVudHNbMV0udG9JbnQzMigpOwotICAgIGFjY2Vzc2liaWxpdHlPYmpl
Y3QoKS5zZXRTZWxlY3RlZFRleHRSYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTsK
LX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVWYWx1ZUNhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1
bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJp
YnV0ZVNldHRhYmxlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEgJiYgIWFy
Z3VtZW50c1swXS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RyaW5nIGF0dHJpYnV0ZSA9IGFyZ3VtZW50c1sw
XS50b1N0cmluZygpOwotICAgIGJvb2wgc2V0dGFibGUgPSBmYWxzZTsKLSAgICBpZiAoYXR0cmli
dXRlID09ICJBWFZhbHVlIikKLSAgICAgICAgc2V0dGFibGUgPSBhY2Nlc3NpYmlsaXR5T2JqZWN0
KCkuY2FuU2V0VmFsdWVBdHRyaWJ1dGUoKTsKLSAgICByZXN1bHQtPnNldChzZXR0YWJsZSk7Ci19
Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNQcmVzc0FjdGlvblN1cHBvcnRlZENh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuY2FuUHJlc3MoKSk7Ci19Ci0KLXZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJbmNyZW1lbnRBY3Rpb25TdXBwb3J0ZWRDYWxs
YmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
cmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmNhbkluY3JlbWVudCgpKTsKLX0KLQot
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0RlY3JlbWVudEFjdGlvblN1cHBvcnRlZENh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuY2FuRGVjcmVtZW50KCkpOwotfQot
Ci12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnRDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCogcGFyZW50ID0gbV9mYWN0b3J5LT5nZXRPckNyZWF0ZShhY2Nlc3NpYmls
aXR5T2JqZWN0KCkucGFyZW50T2JqZWN0KCkpOwotICAgIGlmICghcGFyZW50KSB7Ci0gICAgICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVzdWx0
LT5zZXQoKihwYXJlbnQtPmdldEFzQ3BwVmFyaWFudCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aW5jcmVtZW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGFjY2Vzc2liaWxpdHlPYmplY3QoKS5pbmNyZW1l
bnQoKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpkZWNyZW1lbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgYWNjZXNzaWJpbGl0eU9iamVjdCgpLmRlY3JlbWVudCgpOwot
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnNob3dNZW51Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnByZXNzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIGFjY2Vzc2liaWxpdHlPYmplY3QoKS5wcmVzcygpOwotICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXF1
YWxDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBd
LmlzT2JqZWN0KCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICByZXN1bHQtPnNldChhcmd1bWVudHNbMF0uaXNFcXVhbCgqZ2V0QXND
cHBWYXJpYW50KCkpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3Rp
ZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8
ICFhcmd1bWVudHNbMF0uaXNPYmplY3QoKSkgewotICAgICAgICByZXN1bHQtPnNldE51bGwoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzLnB1
c2hfYmFjayhhcmd1bWVudHNbMF0pOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJh
Y2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9jdXNDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgYWNjZXNzaWJpbGl0eU9iamVj
dCgpLnNldEZvY3VzZWQodHJ1ZSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZUNhbGxiYWNrKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBhY2Nlc3NpYmls
aXR5T2JqZWN0KCkuc2Nyb2xsVG9NYWtlVmlzaWJsZSgpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGVX
aXRoU3ViRm9jdXNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotCi0gICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgIT0gNAotICAgICAgICB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkK
LSAgICAgICAgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpCi0gICAgICAgIHx8ICFhcmd1bWVu
dHNbMl0uaXNOdW1iZXIoKQotICAgICAgICB8fCAhYXJndW1lbnRzWzNdLmlzTnVtYmVyKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGludCB4ID0gYXJndW1lbnRzWzBdLnRvSW50MzIoKTsKLSAg
ICBpbnQgeSA9IGFyZ3VtZW50c1sxXS50b0ludDMyKCk7Ci0gICAgaW50IHdpZHRoID0gYXJndW1l
bnRzWzJdLnRvSW50MzIoKTsKLSAgICBpbnQgaGVpZ2h0ID0gYXJndW1lbnRzWzNdLnRvSW50MzIo
KTsKLSAgICBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuc2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJG
b2N1cyhXZWJSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICByZXN1bHQtPnNldE51bGwo
KTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50
Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpICE9IDIKLSAgICAgICAgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpCi0gICAgICAgIHx8
ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHgg
PSBhcmd1bWVudHNbMF0udG9JbnQzMigpOwotICAgIGludCB5ID0gYXJndW1lbnRzWzFdLnRvSW50
MzIoKTsKLQotICAgIGFjY2Vzc2liaWxpdHlPYmplY3QoKS5zY3JvbGxUb0dsb2JhbFBvaW50KFdl
YlBvaW50KHgsIHkpKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpmYWxsYmFja0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCAm
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgot
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi1Sb290QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Um9vdEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCAm
b2JqZWN0LCBGYWN0b3J5ICpmYWN0b3J5KQotICAgIDogQWNjZXNzaWJpbGl0eVVJRWxlbWVudChv
YmplY3QsIGZhY3RvcnkpIHsgfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBSb290QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAg
IGlmIChpbmRleCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZmFjdG9yeSgpLT5n
ZXRPckNyZWF0ZShhY2Nlc3NpYmlsaXR5T2JqZWN0KCkpOwotfQotCi0KLUFjY2Vzc2liaWxpdHlV
SUVsZW1lbnRMaXN0IDo6fkFjY2Vzc2liaWxpdHlVSUVsZW1lbnRMaXN0KCkKLXsKLSAgICBjbGVh
cigpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRMaXN0OjpjbGVhcigpCi17Ci0g
ICAgZm9yIChFbGVtZW50TGlzdDo6aXRlcmF0b3IgaSA9IG1fZWxlbWVudHMuYmVnaW4oKTsgaSAh
PSBtX2VsZW1lbnRzLmVuZCgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSAoKmkpOwotICAgIG1fZWxl
bWVudHMuY2xlYXIoKTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogQWNjZXNzaWJpbGl0
eVVJRWxlbWVudExpc3Q6OmdldE9yQ3JlYXRlKGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3Qm
IG9iamVjdCkKLXsKLSAgICBpZiAob2JqZWN0LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHNpemVfdCBlbGVtZW50Q291bnQgPSBtX2VsZW1lbnRzLnNpemUoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGVsZW1lbnRDb3VudDsgaSsrKSB7Ci0gICAgICAgIGlmIChtX2Vs
ZW1lbnRzW2ldLT5pc0VxdWFsKG9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gbV9lbGVtZW50
c1tpXTsKLSAgICB9Ci0KLSAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50ID0gbmV3
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQob2JqZWN0LCB0aGlzKTsKLSAgICBtX2VsZW1lbnRzLnB1
c2hfYmFjayhlbGVtZW50KTsKLSAgICByZXR1cm4gZWxlbWVudDsKLX0KLQotQWNjZXNzaWJpbGl0
eVVJRWxlbWVudCogQWNjZXNzaWJpbGl0eVVJRWxlbWVudExpc3Q6OmNyZWF0ZVJvb3QoY29uc3Qg
V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KQotewotICAgIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQqIGVsZW1lbnQgPSBuZXcgUm9vdEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQob2JqZWN0LCB0
aGlzKTsKLSAgICBtX2VsZW1lbnRzLnB1c2hfYmFjayhlbGVtZW50KTsKLSAgICByZXR1cm4gZWxl
bWVudDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmggYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Q2hyb21pdW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZjYjFhMjM1NmRh
MDcwYjFhMmUxODRmYTQwZWYyODg5YWM3OTA5MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3NyYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uaAorKysgL2Rldi9udWxsCkBA
IC0xLDE3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW1faAot
I2RlZmluZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW1faAotCi0jaW5jbHVkZSAiQ3Bw
Qm91bmRDbGFzcy5oIgotI2luY2x1ZGUgIldlYkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKLSNpbmNs
dWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotY2xhc3MgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudCA6IHB1YmxpYyBDcHBCb3VuZENsYXNzIHsKLXB1YmxpYzoKLSAgICBj
bGFzcyBGYWN0b3J5IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfkZhY3RvcnkoKSB7
IH0KLSAgICAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBnZXRPckNyZWF0ZShj
b25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmKSA9IDA7Ci0gICAgfTsKLQotICAg
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0JiwgRmFjdG9yeSopOwotCi0gICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBn
ZXRDaGlsZEF0SW5kZXgodW5zaWduZWQpOwotICAgIHZpcnR1YWwgYm9vbCBpc1Jvb3QoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0VxdWFsKGNvbnN0IFdlYktp
dDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmaWNh
dGlvblJlY2VpdmVkKGNvbnN0IGNoYXIgKm5vdGlmaWNhdGlvbk5hbWUpOwotCi1wcm90ZWN0ZWQ6
Ci0gICAgY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBhY2Nlc3NpYmlsaXR5
T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9hY2Nlc3NpYmlsaXR5T2JqZWN0OyB9Ci0KLSAgICBG
YWN0b3J5KiBmYWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9mYWN0b3J5OyB9Ci0KLXByaXZhdGU6
Ci0gICAgLy8gQm91bmQgcHJvcGVydGllcy4KLSAgICB2b2lkIHJvbGVHZXR0ZXJDYWxsYmFjayhD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCB0aXRsZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsK
LSAgICB2b2lkIGRlc2NyaXB0aW9uR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZv
aWQgaGVscFRleHRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzdHJpbmdW
YWx1ZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHhHZXR0ZXJDYWxsYmFj
ayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCB5R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgd2lkdGhHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBoZWln
aHRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpbnRWYWx1ZUdldHRlckNh
bGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIG1pblZhbHVlR2V0dGVyQ2FsbGJhY2soQ3Bw
VmFyaWFudCopOwotICAgIHZvaWQgbWF4VmFsdWVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7
Ci0gICAgdm9pZCB2YWx1ZURlc2NyaXB0aW9uR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgY2hpbGRyZW5Db3VudEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2
b2lkIGluc2VydGlvblBvaW50TGluZU51bWJlckdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsK
LSAgICB2b2lkIHNlbGVjdGVkVGV4dFJhbmdlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgaXNFbmFibGVkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQg
aXNSZXF1aXJlZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGlzRm9jdXNl
ZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGlzRm9jdXNhYmxlR2V0dGVy
Q2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNTZWxlY3RlZEdldHRlckNhbGxiYWNr
KENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGlzU2VsZWN0YWJsZUdldHRlckNhbGxiYWNrKENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIGlzTXVsdGlTZWxlY3RhYmxlR2V0dGVyQ2FsbGJhY2soQ3BwVmFy
aWFudCopOwotICAgIHZvaWQgaXNTZWxlY3RlZE9wdGlvbkFjdGl2ZUdldHRlckNhbGxiYWNrKENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIGlzRXhwYW5kZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50
Kik7Ci0gICAgdm9pZCBpc0NoZWNrZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAg
dm9pZCBpc1Zpc2libGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc09m
ZlNjcmVlbkdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGlzQ29sbGFwc2Vk
R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaGFzUG9wdXBHZXR0ZXJDYWxs
YmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc1ZhbGlkR2V0dGVyQ2FsbGJhY2soQ3BwVmFy
aWFudCopOwotICAgIHZvaWQgaXNSZWFkT25seUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsK
LSAgICB2b2lkIG9yaWVudGF0aW9uR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZv
aWQgY2xpY2tQb2ludFhHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBjbGlj
a1BvaW50WUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEJvdW5kIG1ldGhv
ZHMuCi0gICAgdm9pZCBhbGxBdHRyaWJ1dGVzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgYXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50c0Nh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGF0
dHJpYnV0ZXNPZkRvY3VtZW50TGlua3NDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCBhdHRyaWJ1dGVzT2ZDaGlsZHJlbkNhbGxiYWNrKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHBhcmFtZXRyaXplZEF0
dHJpYnV0ZU5hbWVzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OwotICAgIHZvaWQgbGluZUZvckluZGV4Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotICAgIHZvaWQgYm91bmRzRm9yUmFuZ2VDYWxsYmFjayhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzdHJpbmdGb3JSYW5nZUNhbGxi
YWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGNoaWxk
QXRJbmRleENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIGVsZW1lbnRBdFBvaW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotICAgIHZvaWQgYXR0cmlidXRlc09mQ29sdW1uSGVhZGVyc0NhbGxiYWNrKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGF0dHJpYnV0ZXNP
ZlJvd0hlYWRlcnNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0gICAgdm9pZCBhdHRyaWJ1dGVzT2ZDb2x1bW5zQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgYXR0cmlidXRlc09mUm93c0NhbGxiYWNrKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGF0dHJpYnV0ZXNP
ZlZpc2libGVDZWxsc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKLSAgICB2b2lkIGF0dHJpYnV0ZXNPZkhlYWRlckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGluZGV4SW5UYWJsZUNhbGxiYWNrKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHJvd0luZGV4UmFuZ2VD
YWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBj
b2x1bW5JbmRleFJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotICAgIHZvaWQgY2VsbEZvckNvbHVtbkFuZFJvd0NhbGxiYWNrKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHRpdGxlVUlFbGVtZW50Q2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0U2VsZWN0
ZWRUZXh0UmFuZ2VDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0gICAgdm9pZCBhdHRyaWJ1dGVWYWx1ZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGlzQXR0cmlidXRlU2V0dGFibGVDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc1ByZXNzQWN0aW9u
U3VwcG9ydGVkQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgaXNJbmNyZW1lbnRBY3Rpb25TdXBwb3J0ZWRDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc0RlY3JlbWVudEFjdGlvblN1cHBv
cnRlZENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2
b2lkIHBhcmVudEVsZW1lbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Ci0gICAgdm9pZCBpbmNyZW1lbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBkZWNyZW1lbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzaG93TWVudUNhbGxiYWNrKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHByZXNzQ2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNFcXVhbENh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGFk
ZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotICAgIHZvaWQgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCB0YWtlRm9jdXND
YWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBz
Y3JvbGxUb01ha2VWaXNpYmxlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwotICAgIHZvaWQgc2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1c0NhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNjcm9sbFRv
R2xvYmFsUG9pbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0KLSAgICB2b2lkIGZhbGxiYWNrQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotCi0gICAgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IG1fYWNjZXNz
aWJpbGl0eU9iamVjdDsKLSAgICBGYWN0b3J5KiBtX2ZhY3Rvcnk7Ci0gICAgc3RkOjp2ZWN0b3I8
Q3BwVmFyaWFudD4gbV9ub3RpZmljYXRpb25DYWxsYmFja3M7Ci19OwotCi0KLWNsYXNzIFJvb3RB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50IDogcHVibGljIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgewot
cHVibGljOgotICAgIFJvb3RBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnN0IFdlYktpdDo6V2Vi
QWNjZXNzaWJpbGl0eU9iamVjdCYsIEZhY3RvcnkqKTsKLQotICAgIHZpcnR1YWwgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCogZ2V0Q2hpbGRBdEluZGV4KHVuc2lnbmVkKTsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNSb290KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotfTsKLQotCi0vLyBQcm92aWRlcyBz
aW1wbGUgbGlmZXRpbWUgbWFuYWdlbWVudCBvZiB0aGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBp
bnN0YW5jZXM6Ci0vLyBhbGwgQWNjZXNzaWJpbGl0eVVJRWxlbWVudHMgZXZlciBjcmVhdGVkIGZy
b20gdGhlIGNvbnRyb2xsZXIgYXJlIHN0b3JlZCBpbgotLy8gYSBsaXN0IGFuZCBjbGVhcmVkIGV4
cGxpY2l0bHkuCi1jbGFzcyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlzdCA6IHB1YmxpYyBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpGYWN0b3J5IHsKLXB1YmxpYzoKLSAgICBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50TGlzdCgpIHsgfQotICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlVSUVsZW1lbnRM
aXN0KCk7Ci0KLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50KiBnZXRPckNyZWF0ZShjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Qm
KTsKLSAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBjcmVhdGVSb290KGNvbnN0IFdlYktpdDo6
V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYpOwotCi1wcml2YXRlOgotICAgIHR5cGVkZWYgc3RkOjp2
ZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudCo+IEVsZW1lbnRMaXN0OwotICAgIEVsZW1lbnRM
aXN0IG1fZWxlbWVudHM7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Q2hyb21pdW1faApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvQ3BwQm91bmRDbGFzcy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9DcHBCb3VuZENsYXNzLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNDllNjE0OTczYjcxOTJjYWRjOTEyZGQ4NmVkN2Q4ODdjZmFhZDBlZC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9DcHBCb3VuZENsYXNzLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDM2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgUGF3
ZWwgSGFqZGFuIChwaGFqZGFuLmpyQGNocm9taXVtLm9yZykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBUaGlzIGZpbGUgY29udGFpbnMgZGVm
aW5pdGlvbnMgZm9yIENwcEJvdW5kQ2xhc3MKLQotLy8gSGVyZSdzIHRoZSBjb250cm9sIGZsb3cg
b2YgYSBKUyBtZXRob2QgZ2V0dGluZyBmb3J3YXJkZWQgdG8gYSBjbGFzcy4KLS8vIC0gU29tZXRo
aW5nIGNhbGxzIG91ciBOUE9iamVjdCB3aXRoIGEgZnVuY3Rpb24gbGlrZSAiSW52b2tlIi4KLS8v
IC0gQ3BwTlBPYmplY3QncyBzdGF0aWMgaW52b2tlKCkgZnVuY3Rpb24gZm9yd2FyZHMgaXQgdG8g
aXRzIGF0dGFjaGVkCi0vLyAgIENwcEJvdW5kQ2xhc3MncyBpbnZva2UoKSBtZXRob2QuCi0vLyAt
IENwcEJvdW5kQ2xhc3MgaGFzIHRoZW4gb3ZlcnJpZGRlbiBpbnZva2UoKSB0byBsb29rIHVwIHRo
ZSBmdW5jdGlvbgotLy8gICBuYW1lIGluIGl0cyBpbnRlcm5hbCBtYXAgb2YgbWV0aG9kcywgYW5k
IHRoZW4gY2FsbHMgdGhlIGFwcHJvcHJpYXRlCi0vLyAgIG1ldGhvZC4KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkNwcEJvdW5kQ2xhc3MuaCIKLQotI2luY2x1ZGUgIlRlc3RDb21t
b24uaCIKLSNpbmNsdWRlICJXZWJCaW5kaW5ncy5oIgotI2luY2x1ZGUgIldlYkZyYW1lLmgiCi0j
aW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHB1YmxpYy9XZWJTdHJpbmcuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJU
ZXN0UnVubmVyIHsKLQotbmFtZXNwYWNlIHsKLQotY2xhc3MgQ3BwVmFyaWFudFByb3BlcnR5Q2Fs
bGJhY2sgOiBwdWJsaWMgQ3BwQm91bmRDbGFzczo6UHJvcGVydHlDYWxsYmFjayB7Ci1wdWJsaWM6
Ci0gICAgQ3BwVmFyaWFudFByb3BlcnR5Q2FsbGJhY2soQ3BwVmFyaWFudCogdmFsdWUpIDogbV92
YWx1ZSh2YWx1ZSkgeyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0VmFsdWUoQ3BwVmFyaWFudCog
dmFsdWUpCi0gICAgewotICAgICAgICB2YWx1ZS0+c2V0KCptX3ZhbHVlKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIHNldFZhbHVlKGNvbnN0IENwcFZh
cmlhbnQmIHZhbHVlKQotICAgIHsKLSAgICAgICAgbV92YWx1ZS0+c2V0KHZhbHVlKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENwcFZhcmlhbnQqIG1fdmFs
dWU7Ci19OwotCi1jbGFzcyBHZXR0ZXJQcm9wZXJ0eUNhbGxiYWNrIDogcHVibGljIENwcEJvdW5k
Q2xhc3M6OlByb3BlcnR5Q2FsbGJhY2sgewotcHVibGljOgotICAgIEdldHRlclByb3BlcnR5Q2Fs
bGJhY2soYXV0b19wdHI8Q3BwQm91bmRDbGFzczo6R2V0dGVyQ2FsbGJhY2s+IGNhbGxiYWNrKQot
ICAgICAgICA6IG1fY2FsbGJhY2soY2FsbGJhY2spCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1
YWwgYm9vbCBnZXRWYWx1ZShDcHBWYXJpYW50KiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIG1fY2Fs
bGJhY2stPnJ1bih2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZp
cnR1YWwgYm9vbCBzZXRWYWx1ZShjb25zdCBDcHBWYXJpYW50JiB2YWx1ZSkgeyByZXR1cm4gZmFs
c2U7IH0KLQotcHJpdmF0ZToKLSAgICBhdXRvX3B0cjxDcHBCb3VuZENsYXNzOjpHZXR0ZXJDYWxs
YmFjaz4gbV9jYWxsYmFjazsKLX07Ci0KLX0KLQotLy8gT3VyIHNwZWNpYWwgTlBPYmplY3QgdHlw
ZS4gV2UgZXh0ZW5kIGFuIE5QT2JqZWN0IHdpdGggYSBwb2ludGVyIHRvIGEKLS8vIENwcEJvdW5k
Q2xhc3MsIHdoaWNoIGlzIGp1c3QgYSBDKysgaW50ZXJmYWNlIHRoYXQgd2UgZm9yd2FyZCBhbGwg
TlBPYmplY3QKLS8vIGNhbGxiYWNrcyB0by4KLXN0cnVjdCBDcHBOUE9iamVjdCB7Ci0gICAgTlBP
YmplY3QgcGFyZW50OyAvLyBUaGlzIG11c3QgYmUgdGhlIGZpcnN0IGZpZWxkIGluIHRoZSBzdHJ1
Y3QuCi0gICAgQ3BwQm91bmRDbGFzcyogYm91bmRDbGFzczsKLQotICAgIC8vCi0gICAgLy8gQWxs
IGZvbGxvd2luZyBvYmplY3RzIGFuZCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYW5kIGp1c3QgdXNl
ZCB0byBpbnRlcmZhY2UKLSAgICAvLyB3aXRoIE5QT2JqZWN0L05QQ2xhc3MuCi0gICAgLy8KLQot
ICAgIC8vIEFuIE5QQ2xhc3MgYXNzb2NpYXRlcyBzdGF0aWMgZnVuY3Rpb25zIG9mIENwcE5QT2Jq
ZWN0IHdpdGggdGhlCi0gICAgLy8gZnVuY3Rpb24gcG9pbnRlcnMgdXNlZCBieSB0aGUgSlMgcnVu
dGltZS4KLSAgICBzdGF0aWMgTlBDbGFzcyBucENsYXNzOwotCi0gICAgLy8gQWxsb2NhdGUgYSBu
ZXcgTlBPYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGNsYXNzLgotICAgIHN0YXRpYyBOUE9iamVj
dCogYWxsb2NhdGUoTlBQLCBOUENsYXNzKik7Ci0KLSAgICAvLyBGcmVlIGFuIG9iamVjdC4KLSAg
ICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKE5QT2JqZWN0Kik7Ci0KLSAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIEMrKyBjbGFzcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBOUE9iamVjdCBleHBvc2Vz
IHRoZQotICAgIC8vIGdpdmVuIHByb3BlcnR5LiBDYWxsZWQgYnkgdGhlIEpTIHJ1bnRpbWUuCi0g
ICAgc3RhdGljIGJvb2wgaGFzUHJvcGVydHkoTlBPYmplY3QqLCBOUElkZW50aWZpZXIpOwotCi0g
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBDKysgY2xhc3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMg
TlBPYmplY3QgZXhwb3NlcyB0aGUKLSAgICAvLyBnaXZlbiBtZXRob2QuIENhbGxlZCBieSB0aGUg
SlMgcnVudGltZS4KLSAgICBzdGF0aWMgYm9vbCBoYXNNZXRob2QoTlBPYmplY3QqLCBOUElkZW50
aWZpZXIpOwotCi0gICAgLy8gSWYgdGhlIGdpdmVuIG1ldGhvZCBpcyBleHBvc2VkIGJ5IHRoZSBD
KysgY2xhc3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAgICAvLyBOUE9iamVjdCwgaW52b2tlcyBp
dCB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMgYW5kIHJldHVybnMgYSByZXN1bHQuIE90aGVyd2lz
ZSwKLSAgICAvLyByZXR1cm5zICJ1bmRlZmluZWQiIChpbiB0aGUgSmF2YVNjcmlwdCBzZW5zZSku
IENhbGxlZCBieSB0aGUgSlMgcnVudGltZS4KLSAgICBzdGF0aWMgYm9vbCBpbnZva2UoTlBPYmpl
Y3QqLCBOUElkZW50aWZpZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5QVmFyaWFu
dCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LAotICAgICAgICAgICAgICAgICAg
ICAgICBOUFZhcmlhbnQqIHJlc3VsdCk7Ci0KLSAgICAvLyBJZiB0aGUgZ2l2ZW4gcHJvcGVydHkg
aXMgZXhwb3NlZCBieSB0aGUgQysrIGNsYXNzIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gICAgLy8g
TlBPYmplY3QsIHJldHVybnMgaXRzIHZhbHVlLiBPdGhlcndpc2UsIHJldHVybnMgInVuZGVmaW5l
ZCIgKGluIHRoZQotICAgIC8vIEphdmFTY3JpcHQgc2Vuc2UpLiBDYWxsZWQgYnkgdGhlIEpTIHJ1
bnRpbWUuCi0gICAgc3RhdGljIGJvb2wgZ2V0UHJvcGVydHkoTlBPYmplY3QqLCBOUElkZW50aWZp
ZXIsIE5QVmFyaWFudCogcmVzdWx0KTsKLQotICAgIC8vIElmIHRoZSBnaXZlbiBwcm9wZXJ0eSBp
cyBleHBvc2VkIGJ5IHRoZSBDKysgY2xhc3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAgICAvLyBO
UE9iamVjdCwgc2V0cyBpdHMgdmFsdWUuIE90aGVyd2lzZSwgZG9lcyBub3RoaW5nLiBDYWxsZWQg
YnkgdGhlIEpTCi0gICAgLy8gcnVudGltZS4KLSAgICBzdGF0aWMgYm9vbCBzZXRQcm9wZXJ0eShO
UE9iamVjdCosIE5QSWRlbnRpZmllciwgY29uc3QgTlBWYXJpYW50KiB2YWx1ZSk7Ci19OwotCi0v
LyBCdWlsZCBDcHBOUE9iamVjdCdzIHN0YXRpYyBmdW5jdGlvbiBwb2ludGVycyBpbnRvIGFuIE5Q
Q2xhc3MsIGZvciB1c2UKLS8vIGluIGNvbnN0cnVjdGluZyBOUE9iamVjdHMgZm9yIHRoZSBDKysg
Y2xhc3Nlcy4KLU5QQ2xhc3MgQ3BwTlBPYmplY3Q6Om5wQ2xhc3MgPSB7Ci0gICAgTlBfQ0xBU1Nf
U1RSVUNUX1ZFUlNJT04sCi0gICAgQ3BwTlBPYmplY3Q6OmFsbG9jYXRlLAotICAgIENwcE5QT2Jq
ZWN0OjpkZWFsbG9jYXRlLAotICAgIC8qIE5QSW52YWxpZGF0ZUZ1bmN0aW9uUHRyICovIDAsCi0g
ICAgQ3BwTlBPYmplY3Q6Omhhc01ldGhvZCwKLSAgICBDcHBOUE9iamVjdDo6aW52b2tlLAotICAg
IC8qIE5QSW52b2tlRGVmYXVsdEZ1bmN0aW9uUHRyICovIDAsCi0gICAgQ3BwTlBPYmplY3Q6Omhh
c1Byb3BlcnR5LAotICAgIENwcE5QT2JqZWN0OjpnZXRQcm9wZXJ0eSwKLSAgICBDcHBOUE9iamVj
dDo6c2V0UHJvcGVydHksCi0gICAgLyogTlBSZW1vdmVQcm9wZXJ0eUZ1bmN0aW9uUHRyICovIDAK
LX07Ci0KLU5QT2JqZWN0KiBDcHBOUE9iamVjdDo6YWxsb2NhdGUoTlBQIG5wcCwgTlBDbGFzcyog
YUNsYXNzKQotewotICAgIENwcE5QT2JqZWN0KiBvYmogPSBuZXcgQ3BwTlBPYmplY3Q7Ci0gICAg
Ly8gb2JqLT5wYXJlbnQgd2lsbCBiZSBpbml0aWFsaXplZCBieSB0aGUgTlBPYmplY3QgY29kZSBj
YWxsaW5nIHRoaXMuCi0gICAgb2JqLT5ib3VuZENsYXNzID0gMDsKLSAgICByZXR1cm4gJm9iai0+
cGFyZW50OwotfQotCi12b2lkIENwcE5QT2JqZWN0OjpkZWFsbG9jYXRlKE5QT2JqZWN0KiBucE9i
aikKLXsKLSAgICBDcHBOUE9iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxDcHBOUE9iamVj
dCo+KG5wT2JqKTsKLSAgICBkZWxldGUgb2JqOwotfQotCi1ib29sIENwcE5QT2JqZWN0OjpoYXNN
ZXRob2QoTlBPYmplY3QqIG5wT2JqLCBOUElkZW50aWZpZXIgaWRlbnQpCi17Ci0gICAgQ3BwTlBP
YmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q3BwTlBPYmplY3QqPihucE9iaik7Ci0gICAg
cmV0dXJuIG9iai0+Ym91bmRDbGFzcy0+aGFzTWV0aG9kKGlkZW50KTsKLX0KLQotYm9vbCBDcHBO
UE9iamVjdDo6aGFzUHJvcGVydHkoTlBPYmplY3QqIG5wT2JqLCBOUElkZW50aWZpZXIgaWRlbnQp
Ci17Ci0gICAgQ3BwTlBPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q3BwTlBPYmplY3Qq
PihucE9iaik7Ci0gICAgcmV0dXJuIG9iai0+Ym91bmRDbGFzcy0+aGFzUHJvcGVydHkoaWRlbnQp
OwotfQotCi1ib29sIENwcE5QT2JqZWN0OjppbnZva2UoTlBPYmplY3QqIG5wT2JqLCBOUElkZW50
aWZpZXIgaWRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTlBWYXJpYW50KiBh
cmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgQ3BwTlBPYmplY3QqIG9iaiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Q3BwTlBPYmplY3QqPihucE9iaik7Ci0gICAgcmV0dXJuIG9iai0+Ym91bmRDbGFz
cy0+aW52b2tlKGlkZW50LCBhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIHJlc3VsdCk7Ci19Ci0K
LWJvb2wgQ3BwTlBPYmplY3Q6OmdldFByb3BlcnR5KE5QT2JqZWN0KiBucE9iaiwgTlBJZGVudGlm
aWVyIGlkZW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBDcHBOUE9iamVjdCogb2JqID0g
cmVpbnRlcnByZXRfY2FzdDxDcHBOUE9iamVjdCo+KG5wT2JqKTsKLSAgICByZXR1cm4gb2JqLT5i
b3VuZENsYXNzLT5nZXRQcm9wZXJ0eShpZGVudCwgcmVzdWx0KTsKLX0KLQotYm9vbCBDcHBOUE9i
amVjdDo6c2V0UHJvcGVydHkoTlBPYmplY3QqIG5wT2JqLCBOUElkZW50aWZpZXIgaWRlbnQsIGNv
bnN0IE5QVmFyaWFudCogdmFsdWUpCi17Ci0gICAgQ3BwTlBPYmplY3QqIG9iaiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Q3BwTlBPYmplY3QqPihucE9iaik7Ci0gICAgcmV0dXJuIG9iai0+Ym91bmRDbGFz
cy0+c2V0UHJvcGVydHkoaWRlbnQsIHZhbHVlKTsKLX0KLQotQ3BwQm91bmRDbGFzczo6fkNwcEJv
dW5kQ2xhc3MoKQotewotICAgIGZvciAoTWV0aG9kTGlzdDo6aXRlcmF0b3IgaSA9IG1fbWV0aG9k
cy5iZWdpbigpOyBpICE9IG1fbWV0aG9kcy5lbmQoKTsgKytpKQotICAgICAgICBkZWxldGUgaS0+
c2Vjb25kOwotCi0gICAgZm9yIChQcm9wZXJ0eUxpc3Q6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRp
ZXMuYmVnaW4oKTsgaSAhPSBtX3Byb3BlcnRpZXMuZW5kKCk7ICsraSkKLSAgICAgICAgZGVsZXRl
IGktPnNlY29uZDsKLQotICAgIC8vIFVucmVnaXN0ZXIgb3Vyc2VsdmVzIGlmIHdlIHdlcmUgYm91
bmQgdG8gYSBmcmFtZS4KLSAgICBpZiAobV9ib3VuZFRvRnJhbWUpCi0gICAgICAgIFdlYkJpbmRp
bmdzOjp1bnJlZ2lzdGVyT2JqZWN0KE5QVkFSSUFOVF9UT19PQkpFQ1QobV9zZWxmVmFyaWFudCkp
OwotfQotCi1ib29sIENwcEJvdW5kQ2xhc3M6Omhhc01ldGhvZChOUElkZW50aWZpZXIgaWRlbnQp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWV0aG9kcy5maW5kKGlkZW50KSAhPSBtX21ldGhvZHMu
ZW5kKCk7Ci19Ci0KLWJvb2wgQ3BwQm91bmRDbGFzczo6aGFzUHJvcGVydHkoTlBJZGVudGlmaWVy
IGlkZW50KSBjb25zdAotewotICAgIHJldHVybiBtX3Byb3BlcnRpZXMuZmluZChpZGVudCkgIT0g
bV9wcm9wZXJ0aWVzLmVuZCgpOwotfQotCi1ib29sIENwcEJvdW5kQ2xhc3M6Omludm9rZShOUElk
ZW50aWZpZXIgaWRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOUFZhcmlh
bnQqIGFyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhcmd1bWVu
dENvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTlBWYXJpYW50KiByZXN1bHQpIHsK
LSAgICBNZXRob2RMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX21ldGhvZHMuZW5kKCk7Ci0g
ICAgTWV0aG9kTGlzdDo6Y29uc3RfaXRlcmF0b3IgbWV0aG9kID0gbV9tZXRob2RzLmZpbmQoaWRl
bnQpOwotICAgIENhbGxiYWNrKiBjYWxsYmFjazsKLSAgICBpZiAobWV0aG9kID09IGVuZCkgewot
ICAgICAgICBpZiAoIW1fZmFsbGJhY2tDYWxsYmFjay5nZXQoKSkgewotICAgICAgICAgICAgVk9J
RF9UT19OUFZBUklBTlQoKnJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FsbGJhY2sgPSBtX2ZhbGxiYWNrQ2FsbGJhY2suZ2V0KCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGNhbGxiYWNrID0gKCptZXRob2QpLnNlY29uZDsKLQotICAgIC8vIEJ1
aWxkIGEgQ3BwQXJndW1lbnRMaXN0IGFyZ3VtZW50IHZlY3RvciBmcm9tIHRoZSBOUFZhcmlhbnRz
IGNvbWluZyBpbi4KLSAgICBDcHBBcmd1bWVudExpc3QgY3BwQXJndW1lbnRzKGFyZ3VtZW50Q291
bnQpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgaSsrKQotICAg
ICAgICBjcHBBcmd1bWVudHNbaV0uc2V0KGFyZ3VtZW50c1tpXSk7Ci0KLSAgICBDcHBWYXJpYW50
IGNwcFJlc3VsdDsKLSAgICBjYWxsYmFjay0+cnVuKGNwcEFyZ3VtZW50cywgJmNwcFJlc3VsdCk7
Ci0KLSAgICBjcHBSZXN1bHQuY29weVRvTlBWYXJpYW50KHJlc3VsdCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgQ3BwQm91bmRDbGFzczo6Z2V0UHJvcGVydHkoTlBJZGVudGlmaWVyIGlk
ZW50LCBOUFZhcmlhbnQqIHJlc3VsdCkgY29uc3QKLXsKLSAgICBQcm9wZXJ0eUxpc3Q6OmNvbnN0
X2l0ZXJhdG9yIGNhbGxiYWNrID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWRlbnQpOwotICAgIGlmIChj
YWxsYmFjayA9PSBtX3Byb3BlcnRpZXMuZW5kKCkpIHsKLSAgICAgICAgVk9JRF9UT19OUFZBUklB
TlQoKnJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBDcHBWYXJp
YW50IGNwcFZhbHVlOwotICAgIGlmICghY2FsbGJhY2stPnNlY29uZC0+Z2V0VmFsdWUoJmNwcFZh
bHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNwcFZhbHVlLmNvcHlUb05QVmFyaWFu
dChyZXN1bHQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENwcEJvdW5kQ2xhc3M6OnNl
dFByb3BlcnR5KE5QSWRlbnRpZmllciBpZGVudCwgY29uc3QgTlBWYXJpYW50KiB2YWx1ZSkKLXsK
LSAgICBQcm9wZXJ0eUxpc3Q6Oml0ZXJhdG9yIGNhbGxiYWNrID0gbV9wcm9wZXJ0aWVzLmZpbmQo
aWRlbnQpOwotICAgIGlmIChjYWxsYmFjayA9PSBtX3Byb3BlcnRpZXMuZW5kKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIENwcFZhcmlhbnQgY3BwVmFsdWU7Ci0gICAgY3BwVmFsdWUu
c2V0KCp2YWx1ZSk7Ci0gICAgcmV0dXJuICgqY2FsbGJhY2spLnNlY29uZC0+c2V0VmFsdWUoY3Bw
VmFsdWUpOwotfQotCi12b2lkIENwcEJvdW5kQ2xhc3M6OmJpbmRDYWxsYmFjayhjb25zdCBzdHJp
bmcmIG5hbWUsIENhbGxiYWNrKiBjYWxsYmFjaykKLXsKLSAgICBOUElkZW50aWZpZXIgaWRlbnQg
PSBXZWJCaW5kaW5nczo6Z2V0U3RyaW5nSWRlbnRpZmllcihuYW1lLmNfc3RyKCkpOwotICAgIE1l
dGhvZExpc3Q6Oml0ZXJhdG9yIG9sZENhbGxiYWNrID0gbV9tZXRob2RzLmZpbmQoaWRlbnQpOwot
ICAgIGlmIChvbGRDYWxsYmFjayAhPSBtX21ldGhvZHMuZW5kKCkpIHsKLSAgICAgICAgZGVsZXRl
IG9sZENhbGxiYWNrLT5zZWNvbmQ7Ci0gICAgICAgIGlmICghY2FsbGJhY2spIHsKLSAgICAgICAg
ICAgIG1fbWV0aG9kcy5lcmFzZShvbGRDYWxsYmFjayk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX21ldGhvZHNbaWRlbnRdID0gY2FsbGJhY2s7Ci19Ci0K
LXZvaWQgQ3BwQm91bmRDbGFzczo6YmluZEdldHRlckNhbGxiYWNrKGNvbnN0IHN0cmluZyYgbmFt
ZSwgYXV0b19wdHI8R2V0dGVyQ2FsbGJhY2s+IGNhbGxiYWNrKQotewotICAgIFByb3BlcnR5Q2Fs
bGJhY2sqIHByb3BlcnR5Q2FsbGJhY2sgPSBjYWxsYmFjay5nZXQoKSA/IG5ldyBHZXR0ZXJQcm9w
ZXJ0eUNhbGxiYWNrKGNhbGxiYWNrKSA6IDA7Ci0gICAgYmluZFByb3BlcnR5KG5hbWUsIHByb3Bl
cnR5Q2FsbGJhY2spOwotfQotCi12b2lkIENwcEJvdW5kQ2xhc3M6OmJpbmRQcm9wZXJ0eShjb25z
dCBzdHJpbmcmIG5hbWUsIENwcFZhcmlhbnQqIHByb3ApCi17Ci0gICAgUHJvcGVydHlDYWxsYmFj
ayogcHJvcGVydHlDYWxsYmFjayA9IHByb3AgPyBuZXcgQ3BwVmFyaWFudFByb3BlcnR5Q2FsbGJh
Y2socHJvcCkgOiAwOwotICAgIGJpbmRQcm9wZXJ0eShuYW1lLCBwcm9wZXJ0eUNhbGxiYWNrKTsK
LX0KLQotdm9pZCBDcHBCb3VuZENsYXNzOjpiaW5kUHJvcGVydHkoY29uc3Qgc3RyaW5nJiBuYW1l
LCBQcm9wZXJ0eUNhbGxiYWNrKiBjYWxsYmFjaykKLXsKLSAgICBOUElkZW50aWZpZXIgaWRlbnQg
PSBXZWJCaW5kaW5nczo6Z2V0U3RyaW5nSWRlbnRpZmllcihuYW1lLmNfc3RyKCkpOwotICAgIFBy
b3BlcnR5TGlzdDo6aXRlcmF0b3Igb2xkQ2FsbGJhY2sgPSBtX3Byb3BlcnRpZXMuZmluZChpZGVu
dCk7Ci0gICAgaWYgKG9sZENhbGxiYWNrICE9IG1fcHJvcGVydGllcy5lbmQoKSkgewotICAgICAg
ICBkZWxldGUgb2xkQ2FsbGJhY2stPnNlY29uZDsKLSAgICAgICAgaWYgKCFjYWxsYmFjaykgewot
ICAgICAgICAgICAgbV9wcm9wZXJ0aWVzLmVyYXNlKG9sZENhbGxiYWNrKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fcHJvcGVydGllc1tpZGVudF0gPSBj
YWxsYmFjazsKLX0KLQotYm9vbCBDcHBCb3VuZENsYXNzOjppc01ldGhvZFJlZ2lzdGVyZWQoY29u
c3Qgc3RyaW5nJiBuYW1lKSBjb25zdAotewotICAgIE5QSWRlbnRpZmllciBpZGVudCA9IFdlYkJp
bmRpbmdzOjpnZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUuY19zdHIoKSk7Ci0gICAgTWV0aG9kTGlz
dDo6Y29uc3RfaXRlcmF0b3IgY2FsbGJhY2sgPSBtX21ldGhvZHMuZmluZChpZGVudCk7Ci0gICAg
cmV0dXJuIGNhbGxiYWNrICE9IG1fbWV0aG9kcy5lbmQoKTsKLX0KLQotQ3BwVmFyaWFudCogQ3Bw
Qm91bmRDbGFzczo6Z2V0QXNDcHBWYXJpYW50KCkKLXsKLSAgICBpZiAoIW1fc2VsZlZhcmlhbnQu
aXNPYmplY3QoKSkgewotICAgICAgICAvLyBDcmVhdGUgYW4gTlBPYmplY3QgdXNpbmcgb3VyIHN0
YXRpYyBOUENsYXNzLiBUaGUgZmlyc3QgYXJndW1lbnQgKGEKLSAgICAgICAgLy8gcGx1Z2luJ3Mg
aW5zdGFuY2UgaGFuZGxlKSBpcyBwYXNzZWQgdGhyb3VnaCB0byB0aGUgYWxsb2NhdGUgZnVuY3Rp
b24KLSAgICAgICAgLy8gZGlyZWN0bHksIGFuZCB3ZSBkb24ndCB1c2UgaXQsIHNvIGl0J3Mgb2sg
dG8gYmUgMC4KLSAgICAgICAgTlBPYmplY3QqIG5wT2JqID0gV2ViQmluZGluZ3M6OmNyZWF0ZU9i
amVjdCgwLCAmQ3BwTlBPYmplY3Q6Om5wQ2xhc3MpOwotICAgICAgICBDcHBOUE9iamVjdCogb2Jq
ID0gcmVpbnRlcnByZXRfY2FzdDxDcHBOUE9iamVjdCo+KG5wT2JqKTsKLSAgICAgICAgb2JqLT5i
b3VuZENsYXNzID0gdGhpczsKLSAgICAgICAgbV9zZWxmVmFyaWFudC5zZXQobnBPYmopOwotICAg
ICAgICBXZWJCaW5kaW5nczo6cmVsZWFzZU9iamVjdChucE9iaik7IC8vIENwcFZhcmlhbnQgdGFr
ZXMgdGhlIHJlZmVyZW5jZS4KLSAgICB9Ci0gICAgV0VCS0lUX0FTU0VSVChtX3NlbGZWYXJpYW50
LmlzT2JqZWN0KCkpOwotICAgIHJldHVybiAmbV9zZWxmVmFyaWFudDsKLX0KLQotdm9pZCBDcHBC
b3VuZENsYXNzOjpiaW5kVG9KYXZhc2NyaXB0KFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3Ry
aW5nJiBjbGFzc25hbWUpCi17Ci0gICAgLy8gQmluZFRvV2luZG93T2JqZWN0IHdpbGwgdGFrZSBp
dHMgb3duIHJlZmVyZW5jZSB0byB0aGUgTlBPYmplY3QsIGFuZCBjbGVhbgotICAgIC8vIHVwIGFm
dGVyIGl0c2VsZi4gSXQgd2lsbCBhbHNvIChpbmRpcmVjdGx5KSByZWdpc3RlciB0aGUgb2JqZWN0
IHdpdGggVjgsCi0gICAgLy8gc28gd2UgbXVzdCByZW1lbWJlciB0aGlzIHNvIHdlIGNhbiB1bnJl
Z2lzdGVyIGl0IHdoZW4gd2UncmUgZGVzdHJveWVkLgotICAgIGZyYW1lLT5iaW5kVG9XaW5kb3dP
YmplY3QoY2xhc3NuYW1lLCBOUFZBUklBTlRfVE9fT0JKRUNUKCpnZXRBc0NwcFZhcmlhbnQoKSkp
OwotICAgIG1fYm91bmRUb0ZyYW1lID0gdHJ1ZTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQ3BwQm91bmRDbGFzcy5oIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQ3BwQm91bmRDbGFz
cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTJhNDFjNTM0MGVmZGYwMGJjNzZi
NzgyYjRkNDZkYWNjZjhkMWRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0Nw
cEJvdW5kQ2xhc3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgUGF3ZWwgSGFqZGFuIChwaGFqZGFuLmpyQGNocm9taXVtLm9yZykKLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICBD
cHBCb3VuZENsYXNzIGNsYXNzOgotICBUaGlzIGJhc2UgY2xhc3Mgc2VydmVzIGFzIGEgcGFyZW50
IGZvciBDKysgY2xhc3NlcyBkZXNpZ25lZCB0byBiZSBib3VuZCB0bwotICBKYXZhU2NyaXB0IG9i
amVjdHMuCi0KLSAgU3ViY2xhc3NlcyBzaG91bGQgZGVmaW5lIHRoZSBjb25zdHJ1Y3RvciB0byBi
dWlsZCB0aGUgcHJvcGVydHkgYW5kIG1ldGhvZAotICBsaXN0cyBuZWVkZWQgdG8gYmluZCB0aGlz
IGNsYXNzIHRvIGEgSlMgb2JqZWN0LiAgVGhleSBzaG91bGQgYWxzbyBkZWNsYXJlCi0gIGFuZCBk
ZWZpbmUgbWVtYmVyIHZhcmlhYmxlcyBhbmQgbWV0aG9kcyB0byBiZSBleHBvc2VkIHRvIEpTIHRo
cm91Z2gKLSAgdGhhdCBvYmplY3QuCi0qLwotCi0jaWZuZGVmIENwcEJvdW5kQ2xhc3NfaAotI2Rl
ZmluZSBDcHBCb3VuZENsYXNzX2gKLQotI2luY2x1ZGUgIkNwcFZhcmlhbnQuaCIKLSNpbmNsdWRl
IDxtYXA+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci1jbGFzcyBXZWJGcmFtZTsKLWNsYXNzIFdlYlN0cmluZzsKLX0KLQotbmFtZXNw
YWNlIFdlYlRlc3RSdW5uZXIgewotCi10eXBlZGVmIHN0ZDo6dmVjdG9yPENwcFZhcmlhbnQ+IENw
cEFyZ3VtZW50TGlzdDsKLQotLy8gQ3BwQm91bmRDbGFzcyBsZXRzIHlvdSBtYXAgSmF2YXNjcmlw
dCBtZXRob2QgY2FsbHMgYW5kIHByb3BlcnR5IGFjY2Vzc2VzCi0vLyBkaXJlY3RseSB0byBDKysg
bWV0aG9kIGNhbGxzIGFuZCBDcHBWYXJpYW50KiB2YXJpYWJsZSBhY2Nlc3MuCi1jbGFzcyBDcHBC
b3VuZENsYXNzIHsKLXB1YmxpYzoKLSAgICBjbGFzcyBQcm9wZXJ0eUNhbGxiYWNrIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgflByb3BlcnR5Q2FsbGJhY2soKSB7IH0KLQotICAgICAg
ICAvLyBTZXRzIHx2YWx1ZXwgdG8gdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4gUmV0dXJucyBm
YWxzZSBpbiBjYXNlIG9mCi0gICAgICAgIC8vIGZhaWx1cmUuIHx2YWx1ZXwgaXMgYWx3YXlzIG5v
bi0wLgotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0VmFsdWUoQ3BwVmFyaWFudCogcmVzdWx0KSA9
IDA7Ci0KLSAgICAgICAgLy8gc2V0cyB0aGUgcHJvcGVydHkgdmFsdWUgdG8gfHZhbHVlfC4gUmV0
dXJucyBmYWxzZSBpbiBjYXNlIG9mIGZhaWx1cmUuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzZXRW
YWx1ZShjb25zdCBDcHBWYXJpYW50JikgPSAwOwotICAgIH07Ci0KLSAgICAvLyBDYWxsYmFjayBj
bGFzcyBmb3IgInZvaWQgZnVuY3Rpb24oQ3BwVmFyaWFudCopIgotICAgIGNsYXNzIEdldHRlckNh
bGxiYWNrIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfkdldHRlckNhbGxiYWNrKCkg
eyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBydW4oQ3BwVmFyaWFudCopID0gMDsKLSAgICB9Owot
Ci0gICAgLy8gVGhlIGNvbnN0cnVjdG9yIHNob3VsZCBjYWxsIEJpbmRNZXRob2QsIEJpbmRQcm9w
ZXJ0eSwgYW5kCi0gICAgLy8gU2V0RmFsbGJhY2tNZXRob2QgYXMgbmVlZGVkIHRvIHNldCB1cCB0
aGUgbWV0aG9kcywgcHJvcGVydGllcywgYW5kCi0gICAgLy8gZmFsbGJhY2sgbWV0aG9kLgotICAg
IENwcEJvdW5kQ2xhc3MoKSA6IG1fYm91bmRUb0ZyYW1lKGZhbHNlKSB7IH0KLSAgICB2aXJ0dWFs
IH5DcHBCb3VuZENsYXNzKCk7Ci0KLSAgICAvLyBSZXR1cm4gYSBDcHBWYXJpYW50IHJlcHJlc2Vu
dGluZyB0aGlzIGNsYXNzLCBmb3IgdXNlIHdpdGggQmluZFByb3BlcnR5KCkuCi0gICAgLy8gVGhl
IHZhcmlhbnQgdHlwZSBpcyBndWFyYW50ZWVkIHRvIGJlIE5QVmFyaWFudFR5cGVfT2JqZWN0Lgot
ICAgIENwcFZhcmlhbnQqIGdldEFzQ3BwVmFyaWFudCgpOwotCi0gICAgLy8gR2l2ZW4gYSBXZWJG
cmFtZSwgQmluZFRvSmF2YXNjcmlwdCBidWlsZHMgdGhlIE5QT2JqZWN0IHRoYXQgd2lsbCByZXBy
ZXNlbnQKLSAgICAvLyB0aGUgY2xhc3MgYW5kIGJpbmRzIGl0IHRvIHRoZSBmcmFtZSdzIHdpbmRv
dyB1bmRlciB0aGUgZ2l2ZW4gbmFtZS4gVGhpcwotICAgIC8vIHNob3VsZCBnZW5lcmFsbHkgYmUg
Y2FsbGVkIGZyb20gdGhlIFdlYlZpZXcgZGVsZWdhdGUncwotICAgIC8vIFdpbmRvd09iamVjdENs
ZWFyZWQoKS4gQSBjbGFzcyBzbyBib3VuZCB3aWxsIGJlIGFjY2Vzc2libGUgdG8gSmF2YVNjcmlw
dAotICAgIC8vIGFzIHdpbmRvdy48Y2xhc3NuYW1lPi4gVGhlIG93bmVyIG9mIHRoZSBDcHBCb3Vu
ZE9iamVjdCBpcyByZXNwb25zaWJsZSBmb3IKLSAgICAvLyBrZWVwaW5nIHRoZSBvYmplY3QgYXJv
dW5kIHdoaWxlIHRoZSBmcmFtZSBpcyBhbGl2ZSwgYW5kIGZvciBkZXN0cm95aW5nIGl0Ci0gICAg
Ly8gYWZ0ZXJ3YXJkcy4KLSAgICB2b2lkIGJpbmRUb0phdmFzY3JpcHQoV2ViS2l0OjpXZWJGcmFt
ZSosIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBjbGFzc25hbWUpOwotCi0gICAgLy8gVXNlZCBi
eSBhIHRlc3QuIFJldHVybnMgdHJ1ZSBpZiBhIG1ldGhvZCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFt
ZSBleGlzdHMsCi0gICAgLy8gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGEgZmFsbGJhY2sgaXMgcmVn
aXN0ZXJlZC4KLSAgICBib29sIGlzTWV0aG9kUmVnaXN0ZXJlZChjb25zdCBzdGQ6OnN0cmluZyYp
IGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgLy8gQ2FsbGJhY2sgZm9yICJ2b2lkIGZ1bmN0aW9u
KGNvbnN0IENwcEFyZ3VlbW50TGlzdCYsIENwcFZhcmlhbnQqKSIKLSAgICBjbGFzcyBDYWxsYmFj
ayB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5DYWxsYmFjaygpIHsgfQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgcnVuKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKSA9
IDA7Ci0gICAgfTsKLQotICAgIC8vIENhbGxiYWNrIGZvciAidm9pZCBUOjptZXRob2QoY29uc3Qg
Q3BwQXJndWVtbnRMaXN0JiwgQ3BwVmFyaWFudCopIgotICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBj
bGFzcyBNZW1iZXJDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFjayB7Ci0gICAgcHVibGljOgotICAg
ICAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2RUeXBlKShjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0gICAgICAgIE1lbWJlckNhbGxiYWNrKFQqIG9iamVjdCwgTWV0aG9k
VHlwZSBtZXRob2QpCi0gICAgICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKLSAgICAgICAgICAg
ICwgbV9tZXRob2QobWV0aG9kKSB7IH0KLSAgICAgICAgdmlydHVhbCB+TWVtYmVyQ2FsbGJhY2so
KSB7IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgICht
X29iamVjdC0+Km1fbWV0aG9kKShhcmd1bWVudHMsIHJlc3VsdCk7Ci0gICAgICAgIH0KLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIFQqIG1fb2JqZWN0OwotICAgICAgICBNZXRob2RUeXBlIG1fbWV0
aG9kOwotICAgIH07Ci0KLSAgICAvLyBDYWxsYmFjayBjbGFzcyBmb3IgInZvaWQgVDo6bWV0aG9k
KENwcFZhcmlhbnQqKSIKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgTWVtYmVyR2V0dGVy
Q2FsbGJhY2sgOiBwdWJsaWMgR2V0dGVyQ2FsbGJhY2sgewotICAgIHB1YmxpYzoKLSAgICAgICAg
dHlwZWRlZiB2b2lkIChUOjoqTWV0aG9kVHlwZSkoQ3BwVmFyaWFudCopOwotICAgICAgICBNZW1i
ZXJHZXR0ZXJDYWxsYmFjayhUKiBvYmplY3QsIE1ldGhvZFR5cGUgbWV0aG9kKQotICAgICAgICAg
ICAgOiBtX29iamVjdChvYmplY3QpCi0gICAgICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkgeyB9
Ci0gICAgICAgIHZpcnR1YWwgfk1lbWJlckdldHRlckNhbGxiYWNrKCkgeyB9Ci0KLSAgICAgICAg
dmlydHVhbCB2b2lkIHJ1bihDcHBWYXJpYW50KiByZXN1bHQpIHsgKG1fb2JqZWN0LT4qbV9tZXRo
b2QpKHJlc3VsdCk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFQqIG1fb2JqZWN0OwotICAg
ICAgICBNZXRob2RUeXBlIG1fbWV0aG9kOwotICAgIH07Ci0KLSAgICAvLyBCaW5kIHRoZSBKYXZh
c2NyaXB0IG1ldGhvZCBjYWxsZWQgdGhlIHN0cmluZyBwYXJhbWV0ZXIgdG8gdGhlIEMrKyBtZXRo
b2QuCi0gICAgdm9pZCBiaW5kQ2FsbGJhY2soY29uc3Qgc3RkOjpzdHJpbmcmLCBDYWxsYmFjayop
OwotCi0gICAgLy8gQSB3cmFwcGVyIGZvciBiaW5kQ2FsbGJhY2ssIHRvIHNpbXBsaWZ5IHRoZSBj
b21tb24gY2FzZSBvZiBiaW5kaW5nIGEKLSAgICAvLyBtZXRob2Qgb24gdGhlIGN1cnJlbnQgb2Jq
ZWN0LiBUaG91Z2ggbm90IHZlcmlmaWVkIGhlcmUsIHRoZSBtZXRob2QgcGFyYW1ldGVyCi0gICAg
Ly8gbXVzdCBiZSBhIG1ldGhvZCBvZiB0aGlzIENwcEJvdW5kQ2xhc3Mgc3ViY2xhc3MuCi0gICAg
dGVtcGxhdGU8Y2xhc3MgVD4KLSAgICB2b2lkIGJpbmRNZXRob2QoY29uc3Qgc3RkOjpzdHJpbmcm
IG5hbWUsIHZvaWQgKFQ6OiptZXRob2QpKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKSkKLSAgICB7Ci0gICAgICAgIENhbGxiYWNrKiBjYWxsYmFjayA9IG5ldyBNZW1iZXJDYWxs
YmFjazxUPihzdGF0aWNfY2FzdDxUKj4odGhpcyksIG1ldGhvZCk7Ci0gICAgICAgIGJpbmRDYWxs
YmFjayhuYW1lLCBjYWxsYmFjayk7Ci0gICAgfQotCi0gICAgLy8gQmluZCBKYXZhc2NyaXB0IHBy
b3BlcnR5IHxuYW1lfCB0byB0aGUgQysrIGdldHRlciBjYWxsYmFjayB8Y2FsbGJhY2t8LgotICAg
IC8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIHJlYWQtb25seSBwcm9wZXJ0aWVzLgotICAg
IHZvaWQgYmluZEdldHRlckNhbGxiYWNrKGNvbnN0IHN0ZDo6c3RyaW5nJiwgc3RkOjphdXRvX3B0
cjxHZXR0ZXJDYWxsYmFjaz4pOwotCi0gICAgLy8gQSB3cmFwcGVyIGZvciBCaW5kR2V0dGVyQ2Fs
bGJhY2ssIHRvIHNpbXBsaWZ5IHRoZSBjb21tb24gY2FzZSBvZiBiaW5kaW5nIGEKLSAgICAvLyBw
cm9wZXJ0eSBvbiB0aGUgY3VycmVudCBvYmplY3QuIFRob3VnaCBub3QgdmVyaWZpZWQgaGVyZSwg
dGhlIG1ldGhvZCBwYXJhbWV0ZXIKLSAgICAvLyBtdXN0IGJlIGEgbWV0aG9kIG9mIHRoaXMgQ3Bw
Qm91bmRDbGFzcyBzdWJjbGFzcy4KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIHZvaWQgYmlu
ZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCB2b2lkIChUOjoqbWV0aG9kKShDcHBW
YXJpYW50KikpCi0gICAgewotICAgICAgICBzdGQ6OmF1dG9fcHRyPEdldHRlckNhbGxiYWNrPiBj
YWxsYmFjayhuZXcgTWVtYmVyR2V0dGVyQ2FsbGJhY2s8VD4oc3RhdGljX2Nhc3Q8VCo+KHRoaXMp
LCBtZXRob2QpKTsKLSAgICAgICAgYmluZEdldHRlckNhbGxiYWNrKG5hbWUsIGNhbGxiYWNrKTsK
LSAgICB9Ci0KLSAgICAvLyBCaW5kIHRoZSBKYXZhc2NyaXB0IHByb3BlcnR5IGNhbGxlZCB8bmFt
ZXwgdG8gYSBDcHBWYXJpYW50LgotICAgIHZvaWQgYmluZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3Ry
aW5nJiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gQmluZCBKYXZhc2NyaXB0IHByb3BlcnR5IGNh
bGxlZCB8bmFtZXwgdG8gYSBQcm9wZXJ0eUNhbGxiYWNrLgotICAgIC8vIENwcEJvdW5kQ2xhc3Mg
YXNzdW1lcyBjb250cm9sIG92ZXIgdGhlIGxpZmUgdGltZSBvZiB0aGUgY2FsbGJhY2suCi0gICAg
dm9pZCBiaW5kUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmLCBQcm9wZXJ0eUNhbGxiYWNrKik7
Ci0KLSAgICAvLyBTZXQgdGhlIGZhbGxiYWNrIGNhbGxiYWNrLCB3aGljaCBpcyBjYWxsZWQgd2hl
biB3aGVuIGEgY2FsbGJhY2sgaXMKLSAgICAvLyBpbnZva2VkIHRoYXQgaXNuJ3QgYm91bmQuCi0g
ICAgLy8gSWYgaXQgaXMgMCAoaXRzIGRlZmF1bHQgdmFsdWUpLCBhIEphdmFTY3JpcHQgZXhjZXB0
aW9uIGlzIHRocm93biBpbgotICAgIC8vIHRoYXQgY2FzZSAoYXMgbm9ybWFsbHkgZXhwZWN0ZWQp
LiBJZiBub24gMCwgdGhlIGZhbGxiYWNrIG1ldGhvZCBpcwotICAgIC8vIGludm9rZWQgYW5kIHRo
ZSBzY3JpcHQgY29udGludWVzIGl0cyBleGVjdXRpb24uCi0gICAgLy8gUGFzc2luZyAwIGNsZWFy
cyBvdXQgYW55IGV4aXN0aW5nIGJpbmRpbmcuCi0gICAgLy8gSXQgaXMgdXNlZCBmb3IgdGVzdHMg
YW5kIHNob3VsZCBwcm9iYWJseSBvbmx5IGJlIHVzZWQgaW4gc3VjaCBjYXNlcwotICAgIC8vIGFz
IGl0IG1heSBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9ycyAoYSBKYXZhU2NyaXB0IG9iamVjdCB3
aXRoIGEKLSAgICAvLyBmYWxsYmFjayBhbHdheXMgcmV0dXJucyB0cnVlIHdoZW4gY2hlY2tlZCBm
b3IgYSBtZXRob2QncwotICAgIC8vIGV4aXN0ZW5jZSkuCi0gICAgdm9pZCBiaW5kRmFsbGJhY2tD
YWxsYmFjayhzdGQ6OmF1dG9fcHRyPENhbGxiYWNrPiBmYWxsYmFja0NhbGxiYWNrKQotICAgIHsK
LSAgICAgICAgbV9mYWxsYmFja0NhbGxiYWNrID0gZmFsbGJhY2tDYWxsYmFjazsKLSAgICB9Ci0K
LSAgICAvLyBBIHdyYXBwZXIgZm9yIEJpbmRGYWxsYmFja0NhbGxiYWNrLCB0byBzaW1wbGlmeSB0
aGUgY29tbW9uIGNhc2Ugb2YKLSAgICAvLyBiaW5kaW5nIGEgbWV0aG9kIG9uIHRoZSBjdXJyZW50
IG9iamVjdC4gVGhvdWdoIG5vdCB2ZXJpZmllZCBoZXJlLAotICAgIC8vIHxtZXRob2R8IG11c3Qg
YmUgYSBtZXRob2Qgb2YgdGhpcyBDcHBCb3VuZENsYXNzIHN1YmNsYXNzLgotICAgIC8vIFBhc3Np
bmcgMCBmb3IgfG1ldGhvZHwgY2xlYXJzIG91dCBhbnkgZXhpc3RpbmcgYmluZGluZy4KLSAgICB0
ZW1wbGF0ZTxjbGFzcyBUPgotICAgIHZvaWQgYmluZEZhbGxiYWNrTWV0aG9kKHZvaWQgKFQ6Oipt
ZXRob2QpKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKSkKLSAgICB7Ci0gICAg
ICAgIGlmIChtZXRob2QpCi0gICAgICAgICAgICBiaW5kRmFsbGJhY2tDYWxsYmFjayhzdGQ6OmF1
dG9fcHRyPENhbGxiYWNrPihuZXcgTWVtYmVyQ2FsbGJhY2s8VD4oc3RhdGljX2Nhc3Q8VCo+KHRo
aXMpLCBtZXRob2QpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJpbmRGYWxsYmFja0Nh
bGxiYWNrKHN0ZDo6YXV0b19wdHI8Q2FsbGJhY2s+KCkpOwotICAgIH0KLQotICAgIC8vIFNvbWUg
ZmllbGRzIGFyZSBwcm90ZWN0ZWQgYmVjYXVzZSBzb21lIHRlc3RzIGRlcGVuZCBvbiBhY2Nlc3Np
bmcgdGhlbSwKLSAgICAvLyBidXQgb3RoZXJ3aXNlIHRoZXkgc2hvdWxkIGJlIGNvbnNpZGVyZWQg
cHJpdmF0ZS4KLQotICAgIHR5cGVkZWYgc3RkOjptYXA8TlBJZGVudGlmaWVyLCBQcm9wZXJ0eUNh
bGxiYWNrKj4gUHJvcGVydHlMaXN0OwotICAgIHR5cGVkZWYgc3RkOjptYXA8TlBJZGVudGlmaWVy
LCBDYWxsYmFjayo+IE1ldGhvZExpc3Q7Ci0gICAgLy8gVGhlc2UgbWFwcyBhc3NvY2lhdGUgbmFt
ZXMgd2l0aCBwcm9wZXJ0eSBhbmQgbWV0aG9kIHBvaW50ZXJzIHRvIGJlCi0gICAgLy8gZXhwb3Nl
ZCB0byBKYXZhU2NyaXB0LgotICAgIFByb3BlcnR5TGlzdCBtX3Byb3BlcnRpZXM7Ci0gICAgTWV0
aG9kTGlzdCBtX21ldGhvZHM7Ci0KLSAgICAvLyBUaGUgY2FsbGJhY2sgZ2V0cyBpbnZva2VkIHdo
ZW4gYSBjYWxsIGlzIG1hZGUgdG8gYW4gbm9uZXhpc3RlbnQgbWV0aG9kLgotICAgIHN0ZDo6YXV0
b19wdHI8Q2FsbGJhY2s+IG1fZmFsbGJhY2tDYWxsYmFjazsKLQotcHJpdmF0ZToKLSAgICAvLyBO
UE9iamVjdCBjYWxsYmFja3MuCi0gICAgZnJpZW5kIHN0cnVjdCBDcHBOUE9iamVjdDsKLSAgICBi
b29sIGhhc01ldGhvZChOUElkZW50aWZpZXIpIGNvbnN0OwotICAgIGJvb2wgaW52b2tlKE5QSWRl
bnRpZmllciwgY29uc3QgTlBWYXJpYW50KiBhcmdzLCBzaXplX3QgYXJnQ291bnQsCi0gICAgICAg
ICAgICAgICAgTlBWYXJpYW50KiByZXN1bHQpOwotICAgIGJvb2wgaGFzUHJvcGVydHkoTlBJZGVu
dGlmaWVyKSBjb25zdDsKLSAgICBib29sIGdldFByb3BlcnR5KE5QSWRlbnRpZmllciwgTlBWYXJp
YW50KiByZXN1bHQpIGNvbnN0OwotICAgIGJvb2wgc2V0UHJvcGVydHkoTlBJZGVudGlmaWVyLCBj
b25zdCBOUFZhcmlhbnQqKTsKLQotICAgIC8vIEEgbGF6aWx5LWluaXRpYWxpemVkIENwcFZhcmlh
bnQgcmVwcmVzZW50aW5nIHRoaXMgY2xhc3MuIFdlIHJldGFpbiAxCi0gICAgLy8gcmVmZXJlbmNl
IHRvIHRoaXMgb2JqZWN0LCBhbmQgaXQgaXMgcmVsZWFzZWQgb24gZGVsZXRpb24uCi0gICAgQ3Bw
VmFyaWFudCBtX3NlbGZWYXJpYW50OwotCi0gICAgLy8gVHJ1ZSBpZiBvdXIgbnBfb2JqZWN0IGhh
cyBiZWVuIGJvdW5kIHRvIGEgV2ViRnJhbWUsIGluIHdoaWNoIGNhc2UgaXQgbXVzdAotICAgIC8v
IGJlIHVucmVnaXN0ZXJlZCB3aXRoIFY4IHdoZW4gd2UgZGVsZXRlIGl0LgotICAgIGJvb2wgbV9i
b3VuZFRvRnJhbWU7Ci0KLXByaXZhdGU6Ci0gICAgQ3BwQm91bmRDbGFzcyhDcHBCb3VuZENsYXNz
Jik7Ci0gICAgQ3BwQm91bmRDbGFzcyYgb3BlcmF0b3I9KGNvbnN0IENwcEJvdW5kQ2xhc3MmKTsK
LX07Ci0KLX0KLQotI2VuZGlmIC8vIENwcEJvdW5kQ2xhc3NfaApkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQ3BwVmFyaWFudC5jcHAgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9DcHBWYXJpYW50LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyZTkyYTY1YzBlZjRlOGMzYmRmNGU1
Y2RkNDcxNTViZTc3MmMzNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9DcHBW
YXJpYW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyNCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlv
bi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkNwcFZhcmlhbnQuaCIKLQotI2luY2x1ZGUgIlRlc3RDb21tb24uaCIK
LSNpbmNsdWRlICJXZWJCaW5kaW5ncy5oIgotI2luY2x1ZGUgPGxpbWl0cz4KLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJUZXN0
UnVubmVyIHsKLQotQ3BwVmFyaWFudDo6Q3BwVmFyaWFudCgpCi17Ci0gICAgdHlwZSA9IE5QVmFy
aWFudFR5cGVfTnVsbDsKLX0KLQotLy8gTm90ZSB0aGF0IFNldCgpIHBlcmZvcm1zIGEgZGVlcCBj
b3B5LCB3aGljaCBpcyBuZWNlc3NhcnkgdG8gc2FmZWx5Ci0vLyBjYWxsIEZyZWVEYXRhKCkgb24g
dGhlIHZhbHVlIGluIHRoZSBkZXN0cnVjdG9yLgotQ3BwVmFyaWFudDo6Q3BwVmFyaWFudChjb25z
dCBDcHBWYXJpYW50JiBvcmlnaW5hbCkKLXsKLSAgICB0eXBlID0gTlBWYXJpYW50VHlwZV9OdWxs
OwotICAgIHNldChvcmlnaW5hbCk7Ci19Ci0KLS8vIFNlZSBjb21tZW50IGZvciBjb3B5IGNvbnN0
cnVjdG9yLCBhYm92ZS4KLUNwcFZhcmlhbnQmIENwcFZhcmlhbnQ6Om9wZXJhdG9yPShjb25zdCBD
cHBWYXJpYW50JiBvcmlnaW5hbCkKLXsKLSAgICBpZiAoJm9yaWdpbmFsICE9IHRoaXMpCi0gICAg
ICAgIHNldChvcmlnaW5hbCk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1DcHBWYXJpYW50Ojp+
Q3BwVmFyaWFudCgpCi17Ci0gICAgZnJlZURhdGEoKTsKLX0KLQotdm9pZCBDcHBWYXJpYW50Ojpm
cmVlRGF0YSgpCi17Ci0gICAgV2ViQmluZGluZ3M6OnJlbGVhc2VWYXJpYW50VmFsdWUodGhpcyk7
Ci19Ci0KLWJvb2wgQ3BwVmFyaWFudDo6aXNFcXVhbChjb25zdCBDcHBWYXJpYW50JiBvdGhlcikg
Y29uc3QKLXsKLSAgICBpZiAodHlwZSAhPSBvdGhlci50eXBlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfQm9vbDoK
LSAgICAgICAgcmV0dXJuICh2YWx1ZS5ib29sVmFsdWUgPT0gb3RoZXIudmFsdWUuYm9vbFZhbHVl
KTsKLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfSW50MzI6Ci0gICAgICAgIHJldHVybiAodmFsdWUu
aW50VmFsdWUgPT0gb3RoZXIudmFsdWUuaW50VmFsdWUpOwotICAgIGNhc2UgTlBWYXJpYW50VHlw
ZV9Eb3VibGU6Ci0gICAgICAgIHJldHVybiAodmFsdWUuZG91YmxlVmFsdWUgPT0gb3RoZXIudmFs
dWUuZG91YmxlVmFsdWUpOwotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9TdHJpbmc6IHsKLSAgICAg
ICAgY29uc3QgTlBTdHJpbmcgKnRoaXNfdmFsdWUgPSAmdmFsdWUuc3RyaW5nVmFsdWU7Ci0gICAg
ICAgIGNvbnN0IE5QU3RyaW5nICpvdGhlcl92YWx1ZSA9ICZvdGhlci52YWx1ZS5zdHJpbmdWYWx1
ZTsKLSAgICAgICAgdWludDMyX3QgbGVuID0gdGhpc192YWx1ZS0+VVRGOExlbmd0aDsKLSAgICAg
ICAgcmV0dXJuIGxlbiA9PSBvdGhlcl92YWx1ZS0+VVRGOExlbmd0aAotICAgICAgICAgICAgJiYg
IXN0cm5jbXAodGhpc192YWx1ZS0+VVRGOENoYXJhY3RlcnMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBvdGhlcl92YWx1ZS0+VVRGOENoYXJhY3RlcnMsIGxlbik7Ci0gICAgfQotICAgIGNhc2Ug
TlBWYXJpYW50VHlwZV9OdWxsOgotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9Wb2lkOgotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfT2JqZWN0OiB7Ci0gICAgICAg
IE5QT2JqZWN0KiB0aGlzVmFsdWUgPSB2YWx1ZS5vYmplY3RWYWx1ZTsKLSAgICAgICAgTlBPYmpl
Y3QqIG90aGVyVmFsdWUgPSBvdGhlci52YWx1ZS5vYmplY3RWYWx1ZTsKLSAgICAgICAgcmV0dXJu
IHRoaXNWYWx1ZS0+X2NsYXNzID09IG90aGVyVmFsdWUtPl9jbGFzcwotICAgICAgICAgICAgJiYg
dGhpc1ZhbHVlLT5yZWZlcmVuY2VDb3VudCA9PSBvdGhlclZhbHVlLT5yZWZlcmVuY2VDb3VudDsK
LSAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDcHBWYXJpYW50Ojpj
b3B5VG9OUFZhcmlhbnQoTlBWYXJpYW50KiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgcmVzdWx0LT50
eXBlID0gdHlwZTsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIE5QVmFyaWFudFR5cGVf
Qm9vbDoKLSAgICAgICAgcmVzdWx0LT52YWx1ZS5ib29sVmFsdWUgPSB2YWx1ZS5ib29sVmFsdWU7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9JbnQzMjoKLSAgICAgICAg
cmVzdWx0LT52YWx1ZS5pbnRWYWx1ZSA9IHZhbHVlLmludFZhbHVlOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIE5QVmFyaWFudFR5cGVfRG91YmxlOgotICAgICAgICByZXN1bHQtPnZhbHVlLmRv
dWJsZVZhbHVlID0gdmFsdWUuZG91YmxlVmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
TlBWYXJpYW50VHlwZV9TdHJpbmc6Ci0gICAgICAgIFdlYkJpbmRpbmdzOjppbml0aWFsaXplVmFy
aWFudFdpdGhTdHJpbmdDb3B5KHJlc3VsdCwgJnZhbHVlLnN0cmluZ1ZhbHVlKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX051bGw6Ci0gICAgY2FzZSBOUFZhcmlhbnRU
eXBlX1ZvaWQ6Ci0gICAgICAgIC8vIE5vdGhpbmcgdG8gc2V0LgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIE5QVmFyaWFudFR5cGVfT2JqZWN0OgotICAgICAgICByZXN1bHQtPnR5cGUgPSBOUFZh
cmlhbnRUeXBlX09iamVjdDsKLSAgICAgICAgcmVzdWx0LT52YWx1ZS5vYmplY3RWYWx1ZSA9IFdl
YkJpbmRpbmdzOjpyZXRhaW5PYmplY3QodmFsdWUub2JqZWN0VmFsdWUpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLXZvaWQgQ3BwVmFyaWFudDo6c2V0KGNvbnN0IE5QVmFyaWFudCYgbmV3
VmFsdWUpCi17Ci0gICAgZnJlZURhdGEoKTsKLSAgICBzd2l0Y2ggKG5ld1ZhbHVlLnR5cGUpIHsK
LSAgICBjYXNlIE5QVmFyaWFudFR5cGVfQm9vbDoKLSAgICAgICAgc2V0KG5ld1ZhbHVlLnZhbHVl
LmJvb2xWYWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9JbnQz
MjoKLSAgICAgICAgc2V0KG5ld1ZhbHVlLnZhbHVlLmludFZhbHVlKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX0RvdWJsZToKLSAgICAgICAgc2V0KG5ld1ZhbHVlLnZh
bHVlLmRvdWJsZVZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBl
X1N0cmluZzoKLSAgICAgICAgc2V0KG5ld1ZhbHVlLnZhbHVlLnN0cmluZ1ZhbHVlKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX051bGw6Ci0gICAgY2FzZSBOUFZhcmlh
bnRUeXBlX1ZvaWQ6Ci0gICAgICAgIHR5cGUgPSBuZXdWYWx1ZS50eXBlOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfT2JqZWN0OgotICAgICAgICBzZXQobmV3VmFsdWUu
dmFsdWUub2JqZWN0VmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgQ3Bw
VmFyaWFudDo6c2V0TnVsbCgpCi17Ci0gICAgZnJlZURhdGEoKTsKLSAgICB0eXBlID0gTlBWYXJp
YW50VHlwZV9OdWxsOwotfQotCi12b2lkIENwcFZhcmlhbnQ6OnNldChib29sIG5ld1ZhbHVlKQot
ewotICAgIGZyZWVEYXRhKCk7Ci0gICAgdHlwZSA9IE5QVmFyaWFudFR5cGVfQm9vbDsKLSAgICB2
YWx1ZS5ib29sVmFsdWUgPSBuZXdWYWx1ZTsKLX0KLQotdm9pZCBDcHBWYXJpYW50OjpzZXQoaW50
MzJfdCBuZXdWYWx1ZSkKLXsKLSAgICBmcmVlRGF0YSgpOwotICAgIHR5cGUgPSBOUFZhcmlhbnRU
eXBlX0ludDMyOwotICAgIHZhbHVlLmludFZhbHVlID0gbmV3VmFsdWU7Ci19Ci0KLXZvaWQgQ3Bw
VmFyaWFudDo6c2V0KGRvdWJsZSBuZXdWYWx1ZSkKLXsKLSAgICBmcmVlRGF0YSgpOwotICAgIHR5
cGUgPSBOUFZhcmlhbnRUeXBlX0RvdWJsZTsKLSAgICB2YWx1ZS5kb3VibGVWYWx1ZSA9IG5ld1Zh
bHVlOwotfQotCi0vLyBUaGUgbmV3VmFsdWUgbXVzdCBiZSBhIG51bGwtdGVybWluYXRlZCBzdHJp
bmcuCi12b2lkIENwcFZhcmlhbnQ6OnNldChjb25zdCBjaGFyKiBuZXdWYWx1ZSkKLXsKLSAgICBm
cmVlRGF0YSgpOwotICAgIHR5cGUgPSBOUFZhcmlhbnRUeXBlX1N0cmluZzsKLSAgICBOUFN0cmlu
ZyBuZXdTdHJpbmcgPSB7bmV3VmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHVpbnQzMl90PihzdHJsZW4obmV3VmFsdWUpKX07Ci0gICAgV2ViQmluZGluZ3M6Omlu
aXRpYWxpemVWYXJpYW50V2l0aFN0cmluZ0NvcHkodGhpcywgJm5ld1N0cmluZyk7Ci19Ci0KLXZv
aWQgQ3BwVmFyaWFudDo6c2V0KGNvbnN0IHN0cmluZyYgbmV3VmFsdWUpCi17Ci0gICAgZnJlZURh
dGEoKTsKLSAgICB0eXBlID0gTlBWYXJpYW50VHlwZV9TdHJpbmc7Ci0gICAgTlBTdHJpbmcgbmV3
U3RyaW5nID0ge25ld1ZhbHVlLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KG5ld1ZhbHVlLnNpemUoKSl9OwotICAgIFdlYkJpbmRpbmdzOjpp
bml0aWFsaXplVmFyaWFudFdpdGhTdHJpbmdDb3B5KHRoaXMsICZuZXdTdHJpbmcpOwotfQotCi12
b2lkIENwcFZhcmlhbnQ6OnNldChjb25zdCBOUFN0cmluZyYgbmV3VmFsdWUpCi17Ci0gICAgZnJl
ZURhdGEoKTsKLSAgICB0eXBlID0gTlBWYXJpYW50VHlwZV9TdHJpbmc7Ci0gICAgV2ViQmluZGlu
Z3M6OmluaXRpYWxpemVWYXJpYW50V2l0aFN0cmluZ0NvcHkodGhpcywgJm5ld1ZhbHVlKTsKLX0K
LQotdm9pZCBDcHBWYXJpYW50OjpzZXQoTlBPYmplY3QqIG5ld1ZhbHVlKQotewotICAgIGZyZWVE
YXRhKCk7Ci0gICAgdHlwZSA9IE5QVmFyaWFudFR5cGVfT2JqZWN0OwotICAgIHZhbHVlLm9iamVj
dFZhbHVlID0gV2ViQmluZGluZ3M6OnJldGFpbk9iamVjdChuZXdWYWx1ZSk7Ci19Ci0KLXN0cmlu
ZyBDcHBWYXJpYW50Ojp0b1N0cmluZygpIGNvbnN0Ci17Ci0gICAgV0VCS0lUX0FTU0VSVChpc1N0
cmluZygpKTsKLSAgICByZXR1cm4gc3RyaW5nKHZhbHVlLnN0cmluZ1ZhbHVlLlVURjhDaGFyYWN0
ZXJzLAotICAgICAgICAgICAgICAgICAgdmFsdWUuc3RyaW5nVmFsdWUuVVRGOExlbmd0aCk7Ci19
Ci0KLWludDMyX3QgQ3BwVmFyaWFudDo6dG9JbnQzMigpIGNvbnN0Ci17Ci0gICAgaWYgKGlzSW50
MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmludFZhbHVlOwotICAgIGlmIChpc0RvdWJsZSgp
KQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUuZG91YmxlVmFsdWUp
OwotICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
ZG91YmxlIENwcFZhcmlhbnQ6OnRvRG91YmxlKCkgY29uc3QKLXsKLSAgICBpZiAoaXNJbnQzMigp
KQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZS5pbnRWYWx1ZSk7Ci0g
ICAgaWYgKGlzRG91YmxlKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5kb3VibGVWYWx1ZTsKLSAg
ICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wg
Q3BwVmFyaWFudDo6dG9Cb29sZWFuKCkgY29uc3QKLXsKLSAgICBXRUJLSVRfQVNTRVJUKGlzQm9v
bCgpKTsKLSAgICByZXR1cm4gdmFsdWUuYm9vbFZhbHVlOwotfQotCi12ZWN0b3I8c3RyaW5nPiBD
cHBWYXJpYW50Ojp0b1N0cmluZ1ZlY3RvcigpIGNvbnN0Ci17Ci0KLSAgICBXRUJLSVRfQVNTRVJU
KGlzT2JqZWN0KCkpOwotICAgIHZlY3RvcjxzdHJpbmc+IHN0cmluZ1ZlY3RvcjsKLSAgICBOUE9i
amVjdCogbnBWYWx1ZSA9IHZhbHVlLm9iamVjdFZhbHVlOwotICAgIE5QSWRlbnRpZmllciBsZW5n
dGhJZCA9IFdlYkJpbmRpbmdzOjpnZXRTdHJpbmdJZGVudGlmaWVyKCJsZW5ndGgiKTsKLQotICAg
IGlmICghV2ViQmluZGluZ3M6Omhhc1Byb3BlcnR5KDAsIG5wVmFsdWUsIGxlbmd0aElkKSkKLSAg
ICAgICAgcmV0dXJuIHN0cmluZ1ZlY3RvcjsKLQotICAgIE5QVmFyaWFudCBsZW5ndGhWYWx1ZTsK
LSAgICBpZiAoIVdlYkJpbmRpbmdzOjpnZXRQcm9wZXJ0eSgwLCBucFZhbHVlLCBsZW5ndGhJZCwg
Jmxlbmd0aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHN0cmluZ1ZlY3RvcjsKLQotICAgIGludCBs
ZW5ndGggPSAwOwotICAgIC8vIFRoZSBsZW5ndGggaXMgYSBkb3VibGUgaW4gc29tZSBjYXNlcy4K
LSAgICBpZiAoTlBWQVJJQU5UX0lTX0RPVUJMRShsZW5ndGhWYWx1ZSkpCi0gICAgICAgIGxlbmd0
aCA9IHN0YXRpY19jYXN0PGludD4oTlBWQVJJQU5UX1RPX0RPVUJMRShsZW5ndGhWYWx1ZSkpOwot
ICAgIGVsc2UgaWYgKE5QVkFSSUFOVF9JU19JTlQzMihsZW5ndGhWYWx1ZSkpCi0gICAgICAgIGxl
bmd0aCA9IE5QVkFSSUFOVF9UT19JTlQzMihsZW5ndGhWYWx1ZSk7Ci0gICAgV2ViQmluZGluZ3M6
OnJlbGVhc2VWYXJpYW50VmFsdWUoJmxlbmd0aFZhbHVlKTsKLQotICAgIC8vIEZvciBzYW5pdHks
IG9ubHkgYWxsb3cgMTAwIGl0ZW1zLgotICAgIGxlbmd0aCA9IG1pbigxMDAsIGxlbmd0aCk7Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAvLyBHZXQgZWFj
aCBvZiB0aGUgaXRlbXMuCi0gICAgICAgIGNoYXIgaW5kZXhJbkNoYXJbMjBdOyAvLyBFbm91Z2gg
c2l6ZSB0byBzdG9yZSAzMi1iaXQgaW50ZWdlcgotICAgICAgICBzbnByaW50ZihpbmRleEluQ2hh
ciwgMjAsICIlZCIsIGkpOwotICAgICAgICBzdHJpbmcgaW5kZXgoaW5kZXhJbkNoYXIpOwotICAg
ICAgICBOUElkZW50aWZpZXIgaW5kZXhJZCA9IFdlYkJpbmRpbmdzOjpnZXRTdHJpbmdJZGVudGlm
aWVyKGluZGV4LmNfc3RyKCkpOwotICAgICAgICBpZiAoIVdlYkJpbmRpbmdzOjpoYXNQcm9wZXJ0
eSgwLCBucFZhbHVlLCBpbmRleElkKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBO
UFZhcmlhbnQgaW5kZXhWYWx1ZTsKLSAgICAgICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0UHJvcGVy
dHkoMCwgbnBWYWx1ZSwgaW5kZXhJZCwgJmluZGV4VmFsdWUpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGlmIChOUFZBUklBTlRfSVNfU1RSSU5HKGluZGV4VmFsdWUpKSB7Ci0gICAg
ICAgICAgICBzdHJpbmcgaXRlbShOUFZBUklBTlRfVE9fU1RSSU5HKGluZGV4VmFsdWUpLlVURjhD
aGFyYWN0ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgTlBWQVJJQU5UX1RPX1NUUklORyhp
bmRleFZhbHVlKS5VVEY4TGVuZ3RoKTsKLSAgICAgICAgICAgIHN0cmluZ1ZlY3Rvci5wdXNoX2Jh
Y2soaXRlbSk7Ci0gICAgICAgIH0KLSAgICAgICAgV2ViQmluZGluZ3M6OnJlbGVhc2VWYXJpYW50
VmFsdWUoJmluZGV4VmFsdWUpOwotICAgIH0KLSAgICByZXR1cm4gc3RyaW5nVmVjdG9yOwotfQot
Ci1ib29sIENwcFZhcmlhbnQ6Omludm9rZShjb25zdCBzdHJpbmcmIG1ldGhvZCwgY29uc3QgQ3Bw
VmFyaWFudCogYXJndW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYXJn
dW1lbnRDb3VudCwgQ3BwVmFyaWFudCYgcmVzdWx0KSBjb25zdAotewotICAgIFdFQktJVF9BU1NF
UlQoaXNPYmplY3QoKSk7Ci0gICAgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUgPSBXZWJCaW5kaW5n
czo6Z2V0U3RyaW5nSWRlbnRpZmllcihtZXRob2QuY19zdHIoKSk7Ci0gICAgTlBPYmplY3QqIG5w
T2JqZWN0ID0gdmFsdWUub2JqZWN0VmFsdWU7Ci0gICAgaWYgKCFXZWJCaW5kaW5nczo6aGFzTWV0
aG9kKDAsIG5wT2JqZWN0LCBtZXRob2ROYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IE5QVmFyaWFudCByOwotICAgIGJvb2wgc3RhdHVzID0gV2ViQmluZGluZ3M6Omludm9rZSgwLCBu
cE9iamVjdCwgbWV0aG9kTmFtZSwgYXJndW1lbnRzLCBhcmd1bWVudENvdW50LCAmcik7Ci0gICAg
cmVzdWx0LnNldChyKTsKLSAgICByZXR1cm4gc3RhdHVzOwotfQotCi1ib29sIENwcFZhcmlhbnQ6
Omludm9rZURlZmF1bHQoY29uc3QgQ3BwVmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1
bWVudENvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENwcFZhcmlhbnQmIHJl
c3VsdCkgY29uc3QKLXsKLSAgICBXRUJLSVRfQVNTRVJUKGlzT2JqZWN0KCkpOwotICAgIE5QT2Jq
ZWN0KiBucE9iamVjdCA9IHZhbHVlLm9iamVjdFZhbHVlOwotICAgIE5QVmFyaWFudCByOwotICAg
IGJvb2wgc3RhdHVzID0gV2ViQmluZGluZ3M6Omludm9rZURlZmF1bHQoMCwgbnBPYmplY3QsIGFy
Z3VtZW50cywgYXJndW1lbnRDb3VudCwgJnIpOwotICAgIHJlc3VsdC5zZXQocik7Ci0gICAgcmV0
dXJuIHN0YXR1czsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvQ3BwVmFyaWFudC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQ3BwVmFyaWFudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBlOTI5NWEzYmU4OTViYTNlMGE5NzFiMGU5ZWE5ZDhkYWY4ZWNmYzI4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0NwcFZhcmlhbnQuaAorKysgL2Rldi9udWxs
CkBAIC0xLDE0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLyoKLSAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlv
biBmb3IgQ3BwVmFyaWFudCwgYSB0eXBlIHVzZWQgYnkgQysrIGNsYXNzZXMKLSAgdGhhdCBhcmUg
dG8gYmUgYm91bmQgdG8gSmF2YVNjcmlwdCBvYmplY3RzLgotCi0gIENwcFZhcmlhbnQgZXhpc3Rz
IHByaW1hcmlseSBhcyBhbiBpbnRlcmZhY2UgYmV0d2VlbiBDKysgY2FsbGVycyBhbmQgdGhlCi0g
IGNvcnJlc3BvbmRpbmcgTlBWYXJpYW50IHR5cGUuICBDcHBWYXJpYW50IGFsc28gcHJvdmlkZXMg
YSBudW1iZXIgb2YKLSAgY29udmVuaWVuY2UgY29uc3RydWN0b3JzIGFuZCBhY2Nlc3NvcnMsIHNv
IHRoYXQgdGhlIE5QVmFyaWFudFR5cGUgdmFsdWVzCi0gIGRvbid0IG5lZWQgdG8gYmUgZXhwb3Nl
ZCwgYW5kIGEgZGVzdHJ1Y3RvciB0byBmcmVlIGFueSBtZW1vcnkgYWxsb2NhdGVkIGZvcgotICBz
dHJpbmcgdmFsdWVzLgotKi8KLQotI2lmbmRlZiBDcHBWYXJpYW50X2gKLSNkZWZpbmUgQ3BwVmFy
aWFudF9oCi0KLSNpbmNsdWRlICJXZWJCaW5kaW5ncy5oIgotI2luY2x1ZGUgPHN0cmluZz4KLSNp
bmNsdWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotY2xhc3MgQ3Bw
VmFyaWFudCA6IHB1YmxpYyBOUFZhcmlhbnQgewotcHVibGljOgotICAgIENwcFZhcmlhbnQoKTsK
LSAgICB+Q3BwVmFyaWFudCgpOwotICAgIHZvaWQgc2V0TnVsbCgpOwotICAgIHZvaWQgc2V0KGJv
b2wpOwotICAgIHZvaWQgc2V0KGludDMyX3QpOwotICAgIHZvaWQgc2V0KGRvdWJsZSk7Ci0KLSAg
ICAvLyBOb3RlIHRoYXQgc2V0dGluZyBhIENwcFZhcmlhbnQgdG8gYSBzdHJpbmcgdmFsdWUgaW52
b2x2ZXMgY29weWluZyB0aGUKLSAgICAvLyBzdHJpbmcgZGF0YSwgd2hpY2ggbXVzdCBiZSBmcmVl
ZCB3aXRoIGEgY2FsbCB0byBmcmVlRGF0YSgpIHdoZW4gdGhlCi0gICAgLy8gQ3BwVmFyaWFudCBp
cyBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUgb3IgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gTm9ybWFs
bHkKLSAgICAvLyB0aGlzIGlzIGhhbmRsZWQgYnkgdGhlIG90aGVyIHNldCgpIG1ldGhvZHMgYW5k
IGJ5IHRoZSBkZXN0cnVjdG9yLgotICAgIHZvaWQgc2V0KGNvbnN0IGNoYXIqKTsgLy8gTXVzdCBi
ZSBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcuCi0gICAgdm9pZCBzZXQoY29uc3Qgc3RkOjpzdHJp
bmcmKTsKLSAgICB2b2lkIHNldChjb25zdCBOUFN0cmluZyYpOwotICAgIHZvaWQgc2V0KGNvbnN0
IE5QVmFyaWFudCYpOwotCi0gICAgLy8gTm90ZSB0aGF0IHNldHRpbmcgYSBDcHBWYXJpYW50IHRv
IGFuIE5QT2JqZWN0IGludm9sdmVzIHJlZi1jb3VudGluZwotICAgIC8vIHRoZSBhY3R1YWwgb2Jq
ZWN0LiBmcmVlRGF0YSgpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUgQ3BwVmFyaWFudAot
ICAgIC8vIGlzIG5vIGxvbmdlciBuZWVkZWQuIFRoZSBvdGhlciBzZXQoKSBtZXRob2RzIGhhbmRs
ZSB0aGlzIGludGVybmFsbHkuCi0gICAgLy8gQWxzbywgdGhlIG9iamVjdCdzIE5QQ2xhc3MgaXMg
ZXhwZWN0ZWQgdG8gYmUgYSBzdGF0aWMgb2JqZWN0OiBuZWl0aGVyCi0gICAgLy8gdGhlIE5QIHJ1
bnRpbWUgbm9yIENwcFZhcmlhbnQgd2lsbCBldmVyIGZyZWUgaXQuCi0gICAgdm9pZCBzZXQoTlBP
YmplY3QqX3ZhbHVlKTsKLQotICAgIC8vIFRoZXNlIHRocmVlIG1ldGhvZHMgYWxsIHBlcmZvcm0g
ZGVlcCBjb3BpZXMgb2YgYW55IHN0cmluZyBkYXRhLiBUaGlzCi0gICAgLy8gYWxsb3dzIGxvY2Fs
IENwcFZhcmlhbnRzIHRvIGJlIHJlbGVhc2VkIGJ5IHRoZSBkZXN0cnVjdG9yIHdpdGhvdXQKLSAg
ICAvLyBjb3JydXB0aW5nIHRoZWlyIHNvdXJjZXMuIEluIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGNv
ZGUsIG9yIHdoZW4gc3RyaW5ncwotICAgIC8vIGFyZSB2ZXJ5IGxvbmcsIGF2b2lkIGNyZWF0aW5n
IG5ldyBDcHBWYXJpYW50cy4KLSAgICAvLyBJbiBjYXNlIG9mIE5QT2JqZWN0IGFzIHRoZSBkYXRh
LCB0aGUgY29weWluZyBpbnZvbHZlcyByZWYtY291bnRpbmcKLSAgICAvLyBhcyBvcHBvc2VkIHRv
IGRlZXAtY29weWluZy4gVGhlIHJlZi1jb3VudGluZyBlbnN1cmVzIHRoYXQgc291cmNlcyBkb24n
dAotICAgIC8vIGdldCBjb3JydXB0ZWQgd2hlbiB0aGUgY29waWVzIGdldCBkZXN0cm95ZWQuCi0g
ICAgdm9pZCBjb3B5VG9OUFZhcmlhbnQoTlBWYXJpYW50KiByZXN1bHQpIGNvbnN0OwotICAgIENw
cFZhcmlhbnQmIG9wZXJhdG9yPShjb25zdCBDcHBWYXJpYW50JiBvcmlnaW5hbCk7Ci0gICAgQ3Bw
VmFyaWFudChjb25zdCBDcHBWYXJpYW50JiBvcmlnaW5hbCk7Ci0KLSAgICAvLyBDYWxscyBOUE5f
UmVsZWFzZVZhcmlhbnRWYWx1ZSwgd2hpY2ggZnJlZXMgYW55IHN0cmluZyBkYXRhCi0gICAgLy8g
aGVsZCBieSB0aGUgb2JqZWN0IGFuZCBzZXRzIGl0cyB0eXBlIHRvIG51bGwuCi0gICAgLy8gSW4g
Y2FzZSBvZiBOUE9iamVjdCwgdGhlIE5QTl9SZWxlYXNlVmFyaWFudFZhbHVlIGRlY3JlbWVudHMK
LSAgICAvLyB0aGUgcmVmLWNvdW50IChyZWxlYXNlcyB3aGVuIHJlZi1jb3VudCBiZWNvbWVzIDAp
Ci0gICAgdm9pZCBmcmVlRGF0YSgpOwotCi0gICAgLy8gQ29tcGFyZXMgdGhpcyBDcHBWYXJpYW50
J3MgdHlwZSBhbmQgdmFsdWUgdG8gYW5vdGhlcidzLiBUaGV5IG11c3QgYmUKLSAgICAvLyBpZGVu
dGljYWwgaW4gYm90aCB0eXBlIGFuZCB2YWx1ZSB0byBiZSBjb25zaWRlcmVkIGVxdWFsLiBGb3Ig
c3RyaW5nIGFuZAotICAgIC8vIG9iamVjdCB0eXBlcywgYSBkZWVwIGNvbXBhcmlzb24gaXMgcGVy
Zm9ybWVkOyB0aGF0IGlzLCB0aGUgY29udGVudHMgb2YgdGhlCi0gICAgLy8gc3RyaW5ncywgb3Ig
dGhlIGNsYXNzZXMgYW5kIHJlZmNvdW50cyBvZiB0aGUgb2JqZWN0cywgbXVzdCBiZSB0aGUgc2Ft
ZSwKLSAgICAvLyBidXQgdGhleSBuZWVkIG5vdCBiZSB0aGUgc2FtZSBwb2ludGVycy4KLSAgICBi
b29sIGlzRXF1YWwoY29uc3QgQ3BwVmFyaWFudCYpIGNvbnN0OwotCi0gICAgLy8gVGhlIHZhbHVl
IG9mIGEgQ3BwVmFyaWFudCBtYXkgYmUgcmVhZCBkaXJlY3RseSBmcm9tIGl0cyBOUFZhcmlhbnQg
KGJ1dAotICAgIC8vIHNob3VsZCBvbmx5IGJlIHNldCB1c2luZyBvbmUgb2YgdGhlIHNldCgpIG1l
dGhvZHMgYWJvdmUpLiBBbHRob3VnaCB0aGUKLSAgICAvLyB0eXBlIG9mIGEgQ3BwVmFyaWFudCBp
cyBsaWtld2lzZSBwdWJsaWMsIGl0IGNhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZXNlCi0gICAg
Ly8gZnVuY3Rpb25zIHJhdGhlciB0aGFuIGRpcmVjdGx5IGlmIGEgY2FsbGVyIHdpc2hlcyB0byBh
dm9pZCBkZXBlbmRlbmNlIG9uCi0gICAgLy8gdGhlIE5QVmFyaWFudFR5cGUgdmFsdWVzLgotICAg
IGJvb2wgaXNCb29sKCkgY29uc3QgeyByZXR1cm4gKHR5cGUgPT0gTlBWYXJpYW50VHlwZV9Cb29s
KTsgfQotICAgIGJvb2wgaXNJbnQzMigpIGNvbnN0IHsgcmV0dXJuICh0eXBlID09IE5QVmFyaWFu
dFR5cGVfSW50MzIpOyB9Ci0gICAgYm9vbCBpc0RvdWJsZSgpIGNvbnN0IHsgcmV0dXJuICh0eXBl
ID09IE5QVmFyaWFudFR5cGVfRG91YmxlKTsgfQotICAgIGJvb2wgaXNOdW1iZXIoKSBjb25zdCB7
IHJldHVybiAoaXNJbnQzMigpIHx8IGlzRG91YmxlKCkpOyB9Ci0gICAgYm9vbCBpc1N0cmluZygp
IGNvbnN0IHsgcmV0dXJuICh0eXBlID09IE5QVmFyaWFudFR5cGVfU3RyaW5nKTsgfQotICAgIGJv
b2wgaXNWb2lkKCkgY29uc3QgeyByZXR1cm4gKHR5cGUgPT0gTlBWYXJpYW50VHlwZV9Wb2lkKTsg
fQotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gKHR5cGUgPT0gTlBWYXJpYW50VHlw
ZV9OdWxsKTsgfQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIChpc1ZvaWQoKSB8
fCBpc051bGwoKSk7IH0KLSAgICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gKHR5cGUg
PT0gTlBWYXJpYW50VHlwZV9PYmplY3QpOyB9Ci0KLSAgICAvLyBDb252ZXJ0ZXJzLiBUaGUgQ3Bw
VmFyaWFudCBtdXN0IGJlIG9mIGEgdHlwZSBjb252ZXJ0aWJsZSB0byB0aGVzZSB2YWx1ZXMuCi0g
ICAgLy8gRm9yIGV4YW1wbGUsIHRvSW50MzIoKSB3b3JrcyBvbmx5IGlmIGlzTnVtYmVyKCkgaXMg
dHJ1ZS4KLSAgICBzdGQ6OnN0cmluZyB0b1N0cmluZygpIGNvbnN0OwotICAgIGludDMyX3QgdG9J
bnQzMigpIGNvbnN0OwotICAgIGRvdWJsZSB0b0RvdWJsZSgpIGNvbnN0OwotICAgIGJvb2wgdG9C
b29sZWFuKCkgY29uc3Q7Ci0gICAgLy8gUmV0dXJucyBhIHZlY3RvciBvZiBzdHJpbmdzIGZvciB0
aGUgc3BlY2lmaWVkIGFyZ3VtZW50LiBUaGlzIGlzIHVzZWZ1bAotICAgIC8vIGZvciBjb252ZXJ0
aW5nIGEgSmF2YVNjcmlwdCBhcnJheSBvZiBzdHJpbmdzIGludG8gYSB2ZWN0b3Igb2Ygc3RyaW5n
cy4KLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdG9TdHJpbmdWZWN0b3IoKSBjb25zdDsK
LQotICAgIC8vIEludm9rZSBtZXRob2Qgb2YgdGhlIGdpdmVuIG5hbWUgb24gYW4gb2JqZWN0IHdp
dGggdGhlIHN1cHBsaWVkIGFyZ3VtZW50cy4KLSAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgc2hv
dWxkIGJlIHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCBpcyB0byBiZQotICAgIC8vIGlu
dm9rZWQuIFJldHVybnMgd2hldGhlciB0aGUgbWV0aG9kIHdhcyBzdWNjZXNzZnVsbHkgaW52b2tl
ZC4gSWYgdGhlCi0gICAgLy8gbWV0aG9kIHdhcyBpbnZva2VkIHN1Y2Nlc3NmdWxseSwgYW55IHJl
dHVybiB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlCi0gICAgLy8gQ3BwVmFyaWFudCBzcGVjaWZpZWQg
YnkgcmVzdWx0LgotICAgIGJvb2wgaW52b2tlKGNvbnN0IHN0ZDo6c3RyaW5nJiwgY29uc3QgQ3Bw
VmFyaWFudCogYXJndW1lbnRzLAotICAgICAgICAgICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291
bnQsIENwcFZhcmlhbnQmIHJlc3VsdCkgY29uc3Q7Ci0KLSAgICAvLyBJbnZva2UgYW4gb2JqZWN0
J3MgZGVmYXVsdCBtZXRob2Qgd2l0aCB0aGUgc3VwcGxpZWQgYXJndW1lbnRzLgotICAgIC8vIFRo
ZSBmaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9k
IGlzIHRvIGJlCi0gICAgLy8gaW52b2tlZC4gUmV0dXJucyB3aGV0aGVyIHRoZSBtZXRob2Qgd2Fz
IHN1Y2Nlc3NmdWxseSBpbnZva2VkLiBJZiB0aGUKLSAgICAvLyBtZXRob2Qgd2FzIGludm9rZWQg
c3VjY2Vzc2Z1bGx5LCBhbnkgcmV0dXJuIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUKLSAgICAvLyBD
cHBWYXJpYW50IHNwZWNpZmllZCBieSByZXN1bHQuCi0gICAgYm9vbCBpbnZva2VEZWZhdWx0KGNv
bnN0IENwcFZhcmlhbnQqIGFyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QgYXJndW1lbnRDb3VudCwgQ3BwVmFyaWFudCYgcmVzdWx0KSBjb25zdDsKLX07Ci0KLX0KLQot
I2VuZGlmIC8vIENwcFZhcmlhbnRfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvRXZlbnRTZW5kZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvRXZlbnRTZW5kZXIuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDhhMDEwYzNmMTA5MzQzOWJhYzIzODJhYjJmYjM5NGVkNWMx
YjlmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0V2ZW50U2VuZGVyLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDEzNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIFRoaXMgZmlsZSBjb250YWlucyB0aGUg
ZGVmaW5pdGlvbiBmb3IgRXZlbnRTZW5kZXIuCi0vLwotLy8gU29tZSBub3RlcyBhYm91dCBkcmFn
IGFuZCBkcm9wIGhhbmRsaW5nOgotLy8gV2luZG93cyBkcmFnIGFuZCBkcm9wIGdvZXMgdGhyb3Vn
aCBhIHN5c3RlbSBjYWxsIHRvIGRvRHJhZ0Ryb3AuIEF0IHRoYXQKLS8vIHBvaW50LCBwcm9ncmFt
IGNvbnRyb2wgaXMgZ2l2ZW4gdG8gV2luZG93cyB3aGljaCB0aGVuIHBlcmlvZGljYWxseSBtYWtl
cwotLy8gY2FsbGJhY2tzIGludG8gdGhlIHdlYnZpZXcuIFRoaXMgd29uJ3Qgd29yayBmb3IgbGF5
b3V0IHRlc3RzLCBzbyBpbnN0ZWFkLAotLy8gd2UgcXVldWUgdXAgYWxsIHRoZSBtb3VzZSBtb3Zl
IGFuZCBtb3VzZSB1cCBldmVudHMuIFdoZW4gdGhlIHRlc3QgdHJpZXMgdG8KLS8vIHN0YXJ0IGEg
ZHJhZyAoYnkgY2FsbGluZyBFdmVuU2VuZGluZ0NvbnRyb2xsZXI6OmRvRHJhZ0Ryb3ApLCB3ZSB0
YWtlIHRoZQotLy8gZXZlbnRzIGluIHRoZSBxdWV1ZSBhbmQgcmVwbGF5IHRoZW0uCi0vLyBUaGUg
YmVoYXZpb3Igb2YgcXVldWluZyBldmVudHMgYW5kIHJlcGxheWluZyB0aGVtIGNhbiBiZSBkaXNh
YmxlZCBieSBhCi0vLyBsYXlvdXQgdGVzdCBieSBzZXR0aW5nIGV2ZW50U2VuZGVyLmRyYWdNb2Rl
IHRvIGZhbHNlLgotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXZlbnRTZW5kZXIu
aCIKLQotI2luY2x1ZGUgIktleUNvZGVNYXBwaW5nLmgiCi0jaW5jbHVkZSAiTW9ja1NwZWxsQ2hl
Y2suaCIKLSNpbmNsdWRlICJUZXN0Q29tbW9uLmgiCi0jaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVE
YXRhLmgiCi0jaW5jbHVkZSAiV2ViRHJhZ09wZXJhdGlvbi5oIgotI2luY2x1ZGUgIldlYlRlc3RE
ZWxlZ2F0ZS5oIgotI2luY2x1ZGUgIldlYlRvdWNoUG9pbnQuaCIKLSNpbmNsdWRlICJXZWJWaWV3
LmgiCi0jaW5jbHVkZSA8ZGVxdWU+Ci0jaW5jbHVkZSA8cHVibGljL1dlYkRyYWdEYXRhLmg+Ci0j
aW5jbHVkZSA8cHVibGljL1dlYlBvaW50Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5o
PgotI2luY2x1ZGUgPHB1YmxpYy9XZWJWZWN0b3IuaD4KLQotI2lmZGVmIFdJTjMyCi0jaW5jbHVk
ZSAid2luL1dlYklucHV0RXZlbnRGYWN0b3J5LmgiCi0jZW5kaWYKLQotLy8gRklYTUU6IGxheW91
dCBiZWZvcmUgZWFjaCBldmVudD8KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLXVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotV2ViUG9pbnQgRXZl
bnRTZW5kZXI6Omxhc3RNb3VzZVBvczsKLVdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBFdmVudFNlbmRl
cjo6cHJlc3NlZEJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbk5vbmU7Ci1XZWJNb3VzZUV2
ZW50OjpCdXR0b24gRXZlbnRTZW5kZXI6Omxhc3RCdXR0b25UeXBlID0gV2ViTW91c2VFdmVudDo6
QnV0dG9uTm9uZTsKLQotbmFtZXNwYWNlIHsKLQotc3RydWN0IFNhdmVkRXZlbnQgewotICAgIGVu
dW0gU2F2ZWRFdmVudFR5cGUgewotICAgICAgICBVbnNwZWNpZmllZCwKLSAgICAgICAgTW91c2VV
cCwKLSAgICAgICAgTW91c2VNb3ZlLAotICAgICAgICBMZWFwRm9yd2FyZAotICAgIH07Ci0KLSAg
ICBTYXZlZEV2ZW50VHlwZSB0eXBlOwotICAgIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBidXR0b25U
eXBlOyAvLyBGb3IgTW91c2VVcC4KLSAgICBXZWJQb2ludCBwb3M7IC8vIEZvciBNb3VzZU1vdmUu
Ci0gICAgaW50IG1pbGxpc2Vjb25kczsgLy8gRm9yIExlYXBGb3J3YXJkLgotCi0gICAgU2F2ZWRF
dmVudCgpCi0gICAgICAgIDogdHlwZShVbnNwZWNpZmllZCkKLSAgICAgICAgLCBidXR0b25UeXBl
KFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbk5vbmUpCi0gICAgICAgICwgbWlsbGlzZWNvbmRzKDApIHsg
fQotfTsKLQotV2ViRHJhZ0RhdGEgY3VycmVudERyYWdEYXRhOwotV2ViRHJhZ09wZXJhdGlvbiBj
dXJyZW50RHJhZ0VmZmVjdDsKLVdlYkRyYWdPcGVyYXRpb25zTWFzayBjdXJyZW50RHJhZ0VmZmVj
dHNBbGxvd2VkOwotYm9vbCByZXBsYXlpbmdTYXZlZEV2ZW50cyA9IGZhbHNlOwotZGVxdWU8U2F2
ZWRFdmVudD4gbW91c2VFdmVudFF1ZXVlOwotaW50IHRvdWNoTW9kaWZpZXJzOwotdmVjdG9yPFdl
YlRvdWNoUG9pbnQ+IHRvdWNoUG9pbnRzOwotCi0vLyBUaW1lIGFuZCBwbGFjZSBvZiB0aGUgbGFz
dCBtb3VzZSB1cCBldmVudC4KLWRvdWJsZSBsYXN0Q2xpY2tUaW1lU2VjID0gMDsKLVdlYlBvaW50
IGxhc3RDbGlja1BvczsKLWludCBjbGlja0NvdW50ID0gMDsKLQotLy8gbWF4aW11bSBkaXN0YW5j
ZSAoaW4gc3BhY2UgYW5kIHRpbWUpIGZvciBhIG1vdXNlIGNsaWNrCi0vLyB0byByZWdpc3RlciBh
cyBhIGRvdWJsZSBvciB0cmlwbGUgY2xpY2sKLWNvbnN0IGRvdWJsZSBtdWx0aXBsZUNsaWNrVGlt
ZVNlYyA9IDE7Ci1jb25zdCBpbnQgbXVsdGlwbGVDbGlja1JhZGl1c1BpeGVscyA9IDU7Ci0KLS8v
IEhvdyBtdWNoIHdlIHNob3VsZCBzY3JvbGwgcGVyIGV2ZW50IC0gdGhlIHZhbHVlIGhlcmUgaXMg
Y2hvc2VuIHRvCi0vLyBtYXRjaCB0aGUgV2ViS2l0IGltcGwgYW5kIGxheW91dCB0ZXN0IHJlc3Vs
dHMuCi1jb25zdCBmbG9hdCBzY3JvbGxiYXJQaXhlbHNQZXJUaWNrID0gNDAuMGY7Ci0KLWlubGlu
ZSBib29sIG91dHNpZGVNdWx0aUNsaWNrUmFkaXVzKGNvbnN0IFdlYlBvaW50JiBhLCBjb25zdCBX
ZWJQb2ludCYgYikKLXsKLSAgICByZXR1cm4gKChhLnggLSBiLngpICogKGEueCAtIGIueCkgKyAo
YS55IC0gYi55KSAqIChhLnkgLSBiLnkpKSA+Ci0gICAgICAgIG11bHRpcGxlQ2xpY2tSYWRpdXNQ
aXhlbHMgKiBtdWx0aXBsZUNsaWNrUmFkaXVzUGl4ZWxzOwotfQotCi0vLyBVc2VkIHRvIG9mZnNl
dCB0aGUgdGltZSB0aGUgZXZlbnQgaGFuZGVyIHRoaW5ncyBhbiBldmVudCBoYXBwZW5lZC4gVGhp
cyBpcwotLy8gZG9uZSBzbyB0ZXN0cyBjYW4gcnVuIHdpdGhvdXQgYSBkZWxheSwgYnV0IGJ5cGFz
cyBjaGVja3MgdGhhdCBhcmUgdGltZQotLy8gZGVwZW5kZW50IChlLmcuLCBkcmFnZ2luZyBoYXMg
YSB0aW1lb3V0IHZzIHNlbGVjdGlvbikuCi11aW50MzIgdGltZU9mZnNldE1zID0gMDsKLQotZG91
YmxlIGdldEN1cnJlbnRFdmVudFRpbWVTZWMoV2ViVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSkKLXsK
LSAgICByZXR1cm4gKGRlbGVnYXRlLT5nZXRDdXJyZW50VGltZUluTWlsbGlzZWNvbmQoKSArIHRp
bWVPZmZzZXRNcykgLyAxMDAwLjA7Ci19Ci0KLXZvaWQgYWR2YW5jZUV2ZW50VGltZShpbnQzMl90
IGRlbHRhTXMpCi17Ci0gICAgdGltZU9mZnNldE1zICs9IGRlbHRhTXM7Ci19Ci0KLXZvaWQgaW5p
dE1vdXNlRXZlbnQoV2ViSW5wdXRFdmVudDo6VHlwZSB0LCBXZWJNb3VzZUV2ZW50OjpCdXR0b24g
YiwgY29uc3QgV2ViUG9pbnQmIHBvcywgV2ViTW91c2VFdmVudCogZSwgZG91YmxlIHRzKQotewot
ICAgIGUtPnR5cGUgPSB0OwotICAgIGUtPmJ1dHRvbiA9IGI7Ci0gICAgZS0+bW9kaWZpZXJzID0g
MDsKLSAgICBlLT54ID0gcG9zLng7Ci0gICAgZS0+eSA9IHBvcy55OwotICAgIGUtPmdsb2JhbFgg
PSBwb3MueDsKLSAgICBlLT5nbG9iYWxZID0gcG9zLnk7Ci0gICAgZS0+dGltZVN0YW1wU2Vjb25k
cyA9IHRzOwotICAgIGUtPmNsaWNrQ291bnQgPSBjbGlja0NvdW50OwotfQotCi0vLyBSZXR1cm5z
IHRydWUgaWYgdGhlIHNwZWNpZmllZCBrZXkgaXMgdGhlIHN5c3RlbSBrZXkuCi1ib29sIGFwcGx5
S2V5TW9kaWZpZXIoY29uc3Qgc3RyaW5nJiBtb2RpZmllck5hbWUsIFdlYklucHV0RXZlbnQqIGV2
ZW50KQotewotICAgIGJvb2wgaXNTeXN0ZW1LZXkgPSBmYWxzZTsKLSAgICBjb25zdCBjaGFyKiBj
aGFyYWN0ZXJzID0gbW9kaWZpZXJOYW1lLmNfc3RyKCk7Ci0gICAgaWYgKCFzdHJjbXAoY2hhcmFj
dGVycywgImN0cmxLZXkiKQotI2lmbmRlZiBfX0FQUExFX18KLSAgICAgICAgfHwgIXN0cmNtcChj
aGFyYWN0ZXJzLCAiYWRkU2VsZWN0aW9uS2V5IikKLSNlbmRpZgotICAgICAgICApIHsKLSAgICAg
ICAgZXZlbnQtPm1vZGlmaWVycyB8PSBXZWJJbnB1dEV2ZW50OjpDb250cm9sS2V5OwotICAgIH0g
ZWxzZSBpZiAoIXN0cmNtcChjaGFyYWN0ZXJzLCAic2hpZnRLZXkiKSB8fCAhc3RyY21wKGNoYXJh
Y3RlcnMsICJyYW5nZVNlbGVjdGlvbktleSIpKQotICAgICAgICBldmVudC0+bW9kaWZpZXJzIHw9
IFdlYklucHV0RXZlbnQ6OlNoaWZ0S2V5OwotICAgIGVsc2UgaWYgKCFzdHJjbXAoY2hhcmFjdGVy
cywgImFsdEtleSIpKSB7Ci0gICAgICAgIGV2ZW50LT5tb2RpZmllcnMgfD0gV2ViSW5wdXRFdmVu
dDo6QWx0S2V5OwotI2lmbmRlZiBfX0FQUExFX18KLSAgICAgICAgLy8gT24gV2luZG93cyBhbGwg
a2V5cyB3aXRoIEFsdCBtb2RpZmllciB3aWxsIGJlIG1hcmtlZCBhcyBzeXN0ZW0ga2V5LgotICAg
ICAgICAvLyBXZSBrZWVwIHRoZSBzYW1lIGJlaGF2aW9yIG9uIExpbnV4IGFuZCBldmVyeXdoZXJl
IG5vbi1NYWMsIHNlZToKLSAgICAgICAgLy8gV2ViS2l0L2Nocm9taXVtL3NyYy9ndGsvV2ViSW5w
dXRFdmVudEZhY3RvcnkuY3BwCi0gICAgICAgIC8vIElmIHdlIHdhbnQgdG8gY2hhbmdlIHRoaXMg
YmVoYXZpb3Igb24gTGludXgsIHRoaXMgcGllY2Ugb2YgY29kZSBtdXN0IGJlCi0gICAgICAgIC8v
IGtlcHQgaW4gc3luYyB3aXRoIHRoZSByZWxhdGVkIGNvZGUgaW4gYWJvdmUgZmlsZS4KLSAgICAg
ICAgaXNTeXN0ZW1LZXkgPSB0cnVlOwotI2VuZGlmCi0jaWZkZWYgX19BUFBMRV9fCi0gICAgfSBl
bHNlIGlmICghc3RyY21wKGNoYXJhY3RlcnMsICJtZXRhS2V5IikgfHwgIXN0cmNtcChjaGFyYWN0
ZXJzLCAiYWRkU2VsZWN0aW9uS2V5IikpIHsKLSAgICAgICAgZXZlbnQtPm1vZGlmaWVycyB8PSBX
ZWJJbnB1dEV2ZW50OjpNZXRhS2V5OwotICAgICAgICAvLyBPbiBNYWMgb25seSBjb21tYW5kIGtl
eSBwcmVzc2VzIGFyZSBtYXJrZWQgYXMgc3lzdGVtIGtleS4KLSAgICAgICAgLy8gU2VlIHRoZSBy
ZWxhdGVkIGNvZGUgaW46IFdlYktpdC9jaHJvbWl1bS9zcmMvbWFjL1dlYklucHV0RXZlbnRGYWN0
b3J5LmNwcAotICAgICAgICAvLyBJdCBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSByZWxh
dGVkIGNvZGUgaW4gYWJvdmUgZmlsZS4KLSAgICAgICAgaXNTeXN0ZW1LZXkgPSB0cnVlOwotI2Vs
c2UKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAoY2hhcmFjdGVycywgIm1ldGFLZXkiKSkgewotICAg
ICAgICBldmVudC0+bW9kaWZpZXJzIHw9IFdlYklucHV0RXZlbnQ6Ok1ldGFLZXk7Ci0jZW5kaWYK
LSAgICB9Ci0gICAgcmV0dXJuIGlzU3lzdGVtS2V5OwotfQotCi1ib29sIGFwcGx5S2V5TW9kaWZp
ZXJzKGNvbnN0IENwcFZhcmlhbnQqIGFyZ3VtZW50LCBXZWJJbnB1dEV2ZW50KiBldmVudCkKLXsK
LSAgICBib29sIGlzU3lzdGVtS2V5ID0gZmFsc2U7Ci0gICAgaWYgKGFyZ3VtZW50LT5pc09iamVj
dCgpKSB7Ci0gICAgICAgIHZlY3RvcjxzdHJpbmc+IG1vZGlmaWVycyA9IGFyZ3VtZW50LT50b1N0
cmluZ1ZlY3RvcigpOwotICAgICAgICBmb3IgKHZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRv
ciBpID0gbW9kaWZpZXJzLmJlZ2luKCk7IGkgIT0gbW9kaWZpZXJzLmVuZCgpOyArK2kpCi0gICAg
ICAgICAgICBpc1N5c3RlbUtleSB8PSBhcHBseUtleU1vZGlmaWVyKCppLCBldmVudCk7Ci0gICAg
fSBlbHNlIGlmIChhcmd1bWVudC0+aXNTdHJpbmcoKSkKLSAgICAgICAgaXNTeXN0ZW1LZXkgPSBh
cHBseUtleU1vZGlmaWVyKGFyZ3VtZW50LT50b1N0cmluZygpLCBldmVudCk7Ci0gICAgcmV0dXJu
IGlzU3lzdGVtS2V5OwotfQotCi0vLyBHZXQgdGhlIGVkaXQgY29tbWFuZCBjb3JyZXNwb25kaW5n
IHRvIGEga2V5Ym9hcmQgZXZlbnQuCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCBl
dmVudCBjb3JyZXNwb25kcyB0byBhbiBlZGl0IGNvbW1hbmQsIHRoZSBuYW1lCi0vLyBvZiB0aGUg
ZWRpdCBjb21tYW5kIHdpbGwgYmUgc3RvcmVkIGluIHwqbmFtZXwuCi1ib29sIGdldEVkaXRDb21t
YW5kKGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGV2ZW50LCBzdHJpbmcqIG5hbWUpCi17Ci0jaWZk
ZWYgX19BUFBMRV9fCi0gICAgLy8gV2Ugb25seSBjYXJlcyBhYm91dCBMZWZ0LFJpZ2h0LFVwLERv
d24ga2V5cyB3aXRoIENvbW1hbmQgb3IgQ29tbWFuZCtTaGlmdAotICAgIC8vIG1vZGlmaWVycy4g
VGhlc2Uga2V5IGV2ZW50cyBjb3JyZXNwb25kIHRvIHNvbWUgc3BlY2lhbCBtb3ZlbWVudCBhbmQK
LSAgICAvLyBzZWxlY3Rpb24gZWRpdG9yIGNvbW1hbmRzLCBhbmQgd2FzIHN1cHBvc2VkIHRvIGJl
IGhhbmRsZWQgaW4KLSAgICAvLyBXZWJLaXQvY2hyb21pdW0vc3JjL0VkaXRvckNsaWVudEltcGwu
Y3BwLiBCdXQgdGhlc2Uga2V5cyB3aWxsIGJlIG1hcmtlZAotICAgIC8vIGFzIHN5c3RlbSBrZXks
IHdoaWNoIHByZXZlbnRzIHRoZW0gZnJvbSBiZWluZyBoYW5kbGVkLiBUaHVzIHRoZXkgbXVzdCBi
ZQotICAgIC8vIGhhbmRsZWQgc3BlY2lhbGx5LgotICAgIGlmICgoZXZlbnQubW9kaWZpZXJzICYg
fldlYktleWJvYXJkRXZlbnQ6OlNoaWZ0S2V5KSAhPSBXZWJLZXlib2FyZEV2ZW50OjpNZXRhS2V5
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKGV2ZW50LndpbmRvd3NLZXlD
b2RlKSB7Ci0gICAgY2FzZSBWS0VZX0xFRlQ6Ci0gICAgICAgICpuYW1lID0gIk1vdmVUb0JlZ2lu
bmluZ09mTGluZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVktFWV9SSUdIVDoKLSAgICAg
ICAgKm5hbWUgPSAiTW92ZVRvRW5kT2ZMaW5lIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBW
S0VZX1VQOgotICAgICAgICAqbmFtZSA9ICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50IjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWS0VZX0RPV046Ci0gICAgICAgICpuYW1lID0gIk1vdmVU
b0VuZE9mRG9jdW1lbnQiOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGV2ZW50Lm1vZGlmaWVycyAmIFdlYktleWJv
YXJkRXZlbnQ6OlNoaWZ0S2V5KQotICAgICAgICBuYW1lLT5hcHBlbmQoIkFuZE1vZGlmeVNlbGVj
dGlvbiIpOwotCi0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNl
bmRpZgotfQotCi0vLyBLZXkgZXZlbnQgbG9jYXRpb24gY29kZSBpbnRyb2R1Y2VkIGluIERPTSBM
ZXZlbCAzLgotLy8gU2VlIGFsc286IGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2
ZW50cy8jZXZlbnRzLWtleWJvYXJkZXZlbnRzCi1lbnVtIEtleUxvY2F0aW9uQ29kZSB7Ci0gICAg
RE9NS2V5TG9jYXRpb25TdGFuZGFyZCAgICAgID0gMHgwMCwKLSAgICBET01LZXlMb2NhdGlvbkxl
ZnQgICAgICAgICAgPSAweDAxLAotICAgIERPTUtleUxvY2F0aW9uUmlnaHQgICAgICAgICA9IDB4
MDIsCi0gICAgRE9NS2V5TG9jYXRpb25OdW1wYWQgICAgICAgID0gMHgwMwotfTsKLQotfQotCi1F
dmVudFNlbmRlcjo6RXZlbnRTZW5kZXIoKQotICAgIDogbV9kZWxlZ2F0ZSgwKQotewotICAgIC8v
IEluaXRpYWxpemUgdGhlIG1hcCB0aGF0IGFzc29jaWF0ZXMgbWV0aG9kcyBvZiB0aGlzIGNsYXNz
IHdpdGggdGhlIG5hbWVzCi0gICAgLy8gdGhleSB3aWxsIHVzZSB3aGVuIGNhbGxlZCBieSBKYXZh
U2NyaXB0LiBUaGUgYWN0dWFsIGJpbmRpbmcgb2YgdGhvc2UKLSAgICAvLyBuYW1lcyB0byB0aGVp
ciBtZXRob2RzIHdpbGwgYmUgZG9uZSBieSBjYWxsaW5nIGJpbmRUb0phdmFTY3JpcHQoKSAoZGVm
aW5lZAotICAgIC8vIGJ5IENwcEJvdW5kQ2xhc3MsIHRoZSBwYXJlbnQgdG8gRXZlbnRTZW5kZXIp
LgotICAgIGJpbmRNZXRob2QoImFkZFRvdWNoUG9pbnQiLCAmRXZlbnRTZW5kZXI6OmFkZFRvdWNo
UG9pbnQpOwotICAgIGJpbmRNZXRob2QoImJlZ2luRHJhZ1dpdGhGaWxlcyIsICZFdmVudFNlbmRl
cjo6YmVnaW5EcmFnV2l0aEZpbGVzKTsKLSAgICBiaW5kTWV0aG9kKCJjYW5jZWxUb3VjaFBvaW50
IiwgJkV2ZW50U2VuZGVyOjpjYW5jZWxUb3VjaFBvaW50KTsKLSAgICBiaW5kTWV0aG9kKCJjbGVh
cktpbGxSaW5nIiwgJkV2ZW50U2VuZGVyOjpjbGVhcktpbGxSaW5nKTsKLSAgICBiaW5kTWV0aG9k
KCJjbGVhclRvdWNoUG9pbnRzIiwgJkV2ZW50U2VuZGVyOjpjbGVhclRvdWNoUG9pbnRzKTsKLSAg
ICBiaW5kTWV0aG9kKCJjb250ZXh0Q2xpY2siLCAmRXZlbnRTZW5kZXI6OmNvbnRleHRDbGljayk7
Ci0gICAgYmluZE1ldGhvZCgiY29udGludW91c01vdXNlU2Nyb2xsQnkiLCAmRXZlbnRTZW5kZXI6
OmNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5KTsKLSAgICBiaW5kTWV0aG9kKCJkaXNwYXRjaE1lc3Nh
Z2UiLCAmRXZlbnRTZW5kZXI6OmRpc3BhdGNoTWVzc2FnZSk7Ci0gICAgYmluZE1ldGhvZCgiZHVt
cEZpbGVuYW1lQmVpbmdEcmFnZ2VkIiwgJkV2ZW50U2VuZGVyOjpkdW1wRmlsZW5hbWVCZWluZ0Ry
YWdnZWQpOwotICAgIGJpbmRNZXRob2QoImVuYWJsZURPTVVJRXZlbnRMb2dnaW5nIiwgJkV2ZW50
U2VuZGVyOjplbmFibGVET01VSUV2ZW50TG9nZ2luZyk7Ci0gICAgYmluZE1ldGhvZCgiZmlyZUtl
eWJvYXJkRXZlbnRzVG9FbGVtZW50IiwgJkV2ZW50U2VuZGVyOjpmaXJlS2V5Ym9hcmRFdmVudHNU
b0VsZW1lbnQpOwotICAgIGJpbmRNZXRob2QoImtleURvd24iLCAmRXZlbnRTZW5kZXI6OmtleURv
d24pOwotICAgIGJpbmRNZXRob2QoImxlYXBGb3J3YXJkIiwgJkV2ZW50U2VuZGVyOjpsZWFwRm9y
d2FyZCk7Ci0gICAgYmluZE1ldGhvZCgibW91c2VEb3duIiwgJkV2ZW50U2VuZGVyOjptb3VzZURv
d24pOwotICAgIGJpbmRNZXRob2QoIm1vdXNlTW92ZVRvIiwgJkV2ZW50U2VuZGVyOjptb3VzZU1v
dmVUbyk7Ci0gICAgYmluZE1ldGhvZCgibW91c2VTY3JvbGxCeSIsICZFdmVudFNlbmRlcjo6bW91
c2VTY3JvbGxCeSk7Ci0gICAgYmluZE1ldGhvZCgibW91c2VVcCIsICZFdmVudFNlbmRlcjo6bW91
c2VVcCk7Ci0gICAgYmluZE1ldGhvZCgibW91c2VEcmFnQmVnaW4iLCAmRXZlbnRTZW5kZXI6Om1v
dXNlRHJhZ0JlZ2luKTsKLSAgICBiaW5kTWV0aG9kKCJyZWxlYXNlVG91Y2hQb2ludCIsICZFdmVu
dFNlbmRlcjo6cmVsZWFzZVRvdWNoUG9pbnQpOwotICAgIGJpbmRNZXRob2QoInNjaGVkdWxlQXN5
bmNocm9ub3VzQ2xpY2siLCAmRXZlbnRTZW5kZXI6OnNjaGVkdWxlQXN5bmNocm9ub3VzQ2xpY2sp
OwotICAgIGJpbmRNZXRob2QoInNjaGVkdWxlQXN5bmNocm9ub3VzS2V5RG93biIsICZFdmVudFNl
bmRlcjo6c2NoZWR1bGVBc3luY2hyb25vdXNLZXlEb3duKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRU
b3VjaE1vZGlmaWVyIiwgJkV2ZW50U2VuZGVyOjpzZXRUb3VjaE1vZGlmaWVyKTsKLSAgICBiaW5k
TWV0aG9kKCJ0ZXh0Wm9vbUluIiwgJkV2ZW50U2VuZGVyOjp0ZXh0Wm9vbUluKTsKLSAgICBiaW5k
TWV0aG9kKCJ0ZXh0Wm9vbU91dCIsICZFdmVudFNlbmRlcjo6dGV4dFpvb21PdXQpOwotICAgIGJp
bmRNZXRob2QoInRvdWNoQ2FuY2VsIiwgJkV2ZW50U2VuZGVyOjp0b3VjaENhbmNlbCk7Ci0gICAg
YmluZE1ldGhvZCgidG91Y2hFbmQiLCAmRXZlbnRTZW5kZXI6OnRvdWNoRW5kKTsKLSAgICBiaW5k
TWV0aG9kKCJ0b3VjaE1vdmUiLCAmRXZlbnRTZW5kZXI6OnRvdWNoTW92ZSk7Ci0gICAgYmluZE1l
dGhvZCgidG91Y2hTdGFydCIsICZFdmVudFNlbmRlcjo6dG91Y2hTdGFydCk7Ci0gICAgYmluZE1l
dGhvZCgidXBkYXRlVG91Y2hQb2ludCIsICZFdmVudFNlbmRlcjo6dXBkYXRlVG91Y2hQb2ludCk7
Ci0gICAgYmluZE1ldGhvZCgiZ2VzdHVyZUZsaW5nQ2FuY2VsIiwgJkV2ZW50U2VuZGVyOjpnZXN0
dXJlRmxpbmdDYW5jZWwpOwotICAgIGJpbmRNZXRob2QoImdlc3R1cmVGbGluZ1N0YXJ0IiwgJkV2
ZW50U2VuZGVyOjpnZXN0dXJlRmxpbmdTdGFydCk7Ci0gICAgYmluZE1ldGhvZCgiZ2VzdHVyZVNj
cm9sbEJlZ2luIiwgJkV2ZW50U2VuZGVyOjpnZXN0dXJlU2Nyb2xsQmVnaW4pOwotICAgIGJpbmRN
ZXRob2QoImdlc3R1cmVTY3JvbGxFbmQiLCAmRXZlbnRTZW5kZXI6Omdlc3R1cmVTY3JvbGxFbmQp
OwotICAgIGJpbmRNZXRob2QoImdlc3R1cmVTY3JvbGxGaXJzdFBvaW50IiwgJkV2ZW50U2VuZGVy
OjpnZXN0dXJlU2Nyb2xsRmlyc3RQb2ludCk7Ci0gICAgYmluZE1ldGhvZCgiZ2VzdHVyZVNjcm9s
bFVwZGF0ZSIsICZFdmVudFNlbmRlcjo6Z2VzdHVyZVNjcm9sbFVwZGF0ZSk7Ci0gICAgYmluZE1l
dGhvZCgiZ2VzdHVyZVNjcm9sbFVwZGF0ZVdpdGhvdXRQcm9wYWdhdGlvbiIsICZFdmVudFNlbmRl
cjo6Z2VzdHVyZVNjcm9sbFVwZGF0ZVdpdGhvdXRQcm9wYWdhdGlvbik7Ci0gICAgYmluZE1ldGhv
ZCgiZ2VzdHVyZVRhcCIsICZFdmVudFNlbmRlcjo6Z2VzdHVyZVRhcCk7Ci0gICAgYmluZE1ldGhv
ZCgiZ2VzdHVyZVRhcERvd24iLCAmRXZlbnRTZW5kZXI6Omdlc3R1cmVUYXBEb3duKTsKLSAgICBi
aW5kTWV0aG9kKCJnZXN0dXJlVGFwQ2FuY2VsIiwgJkV2ZW50U2VuZGVyOjpnZXN0dXJlVGFwQ2Fu
Y2VsKTsKLSAgICBiaW5kTWV0aG9kKCJnZXN0dXJlTG9uZ1ByZXNzIiwgJkV2ZW50U2VuZGVyOjpn
ZXN0dXJlTG9uZ1ByZXNzKTsKLSAgICBiaW5kTWV0aG9kKCJnZXN0dXJlTG9uZ1RhcCIsICZFdmVu
dFNlbmRlcjo6Z2VzdHVyZUxvbmdUYXApOwotICAgIGJpbmRNZXRob2QoImdlc3R1cmVUd29GaW5n
ZXJUYXAiLCAmRXZlbnRTZW5kZXI6Omdlc3R1cmVUd29GaW5nZXJUYXApOwotICAgIGJpbmRNZXRo
b2QoInpvb21QYWdlSW4iLCAmRXZlbnRTZW5kZXI6Onpvb21QYWdlSW4pOwotICAgIGJpbmRNZXRo
b2QoInpvb21QYWdlT3V0IiwgJkV2ZW50U2VuZGVyOjp6b29tUGFnZU91dCk7Ci0gICAgYmluZE1l
dGhvZCgic2NhbGVQYWdlQnkiLCAmRXZlbnRTZW5kZXI6OnNjYWxlUGFnZUJ5KTsKLQotICAgIC8v
IFdoZW4gc2V0IHRvIHRydWUgKHRoZSBkZWZhdWx0IHZhbHVlKSwgd2UgYmF0Y2ggbW91c2UgbW92
ZSBhbmQgbW91c2UgdXAKLSAgICAvLyBldmVudHMgc28gd2UgY2FuIHNpbXVsYXRlIGRyYWcgJiBk
cm9wLgotICAgIGJpbmRQcm9wZXJ0eSgiZHJhZ01vZGUiLCAmZHJhZ01vZGUpOwotI2lmZGVmIFdJ
TjMyCi0gICAgYmluZFByb3BlcnR5KCJXTV9LRVlET1dOIiwgJndtS2V5RG93bik7Ci0gICAgYmlu
ZFByb3BlcnR5KCJXTV9LRVlVUCIsICZ3bUtleVVwKTsKLSAgICBiaW5kUHJvcGVydHkoIldNX0NI
QVIiLCAmd21DaGFyKTsKLSAgICBiaW5kUHJvcGVydHkoIldNX0RFQURDSEFSIiwgJndtRGVhZENo
YXIpOwotICAgIGJpbmRQcm9wZXJ0eSgiV01fU1lTS0VZRE9XTiIsICZ3bVN5c0tleURvd24pOwot
ICAgIGJpbmRQcm9wZXJ0eSgiV01fU1lTS0VZVVAiLCAmd21TeXNLZXlVcCk7Ci0gICAgYmluZFBy
b3BlcnR5KCJXTV9TWVNDSEFSIiwgJndtU3lzQ2hhcik7Ci0gICAgYmluZFByb3BlcnR5KCJXTV9T
WVNERUFEQ0hBUiIsICZ3bVN5c0RlYWRDaGFyKTsKLSNlbmRpZgotfQotCi1FdmVudFNlbmRlcjo6
fkV2ZW50U2VuZGVyKCkKLXsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6c2V0Q29udGV4dE1lbnVE
YXRhKGNvbnN0IFdlYkNvbnRleHRNZW51RGF0YSYgY29udGV4dE1lbnVEYXRhKQotewotICAgIG1f
bGFzdENvbnRleHRNZW51RGF0YSA9IGF1dG9fcHRyPFdlYkNvbnRleHRNZW51RGF0YT4obmV3IFdl
YkNvbnRleHRNZW51RGF0YShjb250ZXh0TWVudURhdGEpKTsKLX0KLQotdm9pZCBFdmVudFNlbmRl
cjo6cmVzZXQoKQotewotICAgIC8vIFRoZSB0ZXN0IHNob3VsZCBoYXZlIGZpbmlzaGVkIGEgZHJh
ZyBhbmQgdGhlIG1vdXNlIGJ1dHRvbiBzdGF0ZS4KLSAgICBXRUJLSVRfQVNTRVJUKGN1cnJlbnRE
cmFnRGF0YS5pc051bGwoKSk7Ci0gICAgY3VycmVudERyYWdEYXRhLnJlc2V0KCk7Ci0gICAgY3Vy
cmVudERyYWdFZmZlY3QgPSBXZWJLaXQ6OldlYkRyYWdPcGVyYXRpb25Ob25lOwotICAgIGN1cnJl
bnREcmFnRWZmZWN0c0FsbG93ZWQgPSBXZWJLaXQ6OldlYkRyYWdPcGVyYXRpb25Ob25lOwotICAg
IHByZXNzZWRCdXR0b24gPSBXZWJNb3VzZUV2ZW50OjpCdXR0b25Ob25lOwotICAgIGRyYWdNb2Rl
LnNldCh0cnVlKTsKLSNpZmRlZiBXSU4zMgotICAgIHdtS2V5RG93bi5zZXQoV01fS0VZRE9XTik7
Ci0gICAgd21LZXlVcC5zZXQoV01fS0VZVVApOwotICAgIHdtQ2hhci5zZXQoV01fQ0hBUik7Ci0g
ICAgd21EZWFkQ2hhci5zZXQoV01fREVBRENIQVIpOwotICAgIHdtU3lzS2V5RG93bi5zZXQoV01f
U1lTS0VZRE9XTik7Ci0gICAgd21TeXNLZXlVcC5zZXQoV01fU1lTS0VZVVApOwotICAgIHdtU3lz
Q2hhci5zZXQoV01fU1lTQ0hBUik7Ci0gICAgd21TeXNEZWFkQ2hhci5zZXQoV01fU1lTREVBRENI
QVIpOwotI2VuZGlmCi0gICAgbGFzdE1vdXNlUG9zID0gV2ViUG9pbnQoMCwgMCk7Ci0gICAgbGFz
dENsaWNrVGltZVNlYyA9IDA7Ci0gICAgbGFzdENsaWNrUG9zID0gV2ViUG9pbnQoMCwgMCk7Ci0g
ICAgY2xpY2tDb3VudCA9IDA7Ci0gICAgbGFzdEJ1dHRvblR5cGUgPSBXZWJNb3VzZUV2ZW50OjpC
dXR0b25Ob25lOwotICAgIHRpbWVPZmZzZXRNcyA9IDA7Ci0gICAgdG91Y2hNb2RpZmllcnMgPSAw
OwotICAgIHRvdWNoUG9pbnRzLmNsZWFyKCk7Ci0gICAgbV90YXNrTGlzdC5yZXZva2VBbGwoKTsK
LSAgICBtX2N1cnJlbnRHZXN0dXJlTG9jYXRpb24gPSBXZWJQb2ludCgwLCAwKTsKLX0KLQotdm9p
ZCBFdmVudFNlbmRlcjo6ZG9EcmFnRHJvcChjb25zdCBXZWJEcmFnRGF0YSYgZHJhZ0RhdGEsIFdl
YkRyYWdPcGVyYXRpb25zTWFzayBtYXNrKQotewotICAgIFdlYk1vdXNlRXZlbnQgZXZlbnQ7Ci0g
ICAgaW5pdE1vdXNlRXZlbnQoV2ViSW5wdXRFdmVudDo6TW91c2VEb3duLCBwcmVzc2VkQnV0dG9u
LCBsYXN0TW91c2VQb3MsICZldmVudCwgZ2V0Q3VycmVudEV2ZW50VGltZVNlYyhtX2RlbGVnYXRl
KSk7Ci0gICAgV2ViUG9pbnQgY2xpZW50UG9pbnQoZXZlbnQueCwgZXZlbnQueSk7Ci0gICAgV2Vi
UG9pbnQgc2NyZWVuUG9pbnQoZXZlbnQuZ2xvYmFsWCwgZXZlbnQuZ2xvYmFsWSk7Ci0gICAgY3Vy
cmVudERyYWdEYXRhID0gZHJhZ0RhdGE7Ci0gICAgY3VycmVudERyYWdFZmZlY3RzQWxsb3dlZCA9
IG1hc2s7Ci0gICAgY3VycmVudERyYWdFZmZlY3QgPSB3ZWJ2aWV3KCktPmRyYWdUYXJnZXREcmFn
RW50ZXIoZHJhZ0RhdGEsIGNsaWVudFBvaW50LCBzY3JlZW5Qb2ludCwgY3VycmVudERyYWdFZmZl
Y3RzQWxsb3dlZCwgMCk7Ci0KLSAgICAvLyBGaW5pc2ggcHJvY2Vzc2luZyBldmVudHMuCi0gICAg
cmVwbGF5U2F2ZWRFdmVudHMoKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6ZHVtcEZpbGVuYW1l
QmVpbmdEcmFnZ2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKQotewotICAg
IFdlYlN0cmluZyBmaWxlbmFtZTsKLSAgICBXZWJWZWN0b3I8V2ViRHJhZ0RhdGE6Okl0ZW0+IGl0
ZW1zID0gY3VycmVudERyYWdEYXRhLml0ZW1zKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBpdGVtcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoaXRlbXNbaV0uc3RvcmFnZVR5cGUg
PT0gV2ViRHJhZ0RhdGE6Okl0ZW06OlN0b3JhZ2VUeXBlQmluYXJ5RGF0YSkgewotICAgICAgICAg
ICAgZmlsZW5hbWUgPSBpdGVtc1tpXS50aXRsZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShzdGQ6OnN0cmluZygiRmls
ZW5hbWUgYmVpbmcgZHJhZ2dlZDogIikgKyBmaWxlbmFtZS51dGY4KCkuZGF0YSgpICsgIlxuIik7
Ci19Ci0KLVdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBFdmVudFNlbmRlcjo6Z2V0QnV0dG9uVHlwZUZy
b21CdXR0b25OdW1iZXIoaW50IGJ1dHRvbkNvZGUpCi17Ci0gICAgaWYgKCFidXR0b25Db2RlKQot
ICAgICAgICByZXR1cm4gV2ViTW91c2VFdmVudDo6QnV0dG9uTGVmdDsKLSAgICBpZiAoYnV0dG9u
Q29kZSA9PSAyKQotICAgICAgICByZXR1cm4gV2ViTW91c2VFdmVudDo6QnV0dG9uUmlnaHQ7Ci0g
ICAgcmV0dXJuIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbk1pZGRsZTsKLX0KLQotaW50IEV2ZW50U2Vu
ZGVyOjpnZXRCdXR0b25OdW1iZXJGcm9tU2luZ2xlQXJnKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzKQotewotICAgIGludCBidXR0b25Db2RlID0gMDsKLSAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkpCi0gICAgICAgIGJ1dHRvbkNv
ZGUgPSBhcmd1bWVudHNbMF0udG9JbnQzMigpOwotICAgIHJldHVybiBidXR0b25Db2RlOwotfQot
Ci12b2lkIEV2ZW50U2VuZGVyOjp1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKFdlYk1vdXNlRXZl
bnQ6OkJ1dHRvbiBidXR0b25UeXBlKQotewotICAgIGlmICgoZ2V0Q3VycmVudEV2ZW50VGltZVNl
YyhtX2RlbGVnYXRlKSAtIGxhc3RDbGlja1RpbWVTZWMgPCBtdWx0aXBsZUNsaWNrVGltZVNlYykK
LSAgICAgICAgJiYgKCFvdXRzaWRlTXVsdGlDbGlja1JhZGl1cyhsYXN0TW91c2VQb3MsIGxhc3RD
bGlja1BvcykpCi0gICAgICAgICYmIChidXR0b25UeXBlID09IGxhc3RCdXR0b25UeXBlKSkKLSAg
ICAgICAgKytjbGlja0NvdW50OwotICAgIGVsc2UgewotICAgICAgICBjbGlja0NvdW50ID0gMTsK
LSAgICAgICAgbGFzdEJ1dHRvblR5cGUgPSBidXR0b25UeXBlOwotICAgIH0KLX0KLQotLy8KLS8v
IEltcGxlbWVudGVkIGphdmFzY3JpcHQgbWV0aG9kcy4KLS8vCi0KLXZvaWQgRXZlbnRTZW5kZXI6
Om1vdXNlRG93bihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIGlmIChyZXN1bHQpIC8vIENvdWxkIGJlIDAgaWYgaW52b2tlZCBhc3lu
Y2hyb25vdXNseS4KLSAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICB3ZWJ2aWV3KCkt
PmxheW91dCgpOwotCi0gICAgaW50IGJ1dHRvbk51bWJlciA9IGdldEJ1dHRvbk51bWJlckZyb21T
aW5nbGVBcmcoYXJndW1lbnRzKTsKLSAgICBXRUJLSVRfQVNTRVJUKGJ1dHRvbk51bWJlciAhPSAt
MSk7Ci0KLSAgICBXZWJNb3VzZUV2ZW50OjpCdXR0b24gYnV0dG9uVHlwZSA9IGdldEJ1dHRvblR5
cGVGcm9tQnV0dG9uTnVtYmVyKGJ1dHRvbk51bWJlcik7Ci0KLSAgICB1cGRhdGVDbGlja0NvdW50
Rm9yQnV0dG9uKGJ1dHRvblR5cGUpOwotCi0gICAgV2ViTW91c2VFdmVudCBldmVudDsKLSAgICBw
cmVzc2VkQnV0dG9uID0gYnV0dG9uVHlwZTsKLSAgICBpbml0TW91c2VFdmVudChXZWJJbnB1dEV2
ZW50OjpNb3VzZURvd24sIGJ1dHRvblR5cGUsIGxhc3RNb3VzZVBvcywgJmV2ZW50LCBnZXRDdXJy
ZW50RXZlbnRUaW1lU2VjKG1fZGVsZWdhdGUpKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+
PSAyICYmIChhcmd1bWVudHNbMV0uaXNPYmplY3QoKSB8fCBhcmd1bWVudHNbMV0uaXNTdHJpbmco
KSkpCi0gICAgICAgIGFwcGx5S2V5TW9kaWZpZXJzKCYoYXJndW1lbnRzWzFdKSwgJmV2ZW50KTsK
LSAgICB3ZWJ2aWV3KCktPmhhbmRsZUlucHV0RXZlbnQoZXZlbnQpOwotfQotCi12b2lkIEV2ZW50
U2VuZGVyOjptb3VzZVVwKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgaWYgKHJlc3VsdCkgLy8gQ291bGQgYmUgMCBpZiBpbnZva2Vk
IGFzeW5jaHJvbm91c2x5LgotICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIHdlYnZp
ZXcoKS0+bGF5b3V0KCk7Ci0KLSAgICBpbnQgYnV0dG9uTnVtYmVyID0gZ2V0QnV0dG9uTnVtYmVy
RnJvbVNpbmdsZUFyZyhhcmd1bWVudHMpOwotICAgIFdFQktJVF9BU1NFUlQoYnV0dG9uTnVtYmVy
ICE9IC0xKTsKLQotICAgIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBidXR0b25UeXBlID0gZ2V0QnV0
dG9uVHlwZUZyb21CdXR0b25OdW1iZXIoYnV0dG9uTnVtYmVyKTsKLQotICAgIGlmIChpc0RyYWdN
b2RlKCkgJiYgIXJlcGxheWluZ1NhdmVkRXZlbnRzKSB7Ci0gICAgICAgIFNhdmVkRXZlbnQgc2F2
ZWRFdmVudDsKLSAgICAgICAgc2F2ZWRFdmVudC50eXBlID0gU2F2ZWRFdmVudDo6TW91c2VVcDsK
LSAgICAgICAgc2F2ZWRFdmVudC5idXR0b25UeXBlID0gYnV0dG9uVHlwZTsKLSAgICAgICAgbW91
c2VFdmVudFF1ZXVlLnB1c2hfYmFjayhzYXZlZEV2ZW50KTsKLSAgICAgICAgcmVwbGF5U2F2ZWRF
dmVudHMoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBXZWJNb3VzZUV2ZW50IGV2ZW50OwotICAg
ICAgICBpbml0TW91c2VFdmVudChXZWJJbnB1dEV2ZW50OjpNb3VzZVVwLCBidXR0b25UeXBlLCBs
YXN0TW91c2VQb3MsICZldmVudCwgZ2V0Q3VycmVudEV2ZW50VGltZVNlYyhtX2RlbGVnYXRlKSk7
Ci0gICAgICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID49IDIgJiYgKGFyZ3VtZW50c1sxXS5pc09i
amVjdCgpIHx8IGFyZ3VtZW50c1sxXS5pc1N0cmluZygpKSkKLSAgICAgICAgICAgIGFwcGx5S2V5
TW9kaWZpZXJzKCYoYXJndW1lbnRzWzFdKSwgJmV2ZW50KTsKLSAgICAgICAgZG9Nb3VzZVVwKGV2
ZW50KTsKLSAgICB9Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OmRvTW91c2VVcChjb25zdCBXZWJN
b3VzZUV2ZW50JiBlKQotewotICAgIHdlYnZpZXcoKS0+aGFuZGxlSW5wdXRFdmVudChlKTsKLQot
ICAgIHByZXNzZWRCdXR0b24gPSBXZWJNb3VzZUV2ZW50OjpCdXR0b25Ob25lOwotICAgIGxhc3RD
bGlja1RpbWVTZWMgPSBlLnRpbWVTdGFtcFNlY29uZHM7Ci0gICAgbGFzdENsaWNrUG9zID0gbGFz
dE1vdXNlUG9zOwotCi0gICAgLy8gSWYgd2UncmUgaW4gYSBkcmFnIG9wZXJhdGlvbiwgY29tcGxl
dGUgaXQuCi0gICAgaWYgKGN1cnJlbnREcmFnRGF0YS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgV2ViUG9pbnQgY2xpZW50UG9pbnQoZS54LCBlLnkpOwotICAgIFdlYlBvaW50IHNj
cmVlblBvaW50KGUuZ2xvYmFsWCwgZS5nbG9iYWxZKTsKLSAgICBmaW5pc2hEcmFnQW5kRHJvcChl
LCB3ZWJ2aWV3KCktPmRyYWdUYXJnZXREcmFnT3ZlcihjbGllbnRQb2ludCwgc2NyZWVuUG9pbnQs
IGN1cnJlbnREcmFnRWZmZWN0c0FsbG93ZWQsIDApKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6
ZmluaXNoRHJhZ0FuZERyb3AoY29uc3QgV2ViTW91c2VFdmVudCYgZSwgV2ViS2l0OjpXZWJEcmFn
T3BlcmF0aW9uIGRyYWdFZmZlY3QpCi17Ci0gICAgV2ViUG9pbnQgY2xpZW50UG9pbnQoZS54LCBl
LnkpOwotICAgIFdlYlBvaW50IHNjcmVlblBvaW50KGUuZ2xvYmFsWCwgZS5nbG9iYWxZKTsKLSAg
ICBjdXJyZW50RHJhZ0VmZmVjdCA9IGRyYWdFZmZlY3Q7Ci0gICAgaWYgKGN1cnJlbnREcmFnRWZm
ZWN0KQotICAgICAgICB3ZWJ2aWV3KCktPmRyYWdUYXJnZXREcm9wKGNsaWVudFBvaW50LCBzY3Jl
ZW5Qb2ludCwgMCk7Ci0gICAgZWxzZQotICAgICAgICB3ZWJ2aWV3KCktPmRyYWdUYXJnZXREcmFn
TGVhdmUoKTsKLSAgICB3ZWJ2aWV3KCktPmRyYWdTb3VyY2VFbmRlZEF0KGNsaWVudFBvaW50LCBz
Y3JlZW5Qb2ludCwgY3VycmVudERyYWdFZmZlY3QpOwotICAgIHdlYnZpZXcoKS0+ZHJhZ1NvdXJj
ZVN5c3RlbURyYWdFbmRlZCgpOwotCi0gICAgY3VycmVudERyYWdEYXRhLnJlc2V0KCk7Ci19Ci0K
LXZvaWQgRXZlbnRTZW5kZXI6Om1vdXNlTW92ZVRvKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0K
LSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigp
IHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdlYnZp
ZXcoKS0+bGF5b3V0KCk7Ci0KLSAgICBXZWJQb2ludCBtb3VzZVBvcyhhcmd1bWVudHNbMF0udG9J
bnQzMigpLCBhcmd1bWVudHNbMV0udG9JbnQzMigpKTsKLQotICAgIGlmIChpc0RyYWdNb2RlKCkg
JiYgcHJlc3NlZEJ1dHRvbiA9PSBXZWJNb3VzZUV2ZW50OjpCdXR0b25MZWZ0ICYmICFyZXBsYXlp
bmdTYXZlZEV2ZW50cykgewotICAgICAgICBTYXZlZEV2ZW50IHNhdmVkRXZlbnQ7Ci0gICAgICAg
IHNhdmVkRXZlbnQudHlwZSA9IFNhdmVkRXZlbnQ6Ok1vdXNlTW92ZTsKLSAgICAgICAgc2F2ZWRF
dmVudC5wb3MgPSBtb3VzZVBvczsKLSAgICAgICAgbW91c2VFdmVudFF1ZXVlLnB1c2hfYmFjayhz
YXZlZEV2ZW50KTsKLSAgICB9IGVsc2UgewotICAgICAgICBXZWJNb3VzZUV2ZW50IGV2ZW50Owot
ICAgICAgICBpbml0TW91c2VFdmVudChXZWJJbnB1dEV2ZW50OjpNb3VzZU1vdmUsIHByZXNzZWRC
dXR0b24sIG1vdXNlUG9zLCAmZXZlbnQsIGdldEN1cnJlbnRFdmVudFRpbWVTZWMobV9kZWxlZ2F0
ZSkpOwotICAgICAgICBkb01vdXNlTW92ZShldmVudCk7Ci0gICAgfQotfQotCi12b2lkIEV2ZW50
U2VuZGVyOjpkb01vdXNlTW92ZShjb25zdCBXZWJNb3VzZUV2ZW50JiBlKQotewotICAgIGxhc3RN
b3VzZVBvcyA9IFdlYlBvaW50KGUueCwgZS55KTsKLQotICAgIHdlYnZpZXcoKS0+aGFuZGxlSW5w
dXRFdmVudChlKTsKLQotICAgIGlmIChwcmVzc2VkQnV0dG9uID09IFdlYk1vdXNlRXZlbnQ6OkJ1
dHRvbk5vbmUgfHwgY3VycmVudERyYWdEYXRhLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgV2ViUG9pbnQgY2xpZW50UG9pbnQoZS54LCBlLnkpOwotICAgIFdlYlBvaW50IHNjcmVlblBv
aW50KGUuZ2xvYmFsWCwgZS5nbG9iYWxZKTsKLSAgICBjdXJyZW50RHJhZ0VmZmVjdCA9IHdlYnZp
ZXcoKS0+ZHJhZ1RhcmdldERyYWdPdmVyKGNsaWVudFBvaW50LCBzY3JlZW5Qb2ludCwgY3VycmVu
dERyYWdFZmZlY3RzQWxsb3dlZCwgMCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OmtleURvd24o
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICBpZiAocmVzdWx0KQotICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgYm9vbCBnZW5lcmF0ZUNoYXIgPSBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBJ
J20gbm90IGV4YWN0bHkgc3VyZSBob3cgd2Ugc2hvdWxkIGNvbnZlcnQgdGhlIHN0cmluZyB0byBh
IGtleQotICAgIC8vIGV2ZW50LiBUaGlzIHNlZW1zIHRvIHdvcmsgaW4gdGhlIGNhc2VzIEkgdGVz
dGVkLgotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYWxzbyBnZW5lcmF0ZSBhIEtFWV9VUD8KLSAg
ICBzdHJpbmcgY29kZVN0ciA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOwotCi0gICAgLy8gQ29u
dmVydCBcbiAtPiBWS19SRVRVUk4uIFNvbWUgbGF5b3V0IHRlc3RzIHVzZSBcbiB0byBtZWFuICJF
bnRlciIsIHdoZW4KLSAgICAvLyBXaW5kb3dzIHVzZXMgXHIgZm9yICJFbnRlciIuCi0gICAgaW50
IGNvZGUgPSAwOwotICAgIGludCB0ZXh0ID0gMDsKLSAgICBib29sIG5lZWRzU2hpZnRLZXlNb2Rp
ZmllciA9IGZhbHNlOwotICAgIGlmICgiXG4iID09IGNvZGVTdHIpIHsKLSAgICAgICAgZ2VuZXJh
dGVDaGFyID0gdHJ1ZTsKLSAgICAgICAgdGV4dCA9IGNvZGUgPSBWS0VZX1JFVFVSTjsKLSAgICB9
IGVsc2UgaWYgKCJyaWdodEFycm93IiA9PSBjb2RlU3RyKQotICAgICAgICBjb2RlID0gVktFWV9S
SUdIVDsKLSAgICBlbHNlIGlmICgiZG93bkFycm93IiA9PSBjb2RlU3RyKQotICAgICAgICBjb2Rl
ID0gVktFWV9ET1dOOwotICAgIGVsc2UgaWYgKCJsZWZ0QXJyb3ciID09IGNvZGVTdHIpCi0gICAg
ICAgIGNvZGUgPSBWS0VZX0xFRlQ7Ci0gICAgZWxzZSBpZiAoInVwQXJyb3ciID09IGNvZGVTdHIp
Ci0gICAgICAgIGNvZGUgPSBWS0VZX1VQOwotICAgIGVsc2UgaWYgKCJpbnNlcnQiID09IGNvZGVT
dHIpCi0gICAgICAgIGNvZGUgPSBWS0VZX0lOU0VSVDsKLSAgICBlbHNlIGlmICgiZGVsZXRlIiA9
PSBjb2RlU3RyKQotICAgICAgICBjb2RlID0gVktFWV9ERUxFVEU7Ci0gICAgZWxzZSBpZiAoInBh
Z2VVcCIgPT0gY29kZVN0cikKLSAgICAgICAgY29kZSA9IFZLRVlfUFJJT1I7Ci0gICAgZWxzZSBp
ZiAoInBhZ2VEb3duIiA9PSBjb2RlU3RyKQotICAgICAgICBjb2RlID0gVktFWV9ORVhUOwotICAg
IGVsc2UgaWYgKCJob21lIiA9PSBjb2RlU3RyKQotICAgICAgICBjb2RlID0gVktFWV9IT01FOwot
ICAgIGVsc2UgaWYgKCJlbmQiID09IGNvZGVTdHIpCi0gICAgICAgIGNvZGUgPSBWS0VZX0VORDsK
LSAgICBlbHNlIGlmICgicHJpbnRTY3JlZW4iID09IGNvZGVTdHIpCi0gICAgICAgIGNvZGUgPSBW
S0VZX1NOQVBTSE9UOwotICAgIGVsc2UgaWYgKCJtZW51IiA9PSBjb2RlU3RyKQotICAgICAgICBj
b2RlID0gVktFWV9BUFBTOwotICAgIGVsc2UgaWYgKCJsZWZ0Q29udHJvbCIgPT0gY29kZVN0cikK
LSAgICAgICAgY29kZSA9IFZLRVlfTENPTlRST0w7Ci0gICAgZWxzZSBpZiAoInJpZ2h0Q29udHJv
bCIgPT0gY29kZVN0cikKLSAgICAgICAgY29kZSA9IFZLRVlfUkNPTlRST0w7Ci0gICAgZWxzZSBp
ZiAoImxlZnRTaGlmdCIgPT0gY29kZVN0cikKLSAgICAgICAgY29kZSA9IFZLRVlfTFNISUZUOwot
ICAgIGVsc2UgaWYgKCJyaWdodFNoaWZ0IiA9PSBjb2RlU3RyKQotICAgICAgICBjb2RlID0gVktF
WV9SU0hJRlQ7Ci0gICAgZWxzZSBpZiAoImxlZnRBbHQiID09IGNvZGVTdHIpCi0gICAgICAgIGNv
ZGUgPSBWS0VZX0xNRU5VOwotICAgIGVsc2UgaWYgKCJyaWdodEFsdCIgPT0gY29kZVN0cikKLSAg
ICAgICAgY29kZSA9IFZLRVlfUk1FTlU7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIENvbXBhcmUg
dGhlIGlucHV0IHN0cmluZyB3aXRoIHRoZSBmdW5jdGlvbi1rZXkgbmFtZXMgZGVmaW5lZCBieSB0
aGUKLSAgICAgICAgLy8gRE9NIHNwZWMgKGkuZS4gIkYxIiwuLi4sIkYyNCIpLiBJZiB0aGUgaW5w
dXQgc3RyaW5nIGlzIGEgZnVuY3Rpb24ta2V5Ci0gICAgICAgIC8vIG5hbWUsIHNldCBpdHMga2V5
IGNvZGUuCi0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IDI0OyArK2kpIHsKLSAgICAgICAg
ICAgIGNoYXIgZnVuY3Rpb25DaGFyc1sxMF07Ci0gICAgICAgICAgICBzbnByaW50ZihmdW5jdGlv
bkNoYXJzLCAxMCwgIkYlZCIsIGkpOwotICAgICAgICAgICAgc3RyaW5nIGZ1bmN0aW9uS2V5TmFt
ZShmdW5jdGlvbkNoYXJzKTsKLSAgICAgICAgICAgIGlmIChmdW5jdGlvbktleU5hbWUgPT0gY29k
ZVN0cikgewotICAgICAgICAgICAgICAgIGNvZGUgPSBWS0VZX0YxICsgKGkgLSAxKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAo
IWNvZGUpIHsKLSAgICAgICAgICAgIFdlYlN0cmluZyB3ZWJDb2RlU3RyID0gV2ViU3RyaW5nOjpm
cm9tVVRGOChjb2RlU3RyLmRhdGEoKSwgY29kZVN0ci5zaXplKCkpOwotICAgICAgICAgICAgV0VC
S0lUX0FTU0VSVCh3ZWJDb2RlU3RyLmxlbmd0aCgpID09IDEpOwotICAgICAgICAgICAgdGV4dCA9
IGNvZGUgPSB3ZWJDb2RlU3RyLmRhdGEoKVswXTsKLSAgICAgICAgICAgIG5lZWRzU2hpZnRLZXlN
b2RpZmllciA9IG5lZWRzU2hpZnRNb2RpZmllcihjb2RlKTsKLSAgICAgICAgICAgIGlmICgoY29k
ZSAmIDB4RkYpID49ICdhJyAmJiAoY29kZSAmIDB4RkYpIDw9ICd6JykKLSAgICAgICAgICAgICAg
ICBjb2RlIC09ICdhJyAtICdBJzsKLSAgICAgICAgICAgIGdlbmVyYXRlQ2hhciA9IHRydWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoIigiID09IGNvZGVTdHIpIHsKLSAgICAgICAgICAgIGNv
ZGUgPSAnOSc7Ci0gICAgICAgICAgICBuZWVkc1NoaWZ0S2V5TW9kaWZpZXIgPSB0cnVlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gRm9yIG9uZSBnZW5lcmF0ZWQga2V5Ym9hcmQgZXZlbnQs
IHdlIG5lZWQgdG8gZ2VuZXJhdGUgYSBrZXlEb3duL2tleVVwCi0gICAgLy8gcGFpcjsgcmVmZXIg
dG8gRXZlbnRTZW5kZXIuY3BwIGluIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi4KLSAgICAvLyBP
biBXaW5kb3dzLCB3ZSBtaWdodCBhbHNvIG5lZWQgdG8gZ2VuZXJhdGUgYSBjaGFyIGV2ZW50IHRv
IG1pbWljIHRoZQotICAgIC8vIFdpbmRvd3MgZXZlbnQgZmxvdzsgb24gb3RoZXIgcGxhdGZvcm1z
IHdlIGNyZWF0ZSBhIG1lcmdlZCBldmVudCBhbmQgdGVzdAotICAgIC8vIHRoZSBldmVudCBmbG93
IHRoYXQgdGhhdCBwbGF0Zm9ybSBwcm92aWRlcy4KLSAgICBXZWJLZXlib2FyZEV2ZW50IGV2ZW50
RG93biwgZXZlbnRDaGFyLCBldmVudFVwOwotICAgIGV2ZW50RG93bi50eXBlID0gV2ViSW5wdXRF
dmVudDo6UmF3S2V5RG93bjsKLSAgICBldmVudERvd24ubW9kaWZpZXJzID0gMDsKLSAgICBldmVu
dERvd24ud2luZG93c0tleUNvZGUgPSBjb2RlOwotI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiBV
U0UoR1RLKQotICAgIGV2ZW50RG93bi5uYXRpdmVLZXlDb2RlID0gTmF0aXZlS2V5Q29kZUZvcldp
bmRvd3NLZXlDb2RlKGNvZGUpOwotI2VuZGlmCi0KLSAgICBpZiAoZ2VuZXJhdGVDaGFyKSB7Ci0g
ICAgICAgIGV2ZW50RG93bi50ZXh0WzBdID0gdGV4dDsKLSAgICAgICAgZXZlbnREb3duLnVubW9k
aWZpZWRUZXh0WzBdID0gdGV4dDsKLSAgICB9Ci0gICAgZXZlbnREb3duLnNldEtleUlkZW50aWZp
ZXJGcm9tV2luZG93c0tleUNvZGUoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID49IDIg
JiYgKGFyZ3VtZW50c1sxXS5pc09iamVjdCgpIHx8IGFyZ3VtZW50c1sxXS5pc1N0cmluZygpKSkK
LSAgICAgICAgZXZlbnREb3duLmlzU3lzdGVtS2V5ID0gYXBwbHlLZXlNb2RpZmllcnMoJihhcmd1
bWVudHNbMV0pLCAmZXZlbnREb3duKTsKLQotICAgIGlmIChuZWVkc1NoaWZ0S2V5TW9kaWZpZXIp
Ci0gICAgICAgIGV2ZW50RG93bi5tb2RpZmllcnMgfD0gV2ViSW5wdXRFdmVudDo6U2hpZnRLZXk7
Ci0KLSAgICAvLyBTZWUgaWYgS2V5TG9jYXRpb24gYXJndW1lbnQgaXMgZ2l2ZW4uCi0gICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPj0gMyAmJiBhcmd1bWVudHNbMl0uaXNOdW1iZXIoKSkgewotICAg
ICAgICBpbnQgbG9jYXRpb24gPSBhcmd1bWVudHNbMl0udG9JbnQzMigpOwotICAgICAgICBpZiAo
bG9jYXRpb24gPT0gRE9NS2V5TG9jYXRpb25OdW1wYWQpCi0gICAgICAgICAgICBldmVudERvd24u
bW9kaWZpZXJzIHw9IFdlYklucHV0RXZlbnQ6OklzS2V5UGFkOwotICAgIH0KLQotICAgIGV2ZW50
Q2hhciA9IGV2ZW50VXAgPSBldmVudERvd247Ci0gICAgZXZlbnRVcC50eXBlID0gV2ViSW5wdXRF
dmVudDo6S2V5VXA7Ci0gICAgLy8gRXZlbnRTZW5kZXIubSBmb3JjZXMgYSBsYXlvdXQgaGVyZSwg
d2l0aCBhdCBsZWFzdCBvbmUKLSAgICAvLyB0ZXN0IChmYXN0L2Zvcm1zL2ZvY3VzLWNvbnRyb2wt
dG8tcGFnZS5odG1sKSByZWx5aW5nIG9uIHRoaXMuCi0gICAgd2VidmlldygpLT5sYXlvdXQoKTsK
LQotICAgIC8vIEluIHRoZSBicm93c2VyLCBpZiBhIGtleWJvYXJkIGV2ZW50IGNvcnJlc3BvbmRz
IHRvIGFuIGVkaXRvciBjb21tYW5kLAotICAgIC8vIHRoZSBjb21tYW5kIHdpbGwgYmUgZGlzcGF0
Y2hlZCB0byB0aGUgcmVuZGVyZXIganVzdCBiZWZvcmUgZGlzcGF0Y2hpbmcKLSAgICAvLyB0aGUg
a2V5Ym9hcmQgZXZlbnQsIGFuZCB0aGVuIGl0IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlCi0gICAg
Ly8gUmVuZGVyVmlldzo6aGFuZGxlQ3VycmVudEtleWJvYXJkRXZlbnQoKSBtZXRob2QsIHdoaWNo
IGlzIGNhbGxlZCBmcm9tCi0gICAgLy8gdGhpcmRfcGFydHkvV2ViS2l0L1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0VkaXRvckNsaWVudEltcGwuY3BwLgotICAgIC8vIFdlIGp1c3Qgc2ltdWxh
dGUgdGhlIHNhbWUgYmVoYXZpb3IgaGVyZS4KLSAgICBzdHJpbmcgZWRpdENvbW1hbmQ7Ci0gICAg
aWYgKGdldEVkaXRDb21tYW5kKGV2ZW50RG93biwgJmVkaXRDb21tYW5kKSkKLSAgICAgICAgbV9k
ZWxlZ2F0ZS0+c2V0RWRpdENvbW1hbmQoZWRpdENvbW1hbmQsICIiKTsKLQotICAgIHdlYnZpZXco
KS0+aGFuZGxlSW5wdXRFdmVudChldmVudERvd24pOwotCi0gICAgaWYgKGNvZGUgPT0gVktFWV9F
U0NBUEUgJiYgIWN1cnJlbnREcmFnRGF0YS5pc051bGwoKSkgewotICAgICAgICBXZWJNb3VzZUV2
ZW50IGV2ZW50OwotICAgICAgICBpbml0TW91c2VFdmVudChXZWJJbnB1dEV2ZW50OjpNb3VzZURv
d24sIHByZXNzZWRCdXR0b24sIGxhc3RNb3VzZVBvcywgJmV2ZW50LCBnZXRDdXJyZW50RXZlbnRU
aW1lU2VjKG1fZGVsZWdhdGUpKTsKLSAgICAgICAgZmluaXNoRHJhZ0FuZERyb3AoZXZlbnQsIFdl
YktpdDo6V2ViRHJhZ09wZXJhdGlvbk5vbmUpOwotICAgIH0KLQotICAgIG1fZGVsZWdhdGUtPmNs
ZWFyRWRpdENvbW1hbmQoKTsKLQotICAgIGlmIChnZW5lcmF0ZUNoYXIpIHsKLSAgICAgICAgZXZl
bnRDaGFyLnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpDaGFyOwotICAgICAgICBldmVudENoYXIua2V5
SWRlbnRpZmllclswXSA9ICdcMCc7Ci0gICAgICAgIHdlYnZpZXcoKS0+aGFuZGxlSW5wdXRFdmVu
dChldmVudENoYXIpOwotICAgIH0KLQotICAgIHdlYnZpZXcoKS0+aGFuZGxlSW5wdXRFdmVudChl
dmVudFVwKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6ZGlzcGF0Y2hNZXNzYWdlKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVz
dWx0LT5zZXROdWxsKCk7Ci0KLSNpZmRlZiBXSU4zMgotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
ID09IDMpIHsKLSAgICAgICAgLy8gR3JhYiB0aGUgbWVzc2FnZSBpZCB0byBzZWUgaWYgd2UgbmVl
ZCB0byBkaXNwYXRjaCBpdC4KLSAgICAgICAgaW50IG1zZyA9IGFyZ3VtZW50c1swXS50b0ludDMy
KCk7Ci0KLSAgICAgICAgLy8gV2ViS2l0J3MgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIHN0dWZm
cyBhIE1TRyBzdHJ1Y3QgYW5kIHVzZXMKLSAgICAgICAgLy8gVHJhbnNsYXRlTWVzc2FnZSBhbmQg
RGlzcGF0Y2hNZXNzYWdlLiBXZSB1c2UgYSBXZWJLZXlib2FyZEV2ZW50LCB3aGljaAotICAgICAg
ICAvLyBkb2Vzbid0IG5lZWQgdG8gcmVjZWl2ZSB0aGUgRGVhZENoYXIgYW5kIFN5c0RlYWRDaGFy
IG1lc3NhZ2VzLgotICAgICAgICBpZiAobXNnID09IFdNX0RFQURDSEFSIHx8IG1zZyA9PSBXTV9T
WVNERUFEQ0hBUikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB3ZWJ2aWV3KCktPmxh
eW91dCgpOwotCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgbHBhcmFtID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZz4oYXJndW1lbnRzWzJdLnRvRG91YmxlKCkpOwotICAgICAgICB3ZWJ2aWV3KCkt
PmhhbmRsZUlucHV0RXZlbnQoV2ViSW5wdXRFdmVudEZhY3Rvcnk6OmtleWJvYXJkRXZlbnQoMCwg
bXNnLCBhcmd1bWVudHNbMV0udG9JbnQzMigpLCBscGFyYW0pKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi19Ci0KLWJvb2wgRXZlbnRT
ZW5kZXI6Om5lZWRzU2hpZnRNb2RpZmllcihpbnQga2V5Q29kZSkKLXsKLSAgICAvLyBJZiBjb2Rl
IGlzIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGFzc2lnbiBhIFNISUZUIGtleSB0bwotICAgIC8vIGV2
ZW50RG93bi5tb2RpZmllciwgdGhpcyBsb2dpYyBjb21lcyBmcm9tCi0gICAgLy8gVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0V2ZW50U2VuZGVyLmNwcAotICAgIHJldHVybiAoa2V5Q29kZSAmIDB4
RkYpID49ICdBJyAmJiAoa2V5Q29kZSAmIDB4RkYpIDw9ICdaJzsKLX0KLQotdm9pZCBFdmVudFNl
bmRlcjo6bGVhcEZvcndhcmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGludCBtaWxsaXNlY29uZHMgPSBhcmd1bWVudHNbMF0udG9JbnQzMigpOwot
ICAgIGlmIChpc0RyYWdNb2RlKCkgJiYgcHJlc3NlZEJ1dHRvbiA9PSBXZWJNb3VzZUV2ZW50OjpC
dXR0b25MZWZ0ICYmICFyZXBsYXlpbmdTYXZlZEV2ZW50cykgewotICAgICAgICBTYXZlZEV2ZW50
IHNhdmVkRXZlbnQ7Ci0gICAgICAgIHNhdmVkRXZlbnQudHlwZSA9IFNhdmVkRXZlbnQ6OkxlYXBG
b3J3YXJkOwotICAgICAgICBzYXZlZEV2ZW50Lm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kczsK
LSAgICAgICAgbW91c2VFdmVudFF1ZXVlLnB1c2hfYmFjayhzYXZlZEV2ZW50KTsKLSAgICB9IGVs
c2UKLSAgICAgICAgZG9MZWFwRm9yd2FyZChtaWxsaXNlY29uZHMpOwotfQotCi12b2lkIEV2ZW50
U2VuZGVyOjpkb0xlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCi17Ci0gICAgYWR2YW5jZUV2
ZW50VGltZShtaWxsaXNlY29uZHMpOwotfQotCi0vLyBBcHBsZSdzIHBvcnQgb2YgV2ViS2l0IHpv
b21zIGJ5IGEgZmFjdG9yIG9mIDEuMiAoc2VlCi0vLyBXZWJLaXQvV2ViVmlldy9XZWJWaWV3Lm1t
KQotdm9pZCBFdmVudFNlbmRlcjo6dGV4dFpvb21Jbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgd2VidmlldygpLT5zZXRab29tTGV2ZWwodHJ1ZSwg
d2VidmlldygpLT56b29tTGV2ZWwoKSArIDEpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci12b2lkIEV2ZW50U2VuZGVyOjp0ZXh0Wm9vbU91dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgd2VidmlldygpLT5zZXRab29tTGV2ZWwodHJ1ZSwg
d2VidmlldygpLT56b29tTGV2ZWwoKSAtIDEpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci12b2lkIEV2ZW50U2VuZGVyOjp6b29tUGFnZUluKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICB3ZWJ2aWV3KCktPnNldFpvb21MZXZlbChmYWxzZSwg
d2VidmlldygpLT56b29tTGV2ZWwoKSArIDEpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci12b2lkIEV2ZW50U2VuZGVyOjp6b29tUGFnZU91dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgd2VidmlldygpLT5zZXRab29tTGV2ZWwoZmFsc2Us
IHdlYnZpZXcoKS0+em9vbUxldmVsKCkgLSAxKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0K
LQotdm9pZCBFdmVudFNlbmRlcjo6c2NhbGVQYWdlQnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA8IDMgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1i
ZXIoKSB8fCAhYXJndW1lbnRzWzJdLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGZsb2F0IHNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFyZ3VtZW50c1swXS50b0Rv
dWJsZSgpKTsKLSAgICBpbnQgeCA9IGFyZ3VtZW50c1sxXS50b0ludDMyKCk7Ci0gICAgaW50IHkg
PSBhcmd1bWVudHNbMl0udG9JbnQzMigpOwotICAgIHdlYnZpZXcoKS0+c2V0UGFnZVNjYWxlRmFj
dG9yKHNjYWxlRmFjdG9yLCBXZWJQb2ludCh4LCB5KSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6Om1vdXNlU2Nyb2xsQnkoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBoYW5kbGVNb3VzZVdo
ZWVsKGFyZ3VtZW50cywgcmVzdWx0LCBmYWxzZSk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OmNv
bnRpbnVvdXNNb3VzZVNjcm9sbEJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaGFuZGxlTW91c2VXaGVlbChhcmd1bWVudHMsIHJl
c3VsdCwgdHJ1ZSk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OnJlcGxheVNhdmVkRXZlbnRzKCkK
LXsKLSAgICByZXBsYXlpbmdTYXZlZEV2ZW50cyA9IHRydWU7Ci0gICAgd2hpbGUgKCFtb3VzZUV2
ZW50UXVldWUuZW1wdHkoKSkgewotICAgICAgICBTYXZlZEV2ZW50IGUgPSBtb3VzZUV2ZW50UXVl
dWUuZnJvbnQoKTsKLSAgICAgICAgbW91c2VFdmVudFF1ZXVlLnBvcF9mcm9udCgpOwotCi0gICAg
ICAgIHN3aXRjaCAoZS50eXBlKSB7Ci0gICAgICAgIGNhc2UgU2F2ZWRFdmVudDo6TW91c2VNb3Zl
OiB7Ci0gICAgICAgICAgICBXZWJNb3VzZUV2ZW50IGV2ZW50OwotICAgICAgICAgICAgaW5pdE1v
dXNlRXZlbnQoV2ViSW5wdXRFdmVudDo6TW91c2VNb3ZlLCBwcmVzc2VkQnV0dG9uLCBlLnBvcywg
JmV2ZW50LCBnZXRDdXJyZW50RXZlbnRUaW1lU2VjKG1fZGVsZWdhdGUpKTsKLSAgICAgICAgICAg
IGRvTW91c2VNb3ZlKGV2ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgU2F2ZWRFdmVudDo6TGVhcEZvcndhcmQ6Ci0gICAgICAgICAgICBkb0xlYXBGb3J3
YXJkKGUubWlsbGlzZWNvbmRzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNh
dmVkRXZlbnQ6Ok1vdXNlVXA6IHsKLSAgICAgICAgICAgIFdlYk1vdXNlRXZlbnQgZXZlbnQ7Ci0g
ICAgICAgICAgICBpbml0TW91c2VFdmVudChXZWJJbnB1dEV2ZW50OjpNb3VzZVVwLCBlLmJ1dHRv
blR5cGUsIGxhc3RNb3VzZVBvcywgJmV2ZW50LCBnZXRDdXJyZW50RXZlbnRUaW1lU2VjKG1fZGVs
ZWdhdGUpKTsKLSAgICAgICAgICAgIGRvTW91c2VVcChldmVudCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgV0VCS0lUX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVwbGF5aW5nU2F2ZWRF
dmVudHMgPSBmYWxzZTsKLX0KLQotLy8gQmVjYXVzZSBhY3R1YWwgY29udGV4dCBtZW51IGlzIGlt
cGxlbWVudGVkIGJ5IHRoZSBicm93c2VyIHNpZGUsIAotLy8gdGhpcyBmdW5jdGlvbiBkb2VzIG9u
bHkgd2hhdCBMYXlvdXRUZXN0cyBhcmUgZXhwZWN0aW5nOgotLy8gLSBNYW55IHRlc3QgY2hlY2tz
IHRoZSBjb3VudCBvZiBpdGVtcy4gU28gcmV0dXJuaW5nIG5vbi16ZXJvIHZhbHVlIG1ha2VzIHNl
bnNlLgotLy8gLSBTb21lIHRlc3QgY29tcGFyZXMgdGhlIGNvdW50IGJlZm9yZSBhbmQgYWZ0ZXIg
c29tZSBhY3Rpb24uIFNvIGNoYW5naW5nIHRoZSBjb3VudCBiYXNlZCBvbiBmbGFncwotLy8gICBh
bHNvIG1ha2VzIHNlbnNlLiBUaGlzIGZ1bmN0aW9uIGlzIGRvaW5nIHN1Y2ggZm9yIHNvbWUgZmxh
Z3MuCi0vLyAtIFNvbWUgdGVzdCBldmVuIGNoZWNrcyBhY3R1YWwgc3RyaW5nIGNvbnRlbnQuIFNv
IHByb3ZpZGluZyBpdCB3b3VsZCBiZSBhbHNvIGhlbHBmdWwuCi0vLwotc3RhdGljIHZlY3RvcjxX
ZWJTdHJpbmc+IG1ha2VNZW51SXRlbVN0cmluZ3NGb3IoV2ViQ29udGV4dE1lbnVEYXRhKiBjb250
ZXh0TWVudSwgV2ViVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSkKLXsKLSAgICAvLyBUaGVzZSBjb25z
dGFudHMgYXJlIGJhc2VkIG9uIFNhZmFyaSdzIGNvbnRleHQgbWVudSBiZWNhdXNlIHRlc3RzIGFy
ZSBtYWRlIGZvciBpdC4KLSAgICBzdGF0aWMgY29uc3QgY2hhciogbm9uRWRpdGFibGVNZW51U3Ry
aW5nc1tdID0geyAiQmFjayIsICJSZWxvYWQgUGFnZSIsICJPcGVuIGluIERhc2hiYW9yZCIsICI8
c2VwYXJhdG9yPiIsICJWaWV3IFNvdXJjZSIsICJTYXZlIFBhZ2UgQXMiLCAiUHJpbnQgUGFnZSIs
ICJJbnNwZWN0IEVsZW1lbnQiLCAwIH07Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGVkaXRhYmxl
TWVudVN0cmluZ3NbXSA9IHsgIkN1dCIsICJDb3B5IiwgIjxzZXBhcmF0b3I+IiwgIlBhc3RlIiwg
IlNwZWxsaW5nIGFuZCBHcmFtbWFyIiwgIlN1YnN0aXR1dGlvbnMsIFRyYW5zZm9ybWF0aW9ucyIs
ICJGb250IiwgIlNwZWVjaCIsICJQYXJhZ3JhcGggRGlyZWN0aW9uIiwgIjxzZXBhcmF0b3I+Iiwg
MCB9OwotCi0gICAgLy8gVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIG1vdXNlIGV2ZW50cyBhcmUg
Y2FuY2VsbGVhYmxlLgotICAgIGlmICghY29udGV4dE1lbnUpCi0gICAgICAgIHJldHVybiB2ZWN0
b3I8V2ViU3RyaW5nPigpOwotCi0gICAgdmVjdG9yPFdlYlN0cmluZz4gc3RyaW5nczsKLQotICAg
IGlmIChjb250ZXh0TWVudS0+aXNFZGl0YWJsZSkgewotICAgICAgICBmb3IgKGNvbnN0IGNoYXIq
KiBpdGVtID0gZWRpdGFibGVNZW51U3RyaW5nczsgKml0ZW07ICsraXRlbSkgCi0gICAgICAgICAg
ICBzdHJpbmdzLnB1c2hfYmFjayhXZWJTdHJpbmc6OmZyb21VVEY4KCppdGVtKSk7Ci0gICAgICAg
IFdlYlZlY3RvcjxXZWJTdHJpbmc+IHN1Z2dlc3Rpb25zOwotICAgICAgICBNb2NrU3BlbGxDaGVj
azo6ZmlsbFN1Z2dlc3Rpb25MaXN0KGNvbnRleHRNZW51LT5taXNzcGVsbGVkV29yZCwgJnN1Z2dl
c3Rpb25zKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWdnZXN0aW9ucy5zaXpl
KCk7ICsraSkgCi0gICAgICAgICAgICBzdHJpbmdzLnB1c2hfYmFjayhzdWdnZXN0aW9uc1tpXSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChjb25zdCBjaGFyKiogaXRlbSA9IG5vbkVkaXRh
YmxlTWVudVN0cmluZ3M7ICppdGVtOyArK2l0ZW0pIAotICAgICAgICAgICAgc3RyaW5ncy5wdXNo
X2JhY2soV2ViU3RyaW5nOjpmcm9tVVRGOCgqaXRlbSkpOwotICAgIH0KLQotICAgIHJldHVybiBz
dHJpbmdzOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjpjb250ZXh0Q2xpY2soY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICB3ZWJ2aWV3
KCktPmxheW91dCgpOwotCi0gICAgdXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihXZWJNb3VzZUV2
ZW50OjpCdXR0b25SaWdodCk7Ci0KLSAgICAvLyBDbGVhcnMgbGFzdCBjb250ZXh0IG1lbnUgZGF0
YSBiZWNhdXNlIHdlIG5lZWQgdG8ga25vdyBpZiB0aGUgY29udGV4dCBtZW51IGJlIHJlcXVlc3Rl
ZCAKLSAgICAvLyBhZnRlciBmb2xsb3dpbmcgbW91c2UgZXZlbnRzLgotICAgIG1fbGFzdENvbnRl
eHRNZW51RGF0YS5yZXNldCgpOwotCi0gICAgLy8gR2VuZXJhdGUgcmlnaHQgbW91c2UgZG93biBh
bmQgdXAuCi0gICAgV2ViTW91c2VFdmVudCBldmVudDsKLSAgICAvLyBUaGlzIGlzIGEgaGFjayB0
byB3b3JrIGFyb3VuZCBvbmx5IGFsbG93aW5nIGEgc2luZ2xlIHByZXNzZWQgYnV0dG9uIHNpbmNl
IHdlIHdhbnQgdG8KLSAgICAvLyB0ZXN0IHRoZSBjYXNlIHdoZXJlIGJvdGggdGhlIGxlZnQgYW5k
IHJpZ2h0IG1vdXNlIGJ1dHRvbnMgYXJlIHByZXNzZWQuCi0gICAgaWYgKHByZXNzZWRCdXR0b24g
PT0gV2ViTW91c2VFdmVudDo6QnV0dG9uTm9uZSkKLSAgICAgICAgcHJlc3NlZEJ1dHRvbiA9IFdl
Yk1vdXNlRXZlbnQ6OkJ1dHRvblJpZ2h0OwotICAgIGluaXRNb3VzZUV2ZW50KFdlYklucHV0RXZl
bnQ6Ok1vdXNlRG93biwgV2ViTW91c2VFdmVudDo6QnV0dG9uUmlnaHQsIGxhc3RNb3VzZVBvcywg
JmV2ZW50LCBnZXRDdXJyZW50RXZlbnRUaW1lU2VjKG1fZGVsZWdhdGUpKTsKLSAgICB3ZWJ2aWV3
KCktPmhhbmRsZUlucHV0RXZlbnQoZXZlbnQpOwotCi0jaWZkZWYgV0lOMzIKLSAgICBpbml0TW91
c2VFdmVudChXZWJJbnB1dEV2ZW50OjpNb3VzZVVwLCBXZWJNb3VzZUV2ZW50OjpCdXR0b25SaWdo
dCwgbGFzdE1vdXNlUG9zLCAmZXZlbnQsIGdldEN1cnJlbnRFdmVudFRpbWVTZWMobV9kZWxlZ2F0
ZSkpOwotICAgIHdlYnZpZXcoKS0+aGFuZGxlSW5wdXRFdmVudChldmVudCk7Ci0KLSAgICBwcmVz
c2VkQnV0dG9uID0gV2ViTW91c2VFdmVudDo6QnV0dG9uTm9uZTsKLSNlbmRpZgotCi0gICAgcmVz
dWx0LT5zZXQoV2ViQmluZGluZ3M6Om1ha2VTdHJpbmdBcnJheShtYWtlTWVudUl0ZW1TdHJpbmdz
Rm9yKG1fbGFzdENvbnRleHRNZW51RGF0YS5nZXQoKSwgbV9kZWxlZ2F0ZSkpKTsKLX0KLQotY2xh
c3MgTW91c2VEb3duVGFzazogcHVibGljIFdlYk1ldGhvZFRhc2s8RXZlbnRTZW5kZXI+IHsKLXB1
YmxpYzoKLSAgICBNb3VzZURvd25UYXNrKEV2ZW50U2VuZGVyKiBvYmosIGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJnKQotICAgICAgICA6IFdlYk1ldGhvZFRhc2s8RXZlbnRTZW5kZXI+KG9iaiks
IG1fYXJndW1lbnRzKGFyZykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSB7IG1f
b2JqZWN0LT5tb3VzZURvd24obV9hcmd1bWVudHMsIDApOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ3Bw
QXJndW1lbnRMaXN0IG1fYXJndW1lbnRzOwotfTsKLQotY2xhc3MgTW91c2VVcFRhc2s6IHB1Ymxp
YyBXZWJNZXRob2RUYXNrPEV2ZW50U2VuZGVyPiB7Ci1wdWJsaWM6Ci0gICAgTW91c2VVcFRhc2so
RXZlbnRTZW5kZXIqIG9iaiwgY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmcpCi0gICAgICAgIDog
V2ViTWV0aG9kVGFzazxFdmVudFNlbmRlcj4ob2JqKSwgbV9hcmd1bWVudHMoYXJnKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxpZCgpIHsgbV9vYmplY3QtPm1vdXNlVXAobV9hcmd1bWVu
dHMsIDApOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ3BwQXJndW1lbnRMaXN0IG1fYXJndW1lbnRzOwot
fTsKLQotdm9pZCBFdmVudFNlbmRlcjo6c2NoZWR1bGVBc3luY2hyb25vdXNDbGljayhjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwotICAgIG1fZGVsZWdhdGUtPnBvc3RUYXNrKG5ldyBNb3VzZURvd25U
YXNrKHRoaXMsIGFyZ3VtZW50cykpOwotICAgIG1fZGVsZWdhdGUtPnBvc3RUYXNrKG5ldyBNb3Vz
ZVVwVGFzayh0aGlzLCBhcmd1bWVudHMpKTsKLX0KLQotY2xhc3MgS2V5RG93blRhc2sgOiBwdWJs
aWMgV2ViTWV0aG9kVGFzazxFdmVudFNlbmRlcj4gewotcHVibGljOgotICAgIEtleURvd25UYXNr
KEV2ZW50U2VuZGVyKiBvYmosIGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJnKQotICAgICAgICA6
IFdlYk1ldGhvZFRhc2s8RXZlbnRTZW5kZXI+KG9iaiksIG1fYXJndW1lbnRzKGFyZykgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSB7IG1fb2JqZWN0LT5rZXlEb3duKG1fYXJndW1l
bnRzLCAwKTsgfQotCi1wcml2YXRlOgotICAgIENwcEFyZ3VtZW50TGlzdCBtX2FyZ3VtZW50czsK
LX07Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OnNjaGVkdWxlQXN5bmNocm9ub3VzS2V5RG93bihjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIG1fZGVsZWdhdGUtPnBvc3RUYXNrKG5ldyBLZXlEb3du
VGFzayh0aGlzLCBhcmd1bWVudHMpKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6YmVnaW5EcmFn
V2l0aEZpbGVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgY3VycmVudERyYWdEYXRhLmluaXRpYWxpemUoKTsKLSAgICB2ZWN0b3I8
c3RyaW5nPiBmaWxlcyA9IGFyZ3VtZW50c1swXS50b1N0cmluZ1ZlY3RvcigpOwotICAgIFdlYlZl
Y3RvcjxXZWJTdHJpbmc+IGFic29sdXRlRmlsZW5hbWVzKGZpbGVzLnNpemUoKSk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBmaWxlcy5zaXplKCk7ICsraSkgewotICAgICAgICBXZWJEcmFn
RGF0YTo6SXRlbSBpdGVtOwotICAgICAgICBpdGVtLnN0b3JhZ2VUeXBlID0gV2ViRHJhZ0RhdGE6
Okl0ZW06OlN0b3JhZ2VUeXBlRmlsZW5hbWU7Ci0gICAgICAgIGl0ZW0uZmlsZW5hbWVEYXRhID0g
bV9kZWxlZ2F0ZS0+Z2V0QWJzb2x1dGVXZWJTdHJpbmdGcm9tVVRGOFBhdGgoZmlsZXNbaV0pOwot
ICAgICAgICBjdXJyZW50RHJhZ0RhdGEuYWRkSXRlbShpdGVtKTsKLSAgICAgICAgYWJzb2x1dGVG
aWxlbmFtZXNbaV0gPSBpdGVtLmZpbGVuYW1lRGF0YTsKLSAgICB9Ci0gICAgY3VycmVudERyYWdE
YXRhLnNldEZpbGVzeXN0ZW1JZChtX2RlbGVnYXRlLT5yZWdpc3Rlcklzb2xhdGVkRmlsZVN5c3Rl
bShhYnNvbHV0ZUZpbGVuYW1lcykpOwotICAgIGN1cnJlbnREcmFnRWZmZWN0c0FsbG93ZWQgPSBX
ZWJLaXQ6OldlYkRyYWdPcGVyYXRpb25Db3B5OwotCi0gICAgLy8gUHJvdmlkZSBhIGRyYWcgc291
cmNlLgotICAgIHdlYnZpZXcoKS0+ZHJhZ1RhcmdldERyYWdFbnRlcihjdXJyZW50RHJhZ0RhdGEs
IGxhc3RNb3VzZVBvcywgbGFzdE1vdXNlUG9zLCBjdXJyZW50RHJhZ0VmZmVjdHNBbGxvd2VkLCAw
KTsKLQotICAgIC8vIGRyYWdNb2RlIHNhdmVzIGV2ZW50cyBhbmQgdGhlbiByZXBsYXlzIHRoZW0g
bGF0ZXIuIFdlIGRvbid0IG5lZWQvd2FudCB0aGF0LgotICAgIGRyYWdNb2RlLnNldChmYWxzZSk7
Ci0KLSAgICAvLyBNYWtlIHRoZSByZXN0IG9mIGV2ZW50U2VuZGVyIHRoaW5rIGEgZHJhZyBpcyBp
biBwcm9ncmVzcy4KLSAgICBwcmVzc2VkQnV0dG9uID0gV2ViTW91c2VFdmVudDo6QnV0dG9uTGVm
dDsKLQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjphZGRU
b3VjaFBvaW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBXZWJUb3VjaFBvaW50IHRv
dWNoUG9pbnQ7Ci0gICAgdG91Y2hQb2ludC5zdGF0ZSA9IFdlYlRvdWNoUG9pbnQ6OlN0YXRlUHJl
c3NlZDsKLSAgICB0b3VjaFBvaW50LnBvc2l0aW9uID0gV2ViUG9pbnQoYXJndW1lbnRzWzBdLnRv
SW50MzIoKSwgYXJndW1lbnRzWzFdLnRvSW50MzIoKSk7Ci0gICAgdG91Y2hQb2ludC5zY3JlZW5Q
b3NpdGlvbiA9IHRvdWNoUG9pbnQucG9zaXRpb247Ci0KLSAgICBpbnQgbG93ZXN0SWQgPSAwOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG91Y2hQb2ludHMuc2l6ZSgpOyBpKyspIHsKLSAg
ICAgICAgaWYgKHRvdWNoUG9pbnRzW2ldLmlkID09IGxvd2VzdElkKQotICAgICAgICAgICAgbG93
ZXN0SWQrKzsKLSAgICB9Ci0gICAgdG91Y2hQb2ludC5pZCA9IGxvd2VzdElkOwotICAgIHRvdWNo
UG9pbnRzLnB1c2hfYmFjayh0b3VjaFBvaW50KTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6Y2xl
YXJUb3VjaFBvaW50cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgdG91Y2hQb2ludHMuY2xlYXIoKTsKLX0K
LQotdm9pZCBFdmVudFNlbmRlcjo6cmVsZWFzZVRvdWNoUG9pbnQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGluZGV4ID0gYXJndW1lbnRzWzBdLnRvSW50MzIo
KTsKLSAgICBXRUJLSVRfQVNTRVJUKGluZGV4IDwgdG91Y2hQb2ludHMuc2l6ZSgpKTsKLQotICAg
IFdlYlRvdWNoUG9pbnQqIHRvdWNoUG9pbnQgPSAmdG91Y2hQb2ludHNbaW5kZXhdOwotICAgIHRv
dWNoUG9pbnQtPnN0YXRlID0gV2ViVG91Y2hQb2ludDo6U3RhdGVSZWxlYXNlZDsKLX0KLQotdm9p
ZCBFdmVudFNlbmRlcjo6c2V0VG91Y2hNb2RpZmllcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwot
Ci0gICAgaW50IG1hc2sgPSAwOwotICAgIGNvbnN0IHN0cmluZyBrZXlOYW1lID0gYXJndW1lbnRz
WzBdLnRvU3RyaW5nKCk7Ci0gICAgaWYgKGtleU5hbWUgPT0gInNoaWZ0IikKLSAgICAgICAgbWFz
ayA9IFdlYklucHV0RXZlbnQ6OlNoaWZ0S2V5OwotICAgIGVsc2UgaWYgKGtleU5hbWUgPT0gImFs
dCIpCi0gICAgICAgIG1hc2sgPSBXZWJJbnB1dEV2ZW50OjpBbHRLZXk7Ci0gICAgZWxzZSBpZiAo
a2V5TmFtZSA9PSAiY3RybCIpCi0gICAgICAgIG1hc2sgPSBXZWJJbnB1dEV2ZW50OjpDb250cm9s
S2V5OwotICAgIGVsc2UgaWYgKGtleU5hbWUgPT0gIm1ldGEiKQotICAgICAgICBtYXNrID0gV2Vi
SW5wdXRFdmVudDo6TWV0YUtleTsKLQotICAgIGlmIChhcmd1bWVudHNbMV0udG9Cb29sZWFuKCkp
Ci0gICAgICAgIHRvdWNoTW9kaWZpZXJzIHw9IG1hc2s7Ci0gICAgZWxzZQotICAgICAgICB0b3Vj
aE1vZGlmaWVycyAmPSB+bWFzazsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6dXBkYXRlVG91Y2hQ
b2ludChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotCi0gICAgY29uc3QgdW5zaWduZWQgaW5kZXgg
PSBhcmd1bWVudHNbMF0udG9JbnQzMigpOwotICAgIFdFQktJVF9BU1NFUlQoaW5kZXggPCB0b3Vj
aFBvaW50cy5zaXplKCkpOwotCi0gICAgV2ViUG9pbnQgcG9zaXRpb24oYXJndW1lbnRzWzFdLnRv
SW50MzIoKSwgYXJndW1lbnRzWzJdLnRvSW50MzIoKSk7Ci0gICAgV2ViVG91Y2hQb2ludCogdG91
Y2hQb2ludCA9ICZ0b3VjaFBvaW50c1tpbmRleF07Ci0gICAgdG91Y2hQb2ludC0+c3RhdGUgPSBX
ZWJUb3VjaFBvaW50OjpTdGF0ZU1vdmVkOwotICAgIHRvdWNoUG9pbnQtPnBvc2l0aW9uID0gcG9z
aXRpb247Ci0gICAgdG91Y2hQb2ludC0+c2NyZWVuUG9zaXRpb24gPSBwb3NpdGlvbjsKLX0KLQot
dm9pZCBFdmVudFNlbmRlcjo6Y2FuY2VsVG91Y2hQb2ludChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwotCi0gICAgY29uc3QgdW5zaWduZWQgaW5kZXggPSBhcmd1bWVudHNbMF0udG9JbnQzMigpOwot
ICAgIFdFQktJVF9BU1NFUlQoaW5kZXggPCB0b3VjaFBvaW50cy5zaXplKCkpOwotCi0gICAgV2Vi
VG91Y2hQb2ludCogdG91Y2hQb2ludCA9ICZ0b3VjaFBvaW50c1tpbmRleF07Ci0gICAgdG91Y2hQ
b2ludC0+c3RhdGUgPSBXZWJUb3VjaFBvaW50OjpTdGF0ZUNhbmNlbGxlZDsKLX0KLQotdm9pZCBF
dmVudFNlbmRlcjo6c2VuZEN1cnJlbnRUb3VjaEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQ6OlR5
cGUgdHlwZSkKLXsKLSAgICBXRUJLSVRfQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihXZWJU
b3VjaEV2ZW50Ojp0b3VjaGVzTGVuZ3RoQ2FwKSA+IHRvdWNoUG9pbnRzLnNpemUoKSk7Ci0gICAg
d2VidmlldygpLT5sYXlvdXQoKTsKLQotICAgIFdlYlRvdWNoRXZlbnQgdG91Y2hFdmVudDsKLSAg
ICB0b3VjaEV2ZW50LnR5cGUgPSB0eXBlOwotICAgIHRvdWNoRXZlbnQubW9kaWZpZXJzID0gdG91
Y2hNb2RpZmllcnM7Ci0gICAgdG91Y2hFdmVudC50aW1lU3RhbXBTZWNvbmRzID0gZ2V0Q3VycmVu
dEV2ZW50VGltZVNlYyhtX2RlbGVnYXRlKTsKLSAgICB0b3VjaEV2ZW50LnRvdWNoZXNMZW5ndGgg
PSB0b3VjaFBvaW50cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdWNo
UG9pbnRzLnNpemUoKTsgKytpKQotICAgICAgICB0b3VjaEV2ZW50LnRvdWNoZXNbaV0gPSB0b3Vj
aFBvaW50c1tpXTsKLSAgICB3ZWJ2aWV3KCktPmhhbmRsZUlucHV0RXZlbnQodG91Y2hFdmVudCk7
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG91Y2hQb2ludHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgV2ViVG91Y2hQb2ludCogdG91Y2hQb2ludCA9ICZ0b3VjaFBvaW50c1tpXTsK
LSAgICAgICAgaWYgKHRvdWNoUG9pbnQtPnN0YXRlID09IFdlYlRvdWNoUG9pbnQ6OlN0YXRlUmVs
ZWFzZWQpIHsKLSAgICAgICAgICAgIHRvdWNoUG9pbnRzLmVyYXNlKHRvdWNoUG9pbnRzLmJlZ2lu
KCkgKyBpKTsKLSAgICAgICAgICAgIC0taTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0
b3VjaFBvaW50LT5zdGF0ZSA9IFdlYlRvdWNoUG9pbnQ6OlN0YXRlU3RhdGlvbmFyeTsKLSAgICB9
Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6Om1vdXNlRHJhZ0JlZ2luKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgV2ViTW91c2VXaGVl
bEV2ZW50IGV2ZW50OwotICAgIGluaXRNb3VzZUV2ZW50KFdlYklucHV0RXZlbnQ6Ok1vdXNlV2hl
ZWwsIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbk5vbmUsIGxhc3RNb3VzZVBvcywgJmV2ZW50LCBnZXRD
dXJyZW50RXZlbnRUaW1lU2VjKG1fZGVsZWdhdGUpKTsKLSAgICBldmVudC5waGFzZSA9IFdlYk1v
dXNlV2hlZWxFdmVudDo6UGhhc2VCZWdhbjsKLSAgICBldmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5n
RGVsdGFzID0gdHJ1ZTsKLSAgICB3ZWJ2aWV3KCktPmhhbmRsZUlucHV0RXZlbnQoZXZlbnQpOwot
fQotCi12b2lkIEV2ZW50U2VuZGVyOjpoYW5kbGVNb3VzZVdoZWVsKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQsIGJvb2wgY29udGludW91cykKLXsK
LSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8
fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGb3JjZSBhIGxheW91dCBoZXJlIGp1c3QgdG8gbWFr
ZSBzdXJlIGV2ZXJ5IHBvc2l0aW9uIGhhcyBiZWVuCi0gICAgLy8gZGV0ZXJtaW5lZCBiZWZvcmUg
d2Ugc2VuZCBldmVudHMgKGFzIHdlbGwgYXMgYWxsIHRoZSBvdGhlciBtZXRob2RzCi0gICAgLy8g
dGhhdCBzZW5kIGFuIGV2ZW50IGRvKS4KLSAgICB3ZWJ2aWV3KCktPmxheW91dCgpOwotCi0gICAg
aW50IGhvcml6b250YWwgPSBhcmd1bWVudHNbMF0udG9JbnQzMigpOwotICAgIGludCB2ZXJ0aWNh
bCA9IGFyZ3VtZW50c1sxXS50b0ludDMyKCk7Ci0gICAgaW50IHBhZ2VkID0gZmFsc2U7Ci0gICAg
aW50IGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMgPSBmYWxzZTsKLQotICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpID4gMiAmJiBhcmd1bWVudHNbMl0uaXNCb29sKCkpCi0gICAgICAgIHBhZ2VkID0g
YXJndW1lbnRzWzJdLnRvQm9vbGVhbigpOwotCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAz
ICYmIGFyZ3VtZW50c1szXS5pc0Jvb2woKSkKLSAgICAgICAgaGFzUHJlY2lzZVNjcm9sbGluZ0Rl
bHRhcyA9IGFyZ3VtZW50c1szXS50b0Jvb2xlYW4oKTsKLQotICAgIFdlYk1vdXNlV2hlZWxFdmVu
dCBldmVudDsKLSAgICBpbml0TW91c2VFdmVudChXZWJJbnB1dEV2ZW50OjpNb3VzZVdoZWVsLCBw
cmVzc2VkQnV0dG9uLCBsYXN0TW91c2VQb3MsICZldmVudCwgZ2V0Q3VycmVudEV2ZW50VGltZVNl
YyhtX2RlbGVnYXRlKSk7Ci0gICAgZXZlbnQud2hlZWxUaWNrc1ggPSBzdGF0aWNfY2FzdDxmbG9h
dD4oaG9yaXpvbnRhbCk7Ci0gICAgZXZlbnQud2hlZWxUaWNrc1kgPSBzdGF0aWNfY2FzdDxmbG9h
dD4odmVydGljYWwpOwotICAgIGV2ZW50LmRlbHRhWCA9IGV2ZW50LndoZWVsVGlja3NYOwotICAg
IGV2ZW50LmRlbHRhWSA9IGV2ZW50LndoZWVsVGlja3NZOwotICAgIGV2ZW50LnNjcm9sbEJ5UGFn
ZSA9IHBhZ2VkOwotICAgIGV2ZW50Lmhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMgPSBoYXNQcmVj
aXNlU2Nyb2xsaW5nRGVsdGFzOwotCi0gICAgaWYgKGNvbnRpbnVvdXMpIHsKLSAgICAgICAgZXZl
bnQud2hlZWxUaWNrc1ggLz0gc2Nyb2xsYmFyUGl4ZWxzUGVyVGljazsKLSAgICAgICAgZXZlbnQu
d2hlZWxUaWNrc1kgLz0gc2Nyb2xsYmFyUGl4ZWxzUGVyVGljazsKLSAgICB9IGVsc2UgewotICAg
ICAgICBldmVudC5kZWx0YVggKj0gc2Nyb2xsYmFyUGl4ZWxzUGVyVGljazsKLSAgICAgICAgZXZl
bnQuZGVsdGFZICo9IHNjcm9sbGJhclBpeGVsc1BlclRpY2s7Ci0gICAgfQotICAgIHdlYnZpZXco
KS0+aGFuZGxlSW5wdXRFdmVudChldmVudCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OnRvdWNo
RW5kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLSAgICBzZW5kQ3VycmVudFRvdWNoRXZlbnQoV2ViSW5wdXRFdmVu
dDo6VG91Y2hFbmQpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjp0b3VjaE1vdmUoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwotICAgIHNlbmRDdXJyZW50VG91Y2hFdmVudChXZWJJbnB1dEV2ZW50OjpUb3VjaE1vdmUp
OwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjp0b3VjaFN0YXJ0KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBz
ZW5kQ3VycmVudFRvdWNoRXZlbnQoV2ViSW5wdXRFdmVudDo6VG91Y2hTdGFydCk7Ci19Ci0KLXZv
aWQgRXZlbnRTZW5kZXI6OnRvdWNoQ2FuY2VsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBzZW5kQ3VycmVu
dFRvdWNoRXZlbnQoV2ViSW5wdXRFdmVudDo6VG91Y2hDYW5jZWwpOwotfQotCi12b2lkIEV2ZW50
U2VuZGVyOjpnZXN0dXJlU2Nyb2xsQmVnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBn
ZXN0dXJlRXZlbnQoV2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9sbEJlZ2luLCBhcmd1bWVudHMp
OwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjpnZXN0dXJlU2Nyb2xsRW5kKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci0gICAgZ2VzdHVyZUV2ZW50KFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxF
bmQsIGFyZ3VtZW50cyk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6Omdlc3R1cmVTY3JvbGxVcGRh
dGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBnZXN0dXJlRXZlbnQoV2ViSW5wdXRFdmVu
dDo6R2VzdHVyZVNjcm9sbFVwZGF0ZSwgYXJndW1lbnRzKTsKLX0KLQotdm9pZCBFdmVudFNlbmRl
cjo6Z2VzdHVyZVNjcm9sbFVwZGF0ZVdpdGhvdXRQcm9wYWdhdGlvbihjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwotICAgIGdlc3R1cmVFdmVudChXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsVXBk
YXRlV2l0aG91dFByb3BhZ2F0aW9uLCBhcmd1bWVudHMpOwotfQotCi12b2lkIEV2ZW50U2VuZGVy
OjpnZXN0dXJlVGFwKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgZ2VzdHVyZUV2ZW50KFdl
YklucHV0RXZlbnQ6Okdlc3R1cmVUYXAsIGFyZ3VtZW50cyk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5k
ZXI6Omdlc3R1cmVUYXBEb3duKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgZ2VzdHVyZUV2
ZW50KFdlYklucHV0RXZlbnQ6Okdlc3R1cmVUYXBEb3duLCBhcmd1bWVudHMpOwotfQotCi12b2lk
IEV2ZW50U2VuZGVyOjpnZXN0dXJlVGFwQ2FuY2VsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0g
ICAgZ2VzdHVyZUV2ZW50KFdlYklucHV0RXZlbnQ6Okdlc3R1cmVUYXBDYW5jZWwsIGFyZ3VtZW50
cyk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6Omdlc3R1cmVMb25nUHJlc3MoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQt
PnNldE51bGwoKTsKLSAgICBnZXN0dXJlRXZlbnQoV2ViSW5wdXRFdmVudDo6R2VzdHVyZUxvbmdQ
cmVzcywgYXJndW1lbnRzKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6Z2VzdHVyZUxvbmdUYXAo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBnZXN0dXJlRXZlbnQoV2ViSW5wdXRFdmVudDo6
R2VzdHVyZUxvbmdUYXAsIGFyZ3VtZW50cyk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6Omdlc3R1
cmVUd29GaW5nZXJUYXAoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBnZXN0dXJlRXZlbnQo
V2ViSW5wdXRFdmVudDo6R2VzdHVyZVR3b0ZpbmdlclRhcCwgYXJndW1lbnRzKTsKLX0KLQotdm9p
ZCBFdmVudFNlbmRlcjo6Z2VzdHVyZVNjcm9sbEZpcnN0UG9pbnQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDIgfHwgIWFyZ3VtZW50c1swXS5pc051
bWJlcigpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgV2ViUG9pbnQgcG9pbnQoYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgYXJndW1lbnRzWzFdLnRv
SW50MzIoKSk7Ci0gICAgbV9jdXJyZW50R2VzdHVyZUxvY2F0aW9uID0gcG9pbnQ7Ci19Ci0KLXZv
aWQgRXZlbnRTZW5kZXI6Omdlc3R1cmVFdmVudChXZWJJbnB1dEV2ZW50OjpUeXBlIHR5cGUsIGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzKQotewotICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpIDwgMiB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051
bWJlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJQb2ludCBwb2ludChhcmd1bWVudHNb
MF0udG9JbnQzMigpLCBhcmd1bWVudHNbMV0udG9JbnQzMigpKTsKLQotICAgIFdlYkdlc3R1cmVF
dmVudCBldmVudDsKLSAgICBldmVudC50eXBlID0gdHlwZTsKLQotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9sbFVwZGF0ZToKLSAgICBjYXNl
IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRhdGVXaXRob3V0UHJvcGFnYXRpb246Ci0g
ICAgICAgIGV2ZW50LmRhdGEuc2Nyb2xsVXBkYXRlLmRlbHRhWCA9IHN0YXRpY19jYXN0PGZsb2F0
Pihhcmd1bWVudHNbMF0udG9Eb3VibGUoKSk7Ci0gICAgICAgIGV2ZW50LmRhdGEuc2Nyb2xsVXBk
YXRlLmRlbHRhWSA9IHN0YXRpY19jYXN0PGZsb2F0Pihhcmd1bWVudHNbMV0udG9Eb3VibGUoKSk7
Ci0gICAgICAgIGV2ZW50LnggPSBtX2N1cnJlbnRHZXN0dXJlTG9jYXRpb24ueDsKLSAgICAgICAg
ZXZlbnQueSA9IG1fY3VycmVudEdlc3R1cmVMb2NhdGlvbi55OwotICAgICAgICBtX2N1cnJlbnRH
ZXN0dXJlTG9jYXRpb24ueCA9IG1fY3VycmVudEdlc3R1cmVMb2NhdGlvbi54ICsgZXZlbnQuZGF0
YS5zY3JvbGxVcGRhdGUuZGVsdGFYOwotICAgICAgICBtX2N1cnJlbnRHZXN0dXJlTG9jYXRpb24u
eSA9IG1fY3VycmVudEdlc3R1cmVMb2NhdGlvbi55ICsgZXZlbnQuZGF0YS5zY3JvbGxVcGRhdGUu
ZGVsdGFZOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVy
ZVNjcm9sbEJlZ2luOgotICAgICAgICBtX2N1cnJlbnRHZXN0dXJlTG9jYXRpb24gPSBXZWJQb2lu
dChwb2ludC54LCBwb2ludC55KTsKLSAgICAgICAgZXZlbnQueCA9IG1fY3VycmVudEdlc3R1cmVM
b2NhdGlvbi54OwotICAgICAgICBldmVudC55ID0gbV9jdXJyZW50R2VzdHVyZUxvY2F0aW9uLnk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9sbEVu
ZDoKLSAgICAgICAgZXZlbnQueCA9IG1fY3VycmVudEdlc3R1cmVMb2NhdGlvbi54OwotICAgICAg
ICBldmVudC55ID0gbV9jdXJyZW50R2VzdHVyZUxvY2F0aW9uLnk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVRhcDoKLSAgICAgICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPj0gMykKLSAgICAgICAgICAgIGV2ZW50LmRhdGEudGFwLnRhcENvdW50ID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGFyZ3VtZW50c1syXS50b0RvdWJsZSgpKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgIGV2ZW50LmRhdGEudGFwLnRhcENvdW50ID0gMTsKLSAgICAgICAgZXZlbnQueCA9
IHBvaW50Lng7Ci0gICAgICAgIGV2ZW50LnkgPSBwb2ludC55OwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVUYXBEb3duOgotICAgICAgICBldmVudC54ID0g
cG9pbnQueDsKLSAgICAgICAgZXZlbnQueSA9IHBvaW50Lnk7Ci0gICAgICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpID49IDQpIHsKLSAgICAgICAgICAgIGV2ZW50LmRhdGEudGFwRG93bi53aWR0aCA9
IHN0YXRpY19jYXN0PGZsb2F0Pihhcmd1bWVudHNbMl0udG9Eb3VibGUoKSk7Ci0gICAgICAgICAg
ICBldmVudC5kYXRhLnRhcERvd24uaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFyZ3VtZW50
c1szXS50b0RvdWJsZSgpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdl
YklucHV0RXZlbnQ6Okdlc3R1cmVUYXBDYW5jZWw6Ci0gICAgICAgIGV2ZW50LnggPSBwb2ludC54
OwotICAgICAgICBldmVudC55ID0gcG9pbnQueTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBX
ZWJJbnB1dEV2ZW50OjpHZXN0dXJlTG9uZ1ByZXNzOgotICAgICAgICBldmVudC54ID0gcG9pbnQu
eDsKLSAgICAgICAgZXZlbnQueSA9IHBvaW50Lnk7Ci0gICAgICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpID49IDQpIHsKLSAgICAgICAgICAgIGV2ZW50LmRhdGEubG9uZ1ByZXNzLndpZHRoID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGFyZ3VtZW50c1syXS50b0RvdWJsZSgpKTsKLSAgICAgICAgICAgIGV2
ZW50LmRhdGEubG9uZ1ByZXNzLmhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0Pihhcmd1bWVudHNb
M10udG9Eb3VibGUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJJ
bnB1dEV2ZW50OjpHZXN0dXJlTG9uZ1RhcDoKLSAgICAgICAgZXZlbnQueCA9IHBvaW50Lng7Ci0g
ICAgICAgIGV2ZW50LnkgPSBwb2ludC55OwotICAgICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+
PSA0KSB7Ci0gICAgICAgICAgICBldmVudC5kYXRhLmxvbmdQcmVzcy53aWR0aCA9IHN0YXRpY19j
YXN0PGZsb2F0Pihhcmd1bWVudHNbMl0udG9Eb3VibGUoKSk7Ci0gICAgICAgICAgICBldmVudC5k
YXRhLmxvbmdQcmVzcy5oZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXJndW1lbnRzWzNdLnRv
RG91YmxlKCkpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViSW5wdXRF
dmVudDo6R2VzdHVyZVR3b0ZpbmdlclRhcDoKLSAgICAgICAgZXZlbnQueCA9IHBvaW50Lng7Ci0g
ICAgICAgIGV2ZW50LnkgPSBwb2ludC55OwotICAgICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+
PSA0KSB7Ci0gICAgICAgICAgICBldmVudC5kYXRhLnR3b0ZpbmdlclRhcC5maXJzdEZpbmdlcldp
ZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFyZ3VtZW50c1syXS50b0RvdWJsZSgpKTsKLSAgICAg
ICAgICAgIGV2ZW50LmRhdGEudHdvRmluZ2VyVGFwLmZpcnN0RmluZ2VySGVpZ2h0ID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGFyZ3VtZW50c1szXS50b0RvdWJsZSgpKTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgfQotCi0gICAgZXZlbnQuZ2xvYmFsWCA9IGV2ZW50Lng7Ci0gICAgZXZlbnQuZ2xv
YmFsWSA9IGV2ZW50Lnk7Ci0gICAgZXZlbnQudGltZVN0YW1wU2Vjb25kcyA9IGdldEN1cnJlbnRF
dmVudFRpbWVTZWMobV9kZWxlZ2F0ZSk7Ci0gICAgd2VidmlldygpLT5oYW5kbGVJbnB1dEV2ZW50
KGV2ZW50KTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6Z2VzdHVyZUZsaW5nQ2FuY2VsKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKCFhcmd1bWVudHMuc2l6ZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBXZWJHZXN0dXJlRXZlbnQgZXZlbnQ7Ci0gICAgZXZlbnQudHlwZSA9IFdl
YklucHV0RXZlbnQ6Okdlc3R1cmVGbGluZ0NhbmNlbDsKLSAgICBldmVudC50aW1lU3RhbXBTZWNv
bmRzID0gZ2V0Q3VycmVudEV2ZW50VGltZVNlYyhtX2RlbGVnYXRlKTsKLSAgICB3ZWJ2aWV3KCkt
PmhhbmRsZUlucHV0RXZlbnQoZXZlbnQpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjpnZXN0dXJl
RmxpbmdTdGFydChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpIDwgNCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBp
KyspCi0gICAgICAgIGlmICghYXJndW1lbnRzW2ldLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICBXZWJHZXN0dXJlRXZlbnQgZXZlbnQ7Ci0gICAgZXZlbnQudHlwZSA9IFdl
YklucHV0RXZlbnQ6Okdlc3R1cmVGbGluZ1N0YXJ0OwotCi0gICAgZXZlbnQueCA9IHN0YXRpY19j
YXN0PGZsb2F0Pihhcmd1bWVudHNbMF0udG9Eb3VibGUoKSk7Ci0gICAgZXZlbnQueSA9IHN0YXRp
Y19jYXN0PGZsb2F0Pihhcmd1bWVudHNbMV0udG9Eb3VibGUoKSk7Ci0gICAgZXZlbnQuZ2xvYmFs
WCA9IGV2ZW50Lng7Ci0gICAgZXZlbnQuZ2xvYmFsWSA9IGV2ZW50Lnk7Ci0KLSAgICBldmVudC5k
YXRhLmZsaW5nU3RhcnQudmVsb2NpdHlYID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFyZ3VtZW50c1sy
XS50b0RvdWJsZSgpKTsKLSAgICBldmVudC5kYXRhLmZsaW5nU3RhcnQudmVsb2NpdHlZID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGFyZ3VtZW50c1szXS50b0RvdWJsZSgpKTsKLSAgICBldmVudC50aW1l
U3RhbXBTZWNvbmRzID0gZ2V0Q3VycmVudEV2ZW50VGltZVNlYyhtX2RlbGVnYXRlKTsKLSAgICB3
ZWJ2aWV3KCktPmhhbmRsZUlucHV0RXZlbnQoZXZlbnQpOwotfQotCi0vLwotLy8gVW5pbXBsZW1l
bnRlZCBzdHVicwotLy8KLQotdm9pZCBFdmVudFNlbmRlcjo6ZW5hYmxlRE9NVUlFdmVudExvZ2dp
bmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjpmaXJlS2V5Ym9hcmRFdmVu
dHNUb0VsZW1lbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjpjbGVhcktp
bGxSaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvRXZlbnRTZW5kZXIuaCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0V2ZW50U2VuZGVyLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliMzZiNWZjMzFhYTM5ZDdiZTc3ZmVjNzY3MGQ5MjEyNDNl
OTNmMzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvRXZlbnRTZW5kZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDIwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAgRXZlbnRTZW5kZXIgY2xhc3M6Ci0g
IEJvdW5kIHRvIGEgSmF2YVNjcmlwdCB3aW5kb3cuZXZlbnRTZW5kZXIgb2JqZWN0IHVzaW5nCi0g
IENwcEJvdW5kQ2xhc3M6OmJpbmRUb0phdmFzY3JpcHQoKSwgdGhpcyBhbGxvd3MgbGF5b3V0IHRl
c3RzIHRvIGZpcmUgRE9NIGV2ZW50cy4KLSovCi0KLSNpZm5kZWYgRXZlbnRTZW5kZXJfaAotI2Rl
ZmluZSBFdmVudFNlbmRlcl9oCi0KLSNpbmNsdWRlICJDcHBCb3VuZENsYXNzLmgiCi0jaW5jbHVk
ZSAiV2ViRHJhZ09wZXJhdGlvbi5oIgotI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIKLSNpbmNs
dWRlICJXZWJUYXNrLmgiCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHB1YmxpYy9XZWJQ
b2ludC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYkRyYWdEYXRhOwotY2xhc3Mg
V2ViVmlldzsKLXN0cnVjdCBXZWJDb250ZXh0TWVudURhdGE7Ci19Ci0KLW5hbWVzcGFjZSBXZWJU
ZXN0UnVubmVyIHsKLQotY2xhc3MgV2ViVGVzdERlbGVnYXRlOwotCi1jbGFzcyBFdmVudFNlbmRl
ciA6IHB1YmxpYyBDcHBCb3VuZENsYXNzIHsKLXB1YmxpYzoKLSAgICBFdmVudFNlbmRlcigpOwot
ICAgIH5FdmVudFNlbmRlcigpOwotCi0gICAgdm9pZCBzZXREZWxlZ2F0ZShXZWJUZXN0RGVsZWdh
dGUqIGRlbGVnYXRlKSB7IG1fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsgfQotICAgIHZvaWQgc2V0V2Vi
VmlldyhXZWJLaXQ6OldlYlZpZXcqIHdlYlZpZXcpIHsgbV93ZWJWaWV3ID0gd2ViVmlldzsgfQot
Ci0gICAgdm9pZCBzZXRDb250ZXh0TWVudURhdGEoY29uc3QgV2ViS2l0OjpXZWJDb250ZXh0TWVu
dURhdGEmKTsKLQotICAgIC8vIFJlc2V0cyBzb21lIHN0YXRpYyB2YXJpYWJsZSBzdGF0ZS4KLSAg
ICB2b2lkIHJlc2V0KCk7Ci0KLSAgICAvLyBTaW11bGF0ZSBkcmFnJmRyb3Agc3lzdGVtIGNhbGwu
Ci0gICAgdm9pZCBkb0RyYWdEcm9wKGNvbnN0IFdlYktpdDo6V2ViRHJhZ0RhdGEmLCBXZWJLaXQ6
OldlYkRyYWdPcGVyYXRpb25zTWFzayk7Ci0KLSAgICAvLyBUZXN0IGhlbHBlciBmb3IgZHJhZ2dp
bmcgb3V0IGltYWdlcy4KLSAgICB2b2lkIGR1bXBGaWxlbmFtZUJlaW5nRHJhZ2dlZChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBKUyBjYWxsYmFjayBtZXRo
b2RzLgotICAgIHZvaWQgY29udGV4dENsaWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIG1vdXNlRG93bihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7Ci0gICAgdm9pZCBtb3VzZVVwKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIG1vdXNlTW92ZVRvKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIGxlYXBGb3J3YXJkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGtleURvd24oY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICAvLyBGSVhNRTogVGhlc2UgYXJlbid0IHJlYWxseSBl
dmVudHMuIFRoZXkgc2hvdWxkIGJlIG1vdmVkIHRvIGxheW91dCBjb250cm9sbGVyLgotICAgIHZv
aWQgdGV4dFpvb21Jbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAg
dm9pZCB0ZXh0Wm9vbU91dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0g
ICAgdm9pZCB6b29tUGFnZUluKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LSAgICB2b2lkIHpvb21QYWdlT3V0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKLSAgICB2b2lkIHNjYWxlUGFnZUJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLQotICAgIHZvaWQgbW91c2VEcmFnQmVnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotICAgIHZvaWQgbW91c2VTY3JvbGxCeShjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBjb250aW51b3VzTW91c2VTY3JvbGxCeShjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzY2hlZHVsZUFzeW5j
aHJvbm91c0NsaWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2
b2lkIHNjaGVkdWxlQXN5bmNocm9ub3VzS2V5RG93bihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCBiZWdpbkRyYWdXaXRoRmlsZXMoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIENwcFZhcmlhbnQgZHJhZ01vZGU7Ci0KLSAgICB2
b2lkIGFkZFRvdWNoUG9pbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgY2FuY2VsVG91Y2hQb2ludChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Ci0gICAgdm9pZCBjbGVhclRvdWNoUG9pbnRzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHJlbGVhc2VUb3VjaFBvaW50KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldFRvdWNoTW9kaWZpZXIoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgdG91Y2hDYW5jZWwoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgdG91Y2hFbmQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgdG91Y2hNb3ZlKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHRvdWNoU3RhcnQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgdXBkYXRlVG91
Y2hQb2ludChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lk
IGdlc3R1cmVGbGluZ0NhbmNlbChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0gICAgdm9pZCBnZXN0dXJlRmxpbmdTdGFydChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7Ci0gICAgdm9pZCBnZXN0dXJlU2Nyb2xsQmVnaW4oY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZ2VzdHVyZVNjcm9sbEVuZChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBnZXN0dXJlU2Nyb2xsRmlyc3RQ
b2ludChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBnZXN0
dXJlU2Nyb2xsVXBkYXRlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIGdlc3R1cmVTY3JvbGxVcGRhdGVXaXRob3V0UHJvcGFnYXRpb24oY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZ2VzdHVyZVRhcChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBnZXN0dXJlVGFwRG93bihjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBnZXN0dXJlVGFwQ2Fu
Y2VsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGdlc3R1
cmVMb25nUHJlc3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZv
aWQgZ2VzdHVyZUxvbmdUYXAoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgZ2VzdHVyZVR3b0ZpbmdlclRhcChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7Ci0gICAgdm9pZCBnZXN0dXJlRXZlbnQoV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpU
eXBlLCBjb25zdCBDcHBBcmd1bWVudExpc3QmKTsKLQotICAgIC8vIFVuaW1wbGVtZW50ZWQgc3R1
YnMKLSAgICB2b2lkIGVuYWJsZURPTVVJRXZlbnRMb2dnaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGZpcmVLZXlib2FyZEV2ZW50c1RvRWxlbWVudChj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBjbGVhcktpbGxS
aW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFByb3Bl
cnRpZXMgdXNlZCBpbiBsYXlvdXQgdGVzdHMuCi0jaWYgZGVmaW5lZChPU19XSU4pCi0gICAgQ3Bw
VmFyaWFudCB3bUtleURvd247Ci0gICAgQ3BwVmFyaWFudCB3bUtleVVwOwotICAgIENwcFZhcmlh
bnQgd21DaGFyOwotICAgIENwcFZhcmlhbnQgd21EZWFkQ2hhcjsKLSAgICBDcHBWYXJpYW50IHdt
U3lzS2V5RG93bjsKLSAgICBDcHBWYXJpYW50IHdtU3lzS2V5VXA7Ci0gICAgQ3BwVmFyaWFudCB3
bVN5c0NoYXI7Ci0gICAgQ3BwVmFyaWFudCB3bVN5c0RlYWRDaGFyOwotI2VuZGlmCi0KLSAgICBX
ZWJUYXNrTGlzdCogdGFza0xpc3QoKSB7IHJldHVybiAmbV90YXNrTGlzdDsgfQotCi1wcml2YXRl
OgotICAgIFdlYktpdDo6V2ViVmlldyogd2VidmlldygpIHsgcmV0dXJuIG1fd2ViVmlldzsgfQot
Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIGRyYWdNb2RlIGlzIHRydWUuCi0gICAgYm9vbCBpc0Ry
YWdNb2RlKCkgeyByZXR1cm4gZHJhZ01vZGUuaXNCb29sKCkgJiYgZHJhZ01vZGUudG9Cb29sZWFu
KCk7IH0KLQotICAgIC8vIFNvbWV0aW1lcyB3ZSBxdWV1ZSB1cCBtb3VzZSBtb3ZlIGFuZCBtb3Vz
ZSB1cCBldmVudHMgZm9yIGRyYWcgZHJvcAotICAgIC8vIGhhbmRsaW5nIHB1cnBvc2VzLiBUaGVz
ZSBtZXRob2RzIGRpc3BhdGNoIHRoZSBldmVudC4KLSAgICB2b2lkIGRvTW91c2VNb3ZlKGNvbnN0
IFdlYktpdDo6V2ViTW91c2VFdmVudCYpOwotICAgIHZvaWQgZG9Nb3VzZVVwKGNvbnN0IFdlYktp
dDo6V2ViTW91c2VFdmVudCYpOwotICAgIHN0YXRpYyB2b2lkIGRvTGVhcEZvcndhcmQoaW50IG1p
bGxpc2Vjb25kcyk7Ci0gICAgdm9pZCByZXBsYXlTYXZlZEV2ZW50cygpOwotCi0gICAgLy8gSGVs
cGVyIHRvIHJldHVybiB0aGUgYnV0dG9uIHR5cGUgZ2l2ZW4gYSBidXR0b24gY29kZQotICAgIHN0
YXRpYyBXZWJLaXQ6OldlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBnZXRCdXR0b25UeXBlRnJvbUJ1dHRv
bk51bWJlcihpbnQpOwotCi0gICAgLy8gSGVscGVyIHRvIGV4dHJhY3QgdGhlIGJ1dHRvbiBudW1i
ZXIgZnJvbSB0aGUgb3B0aW9uYWwgYXJndW1lbnQgaW4KLSAgICAvLyBtb3VzZURvd24gYW5kIG1v
dXNlVXAKLSAgICBzdGF0aWMgaW50IGdldEJ1dHRvbk51bWJlckZyb21TaW5nbGVBcmcoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0Jik7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmll
ZCBrZXkgY29kZSBwYXNzZWQgaW4gbmVlZHMgYSBzaGlmdCBrZXkKLSAgICAvLyBtb2RpZmllciB0
byBiZSBwYXNzZWQgaW50byB0aGUgZ2VuZXJhdGVkIGV2ZW50LgotICAgIGJvb2wgbmVlZHNTaGlm
dE1vZGlmaWVyKGludCk7Ci0KLSAgICB2b2lkIGZpbmlzaERyYWdBbmREcm9wKGNvbnN0IFdlYktp
dDo6V2ViTW91c2VFdmVudCYsIFdlYktpdDo6V2ViRHJhZ09wZXJhdGlvbik7Ci0gICAgdm9pZCB1
cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKFdlYktpdDo6V2ViTW91c2VFdmVudDo6QnV0dG9uKTsK
LQotICAgIC8vIENvbXBvc2UgYSB0b3VjaCBldmVudCBmcm9tIHRoZSBjdXJyZW50IHRvdWNoIHBv
aW50cyBhbmQgc2VuZCBpdC4KLSAgICB2b2lkIHNlbmRDdXJyZW50VG91Y2hFdmVudChjb25zdCBX
ZWJLaXQ6OldlYklucHV0RXZlbnQ6OlR5cGUpOwotCi0gICAgLy8gSGFuZGxlIGEgcmVxdWVzdCB0
byBzZW5kIGEgd2hlZWwgZXZlbnQuCi0gICAgdm9pZCBoYW5kbGVNb3VzZVdoZWVsKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqLCBib29sIGNvbnRpbnVvdXMpOwotCi0gICAgV2Vi
VGFza0xpc3QgbV90YXNrTGlzdDsKLQotICAgIFdlYlRlc3REZWxlZ2F0ZSogbV9kZWxlZ2F0ZTsK
LSAgICBXZWJLaXQ6OldlYlZpZXcqIG1fd2ViVmlldzsKLQotICAgIHN0ZDo6YXV0b19wdHI8V2Vi
S2l0OjpXZWJDb250ZXh0TWVudURhdGE+IG1fbGFzdENvbnRleHRNZW51RGF0YTsKLQotICAgIC8v
IExvY2F0aW9uIG9mIHRoZSB0b3VjaCBwb2ludCB0aGF0IGluaXRpYXRlZCBhIGdlc3R1cmUuCi0g
ICAgV2ViS2l0OjpXZWJQb2ludCBtX2N1cnJlbnRHZXN0dXJlTG9jYXRpb247Ci0KLSAgICAvLyBM
b2NhdGlvbiBvZiBsYXN0IG1vdXNlTW92ZVRvIGV2ZW50LgotICAgIHN0YXRpYyBXZWJLaXQ6Oldl
YlBvaW50IGxhc3RNb3VzZVBvczsKLQotICAgIC8vIEN1cnJlbnRseSBwcmVzc2VkIG1vdXNlIGJ1
dHRvbiAoTGVmdC9SaWdodC9NaWRkbGUgb3IgTm9uZSkKLSAgICBzdGF0aWMgV2ViS2l0OjpXZWJN
b3VzZUV2ZW50OjpCdXR0b24gcHJlc3NlZEJ1dHRvbjsKLQotICAgIC8vIFRoZSBsYXN0IGJ1dHRv
biBudW1iZXIgcGFzc2VkIHRvIG1vdXNlRG93biBhbmQgbW91c2VVcC4KLSAgICAvLyBVc2VkIHRv
IGRldGVybWluZSB3aGV0aGVyIHRoZSBjbGljayBjb3VudCBjb250aW51ZXMgdG8KLSAgICAvLyBp
bmNyZW1lbnQgb3Igbm90LgotICAgIHN0YXRpYyBXZWJLaXQ6OldlYk1vdXNlRXZlbnQ6OkJ1dHRv
biBsYXN0QnV0dG9uVHlwZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEV2ZW50U2VuZGVyX2gKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0dh
bWVwYWRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL0dhbWVwYWRDb250cm9sbGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjY1NDQwMGVlNDNhMzM0NGQzYjg0ZjZhMjdlZjU3NWE3MTAzYzNlYS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9HYW1lcGFkQ29udHJvbGxlci5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHYW1l
cGFkQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIldlYlRlc3REZWxlZ2F0ZS5oIgotCi11c2luZyBu
YW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLUdhbWVwYWRD
b250cm9sbGVyOjpHYW1lcGFkQ29udHJvbGxlcigpCi17Ci0gICAgYmluZE1ldGhvZCgiY29ubmVj
dCIsICZHYW1lcGFkQ29udHJvbGxlcjo6Y29ubmVjdCk7Ci0gICAgYmluZE1ldGhvZCgiZGlzY29u
bmVjdCIsICZHYW1lcGFkQ29udHJvbGxlcjo6ZGlzY29ubmVjdCk7Ci0gICAgYmluZE1ldGhvZCgi
c2V0SWQiLCAmR2FtZXBhZENvbnRyb2xsZXI6OnNldElkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRC
dXR0b25Db3VudCIsICZHYW1lcGFkQ29udHJvbGxlcjo6c2V0QnV0dG9uQ291bnQpOwotICAgIGJp
bmRNZXRob2QoInNldEJ1dHRvbkRhdGEiLCAmR2FtZXBhZENvbnRyb2xsZXI6OnNldEJ1dHRvbkRh
dGEpOwotICAgIGJpbmRNZXRob2QoInNldEF4aXNDb3VudCIsICZHYW1lcGFkQ29udHJvbGxlcjo6
c2V0QXhpc0NvdW50KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRBeGlzRGF0YSIsICZHYW1lcGFkQ29u
dHJvbGxlcjo6c2V0QXhpc0RhdGEpOwotCi0gICAgYmluZEZhbGxiYWNrTWV0aG9kKCZHYW1lcGFk
Q29udHJvbGxlcjo6ZmFsbGJhY2tDYWxsYmFjayk7Ci0KLSAgICByZXNldCgpOwotfQotCi12b2lk
IEdhbWVwYWRDb250cm9sbGVyOjpiaW5kVG9KYXZhc2NyaXB0KFdlYkZyYW1lKiBmcmFtZSwgY29u
c3QgV2ViU3RyaW5nJiBjbGFzc25hbWUpCi17Ci0gICAgQ3BwQm91bmRDbGFzczo6YmluZFRvSmF2
YXNjcmlwdChmcmFtZSwgY2xhc3NuYW1lKTsKLX0KLQotdm9pZCBHYW1lcGFkQ29udHJvbGxlcjo6
c2V0RGVsZWdhdGUoV2ViVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSkKLXsKLSAgICBtX2RlbGVnYXRl
ID0gZGVsZWdhdGU7Ci19Ci0KLXZvaWQgR2FtZXBhZENvbnRyb2xsZXI6OnJlc2V0KCkKLXsKLSAg
ICBtZW1zZXQoJm1fZ2FtZXBhZHMsIDAsIHNpemVvZihtX2dhbWVwYWRzKSk7Ci19Ci0KLXZvaWQg
R2FtZXBhZENvbnRyb2xsZXI6OmNvbm5lY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkgewotICAgICAg
ICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIkludmFsaWQgYXJncyIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGludCBpbmRleCA9IGFyZ3NbMF0udG9JbnQzMigpOwotICAgIGlmIChp
bmRleCA8IDAgfHwgaW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50PihXZWJLaXQ6OldlYkdhbWVwYWRz
OjppdGVtc0xlbmd0aENhcCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2dhbWVwYWRzLml0ZW1z
W2luZGV4XS5jb25uZWN0ZWQgPSB0cnVlOwotICAgIG1fZ2FtZXBhZHMubGVuZ3RoID0gMDsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV2ViS2l0OjpXZWJHYW1lcGFkczo6aXRlbXNMZW5n
dGhDYXA7ICsraSkKLSAgICAgICAgaWYgKG1fZ2FtZXBhZHMuaXRlbXNbaV0uY29ubmVjdGVkKQot
ICAgICAgICAgICAgbV9nYW1lcGFkcy5sZW5ndGggPSBpICsgMTsKLSAgICBtX2RlbGVnYXRlLT5z
ZXRHYW1lcGFkRGF0YShtX2dhbWVwYWRzKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQot
dm9pZCBHYW1lcGFkQ29udHJvbGxlcjo6ZGlzY29ubmVjdChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3MsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJncy5zaXplKCkgPCAxKSB7
Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiSW52YWxpZCBhcmdzIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaW50IGluZGV4ID0gYXJnc1swXS50b0ludDMyKCk7Ci0g
ICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzdGF0aWNfY2FzdDxpbnQ+KFdlYktpdDo6V2Vi
R2FtZXBhZHM6Oml0ZW1zTGVuZ3RoQ2FwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fZ2FtZXBh
ZHMuaXRlbXNbaW5kZXhdLmNvbm5lY3RlZCA9IGZhbHNlOwotICAgIG1fZ2FtZXBhZHMubGVuZ3Ro
ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV2ViS2l0OjpXZWJHYW1lcGFkczo6
aXRlbXNMZW5ndGhDYXA7ICsraSkKLSAgICAgICAgaWYgKG1fZ2FtZXBhZHMuaXRlbXNbaV0uY29u
bmVjdGVkKQotICAgICAgICAgICAgbV9nYW1lcGFkcy5sZW5ndGggPSBpICsgMTsKLSAgICBtX2Rl
bGVnYXRlLT5zZXRHYW1lcGFkRGF0YShtX2dhbWVwYWRzKTsKLSAgICByZXN1bHQtPnNldE51bGwo
KTsKLX0KLQotdm9pZCBHYW1lcGFkQ29udHJvbGxlcjo6c2V0SWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwg
MikgewotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIkludmFsaWQgYXJncyIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGludCBpbmRleCA9IGFyZ3NbMF0udG9JbnQzMigp
OwotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50PihXZWJLaXQ6
OldlYkdhbWVwYWRzOjppdGVtc0xlbmd0aENhcCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzdGQ6
OnN0cmluZyBzcmMgPSBhcmdzWzFdLnRvU3RyaW5nKCk7Ci0gICAgY29uc3QgY2hhciogcCA9IHNy
Yy5jX3N0cigpOwotICAgIG1lbXNldChtX2dhbWVwYWRzLml0ZW1zW2luZGV4XS5pZCwgMCwgc2l6
ZW9mKG1fZ2FtZXBhZHMuaXRlbXNbaW5kZXhdLmlkKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgKnAgJiYgaSA8IFdlYktpdDo6V2ViR2FtZXBhZDo6aWRMZW5ndGhDYXAgLSAxOyArK2kpCi0g
ICAgICAgIG1fZ2FtZXBhZHMuaXRlbXNbaW5kZXhdLmlkW2ldID0gKnArKzsKLSAgICBtX2RlbGVn
YXRlLT5zZXRHYW1lcGFkRGF0YShtX2dhbWVwYWRzKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LX0KLQotdm9pZCBHYW1lcGFkQ29udHJvbGxlcjo6c2V0QnV0dG9uQ291bnQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3Muc2l6
ZSgpIDwgMikgewotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIkludmFsaWQgYXJn
cyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGludCBpbmRleCA9IGFyZ3NbMF0udG9J
bnQzMigpOwotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50PihX
ZWJLaXQ6OldlYkdhbWVwYWRzOjppdGVtc0xlbmd0aENhcCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpbnQgYnV0dG9ucyA9IGFyZ3NbMV0udG9JbnQzMigpOwotICAgIGlmIChidXR0b25zIDwgMCB8
fCBidXR0b25zID49IHN0YXRpY19jYXN0PGludD4oV2ViS2l0OjpXZWJHYW1lcGFkOjpidXR0b25z
TGVuZ3RoQ2FwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fZ2FtZXBhZHMuaXRlbXNbaW5kZXhd
LmJ1dHRvbnNMZW5ndGggPSBidXR0b25zOwotICAgIG1fZGVsZWdhdGUtPnNldEdhbWVwYWREYXRh
KG1fZ2FtZXBhZHMpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEdhbWVwYWRD
b250cm9sbGVyOjpzZXRCdXR0b25EYXRhKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmdzLnNpemUoKSA8IDMpIHsKLSAgICAgICAg
bV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJJbnZhbGlkIGFyZ3MiKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpbnQgaW5kZXggPSBhcmdzWzBdLnRvSW50MzIoKTsKLSAgICBpZiAoaW5k
ZXggPCAwIHx8IGluZGV4ID49IHN0YXRpY19jYXN0PGludD4oV2ViS2l0OjpXZWJHYW1lcGFkczo6
aXRlbXNMZW5ndGhDYXApKQotICAgICAgICByZXR1cm47Ci0gICAgaW50IGJ1dHRvbiA9IGFyZ3Nb
MV0udG9JbnQzMigpOwotICAgIGlmIChidXR0b24gPCAwIHx8IGJ1dHRvbiA+PSBzdGF0aWNfY2Fz
dDxpbnQ+KFdlYktpdDo6V2ViR2FtZXBhZDo6YnV0dG9uc0xlbmd0aENhcCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBkb3VibGUgZGF0YSA9IGFyZ3NbMl0udG9Eb3VibGUoKTsKLSAgICBtX2dhbWVw
YWRzLml0ZW1zW2luZGV4XS5idXR0b25zW2J1dHRvbl0gPSBkYXRhOwotICAgIG1fZGVsZWdhdGUt
PnNldEdhbWVwYWREYXRhKG1fZ2FtZXBhZHMpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci12b2lkIEdhbWVwYWRDb250cm9sbGVyOjpzZXRBeGlzQ291bnQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwg
MikgewotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIkludmFsaWQgYXJncyIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGludCBpbmRleCA9IGFyZ3NbMF0udG9JbnQzMigp
OwotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50PihXZWJLaXQ6
OldlYkdhbWVwYWRzOjppdGVtc0xlbmd0aENhcCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnQg
YXhlcyA9IGFyZ3NbMV0udG9JbnQzMigpOwotICAgIGlmIChheGVzIDwgMCB8fCBheGVzID49IHN0
YXRpY19jYXN0PGludD4oV2ViS2l0OjpXZWJHYW1lcGFkOjpheGVzTGVuZ3RoQ2FwKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fZ2FtZXBhZHMuaXRlbXNbaW5kZXhdLmF4ZXNMZW5ndGggPSBheGVz
OwotICAgIG1fZGVsZWdhdGUtPnNldEdhbWVwYWREYXRhKG1fZ2FtZXBhZHMpOwotICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEdhbWVwYWRDb250cm9sbGVyOjpzZXRBeGlzRGF0YShj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBp
ZiAoYXJncy5zaXplKCkgPCAzKSB7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgi
SW52YWxpZCBhcmdzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaW50IGluZGV4ID0g
YXJnc1swXS50b0ludDMyKCk7Ci0gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzdGF0aWNf
Y2FzdDxpbnQ+KFdlYktpdDo6V2ViR2FtZXBhZHM6Oml0ZW1zTGVuZ3RoQ2FwKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGludCBheGlzID0gYXJnc1sxXS50b0ludDMyKCk7Ci0gICAgaWYgKGF4aXMg
PCAwIHx8IGF4aXMgPj0gc3RhdGljX2Nhc3Q8aW50PihXZWJLaXQ6OldlYkdhbWVwYWQ6OmF4ZXNM
ZW5ndGhDYXApKQotICAgICAgICByZXR1cm47Ci0gICAgZG91YmxlIGRhdGEgPSBhcmdzWzJdLnRv
RG91YmxlKCk7Ci0gICAgbV9nYW1lcGFkcy5pdGVtc1tpbmRleF0uYXhlc1theGlzXSA9IGRhdGE7
Ci0gICAgbV9kZWxlZ2F0ZS0+c2V0R2FtZXBhZERhdGEobV9nYW1lcGFkcyk7Ci0gICAgcmVzdWx0
LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgR2FtZXBhZENvbnRyb2xsZXI6OmZhbGxiYWNrQ2FsbGJh
Y2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1f
ZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiQ09OU09MRSBNRVNTQUdFOiBKYXZhU2NyaXB0IEVSUk9S
OiB1bmtub3duIG1ldGhvZCBjYWxsZWQgb24gR2FtZXBhZENvbnRyb2xsZXJcbiIpOwotICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9HYW1lcGFkQ29udHJvbGxlci5oIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvR2FtZXBhZENvbnRyb2xsZXIuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRjYWI2Y2Y0NmYxMjM2ZmY1Mzc3MDFjYjMz
YzkwOGQyMGQ5ODU2ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9HYW1lcGFk
Q29udHJvbGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgR2FtZXBh
ZENvbnRyb2xsZXJfaAotI2RlZmluZSBHYW1lcGFkQ29udHJvbGxlcl9oCi0KLSNpbmNsdWRlICJD
cHBCb3VuZENsYXNzLmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYkdhbWVwYWRzLmg+Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotY2xhc3MgV2ViR2FtZXBhZHM7Ci1jbGFzcyBXZWJGcmFtZTsKLX0KLQot
bmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1jbGFzcyBXZWJUZXN0RGVsZWdhdGU7Ci0KLWNs
YXNzIEdhbWVwYWRDb250cm9sbGVyIDogcHVibGljIENwcEJvdW5kQ2xhc3MgewotcHVibGljOgot
ICAgIEdhbWVwYWRDb250cm9sbGVyKCk7Ci0KLSAgICB2b2lkIGJpbmRUb0phdmFzY3JpcHQoV2Vi
S2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBjbGFzc25hbWUpOwotICAg
IHZvaWQgc2V0RGVsZWdhdGUoV2ViVGVzdERlbGVnYXRlKik7Ci0gICAgdm9pZCByZXNldCgpOwot
Ci1wcml2YXRlOgotICAgIC8vIEJvdW5kIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMKLSAgICB2b2lk
IGNvbm5lY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQg
ZGlzY29ubmVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9p
ZCBzZXRJZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBz
ZXRCdXR0b25Db3VudChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAg
dm9pZCBzZXRCdXR0b25EYXRhKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LSAgICB2b2lkIHNldEF4aXNDb3VudChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0gICAgdm9pZCBzZXRBeGlzRGF0YShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Ci0gICAgdm9pZCBmYWxsYmFja0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLQotICAgIFdlYktpdDo6V2ViR2FtZXBhZHMgbV9nYW1lcGFkczsKLQot
ICAgIFdlYlRlc3REZWxlZ2F0ZSogbV9kZWxlZ2F0ZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEdh
bWVwYWRDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL0tleUNvZGVNYXBwaW5nLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0tleUNvZGVNYXBwaW5nLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMjExNTg2ZTM1ZTBjNmY3YTI4NWRjOTZlNjY3NjE5OGZlMDBj
NTlkOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9LZXlDb2RlTWFwcGluZy5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJLZXlDb2RlTWFwcGluZy5oIgotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0K
LWludCBOYXRpdmVLZXlDb2RlRm9yV2luZG93c0tleUNvZGUoaW50IGtleXN5bSkKLXsKLSNpZiBk
ZWZpbmVkKF9fbGludXhfXykgJiYgVVNFKEdUSykKLSAgICAvLyBTZWUgL3Vzci9zaGFyZS9YMTEv
eGtiL2tleWNvZGVzLyoKLSAgICBzdGF0aWMgY29uc3QgaW50IGFzY2lpVG9LZXlDb2RlW10gPSB7
Ci0gICAgICAgIDAsCi0gICAgICAgIDAsCi0gICAgICAgIDAsCi0gICAgICAgIDAsCi0gICAgICAg
IDAsCi0gICAgICAgIDAsCi0gICAgICAgIDAsCi0gICAgICAgIDAsCi0gICAgICAgIDIyLAotICAg
ICAgICAyMywKLSAgICAgICAgMCwKLSAgICAgICAgMCwKLSAgICAgICAgMCwKLSAgICAgICAgMzYs
Ci0gICAgICAgIDAsCi0gICAgICAgIDAsCi0gICAgICAgIDUwLAotICAgICAgICAzNywKLSAgICAg
ICAgNjQsCi0gICAgICAgIDEyNywKLSAgICAgICAgNjYsCi0gICAgICAgIDAsCi0gICAgICAgIDAs
Ci0gICAgICAgIDAsCi0gICAgICAgIDAsCi0gICAgICAgIDEzMSwKLSAgICAgICAgMCwKLSAgICAg
ICAgOSwKLSAgICAgICAgMTAwLAotICAgICAgICAxMDIsCi0gICAgICAgIDAsCi0gICAgICAgIDAs
Ci0gICAgICAgIDY1LCAvLyAnICcKLSAgICAgICAgMTEyLCAvLyAnIScKLSAgICAgICAgMTE3LCAv
LyAnIicKLSAgICAgICAgMTE1LCAvLyAnIycKLSAgICAgICAgMTEwLCAvLyAnJCcKLSAgICAgICAg
MTEzLCAvLyAnJScKLSAgICAgICAgMTExLCAvLyAnJicKLSAgICAgICAgMTE0LCAvLyAnJycKLSAg
ICAgICAgMTE2LCAvLyAnKCcKLSAgICAgICAgMCwgLy8gJyknCi0gICAgICAgIDEwNywgLy8gJyon
Ci0gICAgICAgIDAsIC8vICcrJwotICAgICAgICAwLCAvLyAnLCcKLSAgICAgICAgMTE4LCAvLyAn
LScKLSAgICAgICAgMTE5LCAvLyAnLicKLSAgICAgICAgMTQ2LCAvLyAnLycKLSAgICAgICAgMTks
IC8vICcwJwotICAgICAgICAxMCwgLy8gJzEnCi0gICAgICAgIDExLCAvLyAnMicKLSAgICAgICAg
MTIsIC8vICczJwotICAgICAgICAxMywgLy8gJzQnCi0gICAgICAgIDE0LCAvLyAnNScKLSAgICAg
ICAgMTUsIC8vICc2JwotICAgICAgICAxNiwgLy8gJzcnCi0gICAgICAgIDE3LCAvLyAnOCcKLSAg
ICAgICAgMTgsIC8vICc5JwotICAgICAgICAwLCAvLyAnOicKLSAgICAgICAgMCwgLy8gJzsnCi0g
ICAgICAgIDAsIC8vICc8JwotICAgICAgICAwLCAvLyAnPScKLSAgICAgICAgMCwgLy8gJz4nCi0g
ICAgICAgIDAsIC8vICc/JwotICAgICAgICAwLCAvLyAnQCcKLSAgICAgICAgMzgsIC8vICdBJwot
ICAgICAgICA1NiwgLy8gJ0InCi0gICAgICAgIDU0LCAvLyAnQycKLSAgICAgICAgNDAsIC8vICdE
JwotICAgICAgICAyNiwgLy8gJ0UnCi0gICAgICAgIDQxLCAvLyAnRicKLSAgICAgICAgNDIsIC8v
ICdHJwotICAgICAgICA0MywgLy8gJ0gnCi0gICAgICAgIDMxLCAvLyAnSScKLSAgICAgICAgNDQs
IC8vICdKJwotICAgICAgICA0NSwgLy8gJ0snCi0gICAgICAgIDQ2LCAvLyAnTCcKLSAgICAgICAg
NTgsIC8vICdNJwotICAgICAgICA1NywgLy8gJ04nCi0gICAgICAgIDMyLCAvLyAnTycKLSAgICAg
ICAgMzMsIC8vICdQJwotICAgICAgICAyNCwgLy8gJ1EnCi0gICAgICAgIDI3LCAvLyAnUicKLSAg
ICAgICAgMzksIC8vICdTJwotICAgICAgICAyOCwgLy8gJ1QnCi0gICAgICAgIDMwLCAvLyAnVScK
LSAgICAgICAgNTUsIC8vICdWJwotICAgICAgICAyNSwgLy8gJ1cnCi0gICAgICAgIDUzLCAvLyAn
WCcKLSAgICAgICAgMjksIC8vICdZJwotICAgICAgICA1MiwgLy8gJ1onCi0gICAgICAgIDEzMywg
Ly8gJ1snCi0gICAgICAgIDEzNCwgLy8gJ1wnCi0gICAgICAgIDEzNSwgLy8gJ10nCi0gICAgICAg
IDAsIC8vICdeJwotICAgICAgICAwLCAvLyAnXycKLSAgICAgICAgOTAsIC8vICdgJwotICAgICAg
ICAzOCwgLy8gJ2EnCi0gICAgICAgIDU2LCAvLyAnYicKLSAgICAgICAgNTQsIC8vICdjJwotICAg
ICAgICA0MCwgLy8gJ2QnCi0gICAgICAgIDI2LCAvLyAnZScKLSAgICAgICAgNDEsIC8vICdmJwot
ICAgICAgICA0MiwgLy8gJ2cnCi0gICAgICAgIDQzLCAvLyAnaCcKLSAgICAgICAgMzEsIC8vICdp
JwotICAgICAgICA0NCwgLy8gJ2onCi0gICAgICAgIDQ1LCAvLyAnaycKLSAgICAgICAgNDYsIC8v
ICdsJwotICAgICAgICA1OCwgLy8gJ20nCi0gICAgICAgIDU3LCAvLyAnbicKLSAgICAgICAgMzIs
IC8vICdvJwotICAgICAgICAzMywgLy8gJ3AnCi0gICAgICAgIDI0LCAvLyAncScKLSAgICAgICAg
MjcsIC8vICdyJwotICAgICAgICAzOSwgLy8gJ3MnCi0gICAgICAgIDI4LCAvLyAndCcKLSAgICAg
ICAgMzAsIC8vICd1JwotICAgICAgICA1NSwgLy8gJ3YnCi0gICAgICAgIDI1LCAvLyAndycKLSAg
ICAgICAgNTMsIC8vICd4JwotICAgICAgICAyOSwgLy8gJ3knCi0gICAgICAgIDUyLCAvLyAneicK
LSAgICAgICAgOTYsIC8vICd7JwotICAgICAgICAwLCAvLyAnfCcKLSAgICAgICAgMCwgLy8gJ30n
Ci0gICAgICAgIDAsIC8vICd+JwotICAgICAgICAwLCAvLyBERUwKLSAgICB9OwotCi0gICAgaWYg
KGtleXN5bSA8PSAxMjcpCi0gICAgICAgIHJldHVybiBhc2NpaVRvS2V5Q29kZVtrZXlzeW1dOwot
Ci0gICAgc3dpdGNoIChrZXlzeW0pIHsKLSAgICBjYXNlIFZLRVlfUFJJT1I6Ci0gICAgICAgIHJl
dHVybiAxMTI7Ci0gICAgY2FzZSBWS0VZX05FWFQ6Ci0gICAgICAgIHJldHVybiAxMTc7Ci0gICAg
Y2FzZSBWS0VZX0VORDoKLSAgICAgICAgcmV0dXJuIDExNTsKLSAgICBjYXNlIFZLRVlfSE9NRToK
LSAgICAgICAgcmV0dXJuIDExMDsKLSAgICBjYXNlIFZLRVlfTEVGVDoKLSAgICAgICAgcmV0dXJu
IDExMzsKLSAgICBjYXNlIFZLRVlfVVA6Ci0gICAgICAgIHJldHVybiAxMTE7Ci0gICAgY2FzZSBW
S0VZX1JJR0hUOgotICAgICAgICByZXR1cm4gMTE0OwotICAgIGNhc2UgVktFWV9ET1dOOgotICAg
ICAgICByZXR1cm4gMTE2OwotICAgIGNhc2UgVktFWV9TTkFQU0hPVDoKLSAgICAgICAgcmV0dXJu
IDEwNzsKLSAgICBjYXNlIFZLRVlfSU5TRVJUOgotICAgICAgICByZXR1cm4gMTE4OwotICAgIGNh
c2UgVktFWV9ERUxFVEU6Ci0gICAgICAgIHJldHVybiAxMTk7Ci0gICAgY2FzZSBWS0VZX0FQUFM6
Ci0gICAgICAgIHJldHVybiAxMzU7Ci0gICAgY2FzZSBWS0VZX0YxOgotICAgIGNhc2UgVktFWV9G
MSArIDE6Ci0gICAgY2FzZSBWS0VZX0YxICsgMjoKLSAgICBjYXNlIFZLRVlfRjEgKyAzOgotICAg
IGNhc2UgVktFWV9GMSArIDQ6Ci0gICAgY2FzZSBWS0VZX0YxICsgNToKLSAgICBjYXNlIFZLRVlf
RjEgKyA2OgotICAgIGNhc2UgVktFWV9GMSArIDc6Ci0gICAgY2FzZSBWS0VZX0YxICsgODoKLSAg
ICBjYXNlIFZLRVlfRjEgKyA5OgotICAgIGNhc2UgVktFWV9GMSArIDEwOgotICAgIGNhc2UgVktF
WV9GMSArIDExOgotICAgIGNhc2UgVktFWV9GMSArIDEyOgotICAgIGNhc2UgVktFWV9GMSArIDEz
OgotICAgIGNhc2UgVktFWV9GMSArIDE0OgotICAgIGNhc2UgVktFWV9GMSArIDE1OgotICAgIGNh
c2UgVktFWV9GMSArIDE2OgotICAgIGNhc2UgVktFWV9GMSArIDE3OgotICAgIGNhc2UgVktFWV9G
MSArIDE4OgotICAgIGNhc2UgVktFWV9GMSArIDE5OgotICAgIGNhc2UgVktFWV9GMSArIDIwOgot
ICAgIGNhc2UgVktFWV9GMSArIDIxOgotICAgIGNhc2UgVktFWV9GMSArIDIyOgotICAgIGNhc2Ug
VktFWV9GMSArIDIzOgotICAgICAgICByZXR1cm4gNjcgKyAoa2V5c3ltIC0gVktFWV9GMSk7Ci0g
ICAgY2FzZSBWS0VZX0xTSElGVDoKLSAgICAgICAgcmV0dXJuIDUwOwotICAgIGNhc2UgVktFWV9S
U0hJRlQ6Ci0gICAgICAgIHJldHVybiA2MjsKLSAgICBjYXNlIFZLRVlfTENPTlRST0w6Ci0gICAg
ICAgIHJldHVybiAzNzsKLSAgICBjYXNlIFZLRVlfUkNPTlRST0w6Ci0gICAgICAgIHJldHVybiAx
MDU7Ci0gICAgY2FzZSBWS0VZX0xNRU5VOgotICAgICAgICByZXR1cm4gNjQ7Ci0gICAgY2FzZSBW
S0VZX1JNRU5VOgotICAgICAgICByZXR1cm4gMTA4OwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotI2Vsc2UKLSAgICByZXR1cm4ga2V5c3ltIC0ga2V5c3ltOwotI2Vu
ZGlmCi19Ci0KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvc3JjL0tleUNvZGVNYXBwaW5nLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9LZXlDb2RlTWFwcGluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMjNlNTk1ZmFmY2QxZTliZDU1NzQ2YzYyZTU4MTZjYzE3YzZhNjcyLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0tleUNvZGVNYXBwaW5nLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBLZXlDb2RlTWFwcGluZ19oCi0jZGVmaW5lIEtl
eUNvZGVNYXBwaW5nX2gKLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi0vLyBUaGUga2V5
Y29kZXMgbWF0Y2ggdGhlIHZhbHVlcyBvZiB0aGUgdmlydHVhbCBrZXljb2RlcyBmb3VuZCBoZXJl
IGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3Av
ZGQzNzU3MzEodj12cy44NSkuYXNweAotZW51bSB7Ci0gICAgVktFWV9SRVRVUk4gICA9IDB4MEQs
Ci0gICAgVktFWV9FU0NBUEUgICA9IDB4MUIsCi0gICAgVktFWV9QUklPUiAgICA9IDB4MjEsCi0g
ICAgVktFWV9ORVhUICAgICA9IDB4MjIsCi0gICAgVktFWV9FTkQgICAgICA9IDB4MjMsCi0gICAg
VktFWV9IT01FICAgICA9IDB4MjQsCi0gICAgVktFWV9MRUZUICAgICA9IDB4MjUsCi0gICAgVktF
WV9VUCAgICAgICA9IDB4MjYsCi0gICAgVktFWV9SSUdIVCAgICA9IDB4MjcsCi0gICAgVktFWV9E
T1dOICAgICA9IDB4MjgsCi0gICAgVktFWV9TTkFQU0hPVCA9IDB4MkMsCi0gICAgVktFWV9JTlNF
UlQgICA9IDB4MkQsCi0gICAgVktFWV9ERUxFVEUgICA9IDB4MkUsCi0gICAgVktFWV9BUFBTICAg
ICA9IDB4NUQsCi0gICAgVktFWV9GMSAgICAgICA9IDB4NzAsCi0gICAgVktFWV9MU0hJRlQgICA9
IDB4QTAsCi0gICAgVktFWV9SU0hJRlQgICA9IDB4QTEsCi0gICAgVktFWV9MQ09OVFJPTCA9IDB4
QTIsCi0gICAgVktFWV9SQ09OVFJPTCA9IDB4QTMsCi0gICAgVktFWV9MTUVOVSAgICA9IDB4QTQs
Ci0gICAgVktFWV9STUVOVSAgICA9IDB4QTUsCi19OwotCi0vLyBNYXAgYSB3aW5kb3dzIGtleWNv
ZGUgdG8gYSBuYXRpdmUga2V5Y29kZSBvbiBPUyhMSU5VWCkgJiYgVVNFKEdUSykuCi1pbnQgTmF0
aXZlS2V5Q29kZUZvcldpbmRvd3NLZXlDb2RlKGludCBrZXlzeW0pOwotCi19Ci0KLSNlbmRpZiAv
LyBLZXlDb2RlTWFwcGluZ19oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrQ29uc3RyYWludHMuY3BwIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja0NvbnN0cmFpbnRzLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQzNjU1MGJkMzQwMjc2MGNhYjY5NmY3NzMzMzIxNTYw
NWNlNDUwOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrQ29uc3RyYWlu
dHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRV9XRUJSVEMKLSNpbmNsdWRlICJNb2NrQ29uc3RyYWludHMuaCIKLQotI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJNZWRpYUNvbnN0cmFpbnRzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotbmFtZXNwYWNlIHsKLQotYm9v
bCBpc1N1cHBvcnRlZChjb25zdCBXZWJTdHJpbmcmIGNvbnN0cmFpbnQpCi17Ci0gICAgcmV0dXJu
IGNvbnN0cmFpbnQgPT0gInZhbGlkX2FuZF9zdXBwb3J0ZWRfMSIgfHwgY29uc3RyYWludCA9PSAi
dmFsaWRfYW5kX3N1cHBvcnRlZF8yIjsKLX0KLQotYm9vbCBpc1ZhbGlkKGNvbnN0IFdlYlN0cmlu
ZyYgY29uc3RyYWludCkKLXsKLSAgICByZXR1cm4gaXNTdXBwb3J0ZWQoY29uc3RyYWludCkgfHwg
Y29uc3RyYWludCA9PSAidmFsaWRfYnV0X3Vuc3VwcG9ydGVkXzEiIHx8IGNvbnN0cmFpbnQgPT0g
InZhbGlkX2J1dF91bnN1cHBvcnRlZF8yIjsKLX0KLQotfQotCi1ib29sIE1vY2tDb25zdHJhaW50
czo6dmVyaWZ5Q29uc3RyYWludHMoY29uc3QgV2ViTWVkaWFDb25zdHJhaW50cyYgY29uc3RyYWlu
dHMpCi17Ci0gICAgV2ViVmVjdG9yPFdlYk1lZGlhQ29uc3RyYWludD4gbWFuZGF0b3J5Q29uc3Ry
YWludHM7Ci0gICAgY29uc3RyYWludHMuZ2V0TWFuZGF0b3J5Q29uc3RyYWludHMobWFuZGF0b3J5
Q29uc3RyYWludHMpOwotICAgIGlmIChtYW5kYXRvcnlDb25zdHJhaW50cy5zaXplKCkpIHsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYW5kYXRvcnlDb25zdHJhaW50cy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgY29uc3QgV2ViTWVkaWFDb25zdHJhaW50JiBjdXJyID0gbWFu
ZGF0b3J5Q29uc3RyYWludHNbaV07Ci0gICAgICAgICAgICBpZiAoIWlzU3VwcG9ydGVkKGN1cnIu
bV9uYW1lKSB8fCBjdXJyLm1fdmFsdWUgIT0gIjEiKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFdlYlZlY3RvcjxXZWJNZWRpYUNvbnN0cmFp
bnQ+IG9wdGlvbmFsQ29uc3RyYWludHM7Ci0gICAgY29uc3RyYWludHMuZ2V0T3B0aW9uYWxDb25z
dHJhaW50cyhvcHRpb25hbENvbnN0cmFpbnRzKTsKLSAgICBpZiAob3B0aW9uYWxDb25zdHJhaW50
cy5zaXplKCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcHRpb25hbENvbnN0
cmFpbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBXZWJNZWRpYUNvbnN0cmFp
bnQmIGN1cnIgPSBvcHRpb25hbENvbnN0cmFpbnRzW2ldOwotICAgICAgICAgICAgaWYgKCFpc1Zh
bGlkKGN1cnIubV9uYW1lKSB8fCBjdXJyLm1fdmFsdWUgIT0gIjAiKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEVfV0VCUlRDCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrQ29uc3RyYWludHMuaCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tDb25zdHJhaW50cy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzEwMWM0M2M2OTJkM2RjMTcwOGZhMWVi
NDJlM2JjMDVjNTVhNWMyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tD
b25zdHJhaW50cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTW9ja0Nv
bnN0cmFpbnRzX2gKLSNkZWZpbmUgTW9ja0NvbnN0cmFpbnRzX2gKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci1jbGFzcyBXZWJNZWRpYUNvbnN0cmFpbnRzOwotfQotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1
bm5lciB7Ci0KLWNsYXNzIE1vY2tDb25zdHJhaW50cyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGJv
b2wgdmVyaWZ5Q29uc3RyYWludHMoY29uc3QgV2ViS2l0OjpXZWJNZWRpYUNvbnN0cmFpbnRzJik7
Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBNb2NrQ29uc3RyYWludHNfaAotCmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrR3JhbW1hckNo
ZWNrLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01v
Y2tHcmFtbWFyQ2hlY2suY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWVlZTBj
ODA1MjUwZWNlNzVkNjg1NzBmYjcwYWYzM2ZjNmFmZjllLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvc3JjL01vY2tHcmFtbWFyQ2hlY2suY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNb2NrR3JhbW1hckNoZWNrLmgi
Ci0KLSNpbmNsdWRlICJQbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQ1N0cmluZy5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJTdHJpbmcuaCIKLSNpbmNsdWRlICJU
ZXN0Q29tbW9uLmgiCi0jaW5jbHVkZSAiV2ViVGV4dENoZWNraW5nUmVzdWx0LmgiCi0jaW5jbHVk
ZSA8YWxnb3JpdGhtPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1ib29sIE1vY2tHcmFtbWFyQ2hl
Y2s6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFdlYlN0cmluZyYgdGV4dCwgdmVjdG9yPFdl
YlRleHRDaGVja2luZ1Jlc3VsdD4qIHJlc3VsdHMpCi17Ci0gICAgV0VCS0lUX0FTU0VSVChyZXN1
bHRzKTsKLSAgICBzdHJpbmcxNiBzdHJpbmdUZXh0ID0gdGV4dDsKLSAgICBpZiAoZmluZF9pZihz
dHJpbmdUZXh0LmJlZ2luKCksIHN0cmluZ1RleHQuZW5kKCksIGlzQVNDSUlBbHBoYSkgPT0gc3Ry
aW5nVGV4dC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBGaW5kIG1hdGNo
aW5nIGdyYW1tYXRpY2FsIGVycm9ycyBmcm9tIGtub3duIG9uZXMuIFRoaXMgZnVuY3Rpb24gaGFz
IHRvCi0gICAgLy8gY2hlY2sgYWxsIGVycm9ycyBiZWNhdXNlIHRoZSBnaXZlbiB0ZXh0IG1heSBj
b25zaXN0IG9mIHR3byBvciBtb3JlCi0gICAgLy8gc2VudGVuY2VzIHRoYXQgaGF2ZSBncmFtbWF0
aWNhbCBlcnJvcnMuCi0gICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0gICAgICAgIGNvbnN0IGNo
YXIqIHRleHQ7Ci0gICAgICAgIGludCBsb2NhdGlvbjsKLSAgICAgICAgaW50IGxlbmd0aDsKLSAg
ICB9IGdyYW1tYXJFcnJvcnNbXSA9IHsKLSAgICAgICAgeyJJIGhhdmUgYSBpc3N1ZS4iLCA3LCAx
fSwKLSAgICAgICAgeyJJIGhhdmUgYW4gZ3JhcGUuIiwgNywgMn0sCi0gICAgICAgIHsiSSBoYXZl
IGFuIGtpd2kuIiwgNywgMn0sCi0gICAgICAgIHsiSSBoYXZlIGFuIG11c2NhdC4iLCA3LCAyfSwK
LSAgICAgICAgeyJZb3UgaGFzIHRoZSByaWdodC4iLCA0LCAzfSwKLSAgICAgICAgeyJhcHBsZSBv
cmFuZ2UgenouIiwgMCwgMTZ9LAotICAgICAgICB7ImFwcGxlIHp6IG9yYW5nZS4iLCAwLCAxNn0s
Ci0gICAgICAgIHsiYXBwbGUsenosb3JhbmdlLiIsIDAsIDE2fSwKLSAgICAgICAgeyJvcmFuZ2Us
enosYXBwbGUuIiwgMCwgMTZ9LAotICAgICAgICB7InRoZSB0aGUgYWRsaiBhZGFhc2ogc2RrbGou
IHRoZXJlIHRoZXJlIiwgMCwgMzh9LAotICAgICAgICB7Inp6IGFwcGxlIG9yYW5nZS4iLCAwLCAx
Nn0sCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEFSUkFZU0laRV9VTlNBRkUo
Z3JhbW1hckVycm9ycyk7ICsraSkgewotICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICAgICAg
c3RyaW5nMTYgZXJyb3IoZ3JhbW1hckVycm9yc1tpXS50ZXh0LCBncmFtbWFyRXJyb3JzW2ldLnRl
eHQgKyBzdHJsZW4oZ3JhbW1hckVycm9yc1tpXS50ZXh0KSk7Ci0gICAgICAgIHdoaWxlICgob2Zm
c2V0ID0gc3RyaW5nVGV4dC5maW5kKGVycm9yLCBvZmZzZXQpKSAhPSBzdHJpbmcxNjo6bnBvcykg
ewotICAgICAgICAgICAgcmVzdWx0cy0+cHVzaF9iYWNrKFdlYlRleHRDaGVja2luZ1Jlc3VsdChX
ZWJUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciwgb2Zmc2V0ICsgZ3JhbW1hckVycm9yc1tpXS5sb2Nh
dGlvbiwgZ3JhbW1hckVycm9yc1tpXS5sZW5ndGgpKTsKLSAgICAgICAgICAgIG9mZnNldCArPSBn
cmFtbWFyRXJyb3JzW2ldLmxlbmd0aDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvc3JjL01vY2tHcmFtbWFyQ2hlY2suaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tHcmFtbWFyQ2hlY2suaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYTE4M2RjY2IwNzRjNzkwYmZhY2FjM2Y3Nzk4NzVkOWRhODgxOTk1Yy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrR3JhbW1hckNoZWNrLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNb2NrR3JhbW1hckNoZWNrX2gKLSNk
ZWZpbmUgTW9ja0dyYW1tYXJDaGVja19oCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1jbGFzcyBXZWJTdHJpbmc7Ci1zdHJ1Y3QgV2ViVGV4dENoZWNraW5nUmVz
dWx0OwotCi19Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotLy8gQSBtb2NrIGltcGxl
bWVudGF0aW9uIG9mIGEgZ3JhbW1hci1jaGVja2VyIHVzZWQgZm9yIFdlYktpdCB0ZXN0cy4gVGhp
cyBjbGFzcwotLy8gb25seSBpbXBsZW1lbnRzIHRoZSBtaW5pbWFsIGZ1bmN0aW9uYXJpdGllcyBy
ZXF1aXJlZCBieSBXZWJLaXQgdGVzdHMsIGkuZS4KLS8vIHRoaXMgY2xhc3MganVzdCBjb21wYXJl
cyB0aGUgZ2l2ZW4gc3RyaW5nIHdpdGgga25vd24gZ3JhbW1hciBtaXN0YWtlcyBpbgotLy8gd2Vi
a2l0IHRlc3RzIGFuZCBhZGRzIGdyYW1tYXIgbWFya2VycyBvbiB0aGVtLiBFdmVuIHRob3VnaCB0
aGlzIGlzIHN1ZmZpY2VudAotLy8gZm9yIHdlYmtpdCB0ZXN0cywgdGhpcyBjbGFzcyBpcyBub3Qg
c3VpdGFibGUgZm9yIGFueSBvdGhlciB1c2FnZXMuCi1jbGFzcyBNb2NrR3JhbW1hckNoZWNrIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBXZWJL
aXQ6OldlYlN0cmluZyYsIHN0ZDo6dmVjdG9yPFdlYktpdDo6V2ViVGV4dENoZWNraW5nUmVzdWx0
PiopOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTW9ja1NwZWxsQ2hlY2tfaApkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1NwZWxsQ2hl
Y2suY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9j
a1NwZWxsQ2hlY2suY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmU2ODc5ZjMx
NjAwYmJhMmY4NTlhMGVlMGFjNGNhMjhjMzcxOTc4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL01vY2tTcGVsbENoZWNrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk1vY2tTcGVsbENoZWNrLmgiCi0KLSNp
bmNsdWRlICJUZXN0Q29tbW9uLmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYkNTdHJpbmcuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFj
ZSBXZWJUZXN0UnVubmVyIHsKLQotbmFtZXNwYWNlIHsKLQotdm9pZCBhcHBlbmQoV2ViVmVjdG9y
PFdlYlN0cmluZz4qIGRhdGEsIGNvbnN0IFdlYlN0cmluZyYgaXRlbSkKLXsKLSAgICBXZWJWZWN0
b3I8V2ViU3RyaW5nPiByZXN1bHQoZGF0YS0+c2l6ZSgpICsgMSk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBkYXRhLT5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0W2ldID0gKCpkYXRh
KVtpXTsKLSAgICByZXN1bHRbZGF0YS0+c2l6ZSgpXSA9IGl0ZW07Ci0gICAgZGF0YS0+c3dhcChy
ZXN1bHQpOwotfQotCi19Ci0KLU1vY2tTcGVsbENoZWNrOjpNb2NrU3BlbGxDaGVjaygpCi0gICAg
OiBtX2luaXRpYWxpemVkKGZhbHNlKSB7IH0KLQotTW9ja1NwZWxsQ2hlY2s6On5Nb2NrU3BlbGxD
aGVjaygpIHsgfQotCi1ib29sIE1vY2tTcGVsbENoZWNrOjpzcGVsbENoZWNrV29yZChjb25zdCBX
ZWJTdHJpbmcmIHRleHQsIGludCogbWlzc3BlbGxlZE9mZnNldCwgaW50KiBtaXNzcGVsbGVkTGVu
Z3RoKQotewotICAgIFdFQktJVF9BU1NFUlQobWlzc3BlbGxlZE9mZnNldCk7Ci0gICAgV0VCS0lU
X0FTU0VSVChtaXNzcGVsbGVkTGVuZ3RoKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhpcyBzcGVs
bGNoZWNrZXIuCi0gICAgaW5pdGlhbGl6ZUlmTmVlZGVkKCk7Ci0KLSAgICAvLyBSZXNldCB0aGUg
cmVzdWx0IHZhbHVlcyBhcyBvdXIgc3BlbGxjaGVja2VyIGRvZXMuCi0gICAgKm1pc3NwZWxsZWRP
ZmZzZXQgPSAwOwotICAgICptaXNzcGVsbGVkTGVuZ3RoID0gMDsKLQotICAgIC8vIENvbnZlcnQg
dG8gYSBzdHJpbmcxNiBiZWNhdXNlIHdlIHN0b3JlIHN0cmluZzE2IGluc3RhbmNlcyBpbgotICAg
IC8vIG1fbWlzc3BlbGxlZFdvcmRzIGFuZCBXZWJTdHJpbmcgaGFzIG5vIGZpbmQoKS4KLSAgICBz
dHJpbmcxNiBzdHJpbmdUZXh0ID0gdGV4dDsKLSAgICBpbnQgc2tpcHBlZExlbmd0aCA9IDA7Ci0K
LSAgICB3aGlsZSAoIXN0cmluZ1RleHQuZW1wdHkoKSkgewotICAgICAgICAvLyBFeHRyYWN0IHRo
ZSBmaXJzdCBwb3NzaWJsZSBFbmdsaXNoIHdvcmQgZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nLgotICAg
ICAgICAvLyBUaGUgZ2l2ZW4gc3RyaW5nIG1heSBpbmNsdWRlIG5vbi1BU0NJSSBjaGFyYWN0ZXJz
IG9yIG51bWJlcnMuIFNvLCB3ZQotICAgICAgICAvLyBzaG91bGQgZmlsdGVyIG91dCBzdWNoIGNo
YXJhY3RlcnMgYmVmb3JlIHN0YXJ0IGxvb2tpbmcgdXAgb3VyCi0gICAgICAgIC8vIG1pc3NwZWxs
ZWQtd29yZCB0YWJsZS4KLSAgICAgICAgLy8gKFRoaXMgaXMgYSBzaW1wbGUgdmVyc2lvbiBvZiBv
dXIgU3BlbGxDaGVja1dvcmRJdGVyYXRvciBjbGFzcy4pCi0gICAgICAgIC8vIElmIHRoZSBnaXZl
biBzdHJpbmcgZG9lc24ndCBpbmNsdWRlIGFueSBBU0NJSSBjaGFyYWN0ZXJzLCB3ZSBjYW4gdHJl
YXQgdGhlCi0gICAgICAgIC8vIHN0cmluZyBhcyB2YWxpZCBvbmUuCi0gICAgICAgIHN0cmluZzE2
OjppdGVyYXRvciBmaXJzdENoYXIgPSBmaW5kX2lmKHN0cmluZ1RleHQuYmVnaW4oKSwgc3RyaW5n
VGV4dC5lbmQoKSwgaXNBU0NJSUFscGhhKTsKLSAgICAgICAgaWYgKGZpcnN0Q2hhciA9PSBzdHJp
bmdUZXh0LmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGludCB3b3Jk
T2Zmc2V0ID0gZGlzdGFuY2Uoc3RyaW5nVGV4dC5iZWdpbigpLCBmaXJzdENoYXIpOwotICAgICAg
ICBpbnQgbWF4V29yZExlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oc3RyaW5nVGV4dC5sZW5ndGgo
KSkgLSB3b3JkT2Zmc2V0OwotICAgICAgICBpbnQgd29yZExlbmd0aDsKLSAgICAgICAgc3RyaW5n
MTYgd29yZDsKLQotICAgICAgICAvLyBMb29rIHVwIG91ciBtaXNzcGVsbGVkLXdvcmQgdGFibGUg
dG8gY2hlY2sgaWYgdGhlIGV4dHJhY3RlZCB3b3JkIGlzIGEKLSAgICAgICAgLy8ga25vd24gbWlz
c3BlbGxlZCB3b3JkLCBhbmQgcmV0dXJuIHRoZSBvZmZzZXQgYW5kIHRoZSBsZW5ndGggb2YgdGhl
Ci0gICAgICAgIC8vIGV4dHJhY3RlZCB3b3JkIGlmIHRoaXMgd29yZCBpcyBhIGtub3duIG1pc3Nw
ZWxsZWQgd29yZC4KLSAgICAgICAgLy8gKFNlZSB0aGUgY29tbWVudCBpbiBNb2NrU3BlbGxDaGVj
azo6aW5pdGlhbGl6ZUlmTmVlZGVkKCkgd2h5IHdlIHVzZSBhCi0gICAgICAgIC8vIG1pc3NwZWxs
ZWQtd29yZCB0YWJsZS4pCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9taXNzcGVs
bGVkV29yZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIHdvcmRMZW5ndGggPSBzdGF0aWNf
Y2FzdDxpbnQ+KG1fbWlzc3BlbGxlZFdvcmRzLmF0KGkpLmxlbmd0aCgpKSA+IG1heFdvcmRMZW5n
dGggPyBtYXhXb3JkTGVuZ3RoIDogc3RhdGljX2Nhc3Q8aW50PihtX21pc3NwZWxsZWRXb3Jkcy5h
dChpKS5sZW5ndGgoKSk7Ci0gICAgICAgICAgICB3b3JkID0gc3RyaW5nVGV4dC5zdWJzdHIod29y
ZE9mZnNldCwgd29yZExlbmd0aCk7Ci0gICAgICAgICAgICBpZiAod29yZCA9PSBtX21pc3NwZWxs
ZWRXb3Jkcy5hdChpKSAmJiAoc3RhdGljX2Nhc3Q8aW50PihzdHJpbmdUZXh0Lmxlbmd0aCgpKSA9
PSB3b3JkT2Zmc2V0ICsgd29yZExlbmd0aCB8fCBpc05vdEFTQ0lJQWxwaGEoc3RyaW5nVGV4dFt3
b3JkT2Zmc2V0ICsgd29yZExlbmd0aF0pKSkgewotICAgICAgICAgICAgICAgICptaXNzcGVsbGVk
T2Zmc2V0ID0gd29yZE9mZnNldCArIHNraXBwZWRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgKm1p
c3NwZWxsZWRMZW5ndGggPSB3b3JkTGVuZ3RoOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCptaXNzcGVsbGVkTGVuZ3RoID4g
MCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHN0cmluZzE2OjppdGVyYXRvciBsYXN0
Q2hhciA9IGZpbmRfaWYoc3RyaW5nVGV4dC5iZWdpbigpICsgd29yZE9mZnNldCwgc3RyaW5nVGV4
dC5lbmQoKSwgaXNOb3RBU0NJSUFscGhhKTsKLSAgICAgICAgaWYgKGxhc3RDaGFyID09IHN0cmlu
Z1RleHQuZW5kKCkpCi0gICAgICAgICAgICB3b3JkTGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50Pihz
dHJpbmdUZXh0Lmxlbmd0aCgpKSAtIHdvcmRPZmZzZXQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHdvcmRMZW5ndGggPSBkaXN0YW5jZShmaXJzdENoYXIsIGxhc3RDaGFyKTsKLQotICAgICAg
ICBXRUJLSVRfQVNTRVJUKDAgPCB3b3JkT2Zmc2V0ICsgd29yZExlbmd0aCk7Ci0gICAgICAgIHN0
cmluZ1RleHQgPSBzdHJpbmdUZXh0LnN1YnN0cih3b3JkT2Zmc2V0ICsgd29yZExlbmd0aCk7Ci0g
ICAgICAgIHNraXBwZWRMZW5ndGggKz0gd29yZE9mZnNldCArIHdvcmRMZW5ndGg7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIE1vY2tTcGVsbENoZWNrOjpoYXNJbkNhY2hl
KGNvbnN0IFdlYlN0cmluZyYgd29yZCkKLXsKLSAgICByZXR1cm4gd29yZCA9PSBXZWJTdHJpbmc6
OmZyb21VVEY4KCJTcGVsbCB3ZWxsY29tZS4gSXMgaXQgYnJva2VuPyIpIHx8IHdvcmQgPT0gV2Vi
U3RyaW5nOjpmcm9tVVRGOCgiU3BlbGwgd2VsbGNvbWUuXHgwMDdGIik7Ci19Ci0KLXZvaWQgTW9j
a1NwZWxsQ2hlY2s6OmZpbGxTdWdnZXN0aW9uTGlzdChjb25zdCBXZWJTdHJpbmcmIHdvcmQsIFdl
YlZlY3RvcjxXZWJTdHJpbmc+KiBzdWdnZXN0aW9ucykKLXsKLSAgICBpZiAod29yZCA9PSBXZWJT
dHJpbmc6OmZyb21VVEY4KCJ3ZWxsY29tZSIpKQotICAgICAgICBhcHBlbmQoc3VnZ2VzdGlvbnMs
IFdlYlN0cmluZzo6ZnJvbVVURjgoIndlbGNvbWUiKSk7Ci0gICAgZWxzZSBpZiAod29yZCA9PSBX
ZWJTdHJpbmc6OmZyb21VVEY4KCJ1cHBlciBjYXNlIikpCi0gICAgICAgIGFwcGVuZChzdWdnZXN0
aW9ucywgV2ViU3RyaW5nOjpmcm9tVVRGOCgidXBwZXJjYXNlIikpOwotfQotCi1ib29sIE1vY2tT
cGVsbENoZWNrOjppbml0aWFsaXplSWZOZWVkZWQoKQotewotICAgIC8vIEV4aXQgaWYgd2UgaGF2
ZSBhbHJlYWR5IGluaXRpYWxpemVkIHRoaXMgb2JqZWN0LgotICAgIGlmIChtX2luaXRpYWxpemVk
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBDcmVhdGUgYSB0YWJsZSB0aGF0IGNv
bnNpc3RzIG9mIG1pc3NwZWxsZWQgd29yZHMgdXNlZCBpbiBXZWJLaXQgbGF5b3V0Ci0gICAgLy8g
dGVzdHMuCi0gICAgLy8gU2luY2UgV2ViS2l0IGxheW91dCB0ZXN0cyBkb24ndCBoYXZlIHNvIG1h
bnkgbWlzc3BlbGxlZCB3b3JkcyBhcwotICAgIC8vIHdlbGwtc3BlbGxlZCB3b3JkcywgaXQgaXMg
ZWFzaWVyIHRvIGNvbXBhcmUgdGhlIGdpdmVuIHdvcmQgd2l0aCBtaXNzcGVsbGVkCi0gICAgLy8g
b25lcyB0aGFuIHRvIGNvbXBhcmUgd2l0aCB3ZWxsLXNwZWxsZWQgb25lcy4KLSAgICBzdGF0aWMg
Y29uc3QgY2hhciogbWlzc3BlbGxlZFdvcmRzW10gPSB7Ci0gICAgICAgIC8vIFRoZXNlIHdvcmRz
IGFyZSBrbm93biBtaXNzcGVsbGVkIHdvcmRzIGluIHdlYmtpdCB0ZXN0cy4KLSAgICAgICAgLy8g
SWYgdGhlcmUgYXJlIG90aGVyIG1pc3NwZWxsZWQgd29yZHMgaW4gd2Via2l0IHRlc3RzLCBwbGVh
c2UgYWRkIHRoZW0gaW4KLSAgICAgICAgLy8gdGhpcyBhcnJheS4KLSAgICAgICAgImZvbyIsCi0g
ICAgICAgICJGb28iLAotICAgICAgICAiYmF6IiwKLSAgICAgICAgImZvIiwKLSAgICAgICAgIkxp
YmVydHlGIiwKLSAgICAgICAgImNoZWxsbyIsCi0gICAgICAgICJ4eHh0ZXN0eHh4IiwKLSAgICAg
ICAgIlhYeHh4IiwKLSAgICAgICAgIlRleHR4IiwKLSAgICAgICAgImJsb2NrcXVvdGVkIiwKLSAg
ICAgICAgImFzZCIsCi0gICAgICAgICJMb3JlbSIsCi0gICAgICAgICJOdW5jIiwKLSAgICAgICAg
IkN1cmFiaXR1ciIsCi0gICAgICAgICJldSIsCi0gICAgICAgICJhZGxqIiwKLSAgICAgICAgImFk
YWFzaiIsCi0gICAgICAgICJzZGtsaiIsCi0gICAgICAgICJqbGtkcyIsCi0gICAgICAgICJqc2Fh
ZGEiLAotICAgICAgICAiamxkYSIsCi0gICAgICAgICJ6eiIsCi0gICAgICAgICJjb250ZW50RWRp
dGFibGUiLAotICAgICAgICAvLyBUaGUgZm9sbG93aW5nIHdvcmRzIGFyZSB1c2VkIGJ5IHVuaXQg
dGVzdHMuCi0gICAgICAgICJpZm1tcCIsCi0gICAgICAgICJxd2VydHl1aW9wYXNkIiwKLSAgICAg
ICAgInF3ZXJ0eXVpb3Bhc2RmIiwKLSAgICAgICAgInVwcGVyIGNhc2UiLAotICAgICAgICAid2Vs
bGNvbWUiCi0gICAgfTsKLQotICAgIG1fbWlzc3BlbGxlZFdvcmRzLmNsZWFyKCk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBhcnJheXNpemUobWlzc3BlbGxlZFdvcmRzKTsgKytpKQotICAg
ICAgICBtX21pc3NwZWxsZWRXb3Jkcy5wdXNoX2JhY2soc3RyaW5nMTYobWlzc3BlbGxlZFdvcmRz
W2ldLCBtaXNzcGVsbGVkV29yZHNbaV0gKyBzdHJsZW4obWlzc3BlbGxlZFdvcmRzW2ldKSkpOwot
Ci0gICAgLy8gTWFyayBhcyBpbml0aWFsaXplZCB0byBwcmV2ZW50IHRoaXMgb2JqZWN0IGZyb20g
YmVpbmcgaW5pdGlhbGl6ZWQgdHdpY2UKLSAgICAvLyBvciBtb3JlLgotICAgIG1faW5pdGlhbGl6
ZWQgPSB0cnVlOwotCi0gICAgLy8gU2luY2UgdGhpcyBNb2NrU3BlbGxDaGVjayBjbGFzcyBkb2Vz
bid0IGRvd25sb2FkIGRpY3Rpb25hcmllcywgdGhpcwotICAgIC8vIGZ1bmN0aW9uIGFsd2F5cyBy
ZXR1cm5zIGZhbHNlLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1NwZWxsQ2hlY2su
aCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tTcGVs
bENoZWNrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0OWZiMTlhNzViMmY0NGU4
ZWIyNTBkOGNhMDA3ZWVkMzVjMTg3ZWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9z
cmMvTW9ja1NwZWxsQ2hlY2suaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IE1vY2tTcGVsbENoZWNrX2gKLSNkZWZpbmUgTW9ja1NwZWxsQ2hlY2tfaAotCi0jaW5jbHVkZSAi
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlN0cmluZy5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
L2Nocm9taXVtL3B1YmxpYy9XZWJWZWN0b3IuaCIKLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLW5hbWVz
cGFjZSBXZWJUZXN0UnVubmVyIHsKLQotLy8gQSBtb2NrIGltcGxlbWVudGF0aW9uIG9mIGEgc3Bl
bGwtY2hlY2tlciB1c2VkIGZvciBXZWJLaXQgdGVzdHMuCi0vLyBUaGlzIGNsYXNzIG9ubHkgaW1w
bGVtZW50cyB0aGUgbWluaW1hbCBmdW5jdGlvbmFyaXRpZXMgcmVxdWlyZWQgYnkgV2ViS2l0Ci0v
LyB0ZXN0cywgaS5lLiB0aGlzIGNsYXNzIGp1c3QgY29tcGFyZXMgdGhlIGdpdmVuIHN0cmluZyB3
aXRoIGtub3duIG1pc3NwZWxsZWQKLS8vIHdvcmRzIGluIHdlYmtpdCB0ZXN0cyBhbmQgbWFyayB0
aGVtIGFzIG1pc3NzcGVsbGVkLgotLy8gRXZlbiB0aG91Z2ggdGhpcyBpcyBzdWZmaWNlbnQgZm9y
IHdlYmtpdCB0ZXN0cywgdGhpcyBjbGFzcyBpcyBub3Qgc3VpdGFibGUKLS8vIGZvciBhbnkgb3Ro
ZXIgdXNhZ2VzLgotY2xhc3MgTW9ja1NwZWxsQ2hlY2sgewotcHVibGljOgotICAgIHN0YXRpYyB2
b2lkIGZpbGxTdWdnZXN0aW9uTGlzdChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgd29yZCwgV2Vi
S2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJTdHJpbmc+KiBzdWdnZXN0aW9ucyk7Ci0KLSAgICBN
b2NrU3BlbGxDaGVjaygpOwotICAgIH5Nb2NrU3BlbGxDaGVjaygpOwotCi0gICAgLy8gQ2hlY2tz
IHRoZSBzcGVsbGluZ3Mgb2YgdGhlIHNwZWNpZmllZCB0ZXh0LgotICAgIC8vIFRoaXMgZnVuY3Rp
b24gcmV0dXJucyB0cnVlIGlmIHRoZSB0ZXh0IGNvbnNpc3RzIG9mIHZhbGlkIHdvcmRzLCBhbmQK
LSAgICAvLyByZXR1cm5zIGZhbHNlIGlmIGl0IGluY2x1ZGVzIGludmFsaWQgd29yZHMuCi0gICAg
Ly8gV2hlbiB0aGUgZ2l2ZW4gdGV4dCBpbmNsdWRlcyBpbnZhbGlkIHdvcmRzLCB0aGlzIGZ1bmN0
aW9uIHNldHMgdGhlCi0gICAgLy8gcG9zaXRpb24gb2YgdGhlIGZpcnN0IGludmFsaWQgd29yZCB0
byBtaXNzcGVsbGVkT2Zmc2V0LCBhbmQgdGhlIGxlbmd0aCBvZgotICAgIC8vIHRoZSBmaXJzdCBp
bnZhbGlkIHdvcmQgdG8gbWlzc3BlbGxlZExlbmd0aCwgcmVzcGVjdGl2ZWx5LgotICAgIC8vIEZv
ciBleGFtcGxlLCB3aGVuIHRoZSBnaXZlbiB0ZXh0IGlzICIgICB6eiB6eiIsIHRoaXMgZnVuY3Rp
b24gc2V0cyAzIHRvCi0gICAgLy8gbWlzc3BlbGxlZE9mZnNldCBhbmQgMiB0byBtaXNzcGVsbGVk
TGVuZ3RoLCByZXNwZWN0aXZlbHkuCi0gICAgYm9vbCBzcGVsbENoZWNrV29yZChjb25zdCBXZWJL
aXQ6OldlYlN0cmluZyYgdGV4dCwgaW50KiBtaXNzcGVsbGVkT2Zmc2V0LCBpbnQqIG1pc3NwZWxs
ZWRMZW5ndGgpOwotCi0gICAgLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB0ZXh0IGNh
biBiZSBzcGVsbCBjaGVja2VkIGltbWVkaWF0ZWx5IHVzaW5nCi0gICAgLy8gdGhlIHNwZWxsIGNo
ZWNrZXIgY2FjaGUuCi0gICAgYm9vbCBoYXNJbkNhY2hlKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5n
JiB0ZXh0KTsKLQotcHJpdmF0ZToKLSAgICAvLyBJbml0aWFsaXplIHRoZSBpbnRlcm5hbCByZXNv
dXJjZXMgaWYgd2UgbmVlZCB0byBpbml0aWFsaXplIGl0LgotICAgIC8vIEluaXRpYWxpemluZyB0
aGlzIG9iamVjdCBtYXkgdGFrZSBsb25nIHRpbWUuIFRvIHByZXZlbnQgZnJvbSBodXJ0aW5nCi0g
ICAgLy8gdGhlIHBlcmZvcm1hbmNlIG9mIHRlc3Rfc2hlbGwsIHdlIGluaXRpYWxpemUgdGhpcyBv
YmplY3Qgd2hlbgotICAgIC8vIFNwZWxsQ2hlY2tXb3JkKCkgaXMgY2FsbGVkIGZvciB0aGUgZmly
c3QgdGltZS4KLSAgICAvLyBUbyBiZSBjb21wbGlhbnQgd2l0aCBTcGVsbENoZWNrOkluaXRpYWxp
emVJZk5lZWRlZCgpLCB0aGlzIGZ1bmN0aW9uCi0gICAgLy8gcmV0dXJucyB0cnVlIGlmIHRoaXMg
b2JqZWN0IGlzIGRvd25sb2FkaW5nIGEgZGljdGlvbmFyeSwgb3RoZXJ3aXNlCi0gICAgLy8gaXQg
cmV0dXJucyBmYWxzZS4KLSAgICBib29sIGluaXRpYWxpemVJZk5lZWRlZCgpOwotCi0gICAgLy8g
QSB0YWJsZSB0aGF0IGNvbnNpc3RzIG9mIG1pc3NwZWxsZWQgd29yZHMuCi0gICAgc3RkOjp2ZWN0
b3I8c3RyaW5nMTY+IG1fbWlzc3BlbGxlZFdvcmRzOwotCi0gICAgLy8gQSBmbGFnIHJlcHJlc2Vu
dGluZyB3aGV0aGVyIG9yIG5vdCB0aGlzIG9iamVjdCBpcyBpbml0aWFsaXplZC4KLSAgICBib29s
IG1faW5pdGlhbGl6ZWQ7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBNb2NrU3BlbGxDaGVja19oCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9N
b2NrV2ViTWVkaWFTdHJlYW1DZW50ZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYk1lZGlhU3RyZWFtQ2VudGVyLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNmNlYTcwZmZhYmM3OWYzMDU1YTY4ZTdjZWNjNjAyYmFhZjA4
ZTQwZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViTWVkaWFTdHJl
YW1DZW50ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpZiBFTkFCTEVfV0VCUlRDCi0jaW5jbHVkZSAiTW9ja1dlYk1lZGlhU3RyZWFt
Q2VudGVyLmgiCi0KLSNpbmNsdWRlIDxwdWJsaWMvV2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVy
Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYk1lZGlhU3RyZWFtLmg+Ci0jaW5jbHVkZSA8cHVibGlj
L1dlYk1lZGlhU3RyZWFtQ2VudGVyQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYk1lZGlh
U3RyZWFtU291cmNlLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYk1lZGlhU3RyZWFtU291cmNlc1Jl
cXVlc3QuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViTWVkaWFTdHJlYW1UcmFjay5oPgotI2luY2x1
ZGUgPHB1YmxpYy9XZWJWZWN0b3IuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotbmFt
ZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1Nb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXI6Ok1vY2tX
ZWJNZWRpYVN0cmVhbUNlbnRlcihXZWJNZWRpYVN0cmVhbUNlbnRlckNsaWVudCogY2xpZW50KQot
ewotfQotCi12b2lkIE1vY2tXZWJNZWRpYVN0cmVhbUNlbnRlcjo6cXVlcnlNZWRpYVN0cmVhbVNv
dXJjZXMoY29uc3QgV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAg
ICBXZWJWZWN0b3I8V2ViTWVkaWFTdHJlYW1Tb3VyY2U+IGF1ZGlvU291cmNlcywgdmlkZW9Tb3Vy
Y2VzOwotICAgIHJlcXVlc3QuZGlkQ29tcGxldGVRdWVyeShhdWRpb1NvdXJjZXMsIHZpZGVvU291
cmNlcyk7Ci19Ci0KLXZvaWQgTW9ja1dlYk1lZGlhU3RyZWFtQ2VudGVyOjpkaWRFbmFibGVNZWRp
YVN0cmVhbVRyYWNrKGNvbnN0IFdlYk1lZGlhU3RyZWFtJiwgY29uc3QgV2ViTWVkaWFTdHJlYW1U
cmFjayYgY29tcG9uZW50KQotewotICAgIGNvbXBvbmVudC5zb3VyY2UoKS5zZXRSZWFkeVN0YXRl
KFdlYk1lZGlhU3RyZWFtU291cmNlOjpSZWFkeVN0YXRlTGl2ZSk7Ci19Ci0KLXZvaWQgTW9ja1dl
Yk1lZGlhU3RyZWFtQ2VudGVyOjpkaWREaXNhYmxlTWVkaWFTdHJlYW1UcmFjayhjb25zdCBXZWJN
ZWRpYVN0cmVhbSYsIGNvbnN0IFdlYk1lZGlhU3RyZWFtVHJhY2smIGNvbXBvbmVudCkKLXsKLSAg
ICBjb21wb25lbnQuc291cmNlKCkuc2V0UmVhZHlTdGF0ZShXZWJNZWRpYVN0cmVhbVNvdXJjZTo6
UmVhZHlTdGF0ZU11dGVkKTsKLX0KLQotYm9vbCBNb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXI6OmRp
ZEFkZE1lZGlhU3RyZWFtVHJhY2soY29uc3QgV2ViTWVkaWFTdHJlYW0mLCBjb25zdCBXZWJNZWRp
YVN0cmVhbVRyYWNrJikKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBNb2NrV2ViTWVk
aWFTdHJlYW1DZW50ZXI6OmRpZFJlbW92ZU1lZGlhU3RyZWFtVHJhY2soY29uc3QgV2ViTWVkaWFT
dHJlYW0mLCBjb25zdCBXZWJNZWRpYVN0cmVhbVRyYWNrJikKLXsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBNb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXI6OmRpZFN0b3BMb2NhbE1lZGlhU3Ry
ZWFtKGNvbnN0IFdlYk1lZGlhU3RyZWFtJiBzdHJlYW0pCi17Ci19Ci0KLWNsYXNzIE1vY2tXZWJB
dWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIgOiBwdWJsaWMgV2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1
bWVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5Nb2NrV2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1
bWVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldEZvcm1hdChzaXplX3QgbnVtYmVyT2ZDaGFu
bmVscywgZmxvYXQgc2FtcGxlUmF0ZSkgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNv
bnN1bWVBdWRpbyhjb25zdCBXZWJWZWN0b3I8Y29uc3QgZmxvYXQqPiYsIHNpemVfdCBudW1iZXJf
b2ZfZnJhbWVzKSBPVkVSUklERSB7IH0KLX07Ci0KLXZvaWQgTW9ja1dlYk1lZGlhU3RyZWFtQ2Vu
dGVyOjpkaWRDcmVhdGVNZWRpYVN0cmVhbShXZWJNZWRpYVN0cmVhbSYgc3RyZWFtKQotewotICAg
IFdlYlZlY3RvcjxXZWJNZWRpYVN0cmVhbVRyYWNrPiBhdWRpb0NvbXBvbmVudHM7Ci0gICAgc3Ry
ZWFtLmF1ZGlvU291cmNlcyhhdWRpb0NvbXBvbmVudHMpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYXVkaW9Db21wb25lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdlYk1lZGlhU3Ry
ZWFtU291cmNlIHNvdXJjZSA9IGF1ZGlvQ29tcG9uZW50c1tpXS5zb3VyY2UoKTsKLSAgICAgICAg
aWYgKHNvdXJjZS5yZXF1aXJlc0F1ZGlvQ29uc3VtZXIoKSkgewotICAgICAgICAgICAgTW9ja1dl
YkF1ZGlvRGVzdGluYXRpb25Db25zdW1lciogY29uc3VtZXIgPSBuZXcgTW9ja1dlYkF1ZGlvRGVz
dGluYXRpb25Db25zdW1lcigpOwotICAgICAgICAgICAgc291cmNlLmFkZEF1ZGlvQ29uc3VtZXIo
Y29uc3VtZXIpOwotICAgICAgICAgICAgc291cmNlLnJlbW92ZUF1ZGlvQ29uc3VtZXIoY29uc3Vt
ZXIpOwotICAgICAgICAgICAgZGVsZXRlIGNvbnN1bWVyOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEVfV0VCUlRDCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXIu
aCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJN
ZWRpYVN0cmVhbUNlbnRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzAyOGEy
NmJjNWFmM2JjNmY3ODAyODc1YTI4ZDNiNDIzMTMxNTQ2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvc3JjL01vY2tXZWJNZWRpYVN0cmVhbUNlbnRlci5oCisrKyAvZGV2L251bGwKQEAg
LTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgTW9ja1dlYk1lZGlhU3RyZWFtQ2VudGVyX2gKLSNkZWZpbmUg
TW9ja1dlYk1lZGlhU3RyZWFtQ2VudGVyX2gKLQotI2luY2x1ZGUgIlRlc3RDb21tb24uaCIKLSNp
bmNsdWRlIDxwdWJsaWMvV2ViTWVkaWFTdHJlYW1DZW50ZXIuaD4KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci1jbGFzcyBXZWJNZWRpYVN0cmVhbUNlbnRlckNsaWVudDsKLX07Ci0KLW5hbWVzcGFjZSBX
ZWJUZXN0UnVubmVyIHsKLQotY2xhc3MgTW9ja1dlYk1lZGlhU3RyZWFtQ2VudGVyIDogcHVibGlj
IFdlYktpdDo6V2ViTWVkaWFTdHJlYW1DZW50ZXIgewotcHVibGljOgotICAgIGV4cGxpY2l0IE1v
Y2tXZWJNZWRpYVN0cmVhbUNlbnRlcihXZWJLaXQ6OldlYk1lZGlhU3RyZWFtQ2VudGVyQ2xpZW50
Kik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcXVlcnlNZWRpYVN0cmVhbVNvdXJjZXMoY29uc3QgV2Vi
S2l0OjpXZWJNZWRpYVN0cmVhbVNvdXJjZXNSZXF1ZXN0JikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIGRpZEVuYWJsZU1lZGlhU3RyZWFtVHJhY2soY29uc3QgV2ViS2l0OjpXZWJNZWRpYVN0
cmVhbSYsIGNvbnN0IFdlYktpdDo6V2ViTWVkaWFTdHJlYW1UcmFjayYpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBkaWREaXNhYmxlTWVkaWFTdHJlYW1UcmFjayhjb25zdCBXZWJLaXQ6Oldl
Yk1lZGlhU3RyZWFtJiwgY29uc3QgV2ViS2l0OjpXZWJNZWRpYVN0cmVhbVRyYWNrJikgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCBib29sIGRpZEFkZE1lZGlhU3RyZWFtVHJhY2soY29uc3QgV2ViS2l0
OjpXZWJNZWRpYVN0cmVhbSYsIGNvbnN0IFdlYktpdDo6V2ViTWVkaWFTdHJlYW1UcmFjayYpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBkaWRSZW1vdmVNZWRpYVN0cmVhbVRyYWNrKGNvbnN0
IFdlYktpdDo6V2ViTWVkaWFTdHJlYW0mLCBjb25zdCBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtVHJh
Y2smKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcExvY2FsTWVkaWFTdHJlYW0o
Y29uc3QgV2ViS2l0OjpXZWJNZWRpYVN0cmVhbSYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCBkaWRDcmVhdGVNZWRpYVN0cmVhbShXZWJLaXQ6OldlYk1lZGlhU3RyZWFtJikgT1ZFUlJJREU7
Ci0KLXByaXZhdGU6Ci0gICAgTW9ja1dlYk1lZGlhU3RyZWFtQ2VudGVyKCkgeyB9Ci19OwotCi19
Ci0KLSNlbmRpZiAvLyBNb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXJfaAotCmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViUlRDRFRN
RlNlbmRlckhhbmRsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9zcmMvTW9ja1dlYlJUQ0RUTUZTZW5kZXJIYW5kbGVyLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMTZkYjQzMjZhNmMzZGFlZjBlMmVjNWNlMzFmNDViYzdiN2UwN2Y5Yy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViUlRDRFRNRlNlbmRlckhh
bmRsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRV9XRUJSVEMKLSNpbmNsdWRlICJNb2NrV2ViUlRDRFRNRlNlbmRlckhhbmRsZXIu
aCIKLQotI2luY2x1ZGUgIldlYlRlc3REZWxlZ2F0ZS5oIgotI2luY2x1ZGUgPGFzc2VydC5oPgot
I2luY2x1ZGUgPHB1YmxpYy9XZWJNZWRpYVN0cmVhbVNvdXJjZS5oPgotI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJSVENEVE1GU2VuZGVySGFuZGxlckNsaWVudC5oPgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLWNsYXNzIERUTUZTZW5kZXJUb25l
VGFzayA6IHB1YmxpYyBXZWJNZXRob2RUYXNrPE1vY2tXZWJSVENEVE1GU2VuZGVySGFuZGxlcj4g
ewotcHVibGljOgotICAgIERUTUZTZW5kZXJUb25lVGFzayhNb2NrV2ViUlRDRFRNRlNlbmRlckhh
bmRsZXIqIG9iamVjdCwgV2ViUlRDRFRNRlNlbmRlckhhbmRsZXJDbGllbnQqIGNsaWVudCkKLSAg
ICAgICAgOiBXZWJNZXRob2RUYXNrPE1vY2tXZWJSVENEVE1GU2VuZGVySGFuZGxlcj4ob2JqZWN0
KQotICAgICAgICAsIG1fY2xpZW50KGNsaWVudCkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIHJ1bklmVmFsaWQoKSBPVkVSUklERQotICAgIHsKLSAgICAgICAgV2ViU3RyaW5nIHRv
bmVzID0gbV9vYmplY3QtPmN1cnJlbnRUb25lQnVmZmVyKCk7Ci0gICAgICAgIG1fb2JqZWN0LT5j
bGVhclRvbmVCdWZmZXIoKTsKLSAgICAgICAgbV9jbGllbnQtPmRpZFBsYXlUb25lKHRvbmVzKTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViUlRDRFRNRlNlbmRlckhhbmRsZXJDbGllbnQqIG1f
Y2xpZW50OwotfTsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLU1vY2tXZWJSVENEVE1GU2Vu
ZGVySGFuZGxlcjo6TW9ja1dlYlJUQ0RUTUZTZW5kZXJIYW5kbGVyKGNvbnN0IFdlYk1lZGlhU3Ry
ZWFtVHJhY2smIHRyYWNrLCBXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRlKQotICAgIDogbV9jbGll
bnQoMCkKLSAgICAsIG1fdHJhY2sodHJhY2spCi0gICAgLCBtX2RlbGVnYXRlKGRlbGVnYXRlKQot
ewotfQotCi12b2lkIE1vY2tXZWJSVENEVE1GU2VuZGVySGFuZGxlcjo6c2V0Q2xpZW50KFdlYlJU
Q0RUTUZTZW5kZXJIYW5kbGVyQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgbV9jbGllbnQgPSBjbGll
bnQ7Ci19Ci0KLVdlYlN0cmluZyBNb2NrV2ViUlRDRFRNRlNlbmRlckhhbmRsZXI6OmN1cnJlbnRU
b25lQnVmZmVyKCkKLXsKLSAgICByZXR1cm4gbV90b25lQnVmZmVyOwotfQotCi1ib29sIE1vY2tX
ZWJSVENEVE1GU2VuZGVySGFuZGxlcjo6Y2FuSW5zZXJ0RFRNRigpCi17Ci0gICAgYXNzZXJ0KG1f
Y2xpZW50ICYmICFtX3RyYWNrLmlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV90cmFjay5zb3VyY2Uo
KS50eXBlKCkgPT0gV2ViTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGVBdWRpbyAmJiBtX3RyYWNrLmlz
RW5hYmxlZCgpICYmIG1fdHJhY2suc291cmNlKCkucmVhZHlTdGF0ZSgpID09IFdlYk1lZGlhU3Ry
ZWFtU291cmNlOjpSZWFkeVN0YXRlTGl2ZTsKLX0KLQotYm9vbCBNb2NrV2ViUlRDRFRNRlNlbmRl
ckhhbmRsZXI6Omluc2VydERUTUYoY29uc3QgV2ViU3RyaW5nJiB0b25lcywgbG9uZyBkdXJhdGlv
biwgbG9uZyBpbnRlclRvbmVHYXApCi17Ci0gICAgYXNzZXJ0KG1fY2xpZW50KTsKLSAgICBpZiAo
IWNhbkluc2VydERUTUYoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV90b25lQnVm
ZmVyID0gdG9uZXM7Ci0gICAgbV9kZWxlZ2F0ZS0+cG9zdFRhc2sobmV3IERUTUZTZW5kZXJUb25l
VGFzayh0aGlzLCBtX2NsaWVudCkpOwotICAgIG1fZGVsZWdhdGUtPnBvc3RUYXNrKG5ldyBEVE1G
U2VuZGVyVG9uZVRhc2sodGhpcywgbV9jbGllbnQpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
fQotCi0jZW5kaWYgLy8gRU5BQkxFX1dFQlJUQwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlJUQ0RUTUZTZW5kZXJIYW5kbGVy
LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2Vi
UlRDRFRNRlNlbmRlckhhbmRsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkw
ZGFiODg0Y2ZmZGFiM2E2OTRhNWM4YmI4ODIyZWEwZjc4YWRjZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViUlRDRFRNRlNlbmRlckhhbmRsZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgR09PR0xFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIE1vY2tXZWJSVENEVE1GU2VuZGVySGFuZGxlcl9oCi0jZGVm
aW5lIE1vY2tXZWJSVENEVE1GU2VuZGVySGFuZGxlcl9oCi0KLSNpbmNsdWRlICJUZXN0Q29tbW9u
LmgiCi0jaW5jbHVkZSAiV2ViVGFzay5oIgotI2luY2x1ZGUgPHB1YmxpYy9XZWJNZWRpYVN0cmVh
bVRyYWNrLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlJUQ0RUTUZTZW5kZXJIYW5kbGVyLmg+Ci0j
aW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7
Ci0KLWNsYXNzIFdlYlRlc3REZWxlZ2F0ZTsKLQotY2xhc3MgTW9ja1dlYlJUQ0RUTUZTZW5kZXJI
YW5kbGVyIDogcHVibGljIFdlYktpdDo6V2ViUlRDRFRNRlNlbmRlckhhbmRsZXIgewotcHVibGlj
OgotICAgIE1vY2tXZWJSVENEVE1GU2VuZGVySGFuZGxlcihjb25zdCBXZWJLaXQ6OldlYk1lZGlh
U3RyZWFtVHJhY2smLCBXZWJUZXN0RGVsZWdhdGUqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRD
bGllbnQoV2ViS2l0OjpXZWJSVENEVE1GU2VuZGVySGFuZGxlckNsaWVudCopIE9WRVJSSURFOwot
Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlN0cmluZyBjdXJyZW50VG9uZUJ1ZmZlcigpIE9WRVJS
SURFOwotCi0gICAgdmlydHVhbCBib29sIGNhbkluc2VydERUTUYoKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIGJvb2wgaW5zZXJ0RFRNRihjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgdG9uZXMsIGxv
bmcgZHVyYXRpb24sIGxvbmcgaW50ZXJUb25lR2FwKSBPVkVSUklERTsKLQotICAgIC8vIFdlYlRh
c2sgcmVsYXRlZCBtZXRob2RzCi0gICAgV2ViVGFza0xpc3QqIHRhc2tMaXN0KCkgeyByZXR1cm4g
Jm1fdGFza0xpc3Q7IH0KLSAgICB2b2lkIGNsZWFyVG9uZUJ1ZmZlcigpIHsgbV90b25lQnVmZmVy
LnJlc2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBNb2NrV2ViUlRDRFRNRlNlbmRlckhhbmRsZXIo
KTsKLQotICAgIFdlYktpdDo6V2ViUlRDRFRNRlNlbmRlckhhbmRsZXJDbGllbnQqIG1fY2xpZW50
OwotICAgIFdlYktpdDo6V2ViTWVkaWFTdHJlYW1UcmFjayBtX3RyYWNrOwotICAgIFdlYktpdDo6
V2ViU3RyaW5nIG1fdG9uZUJ1ZmZlcjsKLSAgICBXZWJUYXNrTGlzdCBtX3Rhc2tMaXN0OwotICAg
IFdlYlRlc3REZWxlZ2F0ZSogbV9kZWxlZ2F0ZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIE1vY2tX
ZWJSVENEVE1GU2VuZGVySGFuZGxlcl9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmNw
cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJS
VENEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
YzRkMjUyYTY5YmJlOTdmMGUyYzMyNTJkMTljMmY0N2ExN2Y1YWFjLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRV9XRUJSVEMKLSNpbmNsdWRlICJNb2NrV2ViUlRDRGF0YUNoYW5u
ZWxIYW5kbGVyLmgiCi0KLSNpbmNsdWRlICJXZWJUZXN0RGVsZWdhdGUuaCIKLSNpbmNsdWRlIDxh
c3NlcnQuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVy
IHsKLQotY2xhc3MgRGF0YUNoYW5uZWxSZWFkeVN0YXRlVGFzayA6IHB1YmxpYyBXZWJNZXRob2RU
YXNrPE1vY2tXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IHsKLXB1YmxpYzoKLSAgICBEYXRhQ2hh
bm5lbFJlYWR5U3RhdGVUYXNrKE1vY2tXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIqIG9iamVjdCwg
V2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50KiBkYXRhQ2hhbm5lbENsaWVudCwgV2ViUlRD
RGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50OjpSZWFkeVN0YXRlIHN0YXRlKQotICAgICAgICA6IFdl
Yk1ldGhvZFRhc2s8TW9ja1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlcj4ob2JqZWN0KQotICAgICAg
ICAsIG1fZGF0YUNoYW5uZWxDbGllbnQoZGF0YUNoYW5uZWxDbGllbnQpCi0gICAgICAgICwgbV9z
dGF0ZShzdGF0ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQo
KSBPVkVSUklERQotICAgIHsKLSAgICAgICAgbV9kYXRhQ2hhbm5lbENsaWVudC0+ZGlkQ2hhbmdl
UmVhZHlTdGF0ZShtX3N0YXRlKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViUlRDRGF0YUNo
YW5uZWxIYW5kbGVyQ2xpZW50KiBtX2RhdGFDaGFubmVsQ2xpZW50OwotICAgIFdlYlJUQ0RhdGFD
aGFubmVsSGFuZGxlckNsaWVudDo6UmVhZHlTdGF0ZSBtX3N0YXRlOwotfTsKLQotLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0KLU1vY2tXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXI6Ok1vY2tXZWJSVENE
YXRhQ2hhbm5lbEhhbmRsZXIoV2ViU3RyaW5nIGxhYmVsLCBib29sIHJlbGlhYmxlLCBXZWJUZXN0
RGVsZWdhdGUqIGRlbGVnYXRlKQotICAgIDogbV9jbGllbnQoMCkKLSAgICAsIG1fbGFiZWwobGFi
ZWwpCi0gICAgLCBtX3JlbGlhYmxlKHJlbGlhYmxlKQotICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0
ZSkKLXsKLX0KLQotdm9pZCBNb2NrV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyOjpzZXRDbGllbnQo
V2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgbV9jbGllbnQg
PSBjbGllbnQ7Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2RlbGVnYXRlLT5wb3N0VGFz
ayhuZXcgRGF0YUNoYW5uZWxSZWFkeVN0YXRlVGFzayh0aGlzLCBtX2NsaWVudCwgV2ViUlRDRGF0
YUNoYW5uZWxIYW5kbGVyQ2xpZW50OjpSZWFkeVN0YXRlT3BlbikpOwotfQotCi11bnNpZ25lZCBs
b25nIE1vY2tXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXI6OmJ1ZmZlcmVkQW1vdW50KCkKLXsKLSAg
ICByZXR1cm4gMDsKLX0KLQotYm9vbCBNb2NrV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyOjpzZW5k
U3RyaW5nRGF0YShjb25zdCBXZWJTdHJpbmcmIGRhdGEpCi17Ci0gICAgYXNzZXJ0KG1fY2xpZW50
KTsKLSAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZVN0cmluZ0RhdGEoZGF0YSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgTW9ja1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlcjo6c2VuZFJhd0Rh
dGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0gICAgYXNzZXJ0KG1fY2xpZW50
KTsKLSAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZVJhd0RhdGEoZGF0YSwgc2l6ZSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgTW9ja1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlcjo6Y2xvc2Uo
KQotewotICAgIGFzc2VydChtX2NsaWVudCk7Ci0gICAgbV9kZWxlZ2F0ZS0+cG9zdFRhc2sobmV3
IERhdGFDaGFubmVsUmVhZHlTdGF0ZVRhc2sodGhpcywgbV9jbGllbnQsIFdlYlJUQ0RhdGFDaGFu
bmVsSGFuZGxlckNsaWVudDo6UmVhZHlTdGF0ZUNsb3NlZCkpOwotfQotCi19Ci0KLSNlbmRpZiAv
LyBFTkFCTEVfV0VCUlRDCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmggYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViUlRDRGF0YUNoYW5u
ZWxIYW5kbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjOTM4MTFjZTIzOTAw
NmU2NmUxMTAyNzQ2MWFkZjc1ZGY1ZDRjYzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5l
ci9zcmMvTW9ja1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEs
NjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNb2NrV2ViUlRDRGF0YUNoYW5uZWxI
YW5kbGVyX2gKLSNkZWZpbmUgTW9ja1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlcl9oCi0KLSNpbmNs
dWRlICJUZXN0Q29tbW9uLmgiCi0jaW5jbHVkZSAiV2ViVGFzay5oIgotI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotY2xhc3MgV2ViVGVzdERlbGVnYXRl
OwotCi1jbGFzcyBNb2NrV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyIDogcHVibGljIFdlYktpdDo6
V2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICBNb2NrV2ViUlRDRGF0YUNo
YW5uZWxIYW5kbGVyKFdlYktpdDo6V2ViU3RyaW5nIGxhYmVsLCBib29sIHJlbGlhYmxlLCBXZWJU
ZXN0RGVsZWdhdGUqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRDbGllbnQoV2ViS2l0OjpXZWJS
VENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYktp
dDo6V2ViU3RyaW5nIGxhYmVsKCkgT1ZFUlJJREUgeyByZXR1cm4gbV9sYWJlbDsgfQotICAgIHZp
cnR1YWwgYm9vbCBpc1JlbGlhYmxlKCkgT1ZFUlJJREUgeyByZXR1cm4gbV9yZWxpYWJsZTsgfQot
ICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBidWZmZXJlZEFtb3VudCgpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgYm9vbCBzZW5kU3RyaW5nRGF0YShjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBzZW5kUmF3RGF0YShjb25zdCBjaGFyKiwgc2l6ZV90
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSBPVkVSUklERTsKLQotICAgIC8v
IFdlYlRhc2sgcmVsYXRlZCBtZXRob2RzCi0gICAgV2ViVGFza0xpc3QqIHRhc2tMaXN0KCkgeyBy
ZXR1cm4gJm1fdGFza0xpc3Q7IH0KLQotcHJpdmF0ZToKLSAgICBNb2NrV2ViUlRDRGF0YUNoYW5u
ZWxIYW5kbGVyKCk7Ci0KLSAgICBXZWJLaXQ6OldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlckNsaWVu
dCogbV9jbGllbnQ7Ci0gICAgV2ViS2l0OjpXZWJTdHJpbmcgbV9sYWJlbDsKLSAgICBib29sIG1f
cmVsaWFibGU7Ci0gICAgV2ViVGFza0xpc3QgbV90YXNrTGlzdDsKLSAgICBXZWJUZXN0RGVsZWdh
dGUqIG1fZGVsZWdhdGU7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBNb2NrV2ViUlRDRGF0YUNoYW5u
ZWxIYW5kbGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvc3JjL01vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlJUQ1BlZXJDb25u
ZWN0aW9uSGFuZGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NGVhZDZm
N2YwMzMzZDc4MDQzODM3M2I2NzNjMmIxMWVhYzg1NTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9zcmMvTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlci5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwzMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRV9X
RUJSVEMKLSNpbmNsdWRlICJNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgiCi0KLSNp
bmNsdWRlICJNb2NrQ29uc3RyYWludHMuaCIKLSNpbmNsdWRlICJNb2NrV2ViUlRDRFRNRlNlbmRl
ckhhbmRsZXIuaCIKLSNpbmNsdWRlICJNb2NrV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmgiCi0j
aW5jbHVkZSAiVGVzdEludGVyZmFjZXMuaCIKLSNpbmNsdWRlICJXZWJUZXN0RGVsZWdhdGUuaCIK
LSNpbmNsdWRlIDxwdWJsaWMvV2ViTWVkaWFDb25zdHJhaW50cy5oPgotI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJNZWRpYVN0cmVhbS5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJNZWRpYVN0cmVhbVRyYWNr
Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudC5o
PgotI2luY2x1ZGUgPHB1YmxpYy9XZWJSVENTZXNzaW9uRGVzY3JpcHRpb24uaD4KLSNpbmNsdWRl
IDxwdWJsaWMvV2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uUmVxdWVzdC5oPgotI2luY2x1ZGUgPHB1
YmxpYy9XZWJSVENTdGF0c1JlcXVlc3QuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViUlRDU3RhdHNS
ZXNwb25zZS5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJSVENWb2lkUmVxdWVzdC5oPgotI2luY2x1
ZGUgPHB1YmxpYy9XZWJTdHJpbmcuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViVmVjdG9yLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQot
Y2xhc3MgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uUmVxdWVzdFN1Y2NlZGVkVGFzayA6IHB1YmxpYyBX
ZWJNZXRob2RUYXNrPE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXI+IHsKLXB1YmxpYzoK
LSAgICBSVENTZXNzaW9uRGVzY3JpcHRpb25SZXF1ZXN0U3VjY2VkZWRUYXNrKE1vY2tXZWJSVENQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXIqIG9iamVjdCwgY29uc3QgV2ViUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJiByZXN1
bHQpCi0gICAgICAgIDogV2ViTWV0aG9kVGFzazxNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5k
bGVyPihvYmplY3QpCi0gICAgICAgICwgbV9yZXF1ZXN0KHJlcXVlc3QpCi0gICAgICAgICwgbV9y
ZXN1bHQocmVzdWx0KQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxp
ZCgpIE9WRVJSSURFCi0gICAgewotICAgICAgICBtX3JlcXVlc3QucmVxdWVzdFN1Y2NlZWRlZCht
X3Jlc3VsdCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlv
blJlcXVlc3QgbV9yZXF1ZXN0OwotICAgIFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiBtX3Jlc3Vs
dDsKLX07Ci0KLWNsYXNzIFJUQ1Nlc3Npb25EZXNjcmlwdGlvblJlcXVlc3RGYWlsZWRUYXNrIDog
cHVibGljIFdlYk1ldGhvZFRhc2s8TW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcj4gewot
cHVibGljOgotICAgIFJUQ1Nlc3Npb25EZXNjcmlwdGlvblJlcXVlc3RGYWlsZWRUYXNrKE1vY2tX
ZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIqIG9iamVjdCwgY29uc3QgV2ViUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uUmVxdWVzdCYgcmVxdWVzdCkKLSAgICAgICAgOiBXZWJNZXRob2RUYXNrPE1vY2tX
ZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXI+KG9iamVjdCkKLSAgICAgICAgLCBtX3JlcXVlc3Qo
cmVxdWVzdCkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSBP
VkVSUklERQotICAgIHsKLSAgICAgICAgbV9yZXF1ZXN0LnJlcXVlc3RGYWlsZWQoIlRFU1RfRVJS
T1IiKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uUmVx
dWVzdCBtX3JlcXVlc3Q7Ci19OwotCi1jbGFzcyBSVENTdGF0c1JlcXVlc3RTdWNjZWVkZWRUYXNr
IDogcHVibGljIFdlYk1ldGhvZFRhc2s8TW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcj4g
ewotcHVibGljOgotICAgIFJUQ1N0YXRzUmVxdWVzdFN1Y2NlZWRlZFRhc2soTW9ja1dlYlJUQ1Bl
ZXJDb25uZWN0aW9uSGFuZGxlciogb2JqZWN0LCBjb25zdCBXZWJLaXQ6OldlYlJUQ1N0YXRzUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViS2l0OjpXZWJSVENTdGF0c1Jlc3BvbnNlJiByZXNwb25z
ZSkKLSAgICAgICAgOiBXZWJNZXRob2RUYXNrPE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRs
ZXI+KG9iamVjdCkKLSAgICAgICAgLCBtX3JlcXVlc3QocmVxdWVzdCkKLSAgICAgICAgLCBtX3Jl
c3BvbnNlKHJlc3BvbnNlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcnVuSWZW
YWxpZCgpIE9WRVJSSURFCi0gICAgewotICAgICAgICBtX3JlcXVlc3QucmVxdWVzdFN1Y2NlZWRl
ZChtX3Jlc3BvbnNlKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViS2l0OjpXZWJSVENTdGF0
c1JlcXVlc3QgbV9yZXF1ZXN0OwotICAgIFdlYktpdDo6V2ViUlRDU3RhdHNSZXNwb25zZSBtX3Jl
c3BvbnNlOwotfTsKLQotY2xhc3MgUlRDVm9pZFJlcXVlc3RUYXNrIDogcHVibGljIFdlYk1ldGhv
ZFRhc2s8TW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcj4gewotcHVibGljOgotICAgIFJU
Q1ZvaWRSZXF1ZXN0VGFzayhNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKiBvYmplY3Qs
IGNvbnN0IFdlYlJUQ1ZvaWRSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHN1Y2NlZWRlZCkKLSAgICAg
ICAgOiBXZWJNZXRob2RUYXNrPE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXI+KG9iamVj
dCkKLSAgICAgICAgLCBtX3JlcXVlc3QocmVxdWVzdCkKLSAgICAgICAgLCBtX3N1Y2NlZWRlZChz
dWNjZWVkZWQpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBydW5JZlZhbGlkKCkg
T1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIGlmIChtX3N1Y2NlZWRlZCkKLSAgICAgICAgICAgIG1f
cmVxdWVzdC5yZXF1ZXN0U3VjY2VlZGVkKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1f
cmVxdWVzdC5yZXF1ZXN0RmFpbGVkKCJURVNUX0VSUk9SIik7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIFdlYlJUQ1ZvaWRSZXF1ZXN0IG1fcmVxdWVzdDsKLSAgICBib29sIG1fc3VjY2VlZGVkOwot
fTsKLQotY2xhc3MgUlRDUGVlckNvbm5lY3Rpb25TdGF0ZVRhc2sgOiBwdWJsaWMgV2ViTWV0aG9k
VGFzazxNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyPiB7Ci1wdWJsaWM6Ci0gICAgUlRD
UGVlckNvbm5lY3Rpb25TdGF0ZVRhc2soTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlciog
b2JqZWN0LCBXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQqIGNsaWVudCwgV2ViUlRD
UGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50OjpJQ0VDb25uZWN0aW9uU3RhdGUgY29ubmVjdGlv
blN0YXRlLCBXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQ6OklDRUdhdGhlcmluZ1N0
YXRlIGdhdGhlcmluZ1N0YXRlKQotICAgICAgICA6IFdlYk1ldGhvZFRhc2s8TW9ja1dlYlJUQ1Bl
ZXJDb25uZWN0aW9uSGFuZGxlcj4ob2JqZWN0KQotICAgICAgICAsIG1fY2xpZW50KGNsaWVudCkK
LSAgICAgICAgLCBtX2Nvbm5lY3Rpb25TdGF0ZShjb25uZWN0aW9uU3RhdGUpCi0gICAgICAgICwg
bV9nYXRoZXJpbmdTdGF0ZShnYXRoZXJpbmdTdGF0ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB2b2lkIHJ1bklmVmFsaWQoKSBPVkVSUklERQotICAgIHsKLSAgICAgICAgbV9jbGllbnQt
PmRpZENoYW5nZUlDRUdhdGhlcmluZ1N0YXRlKG1fZ2F0aGVyaW5nU3RhdGUpOwotICAgICAgICBt
X2NsaWVudC0+ZGlkQ2hhbmdlSUNFQ29ubmVjdGlvblN0YXRlKG1fY29ubmVjdGlvblN0YXRlKTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50
KiBtX2NsaWVudDsKLSAgICBXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQ6OklDRUNv
bm5lY3Rpb25TdGF0ZSBtX2Nvbm5lY3Rpb25TdGF0ZTsKLSAgICBXZWJSVENQZWVyQ29ubmVjdGlv
bkhhbmRsZXJDbGllbnQ6OklDRUdhdGhlcmluZ1N0YXRlIG1fZ2F0aGVyaW5nU3RhdGU7Ci19Owot
Ci1jbGFzcyBSZW1vdGVEYXRhQ2hhbm5lbFRhc2sgOiBwdWJsaWMgV2ViTWV0aG9kVGFzazxNb2Nr
V2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyPiB7Ci1wdWJsaWM6Ci0gICAgUmVtb3RlRGF0YUNo
YW5uZWxUYXNrKE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIqIG9iamVjdCwgV2ViUlRD
UGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KiBjbGllbnQsIFdlYlRlc3REZWxlZ2F0ZSogZGVs
ZWdhdGUpCi0gICAgICAgIDogV2ViTWV0aG9kVGFzazxNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25I
YW5kbGVyPihvYmplY3QpCi0gICAgICAgICwgbV9jbGllbnQoY2xpZW50KQotICAgICAgICAsIG1f
ZGVsZWdhdGUoZGVsZWdhdGUpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBydW5J
ZlZhbGlkKCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIFdlYlJUQ0RhdGFDaGFubmVsSGFuZGxl
ciogcmVtb3RlRGF0YUNoYW5uZWwgPSBuZXcgTW9ja1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlcigi
TW9ja1JlbW90ZURhdGFDaGFubmVsIiwgdHJ1ZSwgbV9kZWxlZ2F0ZSk7Ci0gICAgICAgIG1fY2xp
ZW50LT5kaWRBZGRSZW1vdGVEYXRhQ2hhbm5lbChyZW1vdGVEYXRhQ2hhbm5lbCk7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIFdlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCogbV9jbGll
bnQ7Ci0gICAgV2ViVGVzdERlbGVnYXRlKiBtX2RlbGVnYXRlOwotfTsKLQotLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0KLU1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXI6Ok1vY2tXZWJSVENQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXIoV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KiBj
bGllbnQsIFRlc3RJbnRlcmZhY2VzKiBpbnRlcmZhY2VzKQotICAgIDogbV9jbGllbnQoY2xpZW50
KQotICAgICwgbV9zdG9wcGVkKGZhbHNlKQotICAgICwgbV9zdHJlYW1Db3VudCgwKQotICAgICwg
bV9pbnRlcmZhY2VzKGludGVyZmFjZXMpCi17Ci19Ci0KLWJvb2wgTW9ja1dlYlJUQ1BlZXJDb25u
ZWN0aW9uSGFuZGxlcjo6aW5pdGlhbGl6ZShjb25zdCBXZWJSVENDb25maWd1cmF0aW9uJiwgY29u
c3QgV2ViTWVkaWFDb25zdHJhaW50cyYgY29uc3RyYWludHMpCi17Ci0gICAgaWYgKE1vY2tDb25z
dHJhaW50czo6dmVyaWZ5Q29uc3RyYWludHMoY29uc3RyYWludHMpKSB7Ci0gICAgICAgIG1faW50
ZXJmYWNlcy0+ZGVsZWdhdGUoKS0+cG9zdFRhc2sobmV3IFJUQ1BlZXJDb25uZWN0aW9uU3RhdGVU
YXNrKHRoaXMsIG1fY2xpZW50LCBXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQ6OklD
RUNvbm5lY3Rpb25TdGF0ZUNvbXBsZXRlZCwgV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xp
ZW50OjpJQ0VHYXRoZXJpbmdTdGF0ZUNvbXBsZXRlKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBNb2NrV2ViUlRDUGVlckNvbm5l
Y3Rpb25IYW5kbGVyOjpjcmVhdGVPZmZlcihjb25zdCBXZWJSVENTZXNzaW9uRGVzY3JpcHRpb25S
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJNZWRpYUNvbnN0cmFpbnRzJiBjb25zdHJhaW50cykK
LXsKLSAgICBXZWJTdHJpbmcgc2hvdWxkU3VjY2VlZDsKLSAgICBpZiAoY29uc3RyYWludHMuZ2V0
TWFuZGF0b3J5Q29uc3RyYWludFZhbHVlKCJzdWNjZWVkIiwgc2hvdWxkU3VjY2VlZCkgJiYgc2hv
dWxkU3VjY2VlZCA9PSAidHJ1ZSIpIHsKLSAgICAgICAgV2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
IHNlc3Npb25EZXNjcmlwdGlvbjsKLSAgICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uLmluaXRpYWxp
emUoIm9mZmVyIiwgImxvY2FsIik7Ci0gICAgICAgIG1faW50ZXJmYWNlcy0+ZGVsZWdhdGUoKS0+
cG9zdFRhc2sobmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvblJlcXVlc3RTdWNjZWRlZFRhc2sodGhp
cywgcmVxdWVzdCwgc2Vzc2lvbkRlc2NyaXB0aW9uKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1f
aW50ZXJmYWNlcy0+ZGVsZWdhdGUoKS0+cG9zdFRhc2sobmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlv
blJlcXVlc3RGYWlsZWRUYXNrKHRoaXMsIHJlcXVlc3QpKTsKLX0KLQotdm9pZCBNb2NrV2ViUlRD
UGVlckNvbm5lY3Rpb25IYW5kbGVyOjpjcmVhdGVBbnN3ZXIoY29uc3QgV2ViUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViTWVkaWFDb25zdHJhaW50cyYpCi17
Ci0gICAgaWYgKCFtX3JlbW90ZURlc2NyaXB0aW9uLmlzTnVsbCgpKSB7Ci0gICAgICAgIFdlYlJU
Q1Nlc3Npb25EZXNjcmlwdGlvbiBzZXNzaW9uRGVzY3JpcHRpb247Ci0gICAgICAgIHNlc3Npb25E
ZXNjcmlwdGlvbi5pbml0aWFsaXplKCJhbnN3ZXIiLCAibG9jYWwiKTsKLSAgICAgICAgbV9pbnRl
cmZhY2VzLT5kZWxlZ2F0ZSgpLT5wb3N0VGFzayhuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uUmVx
dWVzdFN1Y2NlZGVkVGFzayh0aGlzLCByZXF1ZXN0LCBzZXNzaW9uRGVzY3JpcHRpb24pKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgbV9pbnRlcmZhY2VzLT5kZWxlZ2F0ZSgpLT5wb3N0VGFzayhuZXcg
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uUmVxdWVzdEZhaWxlZFRhc2sodGhpcywgcmVxdWVzdCkpOwot
fQotCi12b2lkIE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnNldExvY2FsRGVzY3Jp
cHRpb24oY29uc3QgV2ViUlRDVm9pZFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYlJUQ1Nlc3Np
b25EZXNjcmlwdGlvbiYgbG9jYWxEZXNjcmlwdGlvbikKLXsKLSAgICBpZiAoIWxvY2FsRGVzY3Jp
cHRpb24uaXNOdWxsKCkgJiYgbG9jYWxEZXNjcmlwdGlvbi5zZHAoKSA9PSAibG9jYWwiKSB7Ci0g
ICAgICAgIG1fbG9jYWxEZXNjcmlwdGlvbiA9IGxvY2FsRGVzY3JpcHRpb247Ci0gICAgICAgIG1f
aW50ZXJmYWNlcy0+ZGVsZWdhdGUoKS0+cG9zdFRhc2sobmV3IFJUQ1ZvaWRSZXF1ZXN0VGFzayh0
aGlzLCByZXF1ZXN0LCB0cnVlKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1faW50ZXJmYWNlcy0+
ZGVsZWdhdGUoKS0+cG9zdFRhc2sobmV3IFJUQ1ZvaWRSZXF1ZXN0VGFzayh0aGlzLCByZXF1ZXN0
LCBmYWxzZSkpOwotfQotCi12b2lkIE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnNl
dFJlbW90ZURlc2NyaXB0aW9uKGNvbnN0IFdlYlJUQ1ZvaWRSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24mIHJlbW90ZURlc2NyaXB0aW9uKQotewotICAgIGlm
ICghcmVtb3RlRGVzY3JpcHRpb24uaXNOdWxsKCkgJiYgcmVtb3RlRGVzY3JpcHRpb24uc2RwKCkg
PT0gInJlbW90ZSIpIHsKLSAgICAgICAgbV9yZW1vdGVEZXNjcmlwdGlvbiA9IHJlbW90ZURlc2Ny
aXB0aW9uOwotICAgICAgICBtX2ludGVyZmFjZXMtPmRlbGVnYXRlKCktPnBvc3RUYXNrKG5ldyBS
VENWb2lkUmVxdWVzdFRhc2sodGhpcywgcmVxdWVzdCwgdHJ1ZSkpOwotICAgIH0gZWxzZQotICAg
ICAgICBtX2ludGVyZmFjZXMtPmRlbGVnYXRlKCktPnBvc3RUYXNrKG5ldyBSVENWb2lkUmVxdWVz
dFRhc2sodGhpcywgcmVxdWVzdCwgZmFsc2UpKTsKLX0KLQotV2ViUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uIE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OmxvY2FsRGVzY3JpcHRpb24oKQot
ewotICAgIHJldHVybiBtX2xvY2FsRGVzY3JpcHRpb247Ci19Ci0KLVdlYlJUQ1Nlc3Npb25EZXNj
cmlwdGlvbiBNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpyZW1vdGVEZXNjcmlwdGlv
bigpCi17Ci0gICAgcmV0dXJuIG1fcmVtb3RlRGVzY3JpcHRpb247Ci19Ci0KLWJvb2wgTW9ja1dl
YlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcjo6dXBkYXRlSUNFKGNvbnN0IFdlYlJUQ0NvbmZpZ3Vy
YXRpb24mLCBjb25zdCBXZWJNZWRpYUNvbnN0cmFpbnRzJikKLXsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyOjphZGRJQ0VDYW5kaWRh
dGUoY29uc3QgV2ViUlRDSUNFQ2FuZGlkYXRlJiBpY2VDYW5kaWRhdGUpCi17Ci0gICAgbV9jbGll
bnQtPmRpZEdlbmVyYXRlSUNFQ2FuZGlkYXRlKGljZUNhbmRpZGF0ZSk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcjo6YWRkU3RyZWFt
KGNvbnN0IFdlYk1lZGlhU3RyZWFtJiBzdHJlYW0sIGNvbnN0IFdlYk1lZGlhQ29uc3RyYWludHMm
KQotewotICAgICsrbV9zdHJlYW1Db3VudDsKLSAgICBtX2NsaWVudC0+bmVnb3RpYXRpb25OZWVk
ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNb2NrV2ViUlRDUGVlckNvbm5lY3Rp
b25IYW5kbGVyOjpyZW1vdmVTdHJlYW0oY29uc3QgV2ViTWVkaWFTdHJlYW0mIHN0cmVhbSkKLXsK
LSAgICAtLW1fc3RyZWFtQ291bnQ7Ci0gICAgbV9jbGllbnQtPm5lZ290aWF0aW9uTmVlZGVkKCk7
Ci19Ci0KLXZvaWQgTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcjo6Z2V0U3RhdHMoY29u
c3QgV2ViUlRDU3RhdHNSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIFdlYlJUQ1N0YXRzUmVzcG9u
c2UgcmVzcG9uc2UgPSByZXF1ZXN0LmNyZWF0ZVJlc3BvbnNlKCk7Ci0gICAgZG91YmxlIGN1cnJl
bnREYXRlID0gbV9pbnRlcmZhY2VzLT5kZWxlZ2F0ZSgpLT5nZXRDdXJyZW50VGltZUluTWlsbGlz
ZWNvbmQoKTsKLSAgICBpZiAocmVxdWVzdC5oYXNTZWxlY3RvcigpKSB7Ci0gICAgICAgIFdlYk1l
ZGlhU3RyZWFtIHN0cmVhbSA9IHJlcXVlc3Quc3RyZWFtKCk7Ci0gICAgICAgIC8vIEZJWE1FOiBU
aGVyZSBpcyBubyBjaGVjayB0aGF0IHRoZSBmZXRjaGVkIHZhbHVlcyBhcmUgdmFsaWQuCi0gICAg
ICAgIHNpemVfdCByZXBvcnRJbmRleCA9IHJlc3BvbnNlLmFkZFJlcG9ydCgiTW9jayB2aWRlbyIs
ICJzc3JjIiwgY3VycmVudERhdGUpOwotICAgICAgICByZXNwb25zZS5hZGRTdGF0aXN0aWMocmVw
b3J0SW5kZXgsICJ0eXBlIiwgInZpZGVvIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBtX3N0cmVhbUNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIHNpemVfdCBy
ZXBvcnRJbmRleCA9IHJlc3BvbnNlLmFkZFJlcG9ydCgiTW9jayBhdWRpbyIsICJzc3JjIiwgY3Vy
cmVudERhdGUpOwotICAgICAgICAgICAgcmVzcG9uc2UuYWRkU3RhdGlzdGljKHJlcG9ydEluZGV4
LCAidHlwZSIsICJhdWRpbyIpOwotICAgICAgICAgICAgcmVwb3J0SW5kZXggPSByZXNwb25zZS5h
ZGRSZXBvcnQoIk1vY2sgdmlkZW8iLCAic3NyYyIsIGN1cnJlbnREYXRlKTsKLSAgICAgICAgICAg
IHJlc3BvbnNlLmFkZFN0YXRpc3RpYyhyZXBvcnRJbmRleCwgInR5cGUiLCAidmlkZW8iKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBtX2ludGVyZmFjZXMtPmRlbGVnYXRlKCktPnBvc3RUYXNrKG5l
dyBSVENTdGF0c1JlcXVlc3RTdWNjZWVkZWRUYXNrKHRoaXMsIHJlcXVlc3QsIHJlc3BvbnNlKSk7
Ci19Ci0KLVdlYlJUQ0RhdGFDaGFubmVsSGFuZGxlciogTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9u
SGFuZGxlcjo6Y3JlYXRlRGF0YUNoYW5uZWwoY29uc3QgV2ViU3RyaW5nJiBsYWJlbCwgYm9vbCBy
ZWxpYWJsZSkKLXsKLSAgICBtX2ludGVyZmFjZXMtPmRlbGVnYXRlKCktPnBvc3RUYXNrKG5ldyBS
ZW1vdGVEYXRhQ2hhbm5lbFRhc2sodGhpcywgbV9jbGllbnQsIG1faW50ZXJmYWNlcy0+ZGVsZWdh
dGUoKSkpOwotCi0gICAgcmV0dXJuIG5ldyBNb2NrV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyKGxh
YmVsLCByZWxpYWJsZSwgbV9pbnRlcmZhY2VzLT5kZWxlZ2F0ZSgpKTsKLX0KLQotV2ViUlRDRFRN
RlNlbmRlckhhbmRsZXIqIE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OmNyZWF0ZURU
TUZTZW5kZXIoY29uc3QgV2ViTWVkaWFTdHJlYW1UcmFjayYgdHJhY2spCi17Ci0gICAgcmV0dXJu
IG5ldyBNb2NrV2ViUlRDRFRNRlNlbmRlckhhbmRsZXIodHJhY2ssIG1faW50ZXJmYWNlcy0+ZGVs
ZWdhdGUoKSk7Ci19Ci0KLXZvaWQgTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcjo6c3Rv
cCgpCi17Ci0gICAgbV9zdG9wcGVkID0gdHJ1ZTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxF
X1dFQlJUQwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9zcmMvTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlci5oIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9u
SGFuZGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjVhMjA4M2IxM2NmYWRm
ZGU5MzgwN2E2OTUxMWNjN2Y2YTUxMzM4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIv
c3JjL01vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJfaAotI2Rl
ZmluZSBNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyX2gKLQotI2luY2x1ZGUgIlRlc3RD
b21tb24uaCIKLSNpbmNsdWRlICJXZWJUYXNrLmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYlJUQ1Bl
ZXJDb25uZWN0aW9uSGFuZGxlci5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJSVENTZXNzaW9uRGVz
Y3JpcHRpb24uaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uUmVx
dWVzdC5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJSVENTdGF0c1JlcXVlc3QuaD4KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQ7Ci19
OwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLWNsYXNzIFRlc3RJbnRlcmZhY2VzOwot
Ci1jbGFzcyBNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyIDogcHVibGljIFdlYktpdDo6
V2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyIHsKLXB1YmxpYzoKLSAgICBNb2NrV2ViUlRDUGVl
ckNvbm5lY3Rpb25IYW5kbGVyKFdlYktpdDo6V2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xp
ZW50KiwgVGVzdEludGVyZmFjZXMqKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKGNv
bnN0IFdlYktpdDo6V2ViUlRDQ29uZmlndXJhdGlvbiYsIGNvbnN0IFdlYktpdDo6V2ViTWVkaWFD
b25zdHJhaW50cyYpIE9WRVJSSURFOwotCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZU9mZmVyKGNv
bnN0IFdlYktpdDo6V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uUmVxdWVzdCYsIGNvbnN0IFdlYktp
dDo6V2ViTWVkaWFDb25zdHJhaW50cyYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjcmVh
dGVBbnN3ZXIoY29uc3QgV2ViS2l0OjpXZWJSVENTZXNzaW9uRGVzY3JpcHRpb25SZXF1ZXN0Jiwg
Y29uc3QgV2ViS2l0OjpXZWJNZWRpYUNvbnN0cmFpbnRzJikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIHNldExvY2FsRGVzY3JpcHRpb24oY29uc3QgV2ViS2l0OjpXZWJSVENWb2lkUmVxdWVz
dCYsIGNvbnN0IFdlYktpdDo6V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJikgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFJlbW90ZURlc2NyaXB0aW9uKGNvbnN0IFdlYktpdDo6V2ViUlRD
Vm9pZFJlcXVlc3QmLCBjb25zdCBXZWJLaXQ6OldlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24gbG9j
YWxEZXNjcmlwdGlvbigpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJSVENTZXNz
aW9uRGVzY3JpcHRpb24gcmVtb3RlRGVzY3JpcHRpb24oKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IGJvb2wgdXBkYXRlSUNFKGNvbnN0IFdlYktpdDo6V2ViUlRDQ29uZmlndXJhdGlvbiYsIGNvbnN0
IFdlYktpdDo6V2ViTWVkaWFDb25zdHJhaW50cyYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9v
bCBhZGRJQ0VDYW5kaWRhdGUoY29uc3QgV2ViS2l0OjpXZWJSVENJQ0VDYW5kaWRhdGUmKSBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIGJvb2wgYWRkU3RyZWFtKGNvbnN0IFdlYktpdDo6V2ViTWVkaWFT
dHJlYW0mLCBjb25zdCBXZWJLaXQ6OldlYk1lZGlhQ29uc3RyYWludHMmKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU3RyZWFtKGNvbnN0IFdlYktpdDo6V2ViTWVkaWFTdHJlYW0m
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U3RhdHMoY29uc3QgV2ViS2l0OjpXZWJS
VENTdGF0c1JlcXVlc3QmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViUlRDRGF0
YUNoYW5uZWxIYW5kbGVyKiBjcmVhdGVEYXRhQ2hhbm5lbChjb25zdCBXZWJLaXQ6OldlYlN0cmlu
ZyYgbGFiZWwsIGJvb2wgcmVsaWFibGUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgV2ViS2l0OjpX
ZWJSVENEVE1GU2VuZGVySGFuZGxlciogY3JlYXRlRFRNRlNlbmRlcihjb25zdCBXZWJLaXQ6Oldl
Yk1lZGlhU3RyZWFtVHJhY2smKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIE9W
RVJSSURFOwotCi0gICAgLy8gV2ViVGFzayByZWxhdGVkIG1ldGhvZHMKLSAgICBXZWJUYXNrTGlz
dCogdGFza0xpc3QoKSB7IHJldHVybiAmbV90YXNrTGlzdDsgfQotCi1wcml2YXRlOgotICAgIE1v
Y2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIoKSB7IH0KLQotICAgIFdlYktpdDo6V2ViUlRD
UGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50KiBtX2NsaWVudDsKLSAgICBib29sIG1fc3RvcHBl
ZDsKLSAgICBXZWJUYXNrTGlzdCBtX3Rhc2tMaXN0OwotICAgIFdlYktpdDo6V2ViUlRDU2Vzc2lv
bkRlc2NyaXB0aW9uIG1fbG9jYWxEZXNjcmlwdGlvbjsKLSAgICBXZWJLaXQ6OldlYlJUQ1Nlc3Np
b25EZXNjcmlwdGlvbiBtX3JlbW90ZURlc2NyaXB0aW9uOwotICAgIGludCBtX3N0cmVhbUNvdW50
OwotICAgIFRlc3RJbnRlcmZhY2VzKiBtX2ludGVyZmFjZXM7Ci19OwotCi19Ci0KLSNlbmRpZiAv
LyBNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyX2gKLQpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaElucHV0
Q29udHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVy
L3NyYy9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYzRkZjMyYTgyYzc0ZDc2ZGQwY2UxNjA3NDBiMmRmYWQ5YjFkZTZiZC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9s
bGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIk1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuaCIKLQot
I2luY2x1ZGUgIldlYlNwZWVjaElucHV0TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJXZWJUZXN0RGVs
ZWdhdGUuaCIKLSNpbmNsdWRlIDxwdWJsaWMvV2ViQ1N0cmluZy5oPgotI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJWZWN0b3IuaD4KLQotI2lmIEVOQUJMRV9JTlBVVF9TUEVFQ0gKLQotdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVu
bmVyIHsKLQotbmFtZXNwYWNlIHsKLQotV2ViU3BlZWNoSW5wdXRSZXN1bHRBcnJheSBtYWtlUmVj
dFJlc3VsdChjb25zdCBXZWJSZWN0JiByZWN0KQotewotICAgIGNoYXIgYnVmZmVyWzEwMF07Ci0g
ICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVkLCVkLCVkLCVkIiwgcmVjdC54
LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsKLQotICAgIFdlYlNwZWVjaElucHV0
UmVzdWx0IHJlczsKLSAgICByZXMuYXNzaWduKFdlYlN0cmluZzo6ZnJvbVVURjgoc3RhdGljX2Nh
c3Q8Y29uc3QgY2hhcio+KGJ1ZmZlcikpLCAxLjApOwotCi0gICAgV2ViU3BlZWNoSW5wdXRSZXN1
bHRBcnJheSByZXN1bHRzOwotICAgIHJlc3VsdHMuYXNzaWduKCZyZXMsIDEpOwotICAgIHJldHVy
biByZXN1bHRzOwotfQotCi19Ci0KLU1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6Ok1vY2tX
ZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIoV2ViU3BlZWNoSW5wdXRMaXN0ZW5lciogbGlzdGVuZXIp
Ci0gICAgOiBtX2xpc3RlbmVyKGxpc3RlbmVyKQotICAgICwgbV9zcGVlY2hUYXNrKDApCi0gICAg
LCBtX3JlY29yZGluZyhmYWxzZSkKLSAgICAsIG1fcmVxdWVzdElkKC0xKQotICAgICwgbV9kdW1w
UmVjdChmYWxzZSkKLSAgICAsIG1fZGVsZWdhdGUoMCkKLXsKLX0KLQotTW9ja1dlYlNwZWVjaElu
cHV0Q29udHJvbGxlcjo6fk1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIoKQotewotfQotCi12
b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OnNldERlbGVnYXRlKFdlYlRlc3REZWxl
Z2F0ZSogZGVsZWdhdGUpCi17Ci0gICAgbV9kZWxlZ2F0ZSA9IGRlbGVnYXRlOwotfQotCi12b2lk
IE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OmFkZE1vY2tSZWNvZ25pdGlvblJlc3VsdChj
b25zdCBXZWJTdHJpbmcmIHJlc3VsdCwgZG91YmxlIGNvbmZpZGVuY2UsIGNvbnN0IFdlYlN0cmlu
ZyYgbGFuZ3VhZ2UpCi17Ci0gICAgV2ViU3BlZWNoSW5wdXRSZXN1bHQgcmVzOwotICAgIHJlcy5h
c3NpZ24ocmVzdWx0LCBjb25maWRlbmNlKTsKLQotICAgIGlmIChsYW5ndWFnZS5pc0VtcHR5KCkp
Ci0gICAgICAgIG1fcmVzdWx0c0ZvckVtcHR5TGFuZ3VhZ2UucHVzaF9iYWNrKHJlcyk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIHN0cmluZyBsYW5nU3RyaW5nID0gbGFuZ3VhZ2UudXRmOCgpOwotICAg
ICAgICBpZiAobV9yZWNvZ25pdGlvblJlc3VsdHMuZmluZChsYW5nU3RyaW5nKSA9PSBtX3JlY29n
bml0aW9uUmVzdWx0cy5lbmQoKSkKLSAgICAgICAgICAgIG1fcmVjb2duaXRpb25SZXN1bHRzW2xh
bmdTdHJpbmddID0gdmVjdG9yPFdlYlNwZWVjaElucHV0UmVzdWx0PigpOwotICAgICAgICBtX3Jl
Y29nbml0aW9uUmVzdWx0c1tsYW5nU3RyaW5nXS5wdXNoX2JhY2socmVzKTsKLSAgICB9Ci19Ci0K
LXZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6c2V0RHVtcFJlY3QoYm9vbCBkdW1w
UmVjdCkKLXsKLSAgICBtX2R1bXBSZWN0ID0gZHVtcFJlY3Q7Ci19Ci0KLXZvaWQgTW9ja1dlYlNw
ZWVjaElucHV0Q29udHJvbGxlcjo6Y2xlYXJSZXN1bHRzKCkKLXsKLSAgICBtX3Jlc3VsdHNGb3JF
bXB0eUxhbmd1YWdlLmNsZWFyKCk7Ci0gICAgbV9yZWNvZ25pdGlvblJlc3VsdHMuY2xlYXIoKTsK
LSAgICBtX2R1bXBSZWN0ID0gZmFsc2U7Ci19Ci0KLWJvb2wgTW9ja1dlYlNwZWVjaElucHV0Q29u
dHJvbGxlcjo6c3RhcnRSZWNvZ25pdGlvbihpbnQgcmVxdWVzdElkLCBjb25zdCBXZWJSZWN0JiBl
bGVtZW50UmVjdCwgY29uc3QgV2ViU3RyaW5nJiBsYW5ndWFnZSwgY29uc3QgV2ViU3RyaW5nJiBn
cmFtbWFyLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luKQotewotICAgIGlmIChtX3Nw
ZWVjaFRhc2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fcmVxdWVzdElkID0gcmVx
dWVzdElkOwotICAgIG1fcmVxdWVzdFJlY3QgPSBlbGVtZW50UmVjdDsKLSAgICBtX3JlY29yZGlu
ZyA9IHRydWU7Ci0gICAgbV9sYW5ndWFnZSA9IGxhbmd1YWdlLnV0ZjgoKTsKLQotICAgIG1fc3Bl
ZWNoVGFzayA9IG5ldyBTcGVlY2hUYXNrKHRoaXMpOwotICAgIG1fZGVsZWdhdGUtPnBvc3RUYXNr
KG1fc3BlZWNoVGFzayk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNb2NrV2ViU3Bl
ZWNoSW5wdXRDb250cm9sbGVyOjpjYW5jZWxSZWNvZ25pdGlvbihpbnQgcmVxdWVzdElkKQotewot
ICAgIGlmIChtX3NwZWVjaFRhc2spIHsKLSAgICAgICAgV0VCS0lUX0FTU0VSVChyZXF1ZXN0SWQg
PT0gbV9yZXF1ZXN0SWQpOwotCi0gICAgICAgIG1fc3BlZWNoVGFzay0+c3RvcCgpOwotICAgICAg
ICBtX3JlY29yZGluZyA9IGZhbHNlOwotICAgICAgICBtX2xpc3RlbmVyLT5kaWRDb21wbGV0ZVJl
Y29nbml0aW9uKG1fcmVxdWVzdElkKTsKLSAgICAgICAgbV9yZXF1ZXN0SWQgPSAwOwotICAgIH0K
LX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpzdG9wUmVjb3JkaW5nKGlu
dCByZXF1ZXN0SWQpCi17Ci0gICAgV0VCS0lUX0FTU0VSVChyZXF1ZXN0SWQgPT0gbV9yZXF1ZXN0
SWQpOwotICAgIGlmIChtX3NwZWVjaFRhc2sgJiYgbV9yZWNvcmRpbmcpIHsKLSAgICAgICAgbV9z
cGVlY2hUYXNrLT5zdG9wKCk7Ci0gICAgICAgIHNwZWVjaFRhc2tGaXJlZCgpOwotICAgIH0KLX0K
LQotdm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOjpzcGVlY2hUYXNrRmlyZWQoKQot
ewotICAgIGlmIChtX3JlY29yZGluZykgewotICAgICAgICBtX3JlY29yZGluZyA9IGZhbHNlOwot
ICAgICAgICBtX2xpc3RlbmVyLT5kaWRDb21wbGV0ZVJlY29yZGluZyhtX3JlcXVlc3RJZCk7Ci0K
LSAgICAgICAgbV9zcGVlY2hUYXNrID0gbmV3IFNwZWVjaFRhc2sodGhpcyk7Ci0gICAgICAgIG1f
ZGVsZWdhdGUtPnBvc3RUYXNrKG1fc3BlZWNoVGFzayk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Ym9vbCBub1Jlc3VsdHNGb3VuZCA9IGZhbHNlOwotICAgICAgICAvLyBXZSB0YWtlIGEgY29weSBv
ZiB0aGUgcmVxdWVzdElkIGhlcmUgc28gdGhhdCBpZiBzY3JpcHRzIGRlc3Ryb3llZCB0aGUgaW5w
dXQgZWxlbWVudAotICAgICAgICAvLyBpbnNpZGUgb25lIG9mIHRoZSBjYWxsYmFja3MgYmVsb3cs
IHdlJ2xsIHN0aWxsIGtub3cgd2hhdCB0aGlzIHNlc3Npb24ncyByZXF1ZXN0SWQgd2FzLgotICAg
ICAgICBpbnQgcmVxdWVzdElkID0gbV9yZXF1ZXN0SWQ7Ci0gICAgICAgIG1fcmVxdWVzdElkID0g
MDsKLQotICAgICAgICBpZiAobV9kdW1wUmVjdCkgewotICAgICAgICAgICAgbV9saXN0ZW5lci0+
c2V0UmVjb2duaXRpb25SZXN1bHQocmVxdWVzdElkLCBtYWtlUmVjdFJlc3VsdChtX3JlcXVlc3RS
ZWN0KSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobV9sYW5ndWFnZS5lbXB0eSgpKSB7Ci0gICAgICAg
ICAgICAvLyBFbXB0eSBsYW5ndWFnZSBjYXNlIG11c3QgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5IHRv
IGF2b2lkIHByb2JsZW1zIHdpdGggSGFzaE1hcCBhbmQgZW1wdHkga2V5cy4KLSAgICAgICAgICAg
IGlmICghbV9yZXN1bHRzRm9yRW1wdHlMYW5ndWFnZS5lbXB0eSgpKQotICAgICAgICAgICAgICAg
IG1fbGlzdGVuZXItPnNldFJlY29nbml0aW9uUmVzdWx0KHJlcXVlc3RJZCwgbV9yZXN1bHRzRm9y
RW1wdHlMYW5ndWFnZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbm9SZXN1
bHRzRm91bmQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1fcmVj
b2duaXRpb25SZXN1bHRzLmZpbmQobV9sYW5ndWFnZSkgIT0gbV9yZWNvZ25pdGlvblJlc3VsdHMu
ZW5kKCkpCi0gICAgICAgICAgICAgICAgbV9saXN0ZW5lci0+c2V0UmVjb2duaXRpb25SZXN1bHQo
cmVxdWVzdElkLCBtX3JlY29nbml0aW9uUmVzdWx0c1ttX2xhbmd1YWdlXSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgbm9SZXN1bHRzRm91bmQgPSB0cnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG5vUmVzdWx0c0ZvdW5kKSB7Ci0gICAgICAgICAgICAvLyBDYW4ndCBh
dm9pZCBzZXR0aW5nIGEgcmVzdWx0IGV2ZW4gaWYgbm8gcmVzdWx0IHdhcyBzZXQgZm9yIHRoZSBn
aXZlbiBsYW5ndWFnZS4KLSAgICAgICAgICAgIC8vIFRoaXMgd291bGQgYXZvaWQgZ2VuZXJhdGlu
ZyB0aGUgZXZlbnRzIHVzZWQgdG8gY2hlY2sgdGhlIHJlc3VsdHMgYW5kIHRoZSB0ZXN0IHdvdWxk
IHRpbWVvdXQuCi0gICAgICAgICAgICBzdHJpbmcgZXJyb3IoImVycm9yOiBubyByZXN1bHQgZm91
bmQgZm9yIGxhbmd1YWdlICciKTsKLSAgICAgICAgICAgIGVycm9yLmFwcGVuZChtX2xhbmd1YWdl
KTsKLSAgICAgICAgICAgIGVycm9yLmFwcGVuZCgiJyIpOwotCi0gICAgICAgICAgICBXZWJTcGVl
Y2hJbnB1dFJlc3VsdCByZXM7Ci0gICAgICAgICAgICByZXMuYXNzaWduKFdlYlN0cmluZzo6ZnJv
bVVURjgoZXJyb3IpLCAxLjApOwotCi0gICAgICAgICAgICB2ZWN0b3I8V2ViU3BlZWNoSW5wdXRS
ZXN1bHQ+IHJlc3VsdHM7Ci0gICAgICAgICAgICByZXN1bHRzLnB1c2hfYmFjayhyZXMpOwotCi0g
ICAgICAgICAgICBtX2xpc3RlbmVyLT5zZXRSZWNvZ25pdGlvblJlc3VsdChyZXF1ZXN0SWQsIHJl
c3VsdHMpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9s
bGVyOjpTcGVlY2hUYXNrOjpTcGVlY2hUYXNrKE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIq
IG1vY2spCi0gICAgOiBXZWJNZXRob2RUYXNrPE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI+
OjpXZWJNZXRob2RUYXNrKG1vY2spCi17Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29u
dHJvbGxlcjo6U3BlZWNoVGFzazo6c3RvcCgpCi17Ci0gICAgbV9vYmplY3QtPm1fc3BlZWNoVGFz
ayA9IDA7Ci0gICAgY2FuY2VsKCk7Ci0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KLXZvaWQgTW9ja1dl
YlNwZWVjaElucHV0Q29udHJvbGxlcjo6U3BlZWNoVGFzazo6cnVuSWZWYWxpZCgpCi17Ci0gICAg
bV9vYmplY3QtPm1fc3BlZWNoVGFzayA9IDA7Ci0gICAgbV9vYmplY3QtPnNwZWVjaFRhc2tGaXJl
ZCgpOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5oIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVj
aElucHV0Q29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDAzNGUz
NjdlYTQ2N2RlODRiNzdhODU1YTU4MzMxOWNiNTA5MmNlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuaAorKysgL2Rldi9udWxs
CkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRy
b2xsZXJfaAotI2RlZmluZSBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyX2gKLQotI2luY2x1
ZGUgIlRlc3RDb21tb24uaCIKLSNpbmNsdWRlICJXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuaCIK
LSNpbmNsdWRlICJXZWJTcGVlY2hJbnB1dFJlc3VsdC5oIgotI2luY2x1ZGUgIldlYlRhc2suaCIK
LSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlJlY3QuaD4KLSNpbmNsdWRlIDxz
dHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdl
YlNlY3VyaXR5T3JpZ2luOwotY2xhc3MgV2ViU3BlZWNoSW5wdXRMaXN0ZW5lcjsKLWNsYXNzIFdl
YlN0cmluZzsKLX0KLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1jbGFzcyBXZWJUZXN0
RGVsZWdhdGU7Ci0KLWNsYXNzIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIgOiBwdWJsaWMg
V2ViS2l0OjpXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIgewotcHVibGljOgotICAgIGV4cGxpY2l0
IE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIoV2ViS2l0OjpXZWJTcGVlY2hJbnB1dExpc3Rl
bmVyKik7Ci0gICAgfk1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIoKTsKLQotICAgIHZvaWQg
YWRkTW9ja1JlY29nbml0aW9uUmVzdWx0KGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiByZXN1bHQs
IGRvdWJsZSBjb25maWRlbmNlLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbGFuZ3VhZ2UpOwot
ICAgIHZvaWQgc2V0RHVtcFJlY3QoYm9vbCk7Ci0gICAgdm9pZCBjbGVhclJlc3VsdHMoKTsKLSAg
ICB2b2lkIHNldERlbGVnYXRlKFdlYlRlc3REZWxlZ2F0ZSopOwotCi0gICAgLy8gV2ViU3BlZWNo
SW5wdXRDb250cm9sbGVyIGltcGxlbWVudGF0aW9uOgotICAgIHZpcnR1YWwgYm9vbCBzdGFydFJl
Y29nbml0aW9uKGludCByZXF1ZXN0SWQsIGNvbnN0IFdlYktpdDo6V2ViUmVjdCYgZWxlbWVudFJl
Y3QsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBsYW5ndWFnZSwgY29uc3QgV2ViS2l0OjpXZWJT
dHJpbmcmIGdyYW1tYXIsIGNvbnN0IFdlYktpdDo6V2ViU2VjdXJpdHlPcmlnaW4mKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUmVjb2duaXRpb24oaW50IHJlcXVlc3RJZCkgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BSZWNvcmRpbmcoaW50IHJlcXVlc3RJZCkgT1ZF
UlJJREU7Ci0KLSAgICBXZWJUYXNrTGlzdCogdGFza0xpc3QoKSB7IHJldHVybiAmbV90YXNrTGlz
dDsgfQotCi1wcml2YXRlOgotICAgIHZvaWQgc3BlZWNoVGFza0ZpcmVkKCk7Ci0KLSAgICBjbGFz
cyBTcGVlY2hUYXNrIDogcHVibGljIFdlYk1ldGhvZFRhc2s8TW9ja1dlYlNwZWVjaElucHV0Q29u
dHJvbGxlcj4gewotICAgIHB1YmxpYzoKLSAgICAgICAgU3BlZWNoVGFzayhNb2NrV2ViU3BlZWNo
SW5wdXRDb250cm9sbGVyKik7Ci0gICAgICAgIHZvaWQgc3RvcCgpOwotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSBPVkVSUklERTsKLSAgICB9OwotCi0g
ICAgV2ViS2l0OjpXZWJTcGVlY2hJbnB1dExpc3RlbmVyKiBtX2xpc3RlbmVyOwotCi0gICAgV2Vi
VGFza0xpc3QgbV90YXNrTGlzdDsKLSAgICBTcGVlY2hUYXNrKiBtX3NwZWVjaFRhc2s7Ci0KLSAg
ICBib29sIG1fcmVjb3JkaW5nOwotICAgIGludCBtX3JlcXVlc3RJZDsKLSAgICBXZWJLaXQ6Oldl
YlJlY3QgbV9yZXF1ZXN0UmVjdDsKLSAgICBzdGQ6OnN0cmluZyBtX2xhbmd1YWdlOwotCi0gICAg
c3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPFdlYktpdDo6V2ViU3BlZWNoSW5wdXRS
ZXN1bHQ+ID4gbV9yZWNvZ25pdGlvblJlc3VsdHM7Ci0gICAgc3RkOjp2ZWN0b3I8V2ViS2l0OjpX
ZWJTcGVlY2hJbnB1dFJlc3VsdD4gbV9yZXN1bHRzRm9yRW1wdHlMYW5ndWFnZTsKLSAgICBib29s
IG1fZHVtcFJlY3Q7Ci0KLSAgICBXZWJUZXN0RGVsZWdhdGUqIG1fZGVsZWdhdGU7Ci19OwotCi19
Ci0KLSNlbmRpZiAvLyBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVl
Y2hSZWNvZ25pemVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5u
ZXIvc3JjL01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggODY2MDgxMjEzODJkNzlhNTc2NzE0NTEzYzI0MmNjNDBiMWUwZTQ0OC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJNb2NrV2ViU3BlZWNoUmVjb2duaXplci5oIgotCi0jaW5jbHVkZSAiV2Vi
U3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCIKLSNpbmNsdWRlICJXZWJTcGVlY2hSZWNvZ25pemVy
Q2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViVGVzdERlbGVnYXRlLmgiCi0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5l
ciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIFRhc2sgY2xhc3MgZm9yIGNhbGxpbmcgYSBjbGllbnQg
ZnVuY3Rpb24gdGhhdCBkb2VzIG5vdCB0YWtlIGFueSBwYXJhbWV0ZXJzLgotdHlwZWRlZiB2b2lk
IChXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjoqQ2xpZW50RnVuY3Rpb25Qb2ludGVyKShjb25z
dCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYpOwotY2xhc3MgQ2xpZW50Q2FsbFRhc2sgOiBw
dWJsaWMgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlRhc2sgewotcHVibGljOgotICAgIENsaWVu
dENhbGxUYXNrKE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiBtb2NrLCBDbGllbnRGdW5jdGlvblBv
aW50ZXIgZnVuY3Rpb24pCi0gICAgICAgIDogTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlRhc2so
bW9jaykKLSAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgIHsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgcnVuKCkgT1ZFUlJJREUgeyAobV9yZWNvZ25pemVyLT5jbGllbnQoKS0+
Km1fZnVuY3Rpb24pKG1fcmVjb2duaXplci0+aGFuZGxlKCkpOyB9Ci0KLXByaXZhdGU6Ci0gICAg
Q2xpZW50RnVuY3Rpb25Qb2ludGVyIG1fZnVuY3Rpb247Ci19OwotCi0vLyBUYXNrIGZvciBkZWxp
dmVyaW5nIGEgcmVzdWx0IGV2ZW50LgotY2xhc3MgUmVzdWx0VGFzayA6IHB1YmxpYyBNb2NrV2Vi
U3BlZWNoUmVjb2duaXplcjo6VGFzayB7Ci1wdWJsaWM6Ci0gICAgUmVzdWx0VGFzayhNb2NrV2Vi
U3BlZWNoUmVjb2duaXplciogbW9jaywgY29uc3QgV2ViU3RyaW5nIHRyYW5zY3JpcHQsIGZsb2F0
IGNvbmZpZGVuY2UpCi0gICAgICAgIDogTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlRhc2sobW9j
aykKLSAgICAgICAgLCBtX3RyYW5zY3JpcHQodHJhbnNjcmlwdCkKLSAgICAgICAgLCBtX2NvbmZp
ZGVuY2UoY29uZmlkZW5jZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJ1bigp
IE9WRVJSSURFCi0gICAgewotICAgICAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiB0cmFuc2NyaXB0
cyhzdGF0aWNfY2FzdDxzaXplX3Q+KDEpKTsKLSAgICAgICAgV2ViVmVjdG9yPGZsb2F0PiBjb25m
aWRlbmNlcyhzdGF0aWNfY2FzdDxzaXplX3Q+KDEpKTsKLSAgICAgICAgdHJhbnNjcmlwdHNbMF0g
PSBtX3RyYW5zY3JpcHQ7Ci0gICAgICAgIGNvbmZpZGVuY2VzWzBdID0gbV9jb25maWRlbmNlOwot
ICAgICAgICBXZWJWZWN0b3I8V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+IGZpbmFsUmVzdWx0
cyhzdGF0aWNfY2FzdDxzaXplX3Q+KDEpKTsKLSAgICAgICAgV2ViVmVjdG9yPFdlYlNwZWVjaFJl
Y29nbml0aW9uUmVzdWx0PiBpbnRlcmltUmVzdWx0czsKLSAgICAgICAgZmluYWxSZXN1bHRzWzBd
LmFzc2lnbih0cmFuc2NyaXB0cywgY29uZmlkZW5jZXMsIHRydWUpOwotCi0gICAgICAgIG1fcmVj
b2duaXplci0+Y2xpZW50KCktPmRpZFJlY2VpdmVSZXN1bHRzKG1fcmVjb2duaXplci0+aGFuZGxl
KCksIGZpbmFsUmVzdWx0cywgaW50ZXJpbVJlc3VsdHMpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBXZWJTdHJpbmcgbV90cmFuc2NyaXB0OwotICAgIGZsb2F0IG1fY29uZmlkZW5jZTsKLX07Ci0K
LS8vIFRhc2sgZm9yIGRlbGl2ZXJpbmcgYSBub21hdGNoIGV2ZW50LgotY2xhc3MgTm9NYXRjaFRh
c2sgOiBwdWJsaWMgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlRhc2sgewotcHVibGljOgotICAg
IE5vTWF0Y2hUYXNrKE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiBtb2NrKSA6IE1vY2tXZWJTcGVl
Y2hSZWNvZ25pemVyOjpUYXNrKG1vY2spIHsgfQotICAgIHZpcnR1YWwgdm9pZCBydW4oKSBPVkVS
UklERSB7IG1fcmVjb2duaXplci0+Y2xpZW50KCktPmRpZFJlY2VpdmVOb01hdGNoKG1fcmVjb2du
aXplci0+aGFuZGxlKCksIFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0KCkpOyB9Ci19OwotCi0v
LyBUYXNrIGZvciBkZWxpdmVyaW5nIGFuIGVycm9yIGV2ZW50LgotY2xhc3MgRXJyb3JUYXNrIDog
cHVibGljIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrIHsKLXB1YmxpYzoKLSAgICBFcnJv
clRhc2soTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIG1vY2ssIFdlYlNwZWVjaFJlY29nbml6ZXJD
bGllbnQ6OkVycm9yQ29kZSBjb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCi0gICAgICAg
IDogTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlRhc2sobW9jaykKLSAgICAgICAgLCBtX2NvZGUo
Y29kZSkKLSAgICAgICAgLCBtX21lc3NhZ2UobWVzc2FnZSkKLSAgICB7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIHJ1bigpIE9WRVJSSURFIHsgbV9yZWNvZ25pemVyLT5jbGllbnQoKS0+ZGlk
UmVjZWl2ZUVycm9yKG1fcmVjb2duaXplci0+aGFuZGxlKCksIG1fbWVzc2FnZSwgbV9jb2RlKTsg
fQotCi1wcml2YXRlOgotICAgIFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OkVycm9yQ29kZSBt
X2NvZGU7Ci0gICAgV2ViU3RyaW5nIG1fbWVzc2FnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlCi0K
LU1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcigpCi0gICAg
OiBtX3dhc0Fib3J0ZWQoZmFsc2UpCi0gICAgLCBtX3Rhc2tRdWV1ZVJ1bm5pbmcoZmFsc2UpCi0g
ICAgLCBtX2RlbGVnYXRlKDApCi17Ci19Ci0KLU1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjp+TW9j
a1dlYlNwZWVjaFJlY29nbml6ZXIoKQotewotICAgIGNsZWFyVGFza1F1ZXVlKCk7Ci19Ci0KLXZv
aWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnNldERlbGVnYXRlKFdlYlRlc3REZWxlZ2F0ZSog
ZGVsZWdhdGUpCi17Ci0gICAgbV9kZWxlZ2F0ZSA9IGRlbGVnYXRlOwotfQotCi12b2lkIE1vY2tX
ZWJTcGVlY2hSZWNvZ25pemVyOjpzdGFydChjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRs
ZSYgaGFuZGxlLCBjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtcyYgcGFyYW1zLCBXZWJT
cGVlY2hSZWNvZ25pemVyQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgbV93YXNBYm9ydGVkID0gZmFs
c2U7Ci0gICAgbV9oYW5kbGUgPSBoYW5kbGU7Ci0gICAgbV9jbGllbnQgPSBjbGllbnQ7Ci0KLSAg
ICBtX3Rhc2tRdWV1ZS5wdXNoX2JhY2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVl
Y2hSZWNvZ25pemVyQ2xpZW50OjpkaWRTdGFydCkpOwotICAgIG1fdGFza1F1ZXVlLnB1c2hfYmFj
ayhuZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmRp
ZFN0YXJ0QXVkaW8pKTsKLSAgICBtX3Rhc2tRdWV1ZS5wdXNoX2JhY2sobmV3IENsaWVudENhbGxU
YXNrKHRoaXMsICZXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRTdGFydFNvdW5kKSk7Ci0K
LSAgICBpZiAoIW1fbW9ja1RyYW5zY3JpcHRzLmVtcHR5KCkpIHsKLSAgICAgICAgV0VCS0lUX0FT
U0VSVChtX21vY2tUcmFuc2NyaXB0cy5zaXplKCkgPT0gbV9tb2NrQ29uZmlkZW5jZXMuc2l6ZSgp
KTsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbW9ja1RyYW5zY3JpcHRzLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgbV90YXNrUXVldWUucHVzaF9iYWNrKG5ldyBSZXN1bHRU
YXNrKHRoaXMsIG1fbW9ja1RyYW5zY3JpcHRzW2ldLCBtX21vY2tDb25maWRlbmNlc1tpXSkpOwot
Ci0gICAgICAgIG1fbW9ja1RyYW5zY3JpcHRzLmNsZWFyKCk7Ci0gICAgICAgIG1fbW9ja0NvbmZp
ZGVuY2VzLmNsZWFyKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fdGFza1F1ZXVlLnB1c2hfYmFj
ayhuZXcgTm9NYXRjaFRhc2sodGhpcykpOwotCi0gICAgbV90YXNrUXVldWUucHVzaF9iYWNrKG5l
dyBDbGllbnRDYWxsVGFzayh0aGlzLCAmV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkRW5k
U291bmQpKTsKLSAgICBtX3Rhc2tRdWV1ZS5wdXNoX2JhY2sobmV3IENsaWVudENhbGxUYXNrKHRo
aXMsICZXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRFbmRBdWRpbykpOwotICAgIG1fdGFz
a1F1ZXVlLnB1c2hfYmFjayhuZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVjaFJlY29n
bml6ZXJDbGllbnQ6OmRpZEVuZCkpOwotCi0gICAgc3RhcnRUYXNrUXVldWUoKTsKLX0KLQotdm9p
ZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6c3RvcChjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlv
bkhhbmRsZSYgaGFuZGxlLCBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KiBjbGllbnQpCi17Ci0g
ICAgbV9oYW5kbGUgPSBoYW5kbGU7Ci0gICAgbV9jbGllbnQgPSBjbGllbnQ7Ci0KLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50LgotICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
dm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6YWJvcnQoY29uc3QgV2ViU3BlZWNoUmVjb2du
aXRpb25IYW5kbGUmIGhhbmRsZSwgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudCogY2xpZW50KQot
ewotICAgIG1faGFuZGxlID0gaGFuZGxlOwotICAgIG1fY2xpZW50ID0gY2xpZW50OwotCi0gICAg
Y2xlYXJUYXNrUXVldWUoKTsKLSAgICBtX3dhc0Fib3J0ZWQgPSB0cnVlOwotICAgIG1fdGFza1F1
ZXVlLnB1c2hfYmFjayhuZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVjaFJlY29nbml6
ZXJDbGllbnQ6OmRpZEVuZCkpOwotICAgIHN0YXJ0VGFza1F1ZXVlKCk7Ci19Ci0KLXZvaWQgTW9j
a1dlYlNwZWVjaFJlY29nbml6ZXI6OmFkZE1vY2tSZXN1bHQoY29uc3QgV2ViU3RyaW5nJiB0cmFu
c2NyaXB0LCBmbG9hdCBjb25maWRlbmNlKQotewotICAgIG1fbW9ja1RyYW5zY3JpcHRzLnB1c2hf
YmFjayh0cmFuc2NyaXB0KTsKLSAgICBtX21vY2tDb25maWRlbmNlcy5wdXNoX2JhY2soY29uZmlk
ZW5jZSk7Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnNldEVycm9yKGNvbnN0
IFdlYlN0cmluZyYgZXJyb3IsIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBXZWJT
cGVlY2hSZWNvZ25pemVyQ2xpZW50OjpFcnJvckNvZGUgY29kZTsKLSAgICBpZiAoZXJyb3IgPT0g
Ik90aGVyRXJyb3IiKQotICAgICAgICBjb2RlID0gV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6
T3RoZXJFcnJvcjsKLSAgICBlbHNlIGlmIChlcnJvciA9PSAiTm9TcGVlY2hFcnJvciIpCi0gICAg
ICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpOb1NwZWVjaEVycm9yOwotICAg
IGVsc2UgaWYgKGVycm9yID09ICJBYm9ydGVkRXJyb3IiKQotICAgICAgICBjb2RlID0gV2ViU3Bl
ZWNoUmVjb2duaXplckNsaWVudDo6QWJvcnRlZEVycm9yOwotICAgIGVsc2UgaWYgKGVycm9yID09
ICJBdWRpb0NhcHR1cmVFcnJvciIpCi0gICAgICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNvZ25pemVy
Q2xpZW50OjpBdWRpb0NhcHR1cmVFcnJvcjsKLSAgICBlbHNlIGlmIChlcnJvciA9PSAiTmV0d29y
a0Vycm9yIikKLSAgICAgICAgY29kZSA9IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6Ok5ldHdv
cmtFcnJvcjsKLSAgICBlbHNlIGlmIChlcnJvciA9PSAiTm90QWxsb3dlZEVycm9yIikKLSAgICAg
ICAgY29kZSA9IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6Ok5vdEFsbG93ZWRFcnJvcjsKLSAg
ICBlbHNlIGlmIChlcnJvciA9PSAiU2VydmljZU5vdEFsbG93ZWRFcnJvciIpCi0gICAgICAgIGNv
ZGUgPSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpTZXJ2aWNlTm90QWxsb3dlZEVycm9yOwot
ICAgIGVsc2UgaWYgKGVycm9yID09ICJCYWRHcmFtbWFyRXJyb3IiKQotICAgICAgICBjb2RlID0g
V2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6QmFkR3JhbW1hckVycm9yOwotICAgIGVsc2UgaWYg
KGVycm9yID09ICJMYW5ndWFnZU5vdFN1cHBvcnRlZEVycm9yIikKLSAgICAgICAgY29kZSA9IFdl
YlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6Okxhbmd1YWdlTm90U3VwcG9ydGVkRXJyb3I7Ci0gICAg
ZWxzZQotICAgICAgICByZXR1cm47Ci0KLSAgICBjbGVhclRhc2tRdWV1ZSgpOwotICAgIG1fdGFz
a1F1ZXVlLnB1c2hfYmFjayhuZXcgRXJyb3JUYXNrKHRoaXMsIGNvZGUsIG1lc3NhZ2UpKTsKLSAg
ICBtX3Rhc2tRdWV1ZS5wdXNoX2JhY2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVl
Y2hSZWNvZ25pemVyQ2xpZW50OjpkaWRFbmQpKTsKLSAgICBzdGFydFRhc2tRdWV1ZSgpOwotfQot
Ci12b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzdGFydFRhc2tRdWV1ZSgpCi17Ci0gICAg
aWYgKG1fdGFza1F1ZXVlUnVubmluZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1fZGVsZWdhdGUt
PnBvc3RUYXNrKG5ldyBTdGVwVGFzayh0aGlzKSk7Ci0gICAgbV90YXNrUXVldWVSdW5uaW5nID0g
dHJ1ZTsKLX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6Y2xlYXJUYXNrUXVldWUo
KQotewotICAgIHdoaWxlICghbV90YXNrUXVldWUuZW1wdHkoKSkgewotICAgICAgICBkZWxldGUg
bV90YXNrUXVldWUuZnJvbnQoKTsKLSAgICAgICAgbV90YXNrUXVldWUucG9wX2Zyb250KCk7Ci0g
ICAgfQotICAgIG1fdGFza1F1ZXVlUnVubmluZyA9IGZhbHNlOwotfQotCi12b2lkIE1vY2tXZWJT
cGVlY2hSZWNvZ25pemVyOjpTdGVwVGFzazo6cnVuSWZWYWxpZCgpCi17Ci0gICAgaWYgKG1fb2Jq
ZWN0LT5tX3Rhc2tRdWV1ZS5lbXB0eSgpKSB7Ci0gICAgICAgIG1fb2JqZWN0LT5tX3Rhc2tRdWV1
ZVJ1bm5pbmcgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFRhc2sqIHRh
c2sgPSBtX29iamVjdC0+bV90YXNrUXVldWUuZnJvbnQoKTsKLSAgICBtX29iamVjdC0+bV90YXNr
UXVldWUucG9wX2Zyb250KCk7Ci0gICAgdGFzay0+cnVuKCk7Ci0gICAgZGVsZXRlIHRhc2s7Ci0K
LSAgICBpZiAobV9vYmplY3QtPm1fdGFza1F1ZXVlLmVtcHR5KCkpIHsKLSAgICAgICAgbV9vYmpl
Y3QtPm1fdGFza1F1ZXVlUnVubmluZyA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgbV9vYmplY3QtPm1fZGVsZWdhdGUtPnBvc3RUYXNrKG5ldyBTdGVwVGFzayhtX29iamVj
dCkpOwotfQotCi19CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5oIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg5YmMyNmMxNzNkMDliMWIxZjUzZGU0ZjMx
MmMyYmU3OTJiYmRlYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2Vi
U3BlZWNoUmVjb2duaXplci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyX2gKLSNkZWZpbmUgTW9ja1dlYlNwZWVj
aFJlY29nbml6ZXJfaAotCi0jaW5jbHVkZSAiVGVzdENvbW1vbi5oIgotI2luY2x1ZGUgIldlYlNw
ZWVjaFJlY29nbml6ZXIuaCIKLSNpbmNsdWRlICJXZWJUYXNrLmgiCi0jaW5jbHVkZSA8ZGVxdWU+
Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYlNwZWVj
aFJlY29nbml0aW9uSGFuZGxlOwotY2xhc3MgV2ViU3BlZWNoUmVjb2duaXRpb25QYXJhbXM7Ci1j
bGFzcyBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OwotfQotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1
bm5lciB7Ci0KLWNsYXNzIFdlYlRlc3REZWxlZ2F0ZTsKLQotY2xhc3MgTW9ja1dlYlNwZWVjaFJl
Y29nbml6ZXIgOiBwdWJsaWMgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyIHsKLXB1YmxpYzoK
LSAgICBNb2NrV2ViU3BlZWNoUmVjb2duaXplcigpOwotICAgIH5Nb2NrV2ViU3BlZWNoUmVjb2du
aXplcigpOwotCi0gICAgdm9pZCBzZXREZWxlZ2F0ZShXZWJUZXN0RGVsZWdhdGUqKTsKLQotICAg
IC8vIFdlYlNwZWVjaFJlY29nbml6ZXIgaW1wbGVtZW50YXRpb246Ci0gICAgdmlydHVhbCB2b2lk
IHN0YXJ0KGNvbnN0IFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmLCBjb25zdCBX
ZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zJiwgV2ViS2l0OjpXZWJTcGVlY2hSZWNv
Z25pemVyQ2xpZW50KikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3AoY29uc3QgV2Vi
S2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYsIFdlYktpdDo6V2ViU3BlZWNoUmVjb2du
aXplckNsaWVudCopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBhYm9ydChjb25zdCBXZWJL
aXQ6OldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiwgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25p
emVyQ2xpZW50KikgT1ZFUlJJREU7Ci0KLSAgICAvLyBNZXRob2RzIGFjY2Vzc2VkIGJ5IGxheW91
dCB0ZXN0czoKLSAgICB2b2lkIGFkZE1vY2tSZXN1bHQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcm
IHRyYW5zY3JpcHQsIGZsb2F0IGNvbmZpZGVuY2UpOwotICAgIHZvaWQgc2V0RXJyb3IoY29uc3Qg
V2ViS2l0OjpXZWJTdHJpbmcmIGVycm9yLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbWVzc2Fn
ZSk7Ci0gICAgYm9vbCB3YXNBYm9ydGVkKCkgY29uc3QgeyByZXR1cm4gbV93YXNBYm9ydGVkOyB9
Ci0KLSAgICAvLyBNZXRob2RzIGFjY2Vzc2VkIGZyb20gVGFzayBvYmplY3RzOgotICAgIFdlYktp
dDo6V2ViU3BlZWNoUmVjb2duaXplckNsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7
IH0KLSAgICBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiBoYW5kbGUoKSB7IHJl
dHVybiBtX2hhbmRsZTsgfQotICAgIFdlYlRhc2tMaXN0KiB0YXNrTGlzdCgpIHsgcmV0dXJuICZt
X3Rhc2tMaXN0OyB9Ci0KLSAgICBjbGFzcyBUYXNrIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFRh
c2soTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIHJlY29nbml6ZXIpIDogbV9yZWNvZ25pemVyKHJl
Y29nbml6ZXIpIHsgfQotICAgICAgICB2aXJ0dWFsIH5UYXNrKCkgeyB9Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBydW4oKSA9IDA7Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICBNb2NrV2ViU3BlZWNo
UmVjb2duaXplciogbV9yZWNvZ25pemVyOwotICAgIH07Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBz
dGFydFRhc2tRdWV1ZSgpOwotICAgIHZvaWQgY2xlYXJUYXNrUXVldWUoKTsKLQotICAgIFdlYlRh
c2tMaXN0IG1fdGFza0xpc3Q7Ci0gICAgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRs
ZSBtX2hhbmRsZTsKLSAgICBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqIG1fY2xp
ZW50OwotICAgIHN0ZDo6dmVjdG9yPFdlYktpdDo6V2ViU3RyaW5nPiBtX21vY2tUcmFuc2NyaXB0
czsKLSAgICBzdGQ6OnZlY3RvcjxmbG9hdD4gbV9tb2NrQ29uZmlkZW5jZXM7Ci0gICAgYm9vbCBt
X3dhc0Fib3J0ZWQ7Ci0KLSAgICAvLyBRdWV1ZSBvZiB0YXNrcyB0byBiZSBydW4uCi0gICAgc3Rk
OjpkZXF1ZTxUYXNrKj4gbV90YXNrUXVldWU7Ci0gICAgYm9vbCBtX3Rhc2tRdWV1ZVJ1bm5pbmc7
Ci0KLSAgICBXZWJUZXN0RGVsZWdhdGUqIG1fZGVsZWdhdGU7Ci0KLSAgICAvLyBUYXNrIGZvciBz
dGVwcGluZyB0aGUgcXVldWUuCi0gICAgY2xhc3MgU3RlcFRhc2sgOiBwdWJsaWMgV2ViTWV0aG9k
VGFzazxNb2NrV2ViU3BlZWNoUmVjb2duaXplcj4gewotICAgIHB1YmxpYzoKLSAgICAgICAgU3Rl
cFRhc2soTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIG9iamVjdCkgOiBXZWJNZXRob2RUYXNrPE1v
Y2tXZWJTcGVlY2hSZWNvZ25pemVyPihvYmplY3QpIHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQg
cnVuSWZWYWxpZCgpIE9WRVJSSURFOwotICAgIH07Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBNb2Nr
V2ViU3BlZWNoUmVjb2duaXplcl9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTm90aWZpY2F0aW9uUHJlc2Vu
dGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBjMjcyNjY4ZWFmYTkxNDZm
ZjlmNDIwZTRjN2IyNDNkNTcyMTVhOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3Ny
Yy9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEVfTk9USUZJQ0FUSU9OUwotI2luY2x1
ZGUgIk5vdGlmaWNhdGlvblByZXNlbnRlci5oIgotCi0jaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5j
bHVkZSAiV2ViTm90aWZpY2F0aW9uLmgiCi0jaW5jbHVkZSAiV2ViTm90aWZpY2F0aW9uUGVybWlz
c2lvbkNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiV2ViU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRl
ICJXZWJUZXN0RGVsZWdhdGUuaCIKLSNpbmNsdWRlICJnb29nbGV1cmwvc3JjL2d1cmwuaCIKLSNp
bmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+
Ci0jaW5jbHVkZSA8cHVibGljL1dlYlVSTC5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0Owot
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1uYW1l
c3BhY2UgewotCi1XZWJTdHJpbmcgaWRlbnRpZmllckZvck5vdGlmaWNhdGlvbihjb25zdCBXZWJO
b3RpZmljYXRpb24mIG5vdGlmaWNhdGlvbikKLXsKLSAgICBpZiAobm90aWZpY2F0aW9uLmlzSFRN
TCgpKQotICAgICAgICByZXR1cm4gbm90aWZpY2F0aW9uLnVybCgpLnNwZWMoKS51dGYxNigpOwot
ICAgIHJldHVybiBub3RpZmljYXRpb24udGl0bGUoKTsKLX0KLQotdm9pZCBkZWZlcnJlZERpc3Bs
YXlEaXNwYXRjaCh2b2lkKiBjb250ZXh0KQotewotICAgIFdlYk5vdGlmaWNhdGlvbiogbm90aWZp
Y2F0aW9uID0gc3RhdGljX2Nhc3Q8V2ViTm90aWZpY2F0aW9uKj4oY29udGV4dCk7Ci0gICAgbm90
aWZpY2F0aW9uLT5kaXNwYXRjaERpc3BsYXlFdmVudCgpOwotICAgIGRlbGV0ZSBub3RpZmljYXRp
b247Ci19Ci0KLX0KLQotTm90aWZpY2F0aW9uUHJlc2VudGVyOjpOb3RpZmljYXRpb25QcmVzZW50
ZXIoKQotICAgIDogbV9kZWxlZ2F0ZSgwKQotewotfQotCi1Ob3RpZmljYXRpb25QcmVzZW50ZXI6
On5Ob3RpZmljYXRpb25QcmVzZW50ZXIoKQotewotfQotCi12b2lkIE5vdGlmaWNhdGlvblByZXNl
bnRlcjo6Z3JhbnRQZXJtaXNzaW9uKGNvbnN0IFdlYlN0cmluZyYgb3JpZ2luKQotewotICAgIG1f
YWxsb3dlZE9yaWdpbnMuaW5zZXJ0KG9yaWdpbi51dGY4KCkpOwotfQotCi1ib29sIE5vdGlmaWNh
dGlvblByZXNlbnRlcjo6c2ltdWxhdGVDbGljayhjb25zdCBXZWJTdHJpbmcmIHRpdGxlKQotewot
ICAgIHN0cmluZyBpZCh0aXRsZS51dGY4KCkpOwotICAgIGlmIChtX2FjdGl2ZU5vdGlmaWNhdGlv
bnMuZmluZChpZCkgPT0gbV9hY3RpdmVOb3RpZmljYXRpb25zLmVuZCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBXZWJOb3RpZmljYXRpb24mIG5vdGlmaWNhdGlvbiA9IG1f
YWN0aXZlTm90aWZpY2F0aW9ucy5maW5kKGlkKS0+c2Vjb25kOwotICAgIFdlYk5vdGlmaWNhdGlv
biBldmVudFRhcmdldChub3RpZmljYXRpb24pOwotICAgIGV2ZW50VGFyZ2V0LmRpc3BhdGNoQ2xp
Y2tFdmVudCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBUaGUgb3V0cHV0IGZyb20gYWxs
IHRoZXNlIG1ldGhvZHMgbWF0Y2hlcyB3aGF0IER1bXBSZW5kZXJUcmVlIHByb2R1Y2VzLgotYm9v
bCBOb3RpZmljYXRpb25QcmVzZW50ZXI6OnNob3coY29uc3QgV2ViTm90aWZpY2F0aW9uJiBub3Rp
ZmljYXRpb24pCi17Ci0gICAgV2ViU3RyaW5nIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRm9yTm90
aWZpY2F0aW9uKG5vdGlmaWNhdGlvbik7Ci0gICAgaWYgKCFub3RpZmljYXRpb24ucmVwbGFjZUlk
KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0cmluZyByZXBsYWNlSWQobm90aWZpY2F0aW9uLnJl
cGxhY2VJZCgpLnV0ZjgoKSk7Ci0gICAgICAgIGlmIChtX3JlcGxhY2VtZW50cy5maW5kKHJlcGxh
Y2VJZCkgIT0gbV9yZXBsYWNlbWVudHMuZW5kKCkpCi0gICAgICAgICAgICBtX2RlbGVnYXRlLT5w
cmludE1lc3NhZ2Uoc3RyaW5nKCJSRVBMQUNJTkcgTk9USUZJQ0FUSU9OICIpICsgbV9yZXBsYWNl
bWVudHMuZmluZChyZXBsYWNlSWQpLT5zZWNvbmQgKyAiXG4iKTsKLQotICAgICAgICBtX3JlcGxh
Y2VtZW50c1tyZXBsYWNlSWRdID0gaWRlbnRpZmllci51dGY4KCk7Ci0gICAgfQotCi0gICAgaWYg
KG5vdGlmaWNhdGlvbi5pc0hUTUwoKSkKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdl
KHN0cmluZygiREVTS1RPUCBOT1RJRklDQVRJT046IGNvbnRlbnRzIGF0ICIpICsgc3RyaW5nKG5v
dGlmaWNhdGlvbi51cmwoKS5zcGVjKCkpICsgIlxuIik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG1f
ZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiREVTS1RPUCBOT1RJRklDQVRJT046Iik7Ci0gICAgICAg
IG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShub3RpZmljYXRpb24uZGlyZWN0aW9uKCkgPT0gV2Vi
VGV4dERpcmVjdGlvblJpZ2h0VG9MZWZ0ID8gIihSVEwpIiA6ICIiKTsKLSAgICAgICAgbV9kZWxl
Z2F0ZS0+cHJpbnRNZXNzYWdlKCIgaWNvbiAiKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRN
ZXNzYWdlKG5vdGlmaWNhdGlvbi5pY29uVVJMKCkuaXNFbXB0eSgpID8gIiIgOiBub3RpZmljYXRp
b24uaWNvblVSTCgpLnNwZWMoKS5kYXRhKCkpOwotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1l
c3NhZ2UoIiwgdGl0bGUgIik7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShub3Rp
ZmljYXRpb24udGl0bGUoKS5pc0VtcHR5KCkgPyAiIiA6IG5vdGlmaWNhdGlvbi50aXRsZSgpLnV0
ZjgoKS5kYXRhKCkpOwotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIiwgdGV4dCAi
KTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKG5vdGlmaWNhdGlvbi5ib2R5KCku
aXNFbXB0eSgpID8gIiIgOiBub3RpZmljYXRpb24uYm9keSgpLnV0ZjgoKS5kYXRhKCkpOwotICAg
ICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIlxuIik7Ci0gICAgfQotCi0gICAgc3RyaW5n
IGlkKGlkZW50aWZpZXIudXRmOCgpKTsKLSAgICBtX2FjdGl2ZU5vdGlmaWNhdGlvbnNbaWRdID0g
bm90aWZpY2F0aW9uOwotCi0gICAgUGxhdGZvcm06OmN1cnJlbnQoKS0+Y2FsbE9uTWFpblRocmVh
ZChkZWZlcnJlZERpc3BsYXlEaXNwYXRjaCwgbmV3IFdlYk5vdGlmaWNhdGlvbihub3RpZmljYXRp
b24pKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXI6
OmNhbmNlbChjb25zdCBXZWJOb3RpZmljYXRpb24mIG5vdGlmaWNhdGlvbikKLXsKLSAgICBXZWJT
dHJpbmcgaWRlbnRpZmllciA9IGlkZW50aWZpZXJGb3JOb3RpZmljYXRpb24obm90aWZpY2F0aW9u
KTsKLSAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uoc3RyaW5nKCJERVNLVE9QIE5PVElGSUNB
VElPTiBDTE9TRUQ6ICIpICsgc3RyaW5nKGlkZW50aWZpZXIudXRmOCgpKSArICJcbiIpOwotICAg
IFdlYk5vdGlmaWNhdGlvbiBldmVudFRhcmdldChub3RpZmljYXRpb24pOwotICAgIGV2ZW50VGFy
Z2V0LmRpc3BhdGNoQ2xvc2VFdmVudChmYWxzZSk7Ci0KLSAgICBzdHJpbmcgaWQoaWRlbnRpZmll
ci51dGY4KCkpOwotICAgIG1fYWN0aXZlTm90aWZpY2F0aW9ucy5lcmFzZShpZCk7Ci19Ci0KLXZv
aWQgTm90aWZpY2F0aW9uUHJlc2VudGVyOjpvYmplY3REZXN0cm95ZWQoY29uc3QgV2ViS2l0OjpX
ZWJOb3RpZmljYXRpb24mIG5vdGlmaWNhdGlvbikKLXsKLSAgICBXZWJTdHJpbmcgaWRlbnRpZmll
ciA9IGlkZW50aWZpZXJGb3JOb3RpZmljYXRpb24obm90aWZpY2F0aW9uKTsKLSAgICBzdHJpbmcg
aWQoaWRlbnRpZmllci51dGY4KCkpOwotICAgIG1fYWN0aXZlTm90aWZpY2F0aW9ucy5lcmFzZShp
ZCk7Ci19Ci0KLVdlYk5vdGlmaWNhdGlvblByZXNlbnRlcjo6UGVybWlzc2lvbiBOb3RpZmljYXRp
b25QcmVzZW50ZXI6OmNoZWNrUGVybWlzc2lvbihjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3Jp
Z2luKQotewotICAgIC8vIENoZWNrIHdpdGggdGhlIGxheW91dCB0ZXN0IGNvbnRyb2xsZXIKLSAg
ICBXZWJTdHJpbmcgb3JpZ2luU3RyaW5nID0gb3JpZ2luLnRvU3RyaW5nKCk7Ci0gICAgYm9vbCBh
bGxvd2VkID0gbV9hbGxvd2VkT3JpZ2lucy5maW5kKHN0cmluZyhvcmlnaW5TdHJpbmcudXRmOCgp
KSkgIT0gbV9hbGxvd2VkT3JpZ2lucy5lbmQoKTsKLSAgICByZXR1cm4gYWxsb3dlZCA/IFdlYk5v
dGlmaWNhdGlvblByZXNlbnRlcjo6UGVybWlzc2lvbkFsbG93ZWQKLSAgICAgICAgOiBXZWJOb3Rp
ZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25EZW5pZWQ7Ci19Ci0KLXZvaWQgTm90aWZpY2F0
aW9uUHJlc2VudGVyOjpyZXF1ZXN0UGVybWlzc2lvbigKLSAgICBjb25zdCBXZWJTZWN1cml0eU9y
aWdpbiYgb3JpZ2luLAotICAgIFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjayogY2Fs
bGJhY2spCi17Ci0gICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJERVNLVE9QIE5PVElGSUNB
VElPTiBQRVJNSVNTSU9OIFJFUVVFU1RFRDogIiArIHN0cmluZyhvcmlnaW4udG9TdHJpbmcoKS51
dGY4KCkpICsgIlxuIik7Ci0gICAgY2FsbGJhY2stPnBlcm1pc3Npb25SZXF1ZXN0Q29tcGxldGUo
KTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFX05PVElGSUNBVElPTlMKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL05vdGlmaWNhdGlv
blByZXNlbnRlci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9z
cmMvTm90aWZpY2F0aW9uUHJlc2VudGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGZmZDdkNWNmYjdlYmYyNjljMzY5MjU5N2JmZGZmZWExYWJmZWNhNWUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvTm90aWZpY2F0aW9uUHJlc2VudGVyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBOb3RpZmljYXRpb25QcmVzZW50ZXJfaAotI2RlZmlu
ZSBOb3RpZmljYXRpb25QcmVzZW50ZXJfaAotCi0jaW5jbHVkZSAiV2ViTm90aWZpY2F0aW9uLmgi
Ci0jaW5jbHVkZSAiV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyLmgiCi0jaW5jbHVkZSA8bWFwPgot
I2luY2x1ZGUgPHNldD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVu
bmVyIHsKLQotY2xhc3MgV2ViVGVzdERlbGVnYXRlOwotCi0vLyBBIGNsYXNzIHRoYXQgaW1wbGVt
ZW50cyBXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIgZm9yIHRoZSBUZXN0UnVubmVyIGxpYnJhcnku
Ci1jbGFzcyBOb3RpZmljYXRpb25QcmVzZW50ZXIgOiBwdWJsaWMgV2ViS2l0OjpXZWJOb3RpZmlj
YXRpb25QcmVzZW50ZXIgewotcHVibGljOgotICAgIE5vdGlmaWNhdGlvblByZXNlbnRlcigpOwot
ICAgIHZpcnR1YWwgfk5vdGlmaWNhdGlvblByZXNlbnRlcigpOwotCi0gICAgdm9pZCBzZXREZWxl
Z2F0ZShXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRlKSB7IG1fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsg
fQotCi0gICAgLy8gQ2FsbGVkIGJ5IHRoZSBUZXN0UnVubmVyIHRvIHNpbXVsYXRlIGEgdXNlciBn
cmFudGluZyBwZXJtaXNzaW9uLgotICAgIHZvaWQgZ3JhbnRQZXJtaXNzaW9uKGNvbnN0IFdlYktp
dDo6V2ViU3RyaW5nJiBvcmlnaW4pOwotCi0gICAgLy8gQ2FsbGVkIGJ5IHRoZSBUZXN0UnVubmVy
IHRvIHNpbXVsYXRlIGEgdXNlciBjbGlja2luZyBvbiBhIG5vdGlmaWNhdGlvbi4KLSAgICBib29s
IHNpbXVsYXRlQ2xpY2soY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIG5vdGlmaWNhdGlvbklkZW50
aWZpZXIpOwotCi0gICAgLy8gV2ViS2l0OjpXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIgaW50ZXJm
YWNlCi0gICAgdmlydHVhbCBib29sIHNob3coY29uc3QgV2ViS2l0OjpXZWJOb3RpZmljYXRpb24m
KTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKGNvbnN0IFdlYktpdDo6V2ViTm90aWZpY2F0aW9u
Jik7Ci0gICAgdmlydHVhbCB2b2lkIG9iamVjdERlc3Ryb3llZChjb25zdCBXZWJLaXQ6OldlYk5v
dGlmaWNhdGlvbiYpOwotICAgIHZpcnR1YWwgUGVybWlzc2lvbiBjaGVja1Blcm1pc3Npb24oY29u
c3QgV2ViS2l0OjpXZWJTZWN1cml0eU9yaWdpbiYpOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0
UGVybWlzc2lvbihjb25zdCBXZWJLaXQ6OldlYlNlY3VyaXR5T3JpZ2luJiwgV2ViS2l0OjpXZWJO
b3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2sqKTsKLQotICAgIHZvaWQgcmVzZXQoKSB7IG1f
YWxsb3dlZE9yaWdpbnMuY2xlYXIoKTsgfQotCi1wcml2YXRlOgotICAgIFdlYlRlc3REZWxlZ2F0
ZSogbV9kZWxlZ2F0ZTsKLQotICAgIC8vIFNldCBvZiBhbGxvd2VkIG9yaWdpbnMuCi0gICAgc3Rk
OjpzZXQ8c3RkOjpzdHJpbmc+IG1fYWxsb3dlZE9yaWdpbnM7Ci0KLSAgICAvLyBNYXAgb2YgYWN0
aXZlIG5vdGlmaWNhdGlvbnMuCi0gICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIFdlYktpdDo6V2Vi
Tm90aWZpY2F0aW9uPiBtX2FjdGl2ZU5vdGlmaWNhdGlvbnM7Ci0KLSAgICAvLyBNYXAgb2YgYWN0
aXZlIHJlcGxhY2VtZW50IElEcyB0byB0aGUgdGl0bGVzIG9mIHRob3NlIG5vdGlmaWNhdGlvbnMK
LSAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IG1fcmVwbGFjZW1lbnRzOwot
fTsKLQotfQotCi0jZW5kaWYgLy8gTm90aWZpY2F0aW9uUHJlc2VudGVyX2gKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1NwZWxsQ2hlY2tD
bGllbnQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
U3BlbGxDaGVja0NsaWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NTdm
N2FkMjEwYThmYzk0ZWE3YmViZjE4MjljZjQwYzcxZDFiZjguLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvU3BlbGxDaGVja0NsaWVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
NTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTcGVsbENoZWNrQ2xpZW50
LmgiCi0KLSNpbmNsdWRlICJNb2NrR3JhbW1hckNoZWNrLmgiCi0jaW5jbHVkZSAiV2ViVGVzdERl
bGVnYXRlLmgiCi0jaW5jbHVkZSAiV2ViVGV4dENoZWNraW5nQ29tcGxldGlvbi5oIgotI2luY2x1
ZGUgIldlYlRleHRDaGVja2luZ1Jlc3VsdC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0Owot
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1uYW1l
c3BhY2UgewotCi1jbGFzcyBIb3N0TWV0aG9kVGFzayA6IHB1YmxpYyBXZWJNZXRob2RUYXNrPFNw
ZWxsQ2hlY2tDbGllbnQ+IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHZvaWQgKFNwZWxsQ2hlY2tD
bGllbnQ6OipDYWxsYmFja01ldGhvZFR5cGUpKCk7Ci0gICAgSG9zdE1ldGhvZFRhc2soU3BlbGxD
aGVja0NsaWVudCogb2JqZWN0LCBDYWxsYmFja01ldGhvZFR5cGUgY2FsbGJhY2spCi0gICAgICAg
IDogV2ViTWV0aG9kVGFzazxTcGVsbENoZWNrQ2xpZW50PihvYmplY3QpCi0gICAgICAgICwgbV9j
YWxsYmFjayhjYWxsYmFjaykKLSAgICB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBydW5JZlZhbGlk
KCkgeyAobV9vYmplY3QtPiptX2NhbGxiYWNrKSgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ2FsbGJh
Y2tNZXRob2RUeXBlIG1fY2FsbGJhY2s7Ci19OwotCi19Ci0KLVNwZWxsQ2hlY2tDbGllbnQ6OlNw
ZWxsQ2hlY2tDbGllbnQoKQotICAgIDogbV9sYXN0UmVxdWVzdGVkVGV4dENoZWNraW5nQ29tcGxl
dGlvbigwKQotewotfQotCi1TcGVsbENoZWNrQ2xpZW50Ojp+U3BlbGxDaGVja0NsaWVudCgpCi17
Ci19Ci0KLXZvaWQgU3BlbGxDaGVja0NsaWVudDo6c2V0RGVsZWdhdGUoV2ViVGVzdERlbGVnYXRl
KiBkZWxlZ2F0ZSkKLXsKLSAgICBtX2RlbGVnYXRlID0gZGVsZWdhdGU7Ci19Ci0KLS8vIFdlYktp
dDo6V2ViU3BlbGxDaGVja0NsaWVudAotdm9pZCBTcGVsbENoZWNrQ2xpZW50OjpzcGVsbENoZWNr
KGNvbnN0IFdlYlN0cmluZyYgdGV4dCwgaW50JiBtaXNzcGVsbGVkT2Zmc2V0LCBpbnQmIG1pc3Nw
ZWxsZWRMZW5ndGgsIFdlYlZlY3RvcjxXZWJTdHJpbmc+KiBvcHRpb25hbFN1Z2dlc3Rpb25zKQot
ewotICAgIC8vIENoZWNrIHRoZSBzcGVsbGluZyBvZiB0aGUgZ2l2ZW4gdGV4dC4KLSAgICBtX3Nw
ZWxsY2hlY2suc3BlbGxDaGVja1dvcmQodGV4dCwgJm1pc3NwZWxsZWRPZmZzZXQsICZtaXNzcGVs
bGVkTGVuZ3RoKTsKLX0KLQotdm9pZCBTcGVsbENoZWNrQ2xpZW50OjpjaGVja1RleHRPZlBhcmFn
cmFwaChjb25zdCBXZWJTdHJpbmcmIHRleHQsIFdlYlRleHRDaGVja2luZ1R5cGVNYXNrIG1hc2ss
IFdlYlZlY3RvcjxXZWJUZXh0Q2hlY2tpbmdSZXN1bHQ+KiB3ZWJSZXN1bHRzKQotewotICAgIHZl
Y3RvcjxXZWJUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgaWYgKG1hc2sgJiBXZWJU
ZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcpIHsKLSAgICAgICAgc2l6ZV90IG9mZnNldCA9IDA7Ci0g
ICAgICAgIHNpemVfdCBsZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwotICAgICAgICBjb25zdCBXZWJV
Q2hhciogZGF0YSA9IHRleHQuZGF0YSgpOwotICAgICAgICB3aGlsZSAob2Zmc2V0IDwgbGVuZ3Ro
KSB7Ci0gICAgICAgICAgICBpbnQgbWlzc3BlbGxlZFBvc2l0aW9uID0gMDsKLSAgICAgICAgICAg
IGludCBtaXNzcGVsbGVkTGVuZ3RoID0gMDsKLSAgICAgICAgICAgIG1fc3BlbGxjaGVjay5zcGVs
bENoZWNrV29yZChXZWJTdHJpbmcoJmRhdGFbb2Zmc2V0XSwgbGVuZ3RoIC0gb2Zmc2V0KSwgJm1p
c3NwZWxsZWRQb3NpdGlvbiwgJm1pc3NwZWxsZWRMZW5ndGgpOwotICAgICAgICAgICAgaWYgKCFt
aXNzcGVsbGVkTGVuZ3RoKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgV2Vi
VGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKLSAgICAgICAgICAgIHJlc3VsdC50eXBlID0gV2Vi
VGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOwotICAgICAgICAgICAgcmVzdWx0LmxvY2F0aW9uID0g
b2Zmc2V0ICsgbWlzc3BlbGxlZFBvc2l0aW9uOwotICAgICAgICAgICAgcmVzdWx0Lmxlbmd0aCA9
IG1pc3NwZWxsZWRMZW5ndGg7Ci0gICAgICAgICAgICByZXN1bHRzLnB1c2hfYmFjayhyZXN1bHQp
OwotICAgICAgICAgICAgb2Zmc2V0ICs9IG1pc3NwZWxsZWRQb3NpdGlvbiArIG1pc3NwZWxsZWRM
ZW5ndGg7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1hc2sgJiBXZWJUZXh0Q2hlY2tpbmdU
eXBlR3JhbW1hcikKLSAgICAgICAgTW9ja0dyYW1tYXJDaGVjazo6Y2hlY2tHcmFtbWFyT2ZTdHJp
bmcodGV4dCwgJnJlc3VsdHMpOwotICAgIHdlYlJlc3VsdHMtPmFzc2lnbihyZXN1bHRzKTsKLX0K
LQotdm9pZCBTcGVsbENoZWNrQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlRleHQoY29uc3QgV2Vi
U3RyaW5nJiB0ZXh0LCBXZWJUZXh0Q2hlY2tpbmdDb21wbGV0aW9uKiBjb21wbGV0aW9uKQotewot
ICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoY29tcGxldGlvbikKLSAgICAg
ICAgICAgIGNvbXBsZXRpb24tPmRpZENhbmNlbENoZWNraW5nVGV4dCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgbV9sYXN0UmVxdWVzdGVkVGV4dENoZWNraW5nQ29tcGxldGlvbiA9
IGNvbXBsZXRpb247Ci0gICAgbV9sYXN0UmVxdWVzdGVkVGV4dENoZWNrU3RyaW5nID0gdGV4dDsK
LSAgICBpZiAobV9zcGVsbGNoZWNrLmhhc0luQ2FjaGUodGV4dCkpCi0gICAgICAgIGZpbmlzaExh
c3RUZXh0Q2hlY2soKTsKLSAgICBlbHNlCi0gICAgICAgIG1fZGVsZWdhdGUtPnBvc3REZWxheWVk
VGFzayhuZXcgSG9zdE1ldGhvZFRhc2sodGhpcywgJlNwZWxsQ2hlY2tDbGllbnQ6OmZpbmlzaExh
c3RUZXh0Q2hlY2spLCAwKTsKLX0KLQotdm9pZCBTcGVsbENoZWNrQ2xpZW50OjpmaW5pc2hMYXN0
VGV4dENoZWNrKCkKLXsKLSAgICB2ZWN0b3I8V2ViVGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRz
OwotICAgIGludCBvZmZzZXQgPSAwOwotICAgIHN0cmluZzE2IHRleHQgPSBtX2xhc3RSZXF1ZXN0
ZWRUZXh0Q2hlY2tTdHJpbmc7Ci0gICAgd2hpbGUgKHRleHQubGVuZ3RoKCkpIHsKLSAgICAgICAg
aW50IG1pc3NwZWxsZWRQb3NpdGlvbiA9IDA7Ci0gICAgICAgIGludCBtaXNzcGVsbGVkTGVuZ3Ro
ID0gMDsKLSAgICAgICAgbV9zcGVsbGNoZWNrLnNwZWxsQ2hlY2tXb3JkKFdlYlN0cmluZyh0ZXh0
KSwgJm1pc3NwZWxsZWRQb3NpdGlvbiwgJm1pc3NwZWxsZWRMZW5ndGgpOwotICAgICAgICBpZiAo
IW1pc3NwZWxsZWRMZW5ndGgpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgV2ViVmVjdG9y
PFdlYlN0cmluZz4gc3VnZ2VzdGlvbnM7Ci0gICAgICAgIG1fc3BlbGxjaGVjay5maWxsU3VnZ2Vz
dGlvbkxpc3QoV2ViU3RyaW5nKHRleHQuc3Vic3RyKG1pc3NwZWxsZWRQb3NpdGlvbiwgbWlzc3Bl
bGxlZExlbmd0aCkpLCAmc3VnZ2VzdGlvbnMpOwotICAgICAgICByZXN1bHRzLnB1c2hfYmFjayhX
ZWJUZXh0Q2hlY2tpbmdSZXN1bHQoV2ViVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nLCBvZmZzZXQg
KyBtaXNzcGVsbGVkUG9zaXRpb24sIG1pc3NwZWxsZWRMZW5ndGgsIHN1Z2dlc3Rpb25zLmlzRW1w
dHkoKSA/IFdlYlN0cmluZygpIDogc3VnZ2VzdGlvbnNbMF0pKTsKLSAgICAgICAgdGV4dCA9IHRl
eHQuc3Vic3RyKG1pc3NwZWxsZWRQb3NpdGlvbiArIG1pc3NwZWxsZWRMZW5ndGgpOwotICAgICAg
ICBvZmZzZXQgKz0gbWlzc3BlbGxlZFBvc2l0aW9uICsgbWlzc3BlbGxlZExlbmd0aDsKLSAgICB9
Ci0gICAgTW9ja0dyYW1tYXJDaGVjazo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcobV9sYXN0UmVxdWVz
dGVkVGV4dENoZWNrU3RyaW5nLCAmcmVzdWx0cyk7Ci0gICAgbV9sYXN0UmVxdWVzdGVkVGV4dENo
ZWNraW5nQ29tcGxldGlvbi0+ZGlkRmluaXNoQ2hlY2tpbmdUZXh0KHJlc3VsdHMpOwotICAgIG1f
bGFzdFJlcXVlc3RlZFRleHRDaGVja2luZ0NvbXBsZXRpb24gPSAwOwotfQotCi1XZWJTdHJpbmcg
U3BlbGxDaGVja0NsaWVudDo6YXV0b0NvcnJlY3RXb3JkKGNvbnN0IFdlYlN0cmluZyYpCi17Ci0g
ICAgLy8gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgYXMgTWFjIFdlYktpdCAoJ1dlYktpdFN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50Lm1tJykKLSAgICAvLyBkb2VzLiAoSWYgdGhpcyBmdW5jdGlvbiBy
ZXR1cm5zIGEgbm9uLWVtcHR5IHN0cmluZywgV2ViS2l0IHJlcGxhY2VzIHRoZQotICAgIC8vIGdp
dmVuIG1pc3NwZWxsZWQgc3RyaW5nIHdpdGggdGhlIHJlc3VsdCBvbmUuIFRoaXMgcHJvY2VzcyBl
eGVjdXRlcyBzb21lCi0gICAgLy8gZWRpdG9yIGNvbW1hbmRzIGFuZCBjYXVzZXMgbGF5b3V0LXRl
c3QgZmFpbHVyZXMuKQotICAgIHJldHVybiBXZWJTdHJpbmcoKTsKLX0KLQotfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvU3BlbGxDaGVj
a0NsaWVudC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
U3BlbGxDaGVja0NsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjBlMzJm
ZWEwMzc4Nzc2Y2I3Yjg0ZmI5YzIwOTAwOTg0ZDMzZDYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvc3JjL1NwZWxsQ2hlY2tDbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIFNwZWxsQ2hlY2tDbGllbnRfaAotI2RlZmluZSBTcGVsbENoZWNrQ2xpZW50
X2gKLQotI2luY2x1ZGUgIk1vY2tTcGVsbENoZWNrLmgiCi0jaW5jbHVkZSAiV2ViU3BlbGxDaGVj
a0NsaWVudC5oIgotI2luY2x1ZGUgIldlYlRhc2suaCIKLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5u
ZXIgewotCi1jbGFzcyBXZWJUZXN0RGVsZWdhdGU7Ci0KLWNsYXNzIFNwZWxsQ2hlY2tDbGllbnQg
OiBwdWJsaWMgV2ViS2l0OjpXZWJTcGVsbENoZWNrQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBTcGVs
bENoZWNrQ2xpZW50KCk7Ci0gICAgdmlydHVhbCB+U3BlbGxDaGVja0NsaWVudCgpOwotCi0gICAg
dm9pZCBzZXREZWxlZ2F0ZShXZWJUZXN0RGVsZWdhdGUqKTsKLQotICAgIFdlYlRhc2tMaXN0KiB0
YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rhc2tMaXN0OyB9Ci0gICAgTW9ja1NwZWxsQ2hlY2sqIG1v
Y2tTcGVsbENoZWNrKCkgeyByZXR1cm4gJm1fc3BlbGxjaGVjazsgfQotCi0gICAgLy8gV2ViS2l0
OjpXZWJTcGVsbENoZWNrQ2xpZW50IGltcGxlbWVudGF0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBz
cGVsbENoZWNrKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiwgaW50JiBvZmZzZXQsIGludCYgbGVu
Z3RoLCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYlN0cmluZz4qIG9wdGlvbmFsU3VnZ2Vz
dGlvbnMpOwotICAgIHZpcnR1YWwgdm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBXZWJL
aXQ6OldlYlN0cmluZyYsIFdlYktpdDo6V2ViVGV4dENoZWNraW5nVHlwZU1hc2ssIFdlYktpdDo6
V2ViVmVjdG9yPFdlYktpdDo6V2ViVGV4dENoZWNraW5nUmVzdWx0PiopOwotICAgIHZpcnR1YWwg
dm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlRleHQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmLCBXZWJL
aXQ6OldlYlRleHRDaGVja2luZ0NvbXBsZXRpb24qKTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2Vi
U3RyaW5nIGF1dG9Db3JyZWN0V29yZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYpOwotCi1wcml2
YXRlOgotICAgIHZvaWQgZmluaXNoTGFzdFRleHRDaGVjaygpOwotCi0gICAgLy8gVGhlIG1vY2sg
c3BlbGxjaGVja2VyIHVzZWQgaW4gc3BlbGxDaGVjaygpLgotICAgIE1vY2tTcGVsbENoZWNrIG1f
c3BlbGxjaGVjazsKLQotICAgIFdlYktpdDo6V2ViU3RyaW5nIG1fbGFzdFJlcXVlc3RlZFRleHRD
aGVja1N0cmluZzsKLSAgICBXZWJLaXQ6OldlYlRleHRDaGVja2luZ0NvbXBsZXRpb24qIG1fbGFz
dFJlcXVlc3RlZFRleHRDaGVja2luZ0NvbXBsZXRpb247Ci0KLSAgICBXZWJUYXNrTGlzdCBtX3Rh
c2tMaXN0OwotCi0gICAgV2ViVGVzdERlbGVnYXRlKiBtX2RlbGVnYXRlOwotfTsKLQotfQotCi0j
ZW5kaWYgLy8gU3BlbGxDaGVja0NsaWVudF9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0Q29tbW9uLmNwcCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RDb21tb24uY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGExYTFjNjEzNTE4ZDhhMzBjMTgyYjI0MmJiOGRkODcz
YjZmMzE2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RDb21tb24uY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUZXN0Q29tbW9uLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBX
ZWJUZXN0UnVubmVyIHsKLQotbmFtZXNwYWNlIHsKLQotY29uc3QgY2hhciBsYXlvdXRUZXN0c1Bh
dHRlcm5bXSA9ICIvTGF5b3V0VGVzdHMvIjsKLWNvbnN0IHN0cmluZzo6c2l6ZV90eXBlIGxheW91
dFRlc3RzUGF0dGVyblNpemUgPSBzaXplb2YobGF5b3V0VGVzdHNQYXR0ZXJuKSAtIDE7Ci1jb25z
dCBjaGFyIGZpbGVVcmxQYXR0ZXJuW10gPSAiZmlsZTovIjsKLWNvbnN0IGNoYXIgZmlsZVRlc3RQ
cmVmaXhbXSA9ICIoZmlsZSB0ZXN0KToiOwotY29uc3QgY2hhciBkYXRhVXJsUGF0dGVybltdID0g
ImRhdGE6IjsKLWNvbnN0IHN0cmluZzo6c2l6ZV90eXBlIGRhdGFVcmxQYXR0ZXJuU2l6ZSA9IHNp
emVvZihkYXRhVXJsUGF0dGVybikgLSAxOwotCi19Ci0KLXN0cmluZyBub3JtYWxpemVMYXlvdXRU
ZXN0VVJMKGNvbnN0IHN0cmluZyYgdXJsKQotewotICAgIHN0cmluZyByZXN1bHQgPSB1cmw7Ci0g
ICAgc2l6ZV90IHBvczsKLSAgICBpZiAoIXVybC5maW5kKGZpbGVVcmxQYXR0ZXJuKSAmJiAoKHBv
cyA9IHVybC5maW5kKGxheW91dFRlc3RzUGF0dGVybikpICE9IHN0cmluZzo6bnBvcykpIHsKLSAg
ICAgICAgLy8gYWRqdXN0IGZpbGUgVVJMcyB0byBtYXRjaCB1cHN0cmVhbSByZXN1bHRzLgotICAg
ICAgICByZXN1bHQucmVwbGFjZSgwLCBwb3MgKyBsYXlvdXRUZXN0c1BhdHRlcm5TaXplLCBmaWxl
VGVzdFByZWZpeCk7Ci0gICAgfSBlbHNlIGlmICghdXJsLmZpbmQoZGF0YVVybFBhdHRlcm4pKSB7
Ci0gICAgICAgIC8vIFVSTC1lc2NhcGUgZGF0YSBVUkxzIHRvIG1hdGNoIHJlc3VsdHMgdXBzdHJl
YW0uCi0gICAgICAgIHN0cmluZyBwYXRoID0gdXJsLnN1YnN0cihkYXRhVXJsUGF0dGVyblNpemUp
OwotICAgICAgICByZXN1bHQucmVwbGFjZShkYXRhVXJsUGF0dGVyblNpemUsIHVybC5sZW5ndGgo
KSwgcGF0aCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0KZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RDb21tb24u
aCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RDb21t
b24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVmMDBmMjYzNTg4OTdmNjEzMjY2
ZWFjNzY3M2EzMzEyYWY2MjE5ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9U
ZXN0Q29tbW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlv
bi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUZXN0Q29t
bW9uX2gKLSNkZWZpbmUgVGVzdENvbW1vbl9oCi0KLSNpbmNsdWRlIDxiYXNlL2NvbXBpbGVyX3Nw
ZWNpZmljLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYkNvbW1vbi5oPgotI2luY2x1ZGUgPHN0ZGlv
Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaWYgZGVmaW5lZChXSU4zMikKLSNkZWZpbmUgc25w
cmludGYoc3RyLCBzaXplLCAuLi4pIF9zbnByaW50Zl9zKHN0ciwgc2l6ZSwgc2l6ZSwgX19WQV9B
UkdTX18pCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1pbmxpbmUgYm9v
bCBpc0FTQ0lJQWxwaGEoY2hhciBjaCkgeyByZXR1cm4gKGNoIHwgMHgyMCkgPj0gJ2EnICYmIChj
aCB8IDB4MjApIDw9ICd6JzsgfQotCi1pbmxpbmUgYm9vbCBpc05vdEFTQ0lJQWxwaGEoY2hhciBj
aCkgeyByZXR1cm4gIWlzQVNDSUlBbHBoYShjaCk7IH0KLQotc3RkOjpzdHJpbmcgbm9ybWFsaXpl
TGF5b3V0VGVzdFVSTChjb25zdCBzdGQ6OnN0cmluZyYgdXJsKTsKLQotfQotCi0jZW5kaWYgLy8g
VGVzdENvbW1vbl9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNlcy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNlcy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGFmZDY1ZDg2ZDRlNTQ4NWY1ODliMjYxZGRjODcxZmVkYzA1ZGE3OGIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdEludGVyZmFjZXMuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdEludGVyZmFjZXMuaCIKLQotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVy
Q2hyb21pdW0uaCIKLSNpbmNsdWRlICJFdmVudFNlbmRlci5oIgotI2luY2x1ZGUgIkdhbWVwYWRD
b250cm9sbGVyLmgiCi0jaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgotI2luY2x1ZGUgIlRleHRJbnB1
dENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJXZWJDYWNoZS5oIgotI2luY2x1ZGUgIldlYktpdC5o
IgotI2luY2x1ZGUgIldlYlJ1bnRpbWVGZWF0dXJlcy5oIgotI2luY2x1ZGUgPHB1YmxpYy9XZWJT
dHJpbmcuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViVVJMLmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgot
Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNw
YWNlIFdlYlRlc3RSdW5uZXIgewotCi1UZXN0SW50ZXJmYWNlczo6VGVzdEludGVyZmFjZXMoKQot
ICAgIDogbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcihuZXcgQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIoKSkKLSAgICAsIG1fZXZlbnRTZW5kZXIobmV3IEV2ZW50U2VuZGVyKCkpCi0gICAgLCBtX2dh
bWVwYWRDb250cm9sbGVyKG5ldyBHYW1lcGFkQ29udHJvbGxlcigpKQotICAgICwgbV90ZXh0SW5w
dXRDb250cm9sbGVyKG5ldyBUZXh0SW5wdXRDb250cm9sbGVyKCkpCi0gICAgLCBtX3Rlc3RSdW5u
ZXIobmV3IFRlc3RSdW5uZXIodGhpcykpCi0gICAgLCBtX3dlYlZpZXcoMCkKLSAgICAsIG1fZGVs
ZWdhdGUoMCkKLXsKLSAgICBXZWJLaXQ6OnNldExheW91dFRlc3RNb2RlKHRydWUpOwotCi0gICAg
V2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVEYXRhVHJhbnNmZXJJdGVtcyh0cnVlKTsKLSAgICBX
ZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZURldmljZU1vdGlvbihmYWxzZSk7Ci0gICAgV2ViUnVu
dGltZUZlYXR1cmVzOjplbmFibGVHZW9sb2NhdGlvbih0cnVlKTsKLSAgICBXZWJSdW50aW1lRmVh
dHVyZXM6OmVuYWJsZUluZGV4ZWREYXRhYmFzZSh0cnVlKTsKLSAgICBXZWJSdW50aW1lRmVhdHVy
ZXM6OmVuYWJsZUlucHV0VHlwZURhdGVUaW1lKHRydWUpOwotICAgIFdlYlJ1bnRpbWVGZWF0dXJl
czo6ZW5hYmxlSW5wdXRUeXBlRGF0ZVRpbWVMb2NhbCh0cnVlKTsKLSAgICBXZWJSdW50aW1lRmVh
dHVyZXM6OmVuYWJsZUlucHV0VHlwZU1vbnRoKHRydWUpOwotICAgIFdlYlJ1bnRpbWVGZWF0dXJl
czo6ZW5hYmxlSW5wdXRUeXBlVGltZSh0cnVlKTsKLSAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVu
YWJsZUlucHV0VHlwZVdlZWsodHJ1ZSk7Ci0gICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVG
aWxlU3lzdGVtKHRydWUpOwotICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlRm9udExvYWRF
dmVudHModHJ1ZSk7Ci0gICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVKYXZhU2NyaXB0STE4
TkFQSSh0cnVlKTsKLSAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZU1lZGlhU291cmNlKHRy
dWUpOwotICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlRW5jcnlwdGVkTWVkaWEodHJ1ZSk7
Ci0gICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVNZWRpYVN0cmVhbSh0cnVlKTsKLSAgICBX
ZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVBlZXJDb25uZWN0aW9uKHRydWUpOwotICAgIFdlYlJ1
bnRpbWVGZWF0dXJlczo6ZW5hYmxlV2ViQXVkaW8odHJ1ZSk7Ci0gICAgV2ViUnVudGltZUZlYXR1
cmVzOjplbmFibGVWaWRlb1RyYWNrKHRydWUpOwotICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5h
YmxlR2FtZXBhZCh0cnVlKTsKLSAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVNoYWRvd0RP
TSh0cnVlKTsKLSAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUN1c3RvbURPTUVsZW1lbnRz
KHRydWUpOwotICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlU3R5bGVTY29wZWQodHJ1ZSk7
Ci0gICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVTY3JpcHRlZFNwZWVjaCh0cnVlKTsKLSAg
ICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVJlcXVlc3RBdXRvY29tcGxldGUodHJ1ZSk7Ci0g
ICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVFeHBlcmltZW50YWxDb250ZW50U2VjdXJpdHlQ
b2xpY3lGZWF0dXJlcyh0cnVlKTsKLSAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZVNlYW1s
ZXNzSUZyYW1lcyh0cnVlKTsKLSAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUNhbnZhc1Bh
dGgodHJ1ZSk7Ci0KLSAgICByZXNldEFsbCgpOwotfQotCi1UZXN0SW50ZXJmYWNlczo6flRlc3RJ
bnRlcmZhY2VzKCkKLXsKLSAgICBtX2FjY2Vzc2liaWxpdHlDb250cm9sbGVyLT5zZXRXZWJWaWV3
KDApOwotICAgIG1fZXZlbnRTZW5kZXItPnNldFdlYlZpZXcoMCk7Ci0gICAgLy8gbV9nYW1lcGFk
Q29udHJvbGxlciBkb2Vzbid0IGRlcGVuZCBvbiBXZWJWaWV3LgotICAgIG1fdGV4dElucHV0Q29u
dHJvbGxlci0+c2V0V2ViVmlldygwKTsKLSAgICBtX3Rlc3RSdW5uZXItPnNldFdlYlZpZXcoMCwg
MCk7Ci0KLSAgICBtX2FjY2Vzc2liaWxpdHlDb250cm9sbGVyLT5zZXREZWxlZ2F0ZSgwKTsKLSAg
ICBtX2V2ZW50U2VuZGVyLT5zZXREZWxlZ2F0ZSgwKTsKLSAgICBtX2dhbWVwYWRDb250cm9sbGVy
LT5zZXREZWxlZ2F0ZSgwKTsKLSAgICAvLyBtX3RleHRJbnB1dENvbnRyb2xsZXIgZG9lc24ndCBk
ZXBlbmQgb24gV2ViVGVzdERlbGVnYXRlLgotICAgIG1fdGVzdFJ1bm5lci0+c2V0RGVsZWdhdGUo
MCk7Ci19Ci0KLXZvaWQgVGVzdEludGVyZmFjZXM6OnNldFdlYlZpZXcoV2ViVmlldyogd2ViVmll
dywgV2ViVGVzdFByb3h5QmFzZSogcHJveHkpCi17Ci0gICAgbV93ZWJWaWV3ID0gd2ViVmlldzsK
LSAgICBtX3Byb3h5ID0gcHJveHk7Ci0gICAgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci0+c2V0
V2ViVmlldyh3ZWJWaWV3KTsKLSAgICBtX2V2ZW50U2VuZGVyLT5zZXRXZWJWaWV3KHdlYlZpZXcp
OwotICAgIC8vIG1fZ2FtZXBhZENvbnRyb2xsZXIgZG9lc24ndCBkZXBlbmQgb24gV2ViVmlldy4K
LSAgICBtX3RleHRJbnB1dENvbnRyb2xsZXItPnNldFdlYlZpZXcod2ViVmlldyk7Ci0gICAgbV90
ZXN0UnVubmVyLT5zZXRXZWJWaWV3KHdlYlZpZXcsIHByb3h5KTsKLX0KLQotdm9pZCBUZXN0SW50
ZXJmYWNlczo6c2V0RGVsZWdhdGUoV2ViVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSkKLXsKLSAgICBt
X2FjY2Vzc2liaWxpdHlDb250cm9sbGVyLT5zZXREZWxlZ2F0ZShkZWxlZ2F0ZSk7Ci0gICAgbV9l
dmVudFNlbmRlci0+c2V0RGVsZWdhdGUoZGVsZWdhdGUpOwotICAgIG1fZ2FtZXBhZENvbnRyb2xs
ZXItPnNldERlbGVnYXRlKGRlbGVnYXRlKTsKLSAgICAvLyBtX3RleHRJbnB1dENvbnRyb2xsZXIg
ZG9lc24ndCBkZXBlbmQgb24gV2ViVGVzdERlbGVnYXRlLgotICAgIG1fdGVzdFJ1bm5lci0+c2V0
RGVsZWdhdGUoZGVsZWdhdGUpOwotICAgIG1fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLX0KLQotdm9p
ZCBUZXN0SW50ZXJmYWNlczo6YmluZFRvKFdlYkZyYW1lKiBmcmFtZSkKLXsKLSAgICBtX2FjY2Vz
c2liaWxpdHlDb250cm9sbGVyLT5iaW5kVG9KYXZhc2NyaXB0KGZyYW1lLCBXZWJTdHJpbmc6OmZy
b21VVEY4KCJhY2Nlc3NpYmlsaXR5Q29udHJvbGxlciIpKTsKLSAgICBtX2V2ZW50U2VuZGVyLT5i
aW5kVG9KYXZhc2NyaXB0KGZyYW1lLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJldmVudFNlbmRlciIp
KTsKLSAgICBtX2dhbWVwYWRDb250cm9sbGVyLT5iaW5kVG9KYXZhc2NyaXB0KGZyYW1lLCBXZWJT
dHJpbmc6OmZyb21VVEY4KCJnYW1lcGFkQ29udHJvbGxlciIpKTsKLSAgICBtX3RleHRJbnB1dENv
bnRyb2xsZXItPmJpbmRUb0phdmFzY3JpcHQoZnJhbWUsIFdlYlN0cmluZzo6ZnJvbVVURjgoInRl
eHRJbnB1dENvbnRyb2xsZXIiKSk7Ci0gICAgbV90ZXN0UnVubmVyLT5iaW5kVG9KYXZhc2NyaXB0
KGZyYW1lLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ0ZXN0UnVubmVyIikpOwotICAgIG1fdGVzdFJ1
bm5lci0+YmluZFRvSmF2YXNjcmlwdChmcmFtZSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgibGF5b3V0
VGVzdENvbnRyb2xsZXIiKSk7Ci19Ci0KLXZvaWQgVGVzdEludGVyZmFjZXM6OnJlc2V0QWxsKCkK
LXsKLSAgICBtX2FjY2Vzc2liaWxpdHlDb250cm9sbGVyLT5yZXNldCgpOwotICAgIG1fZXZlbnRT
ZW5kZXItPnJlc2V0KCk7Ci0gICAgbV9nYW1lcGFkQ29udHJvbGxlci0+cmVzZXQoKTsKLSAgICAv
LyBtX3RleHRJbnB1dENvbnRyb2xsZXIgZG9lc24ndCBoYXZlIGFueSBzdGF0ZSB0byByZXNldC4K
LSAgICBtX3Rlc3RSdW5uZXItPnJlc2V0KCk7Ci0gICAgV2ViQ2FjaGU6OmNsZWFyKCk7Ci19Ci0K
LXZvaWQgVGVzdEludGVyZmFjZXM6OnNldFRlc3RJc1J1bm5pbmcoYm9vbCBydW5uaW5nKQotewot
ICAgIG1fdGVzdFJ1bm5lci0+c2V0VGVzdElzUnVubmluZyhydW5uaW5nKTsKLX0KLQotdm9pZCBU
ZXN0SW50ZXJmYWNlczo6Y29uZmlndXJlRm9yVGVzdFdpdGhVUkwoY29uc3QgV2ViVVJMJiB0ZXN0
VVJMLCBib29sIGdlbmVyYXRlUGl4ZWxzKQotewotICAgIHN0cmluZyBzcGVjID0gR1VSTCh0ZXN0
VVJMKS5zcGVjKCk7Ci0gICAgbV90ZXN0UnVubmVyLT5zZXRTaG91bGRHZW5lcmF0ZVBpeGVsUmVz
dWx0cyhnZW5lcmF0ZVBpeGVscyk7Ci0gICAgaWYgKHNwZWMuZmluZCgibG9hZGluZy8iKSAhPSBz
dHJpbmc6Om5wb3MpCi0gICAgICAgIG1fdGVzdFJ1bm5lci0+c2V0U2hvdWxkRHVtcEZyYW1lTG9h
ZENhbGxiYWNrcyh0cnVlKTsKLSAgICBpZiAoc3BlYy5maW5kKCIvZHVtcEFzVGV4dC8iKSAhPSBz
dHJpbmc6Om5wb3MpIHsKLSAgICAgICAgbV90ZXN0UnVubmVyLT5zZXRTaG91bGREdW1wQXNUZXh0
KHRydWUpOwotICAgICAgICBtX3Rlc3RSdW5uZXItPnNldFNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1
bHRzKGZhbHNlKTsKLSAgICB9Ci0gICAgaWYgKHNwZWMuZmluZCgiL2luc3BlY3Rvci8iKSAhPSBz
dHJpbmc6Om5wb3MpCi0gICAgICAgIG1fdGVzdFJ1bm5lci0+c2hvd0RldlRvb2xzKCk7Ci19Ci0K
LXZvaWQgVGVzdEludGVyZmFjZXM6OndpbmRvd09wZW5lZChXZWJUZXN0UHJveHlCYXNlKiBwcm94
eSkKLXsKLSAgICBtX3dpbmRvd0xpc3QucHVzaF9iYWNrKHByb3h5KTsKLX0KLQotdm9pZCBUZXN0
SW50ZXJmYWNlczo6d2luZG93Q2xvc2VkKFdlYlRlc3RQcm94eUJhc2UqIHByb3h5KQotewotICAg
IHZlY3RvcjxXZWJUZXN0UHJveHlCYXNlKj46Oml0ZXJhdG9yIHBvcyA9IGZpbmQobV93aW5kb3dM
aXN0LmJlZ2luKCksIG1fd2luZG93TGlzdC5lbmQoKSwgcHJveHkpOwotICAgIGlmIChwb3MgPT0g
bV93aW5kb3dMaXN0LmVuZCgpKSB7Ci0gICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3dpbmRvd0xpc3QuZXJhc2UocG9zKTsK
LX0KLQotQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIqIFRlc3RJbnRlcmZhY2VzOjphY2Nlc3NpYmls
aXR5Q29udHJvbGxlcigpCi17Ci0gICAgcmV0dXJuIG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
Z2V0KCk7Ci19Ci0KLUV2ZW50U2VuZGVyKiBUZXN0SW50ZXJmYWNlczo6ZXZlbnRTZW5kZXIoKQot
ewotICAgIHJldHVybiBtX2V2ZW50U2VuZGVyLmdldCgpOwotfQotCi1UZXN0UnVubmVyKiBUZXN0
SW50ZXJmYWNlczo6dGVzdFJ1bm5lcigpCi17Ci0gICAgcmV0dXJuIG1fdGVzdFJ1bm5lci5nZXQo
KTsKLX0KLQotV2ViVmlldyogVGVzdEludGVyZmFjZXM6OndlYlZpZXcoKQotewotICAgIHJldHVy
biBtX3dlYlZpZXc7Ci19Ci0KLVdlYlRlc3REZWxlZ2F0ZSogVGVzdEludGVyZmFjZXM6OmRlbGVn
YXRlKCkKLXsKLSAgICByZXR1cm4gbV9kZWxlZ2F0ZTsKLX0KLQotV2ViVGVzdFByb3h5QmFzZSog
VGVzdEludGVyZmFjZXM6OnByb3h5KCkKLXsKLSAgICByZXR1cm4gbV9wcm94eTsKLX0KLQotY29u
c3QgdmVjdG9yPFdlYlRlc3RQcm94eUJhc2UqPiYgVGVzdEludGVyZmFjZXM6OndpbmRvd0xpc3Qo
KQotewotICAgIHJldHVybiBtX3dpbmRvd0xpc3Q7Ci19Ci0KLVdlYlRoZW1lRW5naW5lKiBUZXN0
SW50ZXJmYWNlczo6dGhlbWVFbmdpbmUoKQotewotI2lmIGRlZmluZWQoVVNFX0RFRkFVTFRfUkVO
REVSX1RIRU1FKSB8fCAhKGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX19BUFBMRV9fKSkKLSAg
ICByZXR1cm4gMDsKLSNlbGlmIGRlZmluZWQoV0lOMzIpCi0gICAgaWYgKCFtX3RoZW1lRW5naW5l
LmdldCgpKQotICAgICAgICBtX3RoZW1lRW5naW5lLnJlc2V0KG5ldyBXZWJUZXN0VGhlbWVFbmdp
bmVXaW4oKSk7Ci0gICAgcmV0dXJuIG1fdGhlbWVFbmdpbmUuZ2V0KCk7Ci0jZWxpZiBkZWZpbmVk
KF9fQVBQTEVfXykKLSAgICBpZiAoIW1fdGhlbWVFbmdpbmUuZ2V0KCkpCi0gICAgICAgIG1fdGhl
bWVFbmdpbmUucmVzZXQobmV3IFdlYlRlc3RUaGVtZUVuZ2luZU1hYygpKTsKLSAgICByZXR1cm4g
bV90aGVtZUVuZ2luZS5nZXQoKTsKLSNlbmRpZgotfQotCi19CmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNlcy5oIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdEludGVyZmFj
ZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVkYzhkMWVkZmZjZDgxMzkxMGRl
ZDc1NjZiMjQxZDljZjg5ZDEzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9U
ZXN0SW50ZXJmYWNlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFRl
c3RJbnRlcmZhY2VzX2gKLSNkZWZpbmUgVGVzdEludGVyZmFjZXNfaAotCi0jaW5jbHVkZSA8bWVt
b3J5PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2lmIGRlZmluZWQoV0lOMzIpCi0jaW5jbHVkZSAi
V2ViVGVzdFRoZW1lRW5naW5lV2luLmgiCi0jZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNpbmNs
dWRlICJXZWJUZXN0VGhlbWVFbmdpbmVNYWMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLWNsYXNzIFdlYkZyYW1lOwotY2xhc3MgV2ViVGhlbWVFbmdpbmU7Ci1jbGFzcyBXZWJVUkw7
Ci1jbGFzcyBXZWJWaWV3OwotfQotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLWNsYXNz
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOwotY2xhc3MgRXZlbnRTZW5kZXI7Ci1jbGFzcyBHYW1l
cGFkQ29udHJvbGxlcjsKLWNsYXNzIFRlc3RSdW5uZXI7Ci1jbGFzcyBUZXh0SW5wdXRDb250cm9s
bGVyOwotY2xhc3MgV2ViVGVzdERlbGVnYXRlOwotY2xhc3MgV2ViVGVzdFByb3h5QmFzZTsKLQot
Y2xhc3MgVGVzdEludGVyZmFjZXMgewotcHVibGljOgotICAgIFRlc3RJbnRlcmZhY2VzKCk7Ci0g
ICAgflRlc3RJbnRlcmZhY2VzKCk7Ci0KLSAgICB2b2lkIHNldFdlYlZpZXcoV2ViS2l0OjpXZWJW
aWV3KiwgV2ViVGVzdFByb3h5QmFzZSopOwotICAgIHZvaWQgc2V0RGVsZWdhdGUoV2ViVGVzdERl
bGVnYXRlKik7Ci0gICAgdm9pZCBiaW5kVG8oV2ViS2l0OjpXZWJGcmFtZSopOwotICAgIHZvaWQg
cmVzZXRBbGwoKTsKLSAgICB2b2lkIHNldFRlc3RJc1J1bm5pbmcoYm9vbCk7Ci0gICAgdm9pZCBj
b25maWd1cmVGb3JUZXN0V2l0aFVSTChjb25zdCBXZWJLaXQ6OldlYlVSTCYsIGJvb2wgZ2VuZXJh
dGVQaXhlbHMpOwotCi0gICAgdm9pZCB3aW5kb3dPcGVuZWQoV2ViVGVzdFByb3h5QmFzZSopOwot
ICAgIHZvaWQgd2luZG93Q2xvc2VkKFdlYlRlc3RQcm94eUJhc2UqKTsKLQotICAgIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyKiBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpOwotICAgIEV2ZW50U2Vu
ZGVyKiBldmVudFNlbmRlcigpOwotICAgIFRlc3RSdW5uZXIqIHRlc3RSdW5uZXIoKTsKLSAgICBX
ZWJLaXQ6OldlYlZpZXcqIHdlYlZpZXcoKTsKLSAgICBXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRl
KCk7Ci0gICAgV2ViVGVzdFByb3h5QmFzZSogcHJveHkoKTsKLSAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxXZWJUZXN0UHJveHlCYXNlKj4mIHdpbmRvd0xpc3QoKTsKLSAgICBXZWJLaXQ6OldlYlRoZW1l
RW5naW5lKiB0aGVtZUVuZ2luZSgpOwotCi1wcml2YXRlOgotICAgIHN0ZDo6YXV0b19wdHI8QWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI+IG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI7Ci0gICAgc3Rk
OjphdXRvX3B0cjxFdmVudFNlbmRlcj4gbV9ldmVudFNlbmRlcjsKLSAgICBzdGQ6OmF1dG9fcHRy
PEdhbWVwYWRDb250cm9sbGVyPiBtX2dhbWVwYWRDb250cm9sbGVyOwotICAgIHN0ZDo6YXV0b19w
dHI8VGV4dElucHV0Q29udHJvbGxlcj4gbV90ZXh0SW5wdXRDb250cm9sbGVyOwotICAgIHN0ZDo6
YXV0b19wdHI8VGVzdFJ1bm5lcj4gbV90ZXN0UnVubmVyOwotICAgIFdlYktpdDo6V2ViVmlldyog
bV93ZWJWaWV3OwotICAgIFdlYlRlc3REZWxlZ2F0ZSogbV9kZWxlZ2F0ZTsKLSAgICBXZWJUZXN0
UHJveHlCYXNlKiBtX3Byb3h5OwotCi0gICAgc3RkOjp2ZWN0b3I8V2ViVGVzdFByb3h5QmFzZSo+
IG1fd2luZG93TGlzdDsKLSNpZiAhZGVmaW5lZChVU0VfREVGQVVMVF9SRU5ERVJfVEhFTUUpCi0j
aWYgZGVmaW5lZChXSU4zMikKLSAgICBzdGQ6OmF1dG9fcHRyPFdlYlRlc3RUaGVtZUVuZ2luZVdp
bj4gbV90aGVtZUVuZ2luZTsKLSNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQotICAgIHN0ZDo6YXV0
b19wdHI8V2ViVGVzdFRoZW1lRW5naW5lTWFjPiBtX3RoZW1lRW5naW5lOwotI2VuZGlmCi0jZW5k
aWYKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFRlc3RJbnRlcmZhY2VzX2gKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RQbHVnaW4uY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFBsdWdp
bi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NGYxZDNiMjE4YzU4MWU4Yzky
YjNmZTdlNTgxNmMyMzc4MjA1ODEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
VGVzdFBsdWdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NTcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UGx1Z2luLmgiCi0KLSNpbmNsdWRlICJU
ZXN0Q29tbW9uLmgiCi0jaW5jbHVkZSAiV2ViRnJhbWUuaCIKLSNpbmNsdWRlICJXZWJJbnB1dEV2
ZW50LmgiCi0jaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViUGx1Z2luUGFyYW1zLmgi
Ci0jaW5jbHVkZSAiV2ViVGVzdERlbGVnYXRlLmgiCi0jaW5jbHVkZSAiV2ViVG91Y2hQb2ludC5o
IgotI2luY2x1ZGUgIldlYlVzZXJHZXN0dXJlSW5kaWNhdG9yLmgiCi0jaW5jbHVkZSA8cHVibGlj
L1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYkNvbXBvc2l0b3JTdXBwb3J0Lmg+Ci0j
aW5jbHVkZSA8cHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5l
ciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIEdMZW51bSB2YWx1ZXMgY29waWVkIGZyb20gZ2wyLmgu
Ci0jZGVmaW5lIEdMX0ZBTFNFICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHTF9UUlVFICAg
ICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgR0xfT05FICAgICAgICAgICAgICAgICAgICAxCi0j
ZGVmaW5lIEdMX1RSSUFOR0xFUyAgICAgICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIEdMX09ORV9N
SU5VU19TUkNfQUxQSEEgICAgMHgwMzAzCi0jZGVmaW5lIEdMX0RFUFRIX1RFU1QgICAgICAgICAg
ICAgMHgwQjcxCi0jZGVmaW5lIEdMX0JMRU5EICAgICAgICAgICAgICAgICAgMHgwQkUyCi0jZGVm
aW5lIEdMX1NDSVNTT1JfVEVTVCAgICAgICAgICAgMHgwQjkwCi0jZGVmaW5lIEdMX1RFWFRVUkVf
MkQgICAgICAgICAgICAgMHgwREUxCi0jZGVmaW5lIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAg
MHgxNDA2Ci0jZGVmaW5lIEdMX1JHQkEgICAgICAgICAgICAgICAgICAgMHgxOTA4Ci0jZGVmaW5l
IEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgMHgxNDAxCi0jZGVmaW5lIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiAgICAgMHgyODAwCi0jZGVmaW5lIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiAgICAgMHgy
ODAxCi0jZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9TICAgICAgICAgMHgyODAyCi0jZGVmaW5lIEdM
X1RFWFRVUkVfV1JBUF9UICAgICAgICAgMHgyODAzCi0jZGVmaW5lIEdMX05FQVJFU1QgICAgICAg
ICAgICAgICAgMHgyNjAwCi0jZGVmaW5lIEdMX0NPTE9SX0JVRkZFUl9CSVQgICAgICAgMHg0MDAw
Ci0jZGVmaW5lIEdMX0NMQU1QX1RPX0VER0UgICAgICAgICAgMHg4MTJGCi0jZGVmaW5lIEdMX0FS
UkFZX0JVRkZFUiAgICAgICAgICAgMHg4ODkyCi0jZGVmaW5lIEdMX1NUQVRJQ19EUkFXICAgICAg
ICAgICAgMHg4OEU0Ci0jZGVmaW5lIEdMX0ZSQUdNRU5UX1NIQURFUiAgICAgICAgMHg4QjMwCi0j
ZGVmaW5lIEdMX1ZFUlRFWF9TSEFERVIgICAgICAgICAgMHg4QjMxCi0jZGVmaW5lIEdMX0NPTVBJ
TEVfU1RBVFVTICAgICAgICAgMHg4QjgxCi0jZGVmaW5lIEdMX0xJTktfU1RBVFVTICAgICAgICAg
ICAgMHg4QjgyCi0jZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQwICAgICAgMHg4Q0UwCi0jZGVm
aW5lIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFICAgMHg4Q0Q1Ci0jZGVmaW5lIEdMX0ZSQU1FQlVG
RkVSICAgICAgICAgICAgMHg4RDQwCi0KLXZvaWQgcHJlbXVsdGlwbHlBbHBoYShjb25zdCB1bnNp
Z25lZCBjb2xvckluWzNdLCBmbG9hdCBhbHBoYSwgZmxvYXQgY29sb3JPdXRbNF0pCi17Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGNvbG9yT3V0W2ldID0gKGNvbG9y
SW5baV0gLyAyNTUuMGYpICogYWxwaGE7Ci0KLSAgICBjb2xvck91dFszXSA9IGFscGhhOwotfQot
Ci1jb25zdCBjaGFyKiBwb2ludFN0YXRlKFdlYlRvdWNoUG9pbnQ6OlN0YXRlIHN0YXRlKQotewot
ICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICBjYXNlIFdlYlRvdWNoUG9pbnQ6OlN0YXRlUmVsZWFz
ZWQ6Ci0gICAgICAgIHJldHVybiAiUmVsZWFzZWQiOwotICAgIGNhc2UgV2ViVG91Y2hQb2ludDo6
U3RhdGVQcmVzc2VkOgotICAgICAgICByZXR1cm4gIlByZXNzZWQiOwotICAgIGNhc2UgV2ViVG91
Y2hQb2ludDo6U3RhdGVNb3ZlZDoKLSAgICAgICAgcmV0dXJuICJNb3ZlZCI7Ci0gICAgY2FzZSBX
ZWJUb3VjaFBvaW50OjpTdGF0ZUNhbmNlbGxlZDoKLSAgICAgICAgcmV0dXJuICJDYW5jZWxsZWQi
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAiVW5rbm93biI7Ci0gICAgfQotCi0gICAg
V0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIHBy
aW50VG91Y2hMaXN0KFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUsIGNvbnN0IFdlYlRvdWNoUG9p
bnQqIHBvaW50cywgaW50IGxlbmd0aCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7Ci0gICAgICAgIGNoYXIgYnVmZmVyWzEwMF07Ci0gICAgICAgIHNucHJpbnRmKGJ1
ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIqICVkLCAlZDogJXNcbiIsIHBvaW50c1tpXS5wb3NpdGlv
bi54LCBwb2ludHNbaV0ucG9zaXRpb24ueSwgcG9pbnRTdGF0ZShwb2ludHNbaV0uc3RhdGUpKTsK
LSAgICAgICAgZGVsZWdhdGUtPnByaW50TWVzc2FnZShidWZmZXIpOwotICAgIH0KLX0KLQotdm9p
ZCBwcmludEV2ZW50RGV0YWlscyhXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRlLCBjb25zdCBXZWJJ
bnB1dEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoV2ViSW5wdXRFdmVudDo6aXNUb3VjaEV2ZW50
VHlwZShldmVudC50eXBlKSkgewotICAgICAgICBjb25zdCBXZWJUb3VjaEV2ZW50JiB0b3VjaCA9
IHN0YXRpY19jYXN0PGNvbnN0IFdlYlRvdWNoRXZlbnQmPihldmVudCk7Ci0gICAgICAgIHByaW50
VG91Y2hMaXN0KGRlbGVnYXRlLCB0b3VjaC50b3VjaGVzLCB0b3VjaC50b3VjaGVzTGVuZ3RoKTsK
LSAgICAgICAgcHJpbnRUb3VjaExpc3QoZGVsZWdhdGUsIHRvdWNoLmNoYW5nZWRUb3VjaGVzLCB0
b3VjaC5jaGFuZ2VkVG91Y2hlc0xlbmd0aCk7Ci0gICAgICAgIHByaW50VG91Y2hMaXN0KGRlbGVn
YXRlLCB0b3VjaC50YXJnZXRUb3VjaGVzLCB0b3VjaC50YXJnZXRUb3VjaGVzTGVuZ3RoKTsKLSAg
ICB9IGVsc2UgaWYgKFdlYklucHV0RXZlbnQ6OmlzTW91c2VFdmVudFR5cGUoZXZlbnQudHlwZSkg
fHwgZXZlbnQudHlwZSA9PSBXZWJJbnB1dEV2ZW50OjpNb3VzZVdoZWVsKSB7Ci0gICAgICAgIGNv
bnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVu
dCY+KGV2ZW50KTsKLSAgICAgICAgY2hhciBidWZmZXJbMTAwXTsKLSAgICAgICAgc25wcmludGYo
YnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiogJWQsICVkXG4iLCBtb3VzZS54LCBtb3VzZS55KTsK
LSAgICAgICAgZGVsZWdhdGUtPnByaW50TWVzc2FnZShidWZmZXIpOwotICAgIH0gZWxzZSBpZiAo
V2ViSW5wdXRFdmVudDo6aXNHZXN0dXJlRXZlbnRUeXBlKGV2ZW50LnR5cGUpKSB7Ci0gICAgICAg
IGNvbnN0IFdlYkdlc3R1cmVFdmVudCYgZ2VzdHVyZSA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkdl
c3R1cmVFdmVudCY+KGV2ZW50KTsKLSAgICAgICAgY2hhciBidWZmZXJbMTAwXTsKLSAgICAgICAg
c25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiogJWQsICVkXG4iLCBnZXN0dXJlLngs
IGdlc3R1cmUueSk7Ci0gICAgICAgIGRlbGVnYXRlLT5wcmludE1lc3NhZ2UoYnVmZmVyKTsKLSAg
ICB9Ci19Ci0KLVdlYlBsdWdpbkNvbnRhaW5lcjo6VG91Y2hFdmVudFJlcXVlc3RUeXBlIHBhcnNl
VG91Y2hFdmVudFJlcXVlc3RUeXBlKGNvbnN0IFdlYlN0cmluZyYgc3RyaW5nKQotewotICAgIGlm
IChzdHJpbmcgPT0gV2ViU3RyaW5nOjpmcm9tVVRGOCgicmF3IikpCi0gICAgICAgIHJldHVybiBX
ZWJQbHVnaW5Db250YWluZXI6OlRvdWNoRXZlbnRSZXF1ZXN0VHlwZVJhdzsKLSAgICBpZiAoc3Ry
aW5nID09IFdlYlN0cmluZzo6ZnJvbVVURjgoInN5bnRoZXRpYyIpKQotICAgICAgICByZXR1cm4g
V2ViUGx1Z2luQ29udGFpbmVyOjpUb3VjaEV2ZW50UmVxdWVzdFR5cGVTeW50aGVzaXplZE1vdXNl
OwotICAgIHJldHVybiBXZWJQbHVnaW5Db250YWluZXI6OlRvdWNoRXZlbnRSZXF1ZXN0VHlwZU5v
bmU7Ci19Ci0KLXZvaWQgZGVmZXJyZWREZWxldGUodm9pZCogY29udGV4dCkKLXsKLSAgICBUZXN0
UGx1Z2luKiBwbHVnaW4gPSBzdGF0aWNfY2FzdDxUZXN0UGx1Z2luKj4oY29udGV4dCk7Ci0gICAg
ZGVsZXRlIHBsdWdpbjsKLX0KLQotfQotCi0KLVRlc3RQbHVnaW46OlRlc3RQbHVnaW4oV2ViRnJh
bWUqIGZyYW1lLCBjb25zdCBXZWJQbHVnaW5QYXJhbXMmIHBhcmFtcywgV2ViVGVzdERlbGVnYXRl
KiBkZWxlZ2F0ZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCi0gICAgLCBtX2RlbGVnYXRlKGRlbGVn
YXRlKQotICAgICwgbV9jb250YWluZXIoMCkKLSAgICAsIG1fY29udGV4dCgwKQotICAgICwgbV90
b3VjaEV2ZW50UmVxdWVzdChXZWJQbHVnaW5Db250YWluZXI6OlRvdWNoRXZlbnRSZXF1ZXN0VHlw
ZU5vbmUpCi0gICAgLCBtX3JlUmVxdWVzdFRvdWNoRXZlbnRzKGZhbHNlKQotICAgICwgbV9wcmlu
dEV2ZW50RGV0YWlscyhmYWxzZSkKLSAgICAsIG1fcHJpbnRVc2VyR2VzdHVyZVN0YXR1cyhmYWxz
ZSkKLSAgICAsIG1fY2FuUHJvY2Vzc0RyYWcoZmFsc2UpCi17Ci0gICAgc3RhdGljIGNvbnN0IFdl
YlN0cmluZyBrQXR0cmlidXRlUHJpbWl0aXZlID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgicHJpbWl0
aXZlIik7Ci0gICAgc3RhdGljIGNvbnN0IFdlYlN0cmluZyBrQXR0cmlidXRlQmFja2dyb3VuZENv
bG9yID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmFja2dyb3VuZC1jb2xvciIpOwotICAgIHN0YXRp
YyBjb25zdCBXZWJTdHJpbmcga0F0dHJpYnV0ZVByaW1pdGl2ZUNvbG9yID0gV2ViU3RyaW5nOjpm
cm9tVVRGOCgicHJpbWl0aXZlLWNvbG9yIik7Ci0gICAgc3RhdGljIGNvbnN0IFdlYlN0cmluZyBr
QXR0cmlidXRlT3BhY2l0eSA9IFdlYlN0cmluZzo6ZnJvbVVURjgoIm9wYWNpdHkiKTsKLSAgICBz
dGF0aWMgY29uc3QgV2ViU3RyaW5nIGtBdHRyaWJ1dGVBY2NlcHRzVG91Y2ggPSBXZWJTdHJpbmc6
OmZyb21VVEY4KCJhY2NlcHRzLXRvdWNoIik7Ci0gICAgc3RhdGljIGNvbnN0IFdlYlN0cmluZyBr
QXR0cmlidXRlUmVSZXF1ZXN0VG91Y2hFdmVudHMgPSBXZWJTdHJpbmc6OmZyb21VVEY4KCJyZS1y
ZXF1ZXN0LXRvdWNoIik7Ci0gICAgc3RhdGljIGNvbnN0IFdlYlN0cmluZyBrQXR0cmlidXRlUHJp
bnRFdmVudERldGFpbHMgPSBXZWJTdHJpbmc6OmZyb21VVEY4KCJwcmludC1ldmVudC1kZXRhaWxz
Iik7Ci0gICAgc3RhdGljIGNvbnN0IFdlYlN0cmluZyBrQXR0cmlidXRlQ2FuUHJvY2Vzc0RyYWcg
PSBXZWJTdHJpbmc6OmZyb21VVEY4KCJjYW4tcHJvY2Vzcy1kcmFnIik7Ci0gICAgc3RhdGljIGNv
bnN0IFdlYlN0cmluZyBrQXR0cmlidXRlUHJpbnRVc2VyR2VzdHVyZVN0YXR1cyA9IFdlYlN0cmlu
Zzo6ZnJvbVVURjgoInByaW50LXVzZXItZ2VzdHVyZS1zdGF0dXMiKTsKLQotICAgIFdFQktJVF9B
U1NFUlQocGFyYW1zLmF0dHJpYnV0ZU5hbWVzLnNpemUoKSA9PSBwYXJhbXMuYXR0cmlidXRlVmFs
dWVzLnNpemUoKSk7Ci0gICAgc2l6ZV90IHNpemUgPSBwYXJhbXMuYXR0cmlidXRlTmFtZXMuc2l6
ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGNv
bnN0IFdlYlN0cmluZyYgYXR0cmlidXRlTmFtZSA9IHBhcmFtcy5hdHRyaWJ1dGVOYW1lc1tpXTsK
LSAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSA9IHBhcmFtcy5hdHRyaWJ1
dGVWYWx1ZXNbaV07Ci0KLSAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0ga0F0dHJpYnV0ZVBy
aW1pdGl2ZSkKLSAgICAgICAgICAgIG1fc2NlbmUucHJpbWl0aXZlID0gcGFyc2VQcmltaXRpdmUo
YXR0cmlidXRlVmFsdWUpOwotICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lID09IGtBdHRy
aWJ1dGVCYWNrZ3JvdW5kQ29sb3IpCi0gICAgICAgICAgICBwYXJzZUNvbG9yKGF0dHJpYnV0ZVZh
bHVlLCBtX3NjZW5lLmJhY2tncm91bmRDb2xvcik7Ci0gICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0
ZU5hbWUgPT0ga0F0dHJpYnV0ZVByaW1pdGl2ZUNvbG9yKQotICAgICAgICAgICAgcGFyc2VDb2xv
cihhdHRyaWJ1dGVWYWx1ZSwgbV9zY2VuZS5wcmltaXRpdmVDb2xvcik7Ci0gICAgICAgIGVsc2Ug
aWYgKGF0dHJpYnV0ZU5hbWUgPT0ga0F0dHJpYnV0ZU9wYWNpdHkpCi0gICAgICAgICAgICBtX3Nj
ZW5lLm9wYWNpdHkgPSBwYXJzZU9wYWNpdHkoYXR0cmlidXRlVmFsdWUpOwotICAgICAgICBlbHNl
IGlmIChhdHRyaWJ1dGVOYW1lID09IGtBdHRyaWJ1dGVBY2NlcHRzVG91Y2gpCi0gICAgICAgICAg
ICBtX3RvdWNoRXZlbnRSZXF1ZXN0ID0gcGFyc2VUb3VjaEV2ZW50UmVxdWVzdFR5cGUoYXR0cmli
dXRlVmFsdWUpOwotICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lID09IGtBdHRyaWJ1dGVS
ZVJlcXVlc3RUb3VjaEV2ZW50cykKLSAgICAgICAgICAgIG1fcmVSZXF1ZXN0VG91Y2hFdmVudHMg
PSBwYXJzZUJvb2xlYW4oYXR0cmlidXRlVmFsdWUpOwotICAgICAgICBlbHNlIGlmIChhdHRyaWJ1
dGVOYW1lID09IGtBdHRyaWJ1dGVQcmludEV2ZW50RGV0YWlscykKLSAgICAgICAgICAgIG1fcHJp
bnRFdmVudERldGFpbHMgPSBwYXJzZUJvb2xlYW4oYXR0cmlidXRlVmFsdWUpOwotICAgICAgICBl
bHNlIGlmIChhdHRyaWJ1dGVOYW1lID09IGtBdHRyaWJ1dGVDYW5Qcm9jZXNzRHJhZykKLSAgICAg
ICAgICAgIG1fY2FuUHJvY2Vzc0RyYWcgPSBwYXJzZUJvb2xlYW4oYXR0cmlidXRlVmFsdWUpOwot
ICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lID09IGtBdHRyaWJ1dGVQcmludFVzZXJHZXN0
dXJlU3RhdHVzKQotICAgICAgICAgICAgbV9wcmludFVzZXJHZXN0dXJlU3RhdHVzID0gcGFyc2VC
b29sZWFuKGF0dHJpYnV0ZVZhbHVlKTsKLSAgICB9Ci19Ci0KLVRlc3RQbHVnaW46On5UZXN0UGx1
Z2luKCkKLXsKLX0KLQotYm9vbCBUZXN0UGx1Z2luOjppbml0aWFsaXplKFdlYlBsdWdpbkNvbnRh
aW5lciogY29udGFpbmVyKQotewotICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGF0dHJzOwotICAgIG1fY29udGV4dCA9IFBsYXRmb3JtOjpjdXJyZW50KCktPmNyZWF0ZU9mZnNj
cmVlbkdyYXBoaWNzQ29udGV4dDNEKGF0dHJzKTsKLSAgICBpZiAoIW1fY29udGV4dCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWluaXRTY2VuZSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2xheWVyID0gYXV0b19wdHI8V2ViRXh0ZXJuYWxU
ZXh0dXJlTGF5ZXI+KFBsYXRmb3JtOjpjdXJyZW50KCktPmNvbXBvc2l0b3JTdXBwb3J0KCktPmNy
ZWF0ZUV4dGVybmFsVGV4dHVyZUxheWVyKHRoaXMpKTsKLSAgICBtX2NvbnRhaW5lciA9IGNvbnRh
aW5lcjsKLSAgICBtX2NvbnRhaW5lci0+c2V0V2ViTGF5ZXIobV9sYXllci0+bGF5ZXIoKSk7Ci0g
ICAgaWYgKG1fcmVSZXF1ZXN0VG91Y2hFdmVudHMpIHsKLSAgICAgICAgbV9jb250YWluZXItPnJl
cXVlc3RUb3VjaEV2ZW50VHlwZShXZWJQbHVnaW5Db250YWluZXI6OlRvdWNoRXZlbnRSZXF1ZXN0
VHlwZVN5bnRoZXNpemVkTW91c2UpOwotICAgICAgICBtX2NvbnRhaW5lci0+cmVxdWVzdFRvdWNo
RXZlbnRUeXBlKFdlYlBsdWdpbkNvbnRhaW5lcjo6VG91Y2hFdmVudFJlcXVlc3RUeXBlUmF3KTsK
LSAgICB9Ci0gICAgbV9jb250YWluZXItPnJlcXVlc3RUb3VjaEV2ZW50VHlwZShtX3RvdWNoRXZl
bnRSZXF1ZXN0KTsKLSAgICBtX2NvbnRhaW5lci0+c2V0V2FudHNXaGVlbEV2ZW50cyh0cnVlKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUZXN0UGx1Z2luOjpkZXN0cm95KCkKLXsKLSAg
ICBpZiAobV9jb250YWluZXIpCi0gICAgICAgIG1fY29udGFpbmVyLT5zZXRXZWJMYXllcigwKTsK
LSAgICBtX2xheWVyLnJlc2V0KCk7Ci0gICAgZGVzdHJveVNjZW5lKCk7Ci0KLSAgICBkZWxldGUg
bV9jb250ZXh0OwotICAgIG1fY29udGV4dCA9IDA7Ci0KLSAgICBtX2NvbnRhaW5lciA9IDA7Ci0g
ICAgbV9mcmFtZSA9IDA7Ci0KLSAgICBQbGF0Zm9ybTo6Y3VycmVudCgpLT5jYWxsT25NYWluVGhy
ZWFkKGRlZmVycmVkRGVsZXRlLCB0aGlzKTsKLX0KLQotdm9pZCBUZXN0UGx1Z2luOjp1cGRhdGVH
ZW9tZXRyeShjb25zdCBXZWJSZWN0JiBmcmFtZVJlY3QsIGNvbnN0IFdlYlJlY3QmIGNsaXBSZWN0
LCBjb25zdCBXZWJWZWN0b3I8V2ViUmVjdD4mIGN1dE91dHNSZWN0cywgYm9vbCBpc1Zpc2libGUp
Ci17Ci0gICAgaWYgKGNsaXBSZWN0ID09IG1fcmVjdCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
cmVjdCA9IGNsaXBSZWN0OwotICAgIGlmIChtX3JlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2NvbnRleHQtPnJlc2hhcGUobV9yZWN0LndpZHRoLCBtX3JlY3QuaGVpZ2h0
KTsKLSAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIG1fcmVjdC53aWR0aCwgbV9yZWN0Lmhl
aWdodCk7Ci0KLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29s
b3JUZXh0dXJlKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9ORUFSRVNUKTsKLSAgICBtX2NvbnRleHQtPnRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9ORUFSRVNU
KTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVy
aShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0g
ICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIG1fcmVj
dC53aWR0aCwgbV9yZWN0LmhlaWdodCwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7
Ci0gICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZnJhbWVi
dWZmZXIpOwotICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZG
RVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX2NvbG9yVGV4dHVyZSwg
MCk7Ci0KLSAgICBkcmF3U2NlbmUoKTsKLQotICAgIG1fY29udGV4dC0+Zmx1c2goKTsKLSAgICBt
X2xheWVyLT5sYXllcigpLT5pbnZhbGlkYXRlKCk7Ci19Ci0KLVRlc3RQbHVnaW46OlByaW1pdGl2
ZSBUZXN0UGx1Z2luOjpwYXJzZVByaW1pdGl2ZShjb25zdCBXZWJTdHJpbmcmIHN0cmluZykKLXsK
LSAgICBzdGF0aWMgY29uc3QgV2ViU3RyaW5nIGtQcmltaXRpdmVOb25lID0gV2ViU3RyaW5nOjpm
cm9tVVRGOCgibm9uZSIpOwotICAgIHN0YXRpYyBjb25zdCBXZWJTdHJpbmcga1ByaW1pdGl2ZVRy
aWFuZ2xlID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgidHJpYW5nbGUiKTsKLQotICAgIFByaW1pdGl2
ZSBwcmltaXRpdmUgPSBQcmltaXRpdmVOb25lOwotICAgIGlmIChzdHJpbmcgPT0ga1ByaW1pdGl2
ZU5vbmUpCi0gICAgICAgIHByaW1pdGl2ZSA9IFByaW1pdGl2ZU5vbmU7Ci0gICAgZWxzZSBpZiAo
c3RyaW5nID09IGtQcmltaXRpdmVUcmlhbmdsZSkKLSAgICAgICAgcHJpbWl0aXZlID0gUHJpbWl0
aXZlVHJpYW5nbGU7Ci0gICAgZWxzZQotICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIHByaW1pdGl2ZTsKLX0KLQotLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNo
b3VsZCBhbHJlYWR5IGV4aXN0LiBVc2UgaXQuCi0vLyBGb3Igbm93IGp1c3QgcGFyc2UgcHJpbWFy
eSBjb2xvcnMuCi12b2lkIFRlc3RQbHVnaW46OnBhcnNlQ29sb3IoY29uc3QgV2ViU3RyaW5nJiBz
dHJpbmcsIHVuc2lnbmVkIGNvbG9yWzNdKQotewotICAgIGNvbG9yWzBdID0gY29sb3JbMV0gPSBj
b2xvclsyXSA9IDA7Ci0gICAgaWYgKHN0cmluZyA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoc3RyaW5nID09ICJyZWQiKQotICAgICAgICBjb2xvclswXSA9IDI1NTsKLSAg
ICBlbHNlIGlmIChzdHJpbmcgPT0gImdyZWVuIikKLSAgICAgICAgY29sb3JbMV0gPSAyNTU7Ci0g
ICAgZWxzZSBpZiAoc3RyaW5nID09ICJibHVlIikKLSAgICAgICAgY29sb3JbMl0gPSAyNTU7Ci0g
ICAgZWxzZQotICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWZsb2F0
IFRlc3RQbHVnaW46OnBhcnNlT3BhY2l0eShjb25zdCBXZWJTdHJpbmcmIHN0cmluZykKLXsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2Yoc3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsK
LX0KLQotYm9vbCBUZXN0UGx1Z2luOjpwYXJzZUJvb2xlYW4oY29uc3QgV2ViU3RyaW5nJiBzdHJp
bmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IFdlYlN0cmluZyBrUHJpbWl0aXZlVHJ1ZSA9IFdlYlN0
cmluZzo6ZnJvbVVURjgoInRydWUiKTsKLSAgICByZXR1cm4gc3RyaW5nID09IGtQcmltaXRpdmVU
cnVlOwotfQotCi1ib29sIFRlc3RQbHVnaW46OmluaXRTY2VuZSgpCi17Ci0gICAgZmxvYXQgY29s
b3JbNF07Ci0gICAgcHJlbXVsdGlwbHlBbHBoYShtX3NjZW5lLmJhY2tncm91bmRDb2xvciwgbV9z
Y2VuZS5vcGFjaXR5LCBjb2xvcik7Ci0KLSAgICBtX2NvbG9yVGV4dHVyZSA9IG1fY29udGV4dC0+
Y3JlYXRlVGV4dHVyZSgpOwotICAgIG1fZnJhbWVidWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZUZy
YW1lYnVmZmVyKCk7Ci0KLSAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIG1fcmVjdC53aWR0
aCwgbV9yZWN0LmhlaWdodCk7Ci0gICAgbV9jb250ZXh0LT5kaXNhYmxlKEdMX0RFUFRIX1RFU1Qp
OwotICAgIG1fY29udGV4dC0+ZGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotCi0gICAgbV9jb250
ZXh0LT5jbGVhckNvbG9yKGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIGNvbG9yWzNdKTsK
LQotICAgIG1fY29udGV4dC0+ZW5hYmxlKEdMX0JMRU5EKTsKLSAgICBtX2NvbnRleHQtPmJsZW5k
RnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpOwotCi0gICAgcmV0dXJuIG1fc2Nl
bmUucHJpbWl0aXZlICE9IFByaW1pdGl2ZU5vbmUgPyBpbml0UHJvZ3JhbSgpICYmIGluaXRQcmlt
aXRpdmUoKSA6IHRydWU7Ci19Ci0KLXZvaWQgVGVzdFBsdWdpbjo6ZHJhd1NjZW5lKCkKLXsKLSAg
ICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIG1fcmVjdC53aWR0aCwgbV9yZWN0LmhlaWdodCk7
Ci0gICAgbV9jb250ZXh0LT5jbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKLQotICAgIGlmICht
X3NjZW5lLnByaW1pdGl2ZSAhPSBQcmltaXRpdmVOb25lKQotICAgICAgICBkcmF3UHJpbWl0aXZl
KCk7Ci19Ci0KLXZvaWQgVGVzdFBsdWdpbjo6ZGVzdHJveVNjZW5lKCkKLXsKLSAgICBpZiAobV9z
Y2VuZS5wcm9ncmFtKSB7Ci0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX3NjZW5l
LnByb2dyYW0pOwotICAgICAgICBtX3NjZW5lLnByb2dyYW0gPSAwOwotICAgIH0KLSAgICBpZiAo
bV9zY2VuZS52Ym8pIHsKLSAgICAgICAgbV9jb250ZXh0LT5kZWxldGVCdWZmZXIobV9zY2VuZS52
Ym8pOwotICAgICAgICBtX3NjZW5lLnZibyA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1fZnJhbWVi
dWZmZXIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX2ZyYW1lYnVm
ZmVyKTsKLSAgICAgICAgbV9mcmFtZWJ1ZmZlciA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1fY29s
b3JUZXh0dXJlKSB7Ci0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX2NvbG9yVGV4
dHVyZSk7Ci0gICAgICAgIG1fY29sb3JUZXh0dXJlID0gMDsKLSAgICB9Ci19Ci0KLWJvb2wgVGVz
dFBsdWdpbjo6aW5pdFByb2dyYW0oKQotewotICAgIGNvbnN0IHN0cmluZyB2ZXJ0ZXhTb3VyY2Uo
Ci0gICAgICAgICJhdHRyaWJ1dGUgdmVjNCBwb3NpdGlvbjsgIFxuIgotICAgICAgICAidm9pZCBt
YWluKCkgeyAgICAgICAgICAgICBcbiIKLSAgICAgICAgIiAgZ2xfUG9zaXRpb24gPSBwb3NpdGlv
bjsgXG4iCi0gICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotICAgICk7Ci0K
LSAgICBjb25zdCBzdHJpbmcgZnJhZ21lbnRTb3VyY2UoCi0gICAgICAgICJwcmVjaXNpb24gbWVk
aXVtcCBmbG9hdDsgXG4iCi0gICAgICAgICJ1bmlmb3JtIHZlYzQgY29sb3I7ICAgICAgXG4iCi0g
ICAgICAgICJ2b2lkIG1haW4oKSB7ICAgICAgICAgICAgXG4iCi0gICAgICAgICIgIGdsX0ZyYWdD
b2xvciA9IGNvbG9yOyAgXG4iCi0gICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgXG4i
Ci0gICAgKTsKLQotICAgIG1fc2NlbmUucHJvZ3JhbSA9IGxvYWRQcm9ncmFtKHZlcnRleFNvdXJj
ZSwgZnJhZ21lbnRTb3VyY2UpOwotICAgIGlmICghbV9zY2VuZS5wcm9ncmFtKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3NjZW5lLmNvbG9yTG9jYXRpb24gPSBtX2NvbnRleHQtPmdl
dFVuaWZvcm1Mb2NhdGlvbihtX3NjZW5lLnByb2dyYW0sICJjb2xvciIpOwotICAgIG1fc2NlbmUu
cG9zaXRpb25Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24obV9zY2VuZS5w
cm9ncmFtLCAicG9zaXRpb24iKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBUZXN0UGx1
Z2luOjppbml0UHJpbWl0aXZlKCkKLXsKLSAgICBXRUJLSVRfQVNTRVJUKG1fc2NlbmUucHJpbWl0
aXZlID09IFByaW1pdGl2ZVRyaWFuZ2xlKTsKLQotICAgIG1fc2NlbmUudmJvID0gbV9jb250ZXh0
LT5jcmVhdGVCdWZmZXIoKTsKLSAgICBpZiAoIW1fc2NlbmUudmJvKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBjb25zdCBmbG9hdCB2ZXJ0aWNlc1tdID0gewotICAgICAgICAwLjBmLCAg
MC44ZiwgMC4wZiwKLSAgICAgICAgLTAuOGYsIC0wLjhmLCAwLjBmLAotICAgICAgICAwLjhmLCAt
MC44ZiwgMC4wZiB9OwotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIs
IG1fc2NlbmUudmJvKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVS
LCBzaXplb2YodmVydGljZXMpLCAwLCBHTF9TVEFUSUNfRFJBVyk7Ci0gICAgbV9jb250ZXh0LT5i
dWZmZXJTdWJEYXRhKEdMX0FSUkFZX0JVRkZFUiwgMCwgc2l6ZW9mKHZlcnRpY2VzKSwgdmVydGlj
ZXMpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFRlc3RQbHVnaW46OmRyYXdQcmltaXRp
dmUoKQotewotICAgIFdFQktJVF9BU1NFUlQobV9zY2VuZS5wcmltaXRpdmUgPT0gUHJpbWl0aXZl
VHJpYW5nbGUpOwotICAgIFdFQktJVF9BU1NFUlQobV9zY2VuZS52Ym8pOwotICAgIFdFQktJVF9B
U1NFUlQobV9zY2VuZS5wcm9ncmFtKTsKLQotICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShtX3Nj
ZW5lLnByb2dyYW0pOwotCi0gICAgLy8gQmluZCBwcmltaXRpdmUgY29sb3IuCi0gICAgZmxvYXQg
Y29sb3JbNF07Ci0gICAgcHJlbXVsdGlwbHlBbHBoYShtX3NjZW5lLnByaW1pdGl2ZUNvbG9yLCBt
X3NjZW5lLm9wYWNpdHksIGNvbG9yKTsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm00ZihtX3NjZW5l
LmNvbG9yTG9jYXRpb24sIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIGNvbG9yWzNdKTsK
LQotICAgIC8vIEJpbmQgcHJpbWl0aXZlIHZlcnRpY2VzLgotICAgIG1fY29udGV4dC0+YmluZEJ1
ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1fc2NlbmUudmJvKTsKLSAgICBtX2NvbnRleHQtPmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KG1fc2NlbmUucG9zaXRpb25Mb2NhdGlvbik7Ci0gICAgbV9jb250
ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKG1fc2NlbmUucG9zaXRpb25Mb2NhdGlvbiwgMywgR0xf
RkxPQVQsIEdMX0ZBTFNFLCAwLCAwKTsKLSAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMoR0xfVFJJ
QU5HTEVTLCAwLCAzKTsKLX0KLQotdW5zaWduZWQgVGVzdFBsdWdpbjo6bG9hZFNoYWRlcih1bnNp
Z25lZCB0eXBlLCBjb25zdCBzdHJpbmcmIHNvdXJjZSkKLXsKLSAgICB1bnNpZ25lZCBzaGFkZXIg
PSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcih0eXBlKTsKLSAgICBpZiAoc2hhZGVyKSB7Ci0gICAg
ICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKHNoYWRlciwgc291cmNlLmRhdGEoKSk7Ci0gICAg
ICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihzaGFkZXIpOwotCi0gICAgICAgIGludCBjb21w
aWxlZCA9IDA7Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9DT01Q
SUxFX1NUQVRVUywgJmNvbXBpbGVkKTsKLSAgICAgICAgaWYgKCFjb21waWxlZCkgewotICAgICAg
ICAgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIoc2hhZGVyKTsKLSAgICAgICAgICAgIHNoYWRl
ciA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHNoYWRlcjsKLX0KLQotdW5zaWdu
ZWQgVGVzdFBsdWdpbjo6bG9hZFByb2dyYW0oY29uc3Qgc3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsIGNv
bnN0IHN0cmluZyYgZnJhZ21lbnRTb3VyY2UpCi17Ci0gICAgdW5zaWduZWQgdmVydGV4U2hhZGVy
ID0gbG9hZFNoYWRlcihHTF9WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTb3VyY2UpOwotICAgIHVuc2ln
bmVkIGZyYWdtZW50U2hhZGVyID0gbG9hZFNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIsIGZyYWdt
ZW50U291cmNlKTsKLSAgICB1bnNpZ25lZCBwcm9ncmFtID0gbV9jb250ZXh0LT5jcmVhdGVQcm9n
cmFtKCk7Ci0gICAgaWYgKHZlcnRleFNoYWRlciAmJiBmcmFnbWVudFNoYWRlciAmJiBwcm9ncmFt
KSB7Ci0gICAgICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW0sIHZlcnRleFNoYWRl
cik7Ci0gICAgICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW0sIGZyYWdtZW50U2hh
ZGVyKTsKLSAgICAgICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAg
ICBpbnQgbGlua2VkID0gMDsKLSAgICAgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYocHJvZ3Jh
bSwgR0xfTElOS19TVEFUVVMsICZsaW5rZWQpOwotICAgICAgICBpZiAoIWxpbmtlZCkgewotICAg
ICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKHByb2dyYW0pOwotICAgICAgICAgICAg
cHJvZ3JhbSA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHZlcnRleFNoYWRlcikKLSAg
ICAgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBpZiAoZnJh
Z21lbnRTaGFkZXIpCi0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKGZyYWdtZW50U2hh
ZGVyKTsKLQotICAgIHJldHVybiBwcm9ncmFtOwotfQotCi1ib29sIFRlc3RQbHVnaW46OmhhbmRs
ZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQsIFdlYkN1cnNvckluZm8mIGlu
Zm8pCi17Ci0gICAgY29uc3QgY2hhciogZXZlbnROYW1lID0gMDsKLSAgICBzd2l0Y2ggKGV2ZW50
LnR5cGUpIHsKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6OlVuZGVmaW5lZDogICAgICAgICAgIGV2
ZW50TmFtZSA9ICJ1bmtub3duIjsgYnJlYWs7Ci0KLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1v
dXNlRG93bjogICAgICAgICAgIGV2ZW50TmFtZSA9ICJNb3VzZURvd24iOyBicmVhazsKLSAgICBj
YXNlIFdlYklucHV0RXZlbnQ6Ok1vdXNlVXA6ICAgICAgICAgICAgIGV2ZW50TmFtZSA9ICJNb3Vz
ZVVwIjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZU1vdmU6ICAgICAgICAg
ICBldmVudE5hbWUgPSAiTW91c2VNb3ZlIjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50
OjpNb3VzZUVudGVyOiAgICAgICAgICBldmVudE5hbWUgPSAiTW91c2VFbnRlciI7IGJyZWFrOwot
ICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VMZWF2ZTogICAgICAgICAgZXZlbnROYW1lID0g
Ik1vdXNlTGVhdmUiOyBicmVhazsKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6OkNvbnRleHRNZW51
OiAgICAgICAgIGV2ZW50TmFtZSA9ICJDb250ZXh0TWVudSI7IGJyZWFrOwotCi0gICAgY2FzZSBX
ZWJJbnB1dEV2ZW50OjpNb3VzZVdoZWVsOiAgICAgICAgICBldmVudE5hbWUgPSAiTW91c2VXaGVl
bCI7IGJyZWFrOwotCi0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpSYXdLZXlEb3duOiAgICAgICAg
ICBldmVudE5hbWUgPSAiUmF3S2V5RG93biI7IGJyZWFrOwotICAgIGNhc2UgV2ViSW5wdXRFdmVu
dDo6S2V5RG93bjogICAgICAgICAgICAgZXZlbnROYW1lID0gIktleURvd24iOyBicmVhazsKLSAg
ICBjYXNlIFdlYklucHV0RXZlbnQ6OktleVVwOiAgICAgICAgICAgICAgIGV2ZW50TmFtZSA9ICJL
ZXlVcCI7IGJyZWFrOwotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6Q2hhcjogICAgICAgICAgICAg
ICAgZXZlbnROYW1lID0gIkNoYXIiOyBicmVhazsKLQotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6
R2VzdHVyZVNjcm9sbEJlZ2luOiAgZXZlbnROYW1lID0gIkdlc3R1cmVTY3JvbGxCZWdpbiI7IGJy
ZWFrOwotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9sbEVuZDogICAgZXZlbnRO
YW1lID0gIkdlc3R1cmVTY3JvbGxFbmQiOyBicmVhazsKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6
Okdlc3R1cmVTY3JvbGxVcGRhdGVXaXRob3V0UHJvcGFnYXRpb246IAotICAgIGNhc2UgV2ViSW5w
dXRFdmVudDo6R2VzdHVyZVNjcm9sbFVwZGF0ZTogZXZlbnROYW1lID0gIkdlc3R1cmVTY3JvbGxV
cGRhdGUiOyBicmVhazsKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVGbGluZ1N0YXJ0
OiAgIGV2ZW50TmFtZSA9ICJHZXN0dXJlRmxpbmdTdGFydCI7IGJyZWFrOwotICAgIGNhc2UgV2Vi
SW5wdXRFdmVudDo6R2VzdHVyZUZsaW5nQ2FuY2VsOiAgZXZlbnROYW1lID0gIkdlc3R1cmVGbGlu
Z0NhbmNlbCI7IGJyZWFrOwotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVRhcDogICAg
ICAgICAgZXZlbnROYW1lID0gIkdlc3R1cmVUYXAiOyBicmVhazsKLSAgICBjYXNlIFdlYklucHV0
RXZlbnQ6Okdlc3R1cmVUYXBEb3duOiAgICAgIGV2ZW50TmFtZSA9ICJHZXN0dXJlVGFwRG93biI7
IGJyZWFrOwotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVRhcENhbmNlbDogICAgZXZl
bnROYW1lID0gIkdlc3R1cmVUYXBDYW5jZWwiOyBicmVhazsKLSAgICBjYXNlIFdlYklucHV0RXZl
bnQ6Okdlc3R1cmVEb3VibGVUYXA6ICAgIGV2ZW50TmFtZSA9ICJHZXN0dXJlRG91YmxlVGFwIjsg
YnJlYWs7Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVHdvRmluZ2VyVGFwOiBldmVu
dE5hbWUgPSAiR2VzdHVyZVR3b0ZpbmdlclRhcCI7IGJyZWFrOwotICAgIGNhc2UgV2ViSW5wdXRF
dmVudDo6R2VzdHVyZUxvbmdQcmVzczogICAgZXZlbnROYW1lID0gIkdlc3R1cmVMb25nUHJlc3Mi
OyBicmVhazsKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVMb25nVGFwOiAgICAgIGV2
ZW50TmFtZSA9ICJHZXN0dXJlTG9uZ1RhcCI7IGJyZWFrOwotICAgIGNhc2UgV2ViSW5wdXRFdmVu
dDo6R2VzdHVyZVBpbmNoQmVnaW46ICAgZXZlbnROYW1lID0gIkdlc3R1cmVQaW5jaEJlZ2luIjsg
YnJlYWs7Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlUGluY2hFbmQ6ICAgICBldmVu
dE5hbWUgPSAiR2VzdHVyZVBpbmNoRW5kIjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50
OjpHZXN0dXJlUGluY2hVcGRhdGU6ICBldmVudE5hbWUgPSAiR2VzdHVyZVBpbmNoVXBkYXRlIjsg
YnJlYWs7Ci0KLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6OlRvdWNoU3RhcnQ6ICAgICAgICAgIGV2
ZW50TmFtZSA9ICJUb3VjaFN0YXJ0IjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpU
b3VjaE1vdmU6ICAgICAgICAgICBldmVudE5hbWUgPSAiVG91Y2hNb3ZlIjsgYnJlYWs7Ci0gICAg
Y2FzZSBXZWJJbnB1dEV2ZW50OjpUb3VjaEVuZDogICAgICAgICAgICBldmVudE5hbWUgPSAiVG91
Y2hFbmQiOyBicmVhazsKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6OlRvdWNoQ2FuY2VsOiAgICAg
ICAgIGV2ZW50TmFtZSA9ICJUb3VjaENhbmNlbCI7IGJyZWFrOwotICAgIH0KLQotICAgIG1fZGVs
ZWdhdGUtPnByaW50TWVzc2FnZShzdGQ6OnN0cmluZygiUGx1Z2luIHJlY2VpdmVkIGV2ZW50OiAi
KSArIChldmVudE5hbWUgPyBldmVudE5hbWUgOiAidW5rbm93biIpICsgIlxuIik7Ci0gICAgaWYg
KG1fcHJpbnRFdmVudERldGFpbHMpCi0gICAgICAgIHByaW50RXZlbnREZXRhaWxzKG1fZGVsZWdh
dGUsIGV2ZW50KTsKLSAgICBpZiAobV9wcmludFVzZXJHZXN0dXJlU3RhdHVzKQotICAgICAgICBt
X2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uoc3RkOjpzdHJpbmcoIiogIikgKyAoV2ViVXNlckdlc3R1
cmVJbmRpY2F0b3I6OmlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkgPyAiIiA6ICJub3QgIikgKyAi
aGFuZGxpbmcgdXNlciBnZXN0dXJlXG4iKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
VGVzdFBsdWdpbjo6aGFuZGxlRHJhZ1N0YXR1c1VwZGF0ZShXZWJEcmFnU3RhdHVzIGRyYWdTdGF0
dXMsIGNvbnN0IFdlYkRyYWdEYXRhJiwgV2ViRHJhZ09wZXJhdGlvbnNNYXNrLCBjb25zdCBXZWJQ
b2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb3NpdGlvbikKLXsKLSAgICBj
b25zdCBjaGFyKiBkcmFnU3RhdHVzTmFtZSA9IDA7Ci0gICAgc3dpdGNoIChkcmFnU3RhdHVzKSB7
Ci0gICAgY2FzZSBXZWJEcmFnU3RhdHVzRW50ZXI6Ci0gICAgICAgIGRyYWdTdGF0dXNOYW1lID0g
IkRyYWdFbnRlciI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViRHJhZ1N0YXR1c092ZXI6
Ci0gICAgICAgIGRyYWdTdGF0dXNOYW1lID0gIkRyYWdPdmVyIjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBXZWJEcmFnU3RhdHVzTGVhdmU6Ci0gICAgICAgIGRyYWdTdGF0dXNOYW1lID0gIkRy
YWdMZWF2ZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViRHJhZ1N0YXR1c0Ryb3A6Ci0g
ICAgICAgIGRyYWdTdGF0dXNOYW1lID0gIkRyYWdEcm9wIjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBXZWJEcmFnU3RhdHVzVW5rbm93bjoKLSAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLSAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uoc3RkOjpzdHJpbmco
IlBsdWdpbiByZWNlaXZlZCBldmVudDogIikgKyBkcmFnU3RhdHVzTmFtZSArICJcbiIpOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotVGVzdFBsdWdpbiogVGVzdFBsdWdpbjo6Y3JlYXRlKFdlYkZy
YW1lKiBmcmFtZSwgY29uc3QgV2ViUGx1Z2luUGFyYW1zJiBwYXJhbXMsIFdlYlRlc3REZWxlZ2F0
ZSogZGVsZWdhdGUpCi17Ci0gICAgcmV0dXJuIG5ldyBUZXN0UGx1Z2luKGZyYW1lLCBwYXJhbXMs
IGRlbGVnYXRlKTsKLX0KLQotY29uc3QgV2ViU3RyaW5nJiBUZXN0UGx1Z2luOjptaW1lVHlwZSgp
Ci17Ci0gICAgc3RhdGljIGNvbnN0IFdlYlN0cmluZyBrTWltZVR5cGUgPSBXZWJTdHJpbmc6OmZy
b21VVEY4KCJhcHBsaWNhdGlvbi94LXdlYmtpdC10ZXN0LXdlYnBsdWdpbiIpOwotICAgIHJldHVy
biBrTWltZVR5cGU7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RQbHVnaW4uaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RQbHVnaW4uaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNTNiMjJlMTFiYzY2YmQ1MWZhNTMzMjIzZTI4ZjNlNTNkZDIwYjg5Yi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UGx1Z2luLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVGVzdFBsdWdpbl9oCi0jZGVmaW5l
IFRlc3RQbHVnaW5faAotCi0jaW5jbHVkZSAiV2ViUGx1Z2luLmgiCi0jaW5jbHVkZSAiV2ViUGx1
Z2luQ29udGFpbmVyLmgiCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHB1YmxpYy9XZWJF
eHRlcm5hbFRleHR1cmVMYXllci5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJFeHRlcm5hbFRleHR1
cmVMYXllckNsaWVudC5oPgotI2luY2x1ZGUgPHN0cmluZz4KLQotbmFtZXNwYWNlIFdlYlRlc3RS
dW5uZXIgewotCi1jbGFzcyBXZWJUZXN0RGVsZWdhdGU7Ci0KLS8vIEEgZmFrZSBpbXBsZW1lbnRp
b24gb2YgV2ViS2l0OjpXZWJQbHVnaW4gZm9yIHRlc3RpbmcgcHVycG9zZXMuCi0vLwotLy8gSXQg
dXNlcyBXZWJHcmFwaGljc0NvbnRleHQzRCB0byBwYWludCBhIHNjZW5lIGNvbnNpc2l0aW5nIG9m
IGEgcHJpbWl0aXZlCi0vLyBvdmVyIGEgYmFja2dyb3VuZC4gVGhlIHByaW1pdGl2ZSBhbmQgYmFj
a2dyb3VuZCBjYW4gYmUgY3VzdG9taXplZCB1c2luZwotLy8gdGhlIGZvbGxvd2luZyBwbHVnaW4g
cGFyYW1ldGVyczoKLS8vIHByaW1pdGl2ZTogbm9uZSAoZGVmYXVsdCksIHRyaWFuZ2xlLgotLy8g
YmFja2dyb3VuZC1jb2xvcjogYmxhY2sgKGRlZmF1bHQpLCByZWQsIGdyZWVuLCBibHVlLgotLy8g
cHJpbWl0aXZlLWNvbG9yOiBibGFjayAoZGVmYXVsdCksIHJlZCwgZ3JlZW4sIGJsdWUuCi0vLyBv
cGFjaXR5OiBbMC4wIC0gMS4wXS4gRGVmYXVsdCBpcyAxLjAuCi0vLwotLy8gV2hldGhlciB0aGUg
cGx1Z2luIGFjY2VwdHMgdG91Y2ggZXZlbnRzIG9yIG5vdCBjYW4gYmUgY3VzdG9taXplZCB1c2lu
ZyB0aGUKLS8vICdhY2NlcHRzLXRvdWNoJyBwbHVnaW4gcGFyYW1ldGVyIChkZWZhdWx0cyB0byBm
YWxzZSkuCi1jbGFzcyBUZXN0UGx1Z2luIDogcHVibGljIFdlYktpdDo6V2ViUGx1Z2luLCBwdWJs
aWMgV2ViS2l0OjpXZWJFeHRlcm5hbFRleHR1cmVMYXllckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFRlc3RQbHVnaW4qIGNyZWF0ZShXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0
OjpXZWJQbHVnaW5QYXJhbXMmLCBXZWJUZXN0RGVsZWdhdGUqKTsKLSAgICB2aXJ0dWFsIH5UZXN0
UGx1Z2luKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIG1pbWVUeXBl
KCk7Ci0KLSAgICAvLyBXZWJQbHVnaW4gbWV0aG9kczoKLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlh
bGl6ZShXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lciopOwotICAgIHZpcnR1YWwgdm9pZCBkZXN0
cm95KCk7Ci0gICAgdmlydHVhbCBOUE9iamVjdCogc2NyaXB0YWJsZU9iamVjdCgpIHsgcmV0dXJu
IDA7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY2FuUHJvY2Vzc0RyYWcoKSBjb25zdCB7IHJldHVybiBt
X2NhblByb2Nlc3NEcmFnOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYktpdDo6V2ViQ2Fu
dmFzKiwgY29uc3QgV2ViS2l0OjpXZWJSZWN0JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUdlb21ldHJ5KGNvbnN0IFdlYktpdDo6V2ViUmVjdCYgZnJhbWVSZWN0LCBjb25zdCBXZWJLaXQ6
OldlYlJlY3QmIGNsaXBSZWN0LCBjb25zdCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYlJl
Y3Q+JiBjdXRPdXRzUmVjdHMsIGJvb2wgaXNWaXNpYmxlKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlRm9jdXMoYm9vbCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpc2liaWxpdHkoYm9v
bCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGFjY2VwdHNJbnB1dEV2ZW50cygpIHsgcmV0dXJuIHRy
dWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJLaXQ6Oldl
YklucHV0RXZlbnQmLCBXZWJLaXQ6OldlYkN1cnNvckluZm8mKTsKLSAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlRHJhZ1N0YXR1c1VwZGF0ZShXZWJLaXQ6OldlYkRyYWdTdGF0dXMsIGNvbnN0IFdlYktp
dDo6V2ViRHJhZ0RhdGEmLCBXZWJLaXQ6OldlYkRyYWdPcGVyYXRpb25zTWFzaywgY29uc3QgV2Vi
S2l0OjpXZWJQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYktpdDo6V2ViUG9pbnQmIHNjcmVlblBv
c2l0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYktp
dDo6V2ViVVJMUmVzcG9uc2UmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEo
Y29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBk
aWRGaW5pc2hMb2FkaW5nKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZhaWxMb2FkaW5nKGNv
bnN0IFdlYktpdDo6V2ViVVJMRXJyb3ImKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNo
TG9hZGluZ0ZyYW1lUmVxdWVzdChjb25zdCBXZWJLaXQ6OldlYlVSTCYsIHZvaWQqIG5vdGlmeURh
dGEpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsTG9hZGluZ0ZyYW1lUmVxdWVzdChjb25z
dCBXZWJLaXQ6OldlYlVSTCYsIHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0IFdlYktpdDo6V2ViVVJM
RXJyb3ImKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQbGFjZWhvbGRlcigpIHsgcmV0dXJuIGZh
bHNlOyB9Ci0KLSAgICAvLyBXZWJFeHRlcm5hbFRleHR1cmVMYXllckNsaWVudCBtZXRob2RzOgot
ICAgIHZpcnR1YWwgdW5zaWduZWQgcHJlcGFyZVRleHR1cmUoV2ViS2l0OjpXZWJUZXh0dXJlVXBk
YXRlciYpIHsgcmV0dXJuIG1fY29sb3JUZXh0dXJlOyB9Ci0gICAgdmlydHVhbCBXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9Ci0KLXBy
aXZhdGU6Ci0gICAgVGVzdFBsdWdpbihXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpX
ZWJQbHVnaW5QYXJhbXMmLCBXZWJUZXN0RGVsZWdhdGUqKTsKLQotICAgIGVudW0gUHJpbWl0aXZl
IHsKLSAgICAgICAgUHJpbWl0aXZlTm9uZSwKLSAgICAgICAgUHJpbWl0aXZlVHJpYW5nbGUKLSAg
ICB9OwotCi0gICAgc3RydWN0IFNjZW5lIHsKLSAgICAgICAgUHJpbWl0aXZlIHByaW1pdGl2ZTsK
LSAgICAgICAgdW5zaWduZWQgYmFja2dyb3VuZENvbG9yWzNdOwotICAgICAgICB1bnNpZ25lZCBw
cmltaXRpdmVDb2xvclszXTsKLSAgICAgICAgZmxvYXQgb3BhY2l0eTsKLQotICAgICAgICB1bnNp
Z25lZCB2Ym87Ci0gICAgICAgIHVuc2lnbmVkIHByb2dyYW07Ci0gICAgICAgIGludCBjb2xvckxv
Y2F0aW9uOwotICAgICAgICBpbnQgcG9zaXRpb25Mb2NhdGlvbjsKLQotICAgICAgICBTY2VuZSgp
Ci0gICAgICAgICAgICA6IHByaW1pdGl2ZShQcmltaXRpdmVOb25lKQotICAgICAgICAgICAgLCBv
cGFjaXR5KDEuMGYpIC8vIEZ1bGx5IG9wYXF1ZS4KLSAgICAgICAgICAgICwgdmJvKDApCi0gICAg
ICAgICAgICAsIHByb2dyYW0oMCkKLSAgICAgICAgICAgICwgY29sb3JMb2NhdGlvbigtMSkKLSAg
ICAgICAgICAgICwgcG9zaXRpb25Mb2NhdGlvbigtMSkKLSAgICAgICAgewotICAgICAgICAgICAg
YmFja2dyb3VuZENvbG9yWzBdID0gYmFja2dyb3VuZENvbG9yWzFdID0gYmFja2dyb3VuZENvbG9y
WzJdID0gMDsKLSAgICAgICAgICAgIHByaW1pdGl2ZUNvbG9yWzBdID0gcHJpbWl0aXZlQ29sb3Jb
MV0gPSBwcmltaXRpdmVDb2xvclsyXSA9IDA7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8g
RnVuY3Rpb25zIGZvciBwYXJzaW5nIHBsdWdpbiBwYXJhbWV0ZXJzLgotICAgIFByaW1pdGl2ZSBw
YXJzZVByaW1pdGl2ZShjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYpOwotICAgIHZvaWQgcGFyc2VD
b2xvcihjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYsIHVuc2lnbmVkIGNvbG9yWzNdKTsKLSAgICBm
bG9hdCBwYXJzZU9wYWNpdHkoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmKTsKLSAgICBib29sIHBh
cnNlQm9vbGVhbihjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYpOwotCi0gICAgLy8gRnVuY3Rpb25z
IGZvciBsb2FkaW5nIGFuZCBkcmF3aW5nIHNjZW5lLgotICAgIGJvb2wgaW5pdFNjZW5lKCk7Ci0g
ICAgdm9pZCBkcmF3U2NlbmUoKTsKLSAgICB2b2lkIGRlc3Ryb3lTY2VuZSgpOwotICAgIGJvb2wg
aW5pdFByb2dyYW0oKTsKLSAgICBib29sIGluaXRQcmltaXRpdmUoKTsKLSAgICB2b2lkIGRyYXdQ
cmltaXRpdmUoKTsKLSAgICB1bnNpZ25lZCBsb2FkU2hhZGVyKHVuc2lnbmVkIHR5cGUsIGNvbnN0
IHN0ZDo6c3RyaW5nJiBzb3VyY2UpOwotICAgIHVuc2lnbmVkIGxvYWRQcm9ncmFtKGNvbnN0IHN0
ZDo6c3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmcmFnbWVudFNvdXJj
ZSk7Ci0KLSAgICBXZWJLaXQ6OldlYkZyYW1lKiBtX2ZyYW1lOwotICAgIFdlYlRlc3REZWxlZ2F0
ZSogbV9kZWxlZ2F0ZTsKLSAgICBXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lciogbV9jb250YWlu
ZXI7Ci0KLSAgICBXZWJLaXQ6OldlYlJlY3QgbV9yZWN0OwotICAgIFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0QqIG1fY29udGV4dDsKLSAgICB1bnNpZ25lZCBtX2NvbG9yVGV4dHVyZTsKLSAg
ICB1bnNpZ25lZCBtX2ZyYW1lYnVmZmVyOwotICAgIFNjZW5lIG1fc2NlbmU7Ci0gICAgc3RkOjph
dXRvX3B0cjxXZWJLaXQ6OldlYkV4dGVybmFsVGV4dHVyZUxheWVyPiBtX2xheWVyOwotCi0gICAg
V2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXI6OlRvdWNoRXZlbnRSZXF1ZXN0VHlwZSBtX3RvdWNo
RXZlbnRSZXF1ZXN0OwotICAgIC8vIFJlcXVlc3RzIHRvdWNoIGV2ZW50cyBmcm9tIHRoZSBXZWJQ
bHVnaW5Db250YWluZXJJbXBsIG11bHRpcGxlIHRpbWVzIHRvIHRpY2tsZSB3ZWJraXQub3JnL2Iv
MTA4MzgxCi0gICAgYm9vbCBtX3JlUmVxdWVzdFRvdWNoRXZlbnRzOwotICAgIGJvb2wgbV9wcmlu
dEV2ZW50RGV0YWlsczsKLSAgICBib29sIG1fcHJpbnRVc2VyR2VzdHVyZVN0YXR1czsKLSAgICBi
b29sIG1fY2FuUHJvY2Vzc0RyYWc7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBUZXN0UGx1Z2luX2gK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5l
ci9zcmMvVGVzdFJ1bm5lci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZTY5
MmU5YTY4ZTE0YWUxMmQxMGIwYzQ3MzJlMTE2ZGFhODZlNDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXdlbCBIYWpkYW4gKHBoYWpkYW4uanJA
Y2hyb21pdW0ub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgotCi0j
aW5jbHVkZSAiTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIk1vY2tX
ZWJTcGVlY2hSZWNvZ25pemVyLmgiCi0jaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVyLmgi
Ci0jaW5jbHVkZSAiVGVzdEludGVyZmFjZXMuaCIKLSNpbmNsdWRlICJXZWJCaW5kaW5ncy5oIgot
I2luY2x1ZGUgIldlYkRhdGFTb3VyY2UuaCIKLSNpbmNsdWRlICJXZWJEZXZpY2VPcmllbnRhdGlv
bi5oIgotI2luY2x1ZGUgIldlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5oIgotI2luY2x1
ZGUgIldlYkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiV2ViRWxlbWVudC5oIgotI2luY2x1ZGUgIldl
YkZpbmRPcHRpb25zLmgiCi0jaW5jbHVkZSAiV2ViRnJhbWUuaCIKLSNpbmNsdWRlICJXZWJHZW9s
b2NhdGlvbkNsaWVudE1vY2suaCIKLSNpbmNsdWRlICJXZWJJbnB1dEVsZW1lbnQuaCIKLSNpbmNs
dWRlICJXZWJQZXJtaXNzaW9ucy5oIgotI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCi0jaW5j
bHVkZSAiV2ViU2NyaXB0U291cmNlLmgiCi0jaW5jbHVkZSAiV2ViU2VjdXJpdHlQb2xpY3kuaCIK
LSNpbmNsdWRlICJXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlICJXZWJTZXR0
aW5ncy5oIgotI2luY2x1ZGUgIldlYlN1cnJvdW5kaW5nVGV4dC5oIgotI2luY2x1ZGUgIldlYlRh
c2suaCIKLSNpbmNsdWRlICJXZWJUZXN0RGVsZWdhdGUuaCIKLSNpbmNsdWRlICJXZWJUZXN0UHJv
eHkuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0jaW5jbHVkZSAidjgvaW5jbHVkZS92OC5oIgot
I2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8cHVibGljL1dl
YkRhdGEuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViUG9pbnQuaD4KLSNpbmNsdWRlIDxwdWJsaWMv
V2ViVVJMUmVzcG9uc2UuaD4KLQotI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKEFO
RFJPSUQpCi0jaW5jbHVkZSAibGludXgvV2ViRm9udFJlbmRlcmluZy5oIgotI2VuZGlmCi0KLXVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2Ug
V2ViVGVzdFJ1bm5lciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLWNsYXNzIEludm9rZUNhbGxiYWNrVGFz
ayA6IHB1YmxpYyBXZWJNZXRob2RUYXNrPFRlc3RSdW5uZXI+IHsKLXB1YmxpYzoKLSAgICBJbnZv
a2VDYWxsYmFja1Rhc2soVGVzdFJ1bm5lciogb2JqZWN0LCBhdXRvX3B0cjxDcHBWYXJpYW50PiBj
YWxsYmFja0FyZ3VtZW50cykKLSAgICAgICAgOiBXZWJNZXRob2RUYXNrPFRlc3RSdW5uZXI+KG9i
amVjdCkKLSAgICAgICAgLCBtX2NhbGxiYWNrQXJndW1lbnRzKGNhbGxiYWNrQXJndW1lbnRzKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxpZCgpCi0gICAgewotICAg
ICAgICBDcHBWYXJpYW50IGludm9rZVJlc3VsdDsKLSAgICAgICAgbV9jYWxsYmFja0FyZ3VtZW50
cy0+aW52b2tlRGVmYXVsdChtX2NhbGxiYWNrQXJndW1lbnRzLmdldCgpLCAxLCBpbnZva2VSZXN1
bHQpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBhdXRvX3B0cjxDcHBWYXJpYW50PiBtX2NhbGxi
YWNrQXJndW1lbnRzOwotfTsKLQotfQotCi1UZXN0UnVubmVyOjpXb3JrUXVldWU6On5Xb3JrUXVl
dWUoKQotewotICAgIHJlc2V0KCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6V29ya1F1ZXVlOjpw
cm9jZXNzV29ya1Nvb24oKQotewotICAgIGlmIChtX2NvbnRyb2xsZXItPnRvcExvYWRpbmdGcmFt
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcXVldWUuZW1wdHkoKSkgewotICAg
ICAgICAvLyBXZSBkZWxheSBwcm9jZXNzaW5nIHF1ZXVlZCB3b3JrIHRvIGF2b2lkIHJlY3Vyc2lv
biBwcm9ibGVtcy4KLSAgICAgICAgbV9jb250cm9sbGVyLT5tX2RlbGVnYXRlLT5wb3N0VGFzayhu
ZXcgV29ya1F1ZXVlVGFzayh0aGlzKSk7Ci0gICAgfSBlbHNlIGlmICghbV9jb250cm9sbGVyLT5t
X3dhaXRVbnRpbERvbmUpCi0gICAgICAgIG1fY29udHJvbGxlci0+bV9kZWxlZ2F0ZS0+dGVzdEZp
bmlzaGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6V29ya1F1ZXVlOjpwcm9jZXNzV29yaygp
Ci17Ci0gICAgLy8gUXVpdCBkb2luZyB3b3JrIG9uY2UgYSBsb2FkIGlzIGluIHByb2dyZXNzLgot
ICAgIHdoaWxlICghbV9xdWV1ZS5lbXB0eSgpKSB7Ci0gICAgICAgIGJvb2wgc3RhcnRlZExvYWQg
PSBtX3F1ZXVlLmZyb250KCktPnJ1bihtX2NvbnRyb2xsZXItPm1fZGVsZWdhdGUsIG1fY29udHJv
bGxlci0+bV93ZWJWaWV3KTsKLSAgICAgICAgZGVsZXRlIG1fcXVldWUuZnJvbnQoKTsKLSAgICAg
ICAgbV9xdWV1ZS5wb3BfZnJvbnQoKTsKLSAgICAgICAgaWYgKHN0YXJ0ZWRMb2FkKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9jb250cm9sbGVyLT5tX3dhaXRVbnRp
bERvbmUgJiYgIW1fY29udHJvbGxlci0+dG9wTG9hZGluZ0ZyYW1lKCkpCi0gICAgICAgIG1fY29u
dHJvbGxlci0+bV9kZWxlZ2F0ZS0+dGVzdEZpbmlzaGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5l
cjo6V29ya1F1ZXVlOjpyZXNldCgpCi17Ci0gICAgbV9mcm96ZW4gPSBmYWxzZTsKLSAgICB3aGls
ZSAoIW1fcXVldWUuZW1wdHkoKSkgewotICAgICAgICBkZWxldGUgbV9xdWV1ZS5mcm9udCgpOwot
ICAgICAgICBtX3F1ZXVlLnBvcF9mcm9udCgpOwotICAgIH0KLX0KLQotdm9pZCBUZXN0UnVubmVy
OjpXb3JrUXVldWU6OmFkZFdvcmsoV29ya0l0ZW0qIHdvcmspCi17Ci0gICAgaWYgKG1fZnJvemVu
KSB7Ci0gICAgICAgIGRlbGV0ZSB3b3JrOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1f
cXVldWUucHVzaF9iYWNrKHdvcmspOwotfQotCi0KLVRlc3RSdW5uZXI6OlRlc3RSdW5uZXIoVGVz
dEludGVyZmFjZXMqIGludGVyZmFjZXMpCi0gICAgOiBtX3Rlc3RJc1J1bm5pbmcoZmFsc2UpCi0g
ICAgLCBtX2Nsb3NlUmVtYWluaW5nV2luZG93cyhmYWxzZSkKLSAgICAsIG1fd29ya1F1ZXVlKHRo
aXMpCi0gICAgLCBtX3Rlc3RJbnRlcmZhY2VzKGludGVyZmFjZXMpCi0gICAgLCBtX2RlbGVnYXRl
KDApCi0gICAgLCBtX3dlYlZpZXcoMCkKLSAgICAsIG1fd2ViUGVybWlzc2lvbnMobmV3IFdlYlBl
cm1pc3Npb25zKQotI2lmIEVOQUJMRV9OT1RJRklDQVRJT05TCi0gICAgLCBtX25vdGlmaWNhdGlv
blByZXNlbnRlcihuZXcgTm90aWZpY2F0aW9uUHJlc2VudGVyKQotI2VuZGlmCi17Ci0gICAgLy8g
SW5pdGlhbGl6ZSB0aGUgbWFwIHRoYXQgYXNzb2NpYXRlcyBtZXRob2RzIG9mIHRoaXMgY2xhc3Mg
d2l0aCB0aGUgbmFtZXMKLSAgICAvLyB0aGV5IHdpbGwgdXNlIHdoZW4gY2FsbGVkIGJ5IEphdmFT
Y3JpcHQuIFRoZSBhY3R1YWwgYmluZGluZyBvZiB0aG9zZQotICAgIC8vIG5hbWVzIHRvIHRoZWly
IG1ldGhvZHMgd2lsbCBiZSBkb25lIGJ5IGNhbGxpbmcgYmluZFRvSmF2YVNjcmlwdCgpIChkZWZp
bmVkCi0gICAgLy8gYnkgQ3BwQm91bmRDbGFzcywgdGhlIHBhcmVudCB0byBUZXN0UnVubmVyKS4K
LQotICAgIC8vIE1ldGhvZHMgY29udHJvbGxpbmcgdGVzdCBleGVjdXRpb24uCi0gICAgYmluZE1l
dGhvZCgibm90aWZ5RG9uZSIsICZUZXN0UnVubmVyOjpub3RpZnlEb25lKTsKLSAgICBiaW5kTWV0
aG9kKCJxdWV1ZUJhY2tOYXZpZ2F0aW9uIiwgJlRlc3RSdW5uZXI6OnF1ZXVlQmFja05hdmlnYXRp
b24pOwotICAgIGJpbmRNZXRob2QoInF1ZXVlRm9yd2FyZE5hdmlnYXRpb24iLCAmVGVzdFJ1bm5l
cjo6cXVldWVGb3J3YXJkTmF2aWdhdGlvbik7Ci0gICAgYmluZE1ldGhvZCgicXVldWVMb2FkaW5n
U2NyaXB0IiwgJlRlc3RSdW5uZXI6OnF1ZXVlTG9hZGluZ1NjcmlwdCk7Ci0gICAgYmluZE1ldGhv
ZCgicXVldWVMb2FkIiwgJlRlc3RSdW5uZXI6OnF1ZXVlTG9hZCk7Ci0gICAgYmluZE1ldGhvZCgi
cXVldWVMb2FkSFRNTFN0cmluZyIsICZUZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKTsK
LSAgICBiaW5kTWV0aG9kKCJxdWV1ZU5vbkxvYWRpbmdTY3JpcHQiLCAmVGVzdFJ1bm5lcjo6cXVl
dWVOb25Mb2FkaW5nU2NyaXB0KTsKLSAgICBiaW5kTWV0aG9kKCJxdWV1ZVJlbG9hZCIsICZUZXN0
UnVubmVyOjpxdWV1ZVJlbG9hZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0Q2xvc2VSZW1haW5pbmdX
aW5kb3dzV2hlbkNvbXBsZXRlIiwgJlRlc3RSdW5uZXI6OnNldENsb3NlUmVtYWluaW5nV2luZG93
c1doZW5Db21wbGV0ZSk7Ci0gICAgYmluZE1ldGhvZCgic2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUi
LCAmVGVzdFJ1bm5lcjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUpOwotICAgIGJpbmRNZXRob2Qo
IndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSIsICZUZXN0UnVubmVyOjp3YWl0Rm9yUG9saWN5RGVsZWdh
dGUpOwotICAgIGJpbmRNZXRob2QoIndhaXRVbnRpbERvbmUiLCAmVGVzdFJ1bm5lcjo6d2FpdFVu
dGlsRG9uZSk7Ci0gICAgYmluZE1ldGhvZCgid2luZG93Q291bnQiLCAmVGVzdFJ1bm5lcjo6d2lu
ZG93Q291bnQpOwotICAgIC8vIE1ldGhvZHMgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgY2hyb21p
dW0ncyBwdWJsaWMgV2ViS2l0IEFQSS4KLSAgICBiaW5kTWV0aG9kKCJzZXRUYWJLZXlDeWNsZXNU
aHJvdWdoRWxlbWVudHMiLCAmVGVzdFJ1bm5lcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1l
bnRzKTsKLSAgICBiaW5kTWV0aG9kKCJleGVjQ29tbWFuZCIsICZUZXN0UnVubmVyOjpleGVjQ29t
bWFuZCk7Ci0gICAgYmluZE1ldGhvZCgiaXNDb21tYW5kRW5hYmxlZCIsICZUZXN0UnVubmVyOjpp
c0NvbW1hbmRFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9kKCJjYWxsU2hvdWxkQ2xvc2VPbldlYlZp
ZXciLCAmVGVzdFJ1bm5lcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KTsKLSAgICBiaW5kTWV0
aG9kKCJzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lIiwgJlRlc3RSdW5u
ZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUpOwotICAgIGJpbmRN
ZXRob2QoImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUiLCAmVGVz
dFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk7Ci0g
ICAgYmluZE1ldGhvZCgiZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQiLCAmVGVzdFJ1bm5l
cjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQpOwotICAgIGJpbmRNZXRob2QoInNldElz
b2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbiIsICZUZXN0UnVubmVyOjpzZXRJc29sYXRlZFdvcmxk
U2VjdXJpdHlPcmlnaW4pOwotICAgIGJpbmRNZXRob2QoInNldElzb2xhdGVkV29ybGRDb250ZW50
U2VjdXJpdHlQb2xpY3kiLCAmVGVzdFJ1bm5lcjo6c2V0SXNvbGF0ZWRXb3JsZENvbnRlbnRTZWN1
cml0eVBvbGljeSk7Ci0gICAgYmluZE1ldGhvZCgiYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkiLCAmVGVzdFJ1bm5lcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOwotICAgIGJp
bmRNZXRob2QoInJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5IiwgJlRlc3RSdW5uZXI6
OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KTsKLSAgICBiaW5kTWV0aG9kKCJoYXND
dXN0b21QYWdlU2l6ZVN0eWxlIiwgJlRlc3RSdW5uZXI6Omhhc0N1c3RvbVBhZ2VTaXplU3R5bGUp
OwotICAgIGJpbmRNZXRob2QoImZvcmNlUmVkU2VsZWN0aW9uQ29sb3JzIiwgJlRlc3RSdW5uZXI6
OmZvcmNlUmVkU2VsZWN0aW9uQ29sb3JzKTsKLSAgICBiaW5kTWV0aG9kKCJhZGRVc2VyU2NyaXB0
IiwgJlRlc3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQpOwotICAgIGJpbmRNZXRob2QoImFkZFVzZXJT
dHlsZVNoZWV0IiwgJlRlc3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KTsKLSAgICBiaW5kTWV0
aG9kKCJzdGFydFNwZWVjaElucHV0IiwgJlRlc3RSdW5uZXI6OnN0YXJ0U3BlZWNoSW5wdXQpOwot
ICAgIGJpbmRNZXRob2QoImZpbmRTdHJpbmciLCAmVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyk7Ci0g
ICAgYmluZE1ldGhvZCgic2V0VmFsdWVGb3JVc2VyIiwgJlRlc3RSdW5uZXI6OnNldFZhbHVlRm9y
VXNlcik7Ci0gICAgYmluZE1ldGhvZCgiZW5hYmxlRml4ZWRMYXlvdXRNb2RlIiwgJlRlc3RSdW5u
ZXI6OmVuYWJsZUZpeGVkTGF5b3V0TW9kZSk7Ci0gICAgYmluZE1ldGhvZCgic2V0Rml4ZWRMYXlv
dXRTaXplIiwgJlRlc3RSdW5uZXI6OnNldEZpeGVkTGF5b3V0U2l6ZSk7Ci0gICAgYmluZE1ldGhv
ZCgic2VsZWN0aW9uQXNNYXJrdXAiLCAmVGVzdFJ1bm5lcjo6c2VsZWN0aW9uQXNNYXJrdXApOwot
ICAgIGJpbmRNZXRob2QoInNldFRleHRTdWJwaXhlbFBvc2l0aW9uaW5nIiwgJlRlc3RSdW5uZXI6
OnNldFRleHRTdWJwaXhlbFBvc2l0aW9uaW5nKTsKLSAgICBiaW5kTWV0aG9kKCJyZXNldFBhZ2VW
aXNpYmlsaXR5IiwgJlRlc3RSdW5uZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkpOwotICAgIGJpbmRN
ZXRob2QoInNldFBhZ2VWaXNpYmlsaXR5IiwgJlRlc3RSdW5uZXI6OnNldFBhZ2VWaXNpYmlsaXR5
KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRUZXh0RGlyZWN0aW9uIiwgJlRlc3RSdW5uZXI6OnNldFRl
eHREaXJlY3Rpb24pOwotICAgIGJpbmRNZXRob2QoInRleHRTdXJyb3VuZGluZ05vZGUiLCAmVGVz
dFJ1bm5lcjo6dGV4dFN1cnJvdW5kaW5nTm9kZSk7Ci0gICAgYmluZE1ldGhvZCgiZGlzYWJsZUF1
dG9SZXNpemVNb2RlIiwgJlRlc3RSdW5uZXI6OmRpc2FibGVBdXRvUmVzaXplTW9kZSk7Ci0gICAg
YmluZE1ldGhvZCgiZW5hYmxlQXV0b1Jlc2l6ZU1vZGUiLCAmVGVzdFJ1bm5lcjo6ZW5hYmxlQXV0
b1Jlc2l6ZU1vZGUpOwotICAgIGJpbmRNZXRob2QoInNldE1vY2tEZXZpY2VPcmllbnRhdGlvbiIs
ICZUZXN0UnVubmVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24pOwotICAgIGJpbmRNZXRob2Qo
ImRpZEFjcXVpcmVQb2ludGVyTG9jayIsICZUZXN0UnVubmVyOjpkaWRBY3F1aXJlUG9pbnRlckxv
Y2spOwotICAgIGJpbmRNZXRob2QoImRpZExvc2VQb2ludGVyTG9jayIsICZUZXN0UnVubmVyOjpk
aWRMb3NlUG9pbnRlckxvY2spOwotICAgIGJpbmRNZXRob2QoImRpZE5vdEFjcXVpcmVQb2ludGVy
TG9jayIsICZUZXN0UnVubmVyOjpkaWROb3RBY3F1aXJlUG9pbnRlckxvY2spOwotICAgIGJpbmRN
ZXRob2QoInNldFBvaW50ZXJMb2NrV2lsbFJlc3BvbmRBc3luY2hyb25vdXNseSIsICZUZXN0UnVu
bmVyOjpzZXRQb2ludGVyTG9ja1dpbGxSZXNwb25kQXN5bmNocm9ub3VzbHkpOwotICAgIGJpbmRN
ZXRob2QoInNldFBvaW50ZXJMb2NrV2lsbEZhaWxTeW5jaHJvbm91c2x5IiwgJlRlc3RSdW5uZXI6
OnNldFBvaW50ZXJMb2NrV2lsbEZhaWxTeW5jaHJvbm91c2x5KTsKLQotICAgIC8vIFRoZSBmb2xs
b3dpbmcgbW9kaWZ5IFdlYlByZWZlcmVuY2VzLgotICAgIGJpbmRNZXRob2QoInNldFVzZXJTdHls
ZVNoZWV0RW5hYmxlZCIsICZUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQpOwot
ICAgIGJpbmRNZXRob2QoInNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24iLCAmVGVzdFJ1bm5lcjo6
c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbik7Ci0gICAgYmluZE1ldGhvZCgic2V0QXV0aG9yQW5k
VXNlclN0eWxlc0VuYWJsZWQiLCAmVGVzdFJ1bm5lcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0Vu
YWJsZWQpOwotICAgIGJpbmRNZXRob2QoInNldFBvcHVwQmxvY2tpbmdFbmFibGVkIiwgJlRlc3RS
dW5uZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRKYXZh
U2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkIiwgJlRlc3RSdW5uZXI6OnNldEphdmFTY3JpcHRDYW5B
Y2Nlc3NDbGlwYm9hcmQpOwotICAgIGJpbmRNZXRob2QoInNldFhTU0F1ZGl0b3JFbmFibGVkIiwg
JlRlc3RSdW5uZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRB
bGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyIsICZUZXN0UnVubmVyOjpzZXRBbGxvd1Vu
aXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyk7Ci0gICAgYmluZE1ldGhvZCgic2V0QWxsb3dGaWxl
QWNjZXNzRnJvbUZpbGVVUkxzIiwgJlRlc3RSdW5uZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21G
aWxlVVJMcyk7Ci0gICAgYmluZE1ldGhvZCgib3ZlcnJpZGVQcmVmZXJlbmNlIiwgJlRlc3RSdW5u
ZXI6Om92ZXJyaWRlUHJlZmVyZW5jZSk7Ci0gICAgYmluZE1ldGhvZCgic2V0UGx1Z2luc0VuYWJs
ZWQiLCAmVGVzdFJ1bm5lcjo6c2V0UGx1Z2luc0VuYWJsZWQpOwotCi0gICAgLy8gVGhlIGZvbGxv
d2luZyBtb2RpZnkgdGhlIHN0YXRlIG9mIHRoZSBUZXN0UnVubmVyLgotICAgIGJpbmRNZXRob2Qo
ImR1bXBFZGl0aW5nQ2FsbGJhY2tzIiwgJlRlc3RSdW5uZXI6OmR1bXBFZGl0aW5nQ2FsbGJhY2tz
KTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wQXNUZXh0IiwgJlRlc3RSdW5uZXI6OmR1bXBBc1RleHQp
OwotICAgIGJpbmRNZXRob2QoImR1bXBDaGlsZEZyYW1lc0FzVGV4dCIsICZUZXN0UnVubmVyOjpk
dW1wQ2hpbGRGcmFtZXNBc1RleHQpOwotICAgIGJpbmRNZXRob2QoImR1bXBDaGlsZEZyYW1lU2Ny
b2xsUG9zaXRpb25zIiwgJlRlc3RSdW5uZXI6OmR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25z
KTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wSWNvbkNoYW5nZXMiLCAmVGVzdFJ1bm5lcjo6ZHVtcElj
b25DaGFuZ2VzKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRBdWRpb0RhdGEiLCAmVGVzdFJ1bm5lcjo6
c2V0QXVkaW9EYXRhKTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIiwg
JlRlc3RSdW5uZXI6OmR1bXBGcmFtZUxvYWRDYWxsYmFja3MpOwotICAgIGJpbmRNZXRob2QoImR1
bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzIiwgJlRlc3RSdW5uZXI6OmR1bXBVc2Vy
R2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRTdG9wUHJv
dmlzaW9uYWxGcmFtZUxvYWRzIiwgJlRlc3RSdW5uZXI6OnNldFN0b3BQcm92aXNpb25hbEZyYW1l
TG9hZHMpOwotICAgIGJpbmRNZXRob2QoImR1bXBUaXRsZUNoYW5nZXMiLCAmVGVzdFJ1bm5lcjo6
ZHVtcFRpdGxlQ2hhbmdlcyk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcENyZWF0ZVZpZXciLCAmVGVz
dFJ1bm5lcjo6ZHVtcENyZWF0ZVZpZXcpOwotICAgIGJpbmRNZXRob2QoInNldENhbk9wZW5XaW5k
b3dzIiwgJlRlc3RSdW5uZXI6OnNldENhbk9wZW5XaW5kb3dzKTsKLSAgICBiaW5kTWV0aG9kKCJk
dW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzIiwgJlRlc3RSdW5uZXI6OmR1bXBSZXNvdXJjZUxvYWRD
YWxsYmFja3MpOwotICAgIGJpbmRNZXRob2QoImR1bXBSZXNvdXJjZVJlcXVlc3RDYWxsYmFja3Mi
LCAmVGVzdFJ1bm5lcjo6ZHVtcFJlc291cmNlUmVxdWVzdENhbGxiYWNrcyk7Ci0gICAgYmluZE1l
dGhvZCgiZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMiLCAmVGVzdFJ1bm5lcjo6ZHVtcFJl
c291cmNlUmVzcG9uc2VNSU1FVHlwZXMpOwotICAgIGJpbmRNZXRob2QoImR1bXBQZXJtaXNzaW9u
Q2xpZW50Q2FsbGJhY2tzIiwgJlRlc3RSdW5uZXI6OmR1bXBQZXJtaXNzaW9uQ2xpZW50Q2FsbGJh
Y2tzKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRJbWFnZXNBbGxvd2VkIiwgJlRlc3RSdW5uZXI6OnNl
dEltYWdlc0FsbG93ZWQpOwotICAgIGJpbmRNZXRob2QoInNldFNjcmlwdHNBbGxvd2VkIiwgJlRl
c3RSdW5uZXI6OnNldFNjcmlwdHNBbGxvd2VkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRTdG9yYWdl
QWxsb3dlZCIsICZUZXN0UnVubmVyOjpzZXRTdG9yYWdlQWxsb3dlZCk7Ci0gICAgYmluZE1ldGhv
ZCgic2V0UGx1Z2luc0FsbG93ZWQiLCAmVGVzdFJ1bm5lcjo6c2V0UGx1Z2luc0FsbG93ZWQpOwot
ICAgIGJpbmRNZXRob2QoInNldEFsbG93RGlzcGxheU9mSW5zZWN1cmVDb250ZW50IiwgJlRlc3RS
dW5uZXI6OnNldEFsbG93RGlzcGxheU9mSW5zZWN1cmVDb250ZW50KTsKLSAgICBiaW5kTWV0aG9k
KCJzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudCIsICZUZXN0UnVubmVyOjpzZXRBbGxv
d1J1bm5pbmdPZkluc2VjdXJlQ29udGVudCk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcFN0YXR1c0Nh
bGxiYWNrcyIsICZUZXN0UnVubmVyOjpkdW1wV2luZG93U3RhdHVzQ2hhbmdlcyk7Ci0gICAgYmlu
ZE1ldGhvZCgiZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayIsICZUZXN0UnVubmVyOjpkdW1w
UHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wQmFja0Zvcndh
cmRMaXN0IiwgJlRlc3RSdW5uZXI6OmR1bXBCYWNrRm9yd2FyZExpc3QpOwotICAgIGJpbmRNZXRo
b2QoInNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQiLCAmVGVzdFJ1bm5lcjo6c2V0RGVmZXJN
YWluUmVzb3VyY2VEYXRhTG9hZCk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcFNlbGVjdGlvblJlY3Qi
LCAmVGVzdFJ1bm5lcjo6ZHVtcFNlbGVjdGlvblJlY3QpOwotICAgIGJpbmRNZXRob2QoInRlc3RS
ZXBhaW50IiwgJlRlc3RSdW5uZXI6OnRlc3RSZXBhaW50KTsKLSAgICBiaW5kTWV0aG9kKCJyZXBh
aW50U3dlZXBIb3Jpem9udGFsbHkiLCAmVGVzdFJ1bm5lcjo6cmVwYWludFN3ZWVwSG9yaXpvbnRh
bGx5KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRQcmludGluZyIsICZUZXN0UnVubmVyOjpzZXRQcmlu
dGluZyk7Ci0gICAgYmluZE1ldGhvZCgic2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdC
ZWZvcmVVbmxvYWQiLCAmVGVzdFJ1bm5lcjo6c2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxp
bmdCZWZvcmVVbmxvYWQpOwotICAgIGJpbmRNZXRob2QoInNldFdpbGxTZW5kUmVxdWVzdENsZWFy
SGVhZGVyIiwgJlRlc3RSdW5uZXI6OnNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyKTsKLSAg
ICBiaW5kTWV0aG9kKCJzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCIsICZUZXN0UnVubmVy
OjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCk7Ci0gICAgYmluZE1ldGhvZCgic2V0V2ls
bFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0IiwgJlRlc3RSdW5uZXI6OnNldFdpbGxT
ZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcFJl
c291cmNlUmVxdWVzdFByaW9yaXRpZXMiLCAmVGVzdFJ1bm5lcjo6ZHVtcFJlc291cmNlUmVxdWVz
dFByaW9yaXRpZXMpOwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBtZXRob2RzIGludGVyYWN0IHdp
dGggdGhlIFdlYlRlc3RQcm94eS4KLSAgICAvLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgaW50ZXJh
Y3Qgd2l0aCB0aGUgV2ViVGVzdERlbGVnYXRlLgotICAgIGJpbmRNZXRob2QoInNob3dXZWJJbnNw
ZWN0b3IiLCAmVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3BlY3Rvcik7Ci0gICAgYmluZE1ldGhvZCgi
Y2xvc2VXZWJJbnNwZWN0b3IiLCAmVGVzdFJ1bm5lcjo6Y2xvc2VXZWJJbnNwZWN0b3IpOwotICAg
IGJpbmRNZXRob2QoImV2YWx1YXRlSW5XZWJJbnNwZWN0b3IiLCAmVGVzdFJ1bm5lcjo6ZXZhbHVh
dGVJbldlYkluc3BlY3Rvcik7Ci0gICAgYmluZE1ldGhvZCgiY2xlYXJBbGxEYXRhYmFzZXMiLCAm
VGVzdFJ1bm5lcjo6Y2xlYXJBbGxEYXRhYmFzZXMpOwotICAgIGJpbmRNZXRob2QoInNldERhdGFi
YXNlUXVvdGEiLCAmVGVzdFJ1bm5lcjo6c2V0RGF0YWJhc2VRdW90YSk7Ci0gICAgYmluZE1ldGhv
ZCgic2V0QWx3YXlzQWNjZXB0Q29va2llcyIsICZUZXN0UnVubmVyOjpzZXRBbHdheXNBY2NlcHRD
b29raWVzKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRXaW5kb3dJc0tleSIsICZUZXN0UnVubmVyOjpz
ZXRXaW5kb3dJc0tleSk7Ci0gICAgYmluZE1ldGhvZCgicGF0aFRvTG9jYWxSZXNvdXJjZSIsICZU
ZXN0UnVubmVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRCYWNr
aW5nU2NhbGVGYWN0b3IiLCAmVGVzdFJ1bm5lcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKTsKLSAg
ICBiaW5kTWV0aG9kKCJzZXRQT1NJWExvY2FsZSIsICZUZXN0UnVubmVyOjpzZXRQT1NJWExvY2Fs
ZSk7Ci0gICAgYmluZE1ldGhvZCgibnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdHMiLCAmVGVzdFJ1bm5lcjo6IG51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RzKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24i
LCAmVGVzdFJ1bm5lcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKTsKLSAgICBiaW5kTWV0aG9k
KCJzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IiLCAmVGVzdFJ1bm5l
cjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKTsKLSAgICBiaW5k
TWV0aG9kKCJzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbiIsICZUZXN0UnVubmVyOjpzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvbik7Ci0jaWYgRU5BQkxFX05PVElGSUNBVElPTlMKLSAgICBiaW5k
TWV0aG9kKCJncmFudFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24iLCAmVGVzdFJ1bm5lcjo6Z3Jh
bnRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKTsKLSAgICBiaW5kTWV0aG9kKCJzaW11bGF0ZUxl
Z2FjeVdlYk5vdGlmaWNhdGlvbkNsaWNrIiwgJlRlc3RSdW5uZXI6OnNpbXVsYXRlTGVnYWN5V2Vi
Tm90aWZpY2F0aW9uQ2xpY2spOwotI2VuZGlmCi0gICAgYmluZE1ldGhvZCgiYWRkTW9ja1NwZWVj
aElucHV0UmVzdWx0IiwgJlRlc3RSdW5uZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCk7Ci0g
ICAgYmluZE1ldGhvZCgic2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QiLCAmVGVzdFJ1bm5lcjo6
c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QpOwotICAgIGJpbmRNZXRob2QoImFkZE1vY2tTcGVl
Y2hSZWNvZ25pdGlvblJlc3VsdCIsICZUZXN0UnVubmVyOjphZGRNb2NrU3BlZWNoUmVjb2duaXRp
b25SZXN1bHQpOwotICAgIGJpbmRNZXRob2QoInNldE1vY2tTcGVlY2hSZWNvZ25pdGlvbkVycm9y
IiwgJlRlc3RSdW5uZXI6OnNldE1vY2tTcGVlY2hSZWNvZ25pdGlvbkVycm9yKTsKLSAgICBiaW5k
TWV0aG9kKCJ3YXNNb2NrU3BlZWNoUmVjb2duaXRpb25BYm9ydGVkIiwgJlRlc3RSdW5uZXI6Ondh
c01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQpOwotICAgIGJpbmRNZXRob2QoImRpc3BsYXki
LCAmVGVzdFJ1bm5lcjo6ZGlzcGxheSk7Ci0gICAgYmluZE1ldGhvZCgiZGlzcGxheUludmFsaWRh
dGVkUmVnaW9uIiwgJlRlc3RSdW5uZXI6OmRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lvbik7Ci0KLSAg
ICAvLyBQcm9wZXJ0aWVzLgotICAgIGJpbmRQcm9wZXJ0eSgiZ2xvYmFsRmxhZyIsICZtX2dsb2Jh
bEZsYWcpOwotICAgIGJpbmRQcm9wZXJ0eSgidGl0bGVUZXh0RGlyZWN0aW9uIiwgJm1fdGl0bGVU
ZXh0RGlyZWN0aW9uKTsKLSAgICBiaW5kUHJvcGVydHkoInBsYXRmb3JtTmFtZSIsICZtX3BsYXRm
b3JtTmFtZSk7Ci0gICAgLy8gd2ViSGlzdG9yeUl0ZW1Db3VudCBpcyB1c2VkIGJ5IHRlc3RzIGlu
IExheW91dFRlc3RzXGh0dHBcdGVzdHNcaGlzdG9yeQotICAgIGJpbmRQcm9wZXJ0eSgid2ViSGlz
dG9yeUl0ZW1Db3VudCIsICZtX3dlYkhpc3RvcnlJdGVtQ291bnQpOwotICAgIGJpbmRQcm9wZXJ0
eSgiaW50ZXJjZXB0UG9zdE1lc3NhZ2UiLCAmbV9pbnRlcmNlcHRQb3N0TWVzc2FnZSk7Ci0KLSAg
ICAvLyBUaGUgZm9sbG93aW5nIGFyZSBzdHVicy4KLSAgICBiaW5kTWV0aG9kKCJkdW1wRGF0YWJh
c2VDYWxsYmFja3MiLCAmVGVzdFJ1bm5lcjo6bm90SW1wbGVtZW50ZWQpOwotICAgIGJpbmRNZXRo
b2QoImRlbnlXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uIiwgJlRlc3RSdW5uZXI6Om5vdEltcGxl
bWVudGVkKTsKLSAgICBiaW5kTWV0aG9kKCJyZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNz
aW9ucyIsICZUZXN0UnVubmVyOjpub3RJbXBsZW1lbnRlZCk7Ci0gICAgYmluZE1ldGhvZCgic2lt
dWxhdGVXZWJOb3RpZmljYXRpb25DbGljayIsICZUZXN0UnVubmVyOjpub3RJbXBsZW1lbnRlZCk7
Ci0gICAgYmluZE1ldGhvZCgic2V0SWNvbkRhdGFiYXNlRW5hYmxlZCIsICZUZXN0UnVubmVyOjpu
b3RJbXBsZW1lbnRlZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0U2Nyb2xsYmFyUG9saWN5IiwgJlRl
c3RSdW5uZXI6Om5vdEltcGxlbWVudGVkKTsKLSAgICBiaW5kTWV0aG9kKCJjbGVhckFsbEFwcGxp
Y2F0aW9uQ2FjaGVzIiwgJlRlc3RSdW5uZXI6Om5vdEltcGxlbWVudGVkKTsKLSAgICBiaW5kTWV0
aG9kKCJjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4iLCAmVGVzdFJ1bm5lcjo6bm90SW1w
bGVtZW50ZWQpOwotICAgIGJpbmRNZXRob2QoImNsZWFyQmFja0ZvcndhcmRMaXN0IiwgJlRlc3RS
dW5uZXI6Om5vdEltcGxlbWVudGVkKTsKLSAgICBiaW5kTWV0aG9kKCJrZWVwV2ViSGlzdG9yeSIs
ICZUZXN0UnVubmVyOjpub3RJbXBsZW1lbnRlZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0QXBwbGlj
YXRpb25DYWNoZU9yaWdpblF1b3RhIiwgJlRlc3RSdW5uZXI6Om5vdEltcGxlbWVudGVkKTsKLSAg
ICBiaW5kTWV0aG9kKCJzZXRDYWxsQ2xvc2VPbldlYlZpZXdzIiwgJlRlc3RSdW5uZXI6Om5vdElt
cGxlbWVudGVkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVy
IiwgJlRlc3RSdW5uZXI6Om5vdEltcGxlbWVudGVkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRQcml2
YXRlQnJvd3NpbmdFbmFibGVkIiwgJlRlc3RSdW5uZXI6Om5vdEltcGxlbWVudGVkKTsKLSAgICBi
aW5kTWV0aG9kKCJzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZSIsICZUZXN0UnVubmVy
Ojpub3RJbXBsZW1lbnRlZCk7Ci0gICAgYmluZE1ldGhvZCgiZGVsZXRlQWxsTG9jYWxTdG9yYWdl
IiwgJlRlc3RSdW5uZXI6Om5vdEltcGxlbWVudGVkKTsKLSAgICBiaW5kTWV0aG9kKCJsb2NhbFN0
b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4iLCAmVGVzdFJ1bm5lcjo6bm90SW1wbGVtZW50ZWQpOwot
ICAgIGJpbmRNZXRob2QoIm9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlIiwgJlRlc3RSdW5uZXI6Om5v
dEltcGxlbWVudGVkKTsKLSAgICBiaW5kTWV0aG9kKCJkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmln
aW4iLCAmVGVzdFJ1bm5lcjo6bm90SW1wbGVtZW50ZWQpOwotICAgIGJpbmRNZXRob2QoIm9ic2Vy
dmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMiLCAmVGVzdFJ1bm5lcjo6bm90SW1wbGVtZW50
ZWQpOwotICAgIGJpbmRNZXRob2QoInN5bmNMb2NhbFN0b3JhZ2UiLCAmVGVzdFJ1bm5lcjo6bm90
SW1wbGVtZW50ZWQpOwotICAgIGJpbmRNZXRob2QoImFkZERpc2FsbG93ZWRVUkwiLCAmVGVzdFJ1
bm5lcjo6bm90SW1wbGVtZW50ZWQpOwotICAgIGJpbmRNZXRob2QoImFwcGxpY2F0aW9uQ2FjaGVE
aXNrVXNhZ2VGb3JPcmlnaW4iLCAmVGVzdFJ1bm5lcjo6bm90SW1wbGVtZW50ZWQpOwotICAgIGJp
bmRNZXRob2QoImFib3J0TW9kYWwiLCAmVGVzdFJ1bm5lcjo6bm90SW1wbGVtZW50ZWQpOwotCi0g
ICAgLy8gVGhlIGZhbGxiYWNrIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiB1bmtub3duIG1ldGhv
ZCBpcyBpbnZva2VkLgotICAgIGJpbmRGYWxsYmFja01ldGhvZCgmVGVzdFJ1bm5lcjo6ZmFsbGJh
Y2tNZXRob2QpOwotfQotCi1UZXN0UnVubmVyOjp+VGVzdFJ1bm5lcigpCi17Ci19Ci0KLXZvaWQg
VGVzdFJ1bm5lcjo6c2V0RGVsZWdhdGUoV2ViVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSkKLXsKLSAg
ICBtX2RlbGVnYXRlID0gZGVsZWdhdGU7Ci0gICAgbV93ZWJQZXJtaXNzaW9ucy0+c2V0RGVsZWdh
dGUoZGVsZWdhdGUpOwotI2lmIEVOQUJMRV9OT1RJRklDQVRJT05TCi0gICAgbV9ub3RpZmljYXRp
b25QcmVzZW50ZXItPnNldERlbGVnYXRlKGRlbGVnYXRlKTsKLSNlbmRpZgotfQotCi12b2lkIFRl
c3RSdW5uZXI6OnNldFdlYlZpZXcoV2ViVmlldyogd2ViVmlldywgV2ViVGVzdFByb3h5QmFzZSog
cHJveHkpCi17Ci0gICAgbV93ZWJWaWV3ID0gd2ViVmlldzsKLSAgICBtX3Byb3h5ID0gcHJveHk7
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6cmVzZXQoKQotewotICAgIGlmIChtX3dlYlZpZXcpIHsK
LSAgICAgICAgbV93ZWJWaWV3LT5zZXRab29tTGV2ZWwoZmFsc2UsIDApOwotICAgICAgICBtX3dl
YlZpZXctPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyh0cnVlKTsKLSNpZiAhZGVmaW5l
ZChfX0FQUExFX18pICYmICFkZWZpbmVkKFdJTjMyKSAvLyBBY3R1YWxseSwgVE9PTEtJVF9HVEsK
LSAgICAgICAgLy8gKENvbnN0YW50cyBjb3BpZWQgYmVjYXVzZSB3ZSBjYW4ndCBkZXBlbmQgb24g
dGhlIGhlYWRlciB0aGF0IGRlZmluZWQKLSAgICAgICAgLy8gdGhlbSBmcm9tIHRoaXMgZmlsZS4p
Ci0gICAgICAgIG1fd2ViVmlldy0+c2V0U2VsZWN0aW9uQ29sb3JzKDB4ZmYxZTkwZmYsIDB4ZmYw
MDAwMDAsIDB4ZmZjOGM4YzgsIDB4ZmYzMjMyMzIpOwotI2VuZGlmCi0gICAgICAgIG1fd2ViVmll
dy0+cmVtb3ZlQWxsVXNlckNvbnRlbnQoKTsKLSAgICAgICAgbV93ZWJWaWV3LT5kaXNhYmxlQXV0
b1Jlc2l6ZU1vZGUoKTsKLSAgICB9Ci0gICAgbV90b3BMb2FkaW5nRnJhbWUgPSAwOwotICAgIG1f
d2FpdFVudGlsRG9uZSA9IGZhbHNlOwotICAgIG1fcG9saWN5RGVsZWdhdGVFbmFibGVkID0gZmFs
c2U7Ci0gICAgbV9wb2xpY3lEZWxlZ2F0ZUlzUGVybWlzc2l2ZSA9IGZhbHNlOwotICAgIG1fcG9s
aWN5RGVsZWdhdGVTaG91bGROb3RpZnlEb25lID0gZmFsc2U7Ci0KLSAgICBXZWJTZWN1cml0eVBv
bGljeTo6cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RzKCk7Ci0jaWYgZGVmaW5lZChfX2xpbnV4
X18pIHx8IGRlZmluZWQoQU5EUk9JRCkKLSAgICBXZWJGb250UmVuZGVyaW5nOjpzZXRTdWJwaXhl
bFBvc2l0aW9uaW5nKGZhbHNlKTsKLSNlbmRpZgotCi0gICAgaWYgKG1fZGVsZWdhdGUpIHsKLSAg
ICAgICAgLy8gUmVzZXQgdGhlIGRlZmF1bHQgcXVvdGEgZm9yIGVhY2ggb3JpZ2luIHRvIDVNQgot
ICAgICAgICBtX2RlbGVnYXRlLT5zZXREYXRhYmFzZVF1b3RhKDUgKiAxMDI0ICogMTAyNCk7Ci0g
ICAgICAgIG1fZGVsZWdhdGUtPnNldERldmljZVNjYWxlRmFjdG9yKDEpOwotICAgICAgICBtX2Rl
bGVnYXRlLT5zZXRBY2NlcHRBbGxDb29raWVzKGZhbHNlKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+
c2V0TG9jYWxlKCIiKTsKLSAgICB9Ci0KLSAgICBtX2R1bXBFZGl0aW5nQ2FsbGJhY2tzID0gZmFs
c2U7Ci0gICAgbV9kdW1wQXNUZXh0ID0gZmFsc2U7Ci0gICAgbV9nZW5lcmF0ZVBpeGVsUmVzdWx0
cyA9IHRydWU7Ci0gICAgbV9kdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucyA9IGZhbHNlOwot
ICAgIG1fZHVtcENoaWxkRnJhbWVzQXNUZXh0ID0gZmFsc2U7Ci0gICAgbV9kdW1wSWNvbkNoYW5n
ZXMgPSBmYWxzZTsKLSAgICBtX2R1bXBBc0F1ZGlvID0gZmFsc2U7Ci0gICAgbV9kdW1wRnJhbWVM
b2FkQ2FsbGJhY2tzID0gZmFsc2U7Ci0gICAgbV9kdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENh
bGxiYWNrcyA9IGZhbHNlOwotICAgIG1fc3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcyA9IGZhbHNl
OwotICAgIG1fZHVtcFRpdGxlQ2hhbmdlcyA9IGZhbHNlOwotICAgIG1fZHVtcENyZWF0ZVZpZXcg
PSBmYWxzZTsKLSAgICBtX2Nhbk9wZW5XaW5kb3dzID0gZmFsc2U7Ci0gICAgbV9kdW1wUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzID0gZmFsc2U7Ci0gICAgbV9kdW1wUmVzb3VyY2VSZXF1ZXN0Q2FsbGJh
Y2tzID0gZmFsc2U7Ci0gICAgbV9kdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyA9IGZhbHNl
OwotICAgIG1fZHVtcFdpbmRvd1N0YXR1c0NoYW5nZXMgPSBmYWxzZTsKLSAgICBtX2R1bXBQcm9n
cmVzc0ZpbmlzaGVkQ2FsbGJhY2sgPSBmYWxzZTsKLSAgICBtX2R1bXBCYWNrRm9yd2FyZExpc3Qg
PSBmYWxzZTsKLSAgICBtX2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQgPSB0cnVlOwotICAgIG1f
ZHVtcFNlbGVjdGlvblJlY3QgPSBmYWxzZTsKLSAgICBtX3Rlc3RSZXBhaW50ID0gZmFsc2U7Ci0g
ICAgbV9zd2VlcEhvcml6b250YWxseSA9IGZhbHNlOwotICAgIG1faXNQcmludGluZyA9IGZhbHNl
OwotICAgIG1fc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQgPSBmYWxz
ZTsKLSAgICBtX3Nob3VsZEJsb2NrUmVkaXJlY3RzID0gZmFsc2U7Ci0gICAgbV93aWxsU2VuZFJl
cXVlc3RTaG91bGRSZXR1cm5OdWxsID0gZmFsc2U7Ci0gICAgbV9zaG91bGREdW1wUmVzb3VyY2VQ
cmlvcml0aWVzID0gZmFsc2U7Ci0KLSAgICBtX2h0dHBIZWFkZXJzVG9DbGVhci5jbGVhcigpOwot
Ci0gICAgbV9nbG9iYWxGbGFnLnNldChmYWxzZSk7Ci0gICAgbV90aXRsZVRleHREaXJlY3Rpb24u
c2V0KCJsdHIiKTsKLSAgICBtX3dlYkhpc3RvcnlJdGVtQ291bnQuc2V0KDApOwotICAgIG1faW50
ZXJjZXB0UG9zdE1lc3NhZ2Uuc2V0KGZhbHNlKTsKLSAgICBtX3BsYXRmb3JtTmFtZS5zZXQoImNo
cm9taXVtIik7Ci0KLSAgICBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSBXZWJVUkwoKTsKLQot
ICAgIG1fd2ViUGVybWlzc2lvbnMtPnJlc2V0KCk7Ci0KLSNpZiBFTkFCTEVfTk9USUZJQ0FUSU9O
UwotICAgIG1fbm90aWZpY2F0aW9uUHJlc2VudGVyLT5yZXNldCgpOwotI2VuZGlmCi0gICAgbV9w
b2ludGVyTG9ja2VkID0gZmFsc2U7Ci0gICAgbV9wb2ludGVyTG9ja1BsYW5uZWRSZXN1bHQgPSBQ
b2ludGVyTG9ja1dpbGxTdWNjZWVkOwotCi0gICAgbV90YXNrTGlzdC5yZXZva2VBbGwoKTsKLSAg
ICBtX3dvcmtRdWV1ZS5yZXNldCgpOwotCi0gICAgaWYgKG1fY2xvc2VSZW1haW5pbmdXaW5kb3dz
ICYmIG1fZGVsZWdhdGUpCi0gICAgICAgIG1fZGVsZWdhdGUtPmNsb3NlUmVtYWluaW5nV2luZG93
cygpOwotICAgIGVsc2UKLSAgICAgICAgbV9jbG9zZVJlbWFpbmluZ1dpbmRvd3MgPSB0cnVlOwot
fQotCi0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0VGVzdElzUnVubmluZyhib29sIHJ1bm5pbmcpCi17
Ci0gICAgbV90ZXN0SXNSdW5uaW5nID0gcnVubmluZzsKLX0KLQotYm9vbCBUZXN0UnVubmVyOjpz
aG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZHVtcEVk
aXRpbmdDYWxsYmFja3M7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6Y2hlY2tSZXNwb25zZU1pbWVU
eXBlKCkKLXsKLSAgICAvLyBUZXh0IG91dHB1dDogdGhlIHRlc3QgcGFnZSBjYW4gcmVxdWVzdCBk
aWZmZXJlbnQgdHlwZXMgb2Ygb3V0cHV0Ci0gICAgLy8gd2hpY2ggd2UgaGFuZGxlIGhlcmUuCi0g
ICAgaWYgKCFtX2R1bXBBc1RleHQpIHsKLSAgICAgICAgc3RyaW5nIG1pbWVUeXBlID0gbV93ZWJW
aWV3LT5tYWluRnJhbWUoKS0+ZGF0YVNvdXJjZSgpLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkudXRm
OCgpOwotICAgICAgICBpZiAobWltZVR5cGUgPT0gInRleHQvcGxhaW4iKSB7Ci0gICAgICAgICAg
ICBtX2R1bXBBc1RleHQgPSB0cnVlOwotICAgICAgICAgICAgbV9nZW5lcmF0ZVBpeGVsUmVzdWx0
cyA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIFRlc3RSdW5uZXI6OnNob3Vs
ZER1bXBBc1RleHQoKQotewotICAgIGNoZWNrUmVzcG9uc2VNaW1lVHlwZSgpOwotICAgIHJldHVy
biBtX2R1bXBBc1RleHQ7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkRHVtcEFzVGV4
dChib29sIHZhbHVlKQotewotICAgIG1fZHVtcEFzVGV4dCA9IHZhbHVlOwotfQotCi1ib29sIFRl
c3RSdW5uZXI6OnNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkKLXsKLSAgICBjaGVja1Jlc3Bv
bnNlTWltZVR5cGUoKTsKLSAgICByZXR1cm4gbV9nZW5lcmF0ZVBpeGVsUmVzdWx0czsKLX0KLQot
dm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhib29sIHZhbHVl
KQotewotICAgIG1fZ2VuZXJhdGVQaXhlbFJlc3VsdHMgPSB2YWx1ZTsKLX0KLQotYm9vbCBUZXN0
UnVubmVyOjpzaG91bGREdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnM7Ci19Ci0KLWJvb2wgVGVz
dFJ1bm5lcjo6c2hvdWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9kdW1wQ2hpbGRGcmFtZXNBc1RleHQ7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxk
RHVtcEFzQXVkaW8oKSBjb25zdAotewotICAgIHJldHVybiBtX2R1bXBBc0F1ZGlvOwotfQotCi1j
b25zdCBXZWJBcnJheUJ1ZmZlclZpZXcqIFRlc3RSdW5uZXI6OmF1ZGlvRGF0YSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuICZtX2F1ZGlvRGF0YTsKLX0KLQotYm9vbCBUZXN0UnVubmVyOjpzaG91bGRE
dW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90ZXN0SXNSdW5u
aW5nICYmIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrczsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpz
ZXRTaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKGJvb2wgdmFsdWUpCi17Ci0gICAgbV9kdW1w
RnJhbWVMb2FkQ2FsbGJhY2tzID0gdmFsdWU7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxk
RHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoKSBjb25zdAotewotICAgIHJldHVy
biBtX3Rlc3RJc1J1bm5pbmcgJiYgbV9kdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNr
czsKLX0KLQotYm9vbCBUZXN0UnVubmVyOjpzdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9zdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzOwotfQotCi1ib29s
IFRlc3RSdW5uZXI6OnNob3VsZER1bXBUaXRsZUNoYW5nZXMoKSBjb25zdAotewotICAgIHJldHVy
biBtX2R1bXBUaXRsZUNoYW5nZXM7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxkRHVtcElj
b25DaGFuZ2VzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kdW1wSWNvbkNoYW5nZXM7Ci19Ci0K
LWJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxkRHVtcENyZWF0ZVZpZXcoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2R1bXBDcmVhdGVWaWV3OwotfQotCi1ib29sIFRlc3RSdW5uZXI6OmNhbk9wZW5XaW5k
b3dzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jYW5PcGVuV2luZG93czsKLX0KLQotYm9vbCBU
ZXN0UnVubmVyOjpzaG91bGREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV90ZXN0SXNSdW5uaW5nICYmIG1fZHVtcFJlc291cmNlTG9hZENhbGxiYWNrczsK
LX0KLQotYm9vbCBUZXN0UnVubmVyOjpzaG91bGREdW1wUmVzb3VyY2VSZXF1ZXN0Q2FsbGJhY2tz
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90ZXN0SXNSdW5uaW5nICYmIG1fZHVtcFJlc291cmNl
UmVxdWVzdENhbGxiYWNrczsKLX0KLQotYm9vbCBUZXN0UnVubmVyOjpzaG91bGREdW1wUmVzb3Vy
Y2VSZXNwb25zZU1JTUVUeXBlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdGVzdElzUnVubmlu
ZyAmJiBtX2R1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzOwotfQotCi1XZWJQZXJtaXNzaW9u
Q2xpZW50KiBUZXN0UnVubmVyOjp3ZWJQZXJtaXNzaW9ucygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fd2ViUGVybWlzc2lvbnMuZ2V0KCk7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxkRHVt
cFN0YXR1c0NhbGxiYWNrcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZHVtcFdpbmRvd1N0YXR1
c0NoYW5nZXM7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxkRHVtcFByb2dyZXNzRmluaXNo
ZWRDYWxsYmFjaygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZHVtcFByb2dyZXNzRmluaXNoZWRD
YWxsYmFjazsKLX0KLQotYm9vbCBUZXN0UnVubmVyOjpzaG91bGREdW1wQmFja0ZvcndhcmRMaXN0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kdW1wQmFja0ZvcndhcmRMaXN0OwotfQotCi1ib29s
IFRlc3RSdW5uZXI6OmRlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQ7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6
c2hvdWxkRHVtcFNlbGVjdGlvblJlY3QoKSBjb25zdAotewotICAgIHJldHVybiBtX2R1bXBTZWxl
Y3Rpb25SZWN0OwotfQotCi1ib29sIFRlc3RSdW5uZXI6OnRlc3RSZXBhaW50KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV90ZXN0UmVwYWludDsKLX0KLQotYm9vbCBUZXN0UnVubmVyOjpzd2VlcEhv
cml6b250YWxseSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3dlZXBIb3Jpem9udGFsbHk7Ci19
Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6aXNQcmludGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
aXNQcmludGluZzsKLX0KLQotYm9vbCBUZXN0UnVubmVyOjpzaG91bGRTdGF5T25QYWdlQWZ0ZXJI
YW5kbGluZ0JlZm9yZVVubG9hZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2hvdWxkU3RheU9u
UGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQ7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0
VGl0bGVUZXh0RGlyZWN0aW9uKFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbiBkaXIpCi17Ci0gICAg
bV90aXRsZVRleHREaXJlY3Rpb24uc2V0KGRpciA9PSBXZWJLaXQ6OldlYlRleHREaXJlY3Rpb25M
ZWZ0VG9SaWdodCA/ICJsdHIiIDogInJ0bCIpOwotfQotCi1jb25zdCBzdGQ6OnNldDxzdGQ6OnN0
cmluZz4qIFRlc3RSdW5uZXI6Omh0dHBIZWFkZXJzVG9DbGVhcigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICZtX2h0dHBIZWFkZXJzVG9DbGVhcjsKLX0KLQotYm9vbCBUZXN0UnVubmVyOjpzaG91bGRC
bG9ja1JlZGlyZWN0cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2hvdWxkQmxvY2tSZWRpcmVj
dHM7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6d2lsbFNlbmRSZXF1ZXN0U2hvdWxkUmV0dXJuTnVs
bCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2lsbFNlbmRSZXF1ZXN0U2hvdWxkUmV0dXJuTnVs
bDsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRUb3BMb2FkaW5nRnJhbWUoV2ViRnJhbWUqIGZy
YW1lLCBib29sIGNsZWFyKQotewotICAgIGlmIChmcmFtZS0+dG9wKCktPnZpZXcoKSAhPSBtX3dl
YlZpZXcpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1fdGVzdElzUnVubmluZykKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmIChjbGVhcikgewotICAgICAgICBtX3RvcExvYWRpbmdGcmFtZSA9
IDA7Ci0gICAgICAgIGxvY2F0aW9uQ2hhbmdlRG9uZSgpOwotICAgIH0gZWxzZSBpZiAoIW1fdG9w
TG9hZGluZ0ZyYW1lKQotICAgICAgICBtX3RvcExvYWRpbmdGcmFtZSA9IGZyYW1lOwotfQotCi1X
ZWJGcmFtZSogVGVzdFJ1bm5lcjo6dG9wTG9hZGluZ0ZyYW1lKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV90b3BMb2FkaW5nRnJhbWU7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6cG9saWN5RGVsZWdh
dGVEb25lKCkKLXsKLSAgICBXRUJLSVRfQVNTRVJUKG1fd2FpdFVudGlsRG9uZSk7Ci0gICAgbV9k
ZWxlZ2F0ZS0+dGVzdEZpbmlzaGVkKCk7Ci0gICAgbV93YWl0VW50aWxEb25lID0gZmFsc2U7Ci19
Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6cG9saWN5RGVsZWdhdGVFbmFibGVkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9wb2xpY3lEZWxlZ2F0ZUVuYWJsZWQ7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6
cG9saWN5RGVsZWdhdGVJc1Blcm1pc3NpdmUoKSBjb25zdAotewotICAgIHJldHVybiBtX3BvbGlj
eURlbGVnYXRlSXNQZXJtaXNzaXZlOwotfQotCi1ib29sIFRlc3RSdW5uZXI6OnBvbGljeURlbGVn
YXRlU2hvdWxkTm90aWZ5RG9uZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcG9saWN5RGVsZWdh
dGVTaG91bGROb3RpZnlEb25lOwotfQotCi1ib29sIFRlc3RSdW5uZXI6OnNob3VsZEludGVyY2Vw
dFBvc3RNZXNzYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbnRlcmNlcHRQb3N0TWVzc2Fn
ZS5pc0Jvb2woKSAmJiBtX2ludGVyY2VwdFBvc3RNZXNzYWdlLnRvQm9vbGVhbigpOwotfQotCi1i
b29sIFRlc3RSdW5uZXI6OnNob3VsZER1bXBSZXNvdXJjZVByaW9yaXRpZXMoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3Nob3VsZER1bXBSZXNvdXJjZVByaW9yaXRpZXM7Ci19Ci0KLSNpZiBFTkFC
TEVfTk9USUZJQ0FUSU9OUwotV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKiBUZXN0UnVubmVyOjpu
b3RpZmljYXRpb25QcmVzZW50ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX25vdGlmaWNhdGlv
blByZXNlbnRlci5nZXQoKTsKLX0KLSNlbmRpZgotCi1ib29sIFRlc3RSdW5uZXI6OnJlcXVlc3RQ
b2ludGVyTG9jaygpCi17Ci0gICAgc3dpdGNoIChtX3BvaW50ZXJMb2NrUGxhbm5lZFJlc3VsdCkg
ewotICAgIGNhc2UgUG9pbnRlckxvY2tXaWxsU3VjY2VlZDoKLSAgICAgICAgbV9kZWxlZ2F0ZS0+
cG9zdERlbGF5ZWRUYXNrKG5ldyBIb3N0TWV0aG9kVGFzayh0aGlzLCAmVGVzdFJ1bm5lcjo6ZGlk
QWNxdWlyZVBvaW50ZXJMb2NrSW50ZXJuYWwpLCAwKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgY2FzZSBQb2ludGVyTG9ja1dpbGxSZXNwb25kQXN5bmM6Ci0gICAgICAgIFdFQktJVF9BU1NF
UlQoIW1fcG9pbnRlckxvY2tlZCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgUG9p
bnRlckxvY2tXaWxsRmFpbFN5bmM6Ci0gICAgICAgIFdFQktJVF9BU1NFUlQoIW1fcG9pbnRlckxv
Y2tlZCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBXRUJL
SVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6cmVxdWVzdFBvaW50ZXJVbmxvY2soKQotewotICAgIG1fZGVs
ZWdhdGUtPnBvc3REZWxheWVkVGFzayhuZXcgSG9zdE1ldGhvZFRhc2sodGhpcywgJlRlc3RSdW5u
ZXI6OmRpZExvc2VQb2ludGVyTG9ja0ludGVybmFsKSwgMCk7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5l
cjo6aXNQb2ludGVyTG9ja2VkKCkKLXsKLSAgICByZXR1cm4gbV9wb2ludGVyTG9ja2VkOwotfQot
Ci12b2lkIFRlc3RSdW5uZXI6OmRpZEFjcXVpcmVQb2ludGVyTG9ja0ludGVybmFsKCkKLXsKLSAg
ICBtX3BvaW50ZXJMb2NrZWQgPSB0cnVlOwotICAgIG1fd2ViVmlldy0+ZGlkQWNxdWlyZVBvaW50
ZXJMb2NrKCk7Ci0KLSAgICAvLyBSZXNldCBwbGFubmVkIHJlc3VsdCB0byBkZWZhdWx0LgotICAg
IG1fcG9pbnRlckxvY2tQbGFubmVkUmVzdWx0ID0gUG9pbnRlckxvY2tXaWxsU3VjY2VlZDsKLX0K
LQotdm9pZCBUZXN0UnVubmVyOjpkaWROb3RBY3F1aXJlUG9pbnRlckxvY2tJbnRlcm5hbCgpCi17
Ci0gICAgV0VCS0lUX0FTU0VSVCghbV9wb2ludGVyTG9ja2VkKTsKLSAgICBtX3BvaW50ZXJMb2Nr
ZWQgPSBmYWxzZTsKLSAgICBtX3dlYlZpZXctPmRpZE5vdEFjcXVpcmVQb2ludGVyTG9jaygpOwot
Ci0gICAgLy8gUmVzZXQgcGxhbm5lZCByZXN1bHQgdG8gZGVmYXVsdC4KLSAgICBtX3BvaW50ZXJM
b2NrUGxhbm5lZFJlc3VsdCA9IFBvaW50ZXJMb2NrV2lsbFN1Y2NlZWQ7Ci19Ci0KLXZvaWQgVGVz
dFJ1bm5lcjo6ZGlkTG9zZVBvaW50ZXJMb2NrSW50ZXJuYWwoKQotewotICAgIGJvb2wgd2FzTG9j
a2VkID0gbV9wb2ludGVyTG9ja2VkOwotICAgIG1fcG9pbnRlckxvY2tlZCA9IGZhbHNlOwotICAg
IGlmICh3YXNMb2NrZWQpCi0gICAgICAgIG1fd2ViVmlldy0+ZGlkTG9zZVBvaW50ZXJMb2NrKCk7
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2hvd0RldlRvb2xzKCkKLXsKLSAgICBtX2RlbGVnYXRl
LT5zaG93RGV2VG9vbHMoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjp3YWl0VW50aWxEb25lKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoIW1f
ZGVsZWdhdGUtPmlzQmVpbmdEZWJ1Z2dlZCgpKQotICAgICAgICBtX2RlbGVnYXRlLT5wb3N0RGVs
YXllZFRhc2sobmV3IE5vdGlmeURvbmVUaW1lZE91dFRhc2sodGhpcyksIG1fZGVsZWdhdGUtPmxh
eW91dFRlc3RUaW1lb3V0KCkpOwotICAgIG1fd2FpdFVudGlsRG9uZSA9IHRydWU7Ci0gICAgcmVz
dWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6bm90aWZ5RG9uZShjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgLy8gVGVzdCBkaWRu
J3QgdGltZW91dC4gS2lsbCB0aGUgdGltZW91dCB0aW1lci4KLSAgICB0YXNrTGlzdCgpLT5yZXZv
a2VBbGwoKTsKLQotICAgIGNvbXBsZXRlTm90aWZ5RG9uZShmYWxzZSk7Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6Y29tcGxldGVOb3RpZnlEb25lKGJvb2wg
aXNUaW1lb3V0KQotewotICAgIGlmIChtX3dhaXRVbnRpbERvbmUgJiYgIXRvcExvYWRpbmdGcmFt
ZSgpICYmIG1fd29ya1F1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoaXNUaW1lb3V0KQot
ICAgICAgICAgICAgbV9kZWxlZ2F0ZS0+dGVzdFRpbWVkT3V0KCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1fZGVsZWdhdGUtPnRlc3RGaW5pc2hlZCgpOwotICAgIH0KLSAgICBtX3dhaXRV
bnRpbERvbmUgPSBmYWxzZTsKLX0KLQotY2xhc3MgV29ya0l0ZW1CYWNrRm9yd2FyZCA6IHB1Ymxp
YyBUZXN0UnVubmVyOjpXb3JrSXRlbSB7Ci1wdWJsaWM6Ci0gICAgV29ya0l0ZW1CYWNrRm9yd2Fy
ZChpbnQgZGlzdGFuY2UpIDogbV9kaXN0YW5jZShkaXN0YW5jZSkgeyB9Ci0gICAgYm9vbCBydW4o
V2ViVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSwgV2ViVmlldyopCi0gICAgewotICAgICAgICBkZWxl
Z2F0ZS0+Z29Ub09mZnNldChtX2Rpc3RhbmNlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7IC8vIEZJ
WE1FOiBEaWQgaXQgcmVhbGx5IHN0YXJ0IGEgbmF2aWdhdGlvbj8KLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgaW50IG1fZGlzdGFuY2U7Ci19OwotCi12b2lkIFRlc3RSdW5uZXI6OnF1ZXVlQmFja05h
dmlnYXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlz
TnVtYmVyKCkpCi0gICAgICAgIG1fd29ya1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVtQmFja0Zv
cndhcmQoLWFyZ3VtZW50c1swXS50b0ludDMyKCkpKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LX0KLQotdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc051bWJlcigpKQotICAgICAgICBt
X3dvcmtRdWV1ZS5hZGRXb3JrKG5ldyBXb3JrSXRlbUJhY2tGb3J3YXJkKGFyZ3VtZW50c1swXS50
b0ludDMyKCkpKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotY2xhc3MgV29ya0l0ZW1S
ZWxvYWQgOiBwdWJsaWMgVGVzdFJ1bm5lcjo6V29ya0l0ZW0gewotcHVibGljOgotICAgIGJvb2wg
cnVuKFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUsIFdlYlZpZXcqKQotICAgIHsKLSAgICAgICAg
ZGVsZWdhdGUtPnJlbG9hZCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19OwotCi12
b2lkIFRlc3RSdW5uZXI6OnF1ZXVlUmVsb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX3dvcmtRdWV1ZS5hZGRXb3JrKG5ldyBXb3JrSXRlbVJl
bG9hZCk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLWNsYXNzIFdvcmtJdGVtTG9hZGlu
Z1NjcmlwdCA6IHB1YmxpYyBUZXN0UnVubmVyOjpXb3JrSXRlbSB7Ci1wdWJsaWM6Ci0gICAgV29y
a0l0ZW1Mb2FkaW5nU2NyaXB0KGNvbnN0IHN0cmluZyYgc2NyaXB0KSA6IG1fc2NyaXB0KHNjcmlw
dCkgeyB9Ci0gICAgYm9vbCBydW4oV2ViVGVzdERlbGVnYXRlKiwgV2ViVmlldyogd2ViVmlldykK
LSAgICB7Ci0gICAgICAgIHdlYlZpZXctPm1haW5GcmFtZSgpLT5leGVjdXRlU2NyaXB0KFdlYlNj
cmlwdFNvdXJjZShXZWJTdHJpbmc6OmZyb21VVEY4KG1fc2NyaXB0KSkpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsgLy8gRklYTUU6IERpZCBpdCByZWFsbHkgc3RhcnQgYSBuYXZpZ2F0aW9uPwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBzdHJpbmcgbV9zY3JpcHQ7Ci19OwotCi1jbGFzcyBXb3JrSXRl
bU5vbkxvYWRpbmdTY3JpcHQgOiBwdWJsaWMgVGVzdFJ1bm5lcjo6V29ya0l0ZW0gewotcHVibGlj
OgotICAgIFdvcmtJdGVtTm9uTG9hZGluZ1NjcmlwdChjb25zdCBzdHJpbmcmIHNjcmlwdCkgOiBt
X3NjcmlwdChzY3JpcHQpIHsgfQotICAgIGJvb2wgcnVuKFdlYlRlc3REZWxlZ2F0ZSosIFdlYlZp
ZXcqIHdlYlZpZXcpCi0gICAgewotICAgICAgICB3ZWJWaWV3LT5tYWluRnJhbWUoKS0+ZXhlY3V0
ZVNjcmlwdChXZWJTY3JpcHRTb3VyY2UoV2ViU3RyaW5nOjpmcm9tVVRGOChtX3NjcmlwdCkpKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdHJpbmcgbV9z
Y3JpcHQ7Ci19OwotCi12b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZGluZ1NjcmlwdChjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlm
IChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKLSAgICAg
ICAgbV93b3JrUXVldWUuYWRkV29yayhuZXcgV29ya0l0ZW1Mb2FkaW5nU2NyaXB0KGFyZ3VtZW50
c1swXS50b1N0cmluZygpKSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVz
dFJ1bm5lcjo6cXVldWVOb25Mb2FkaW5nU2NyaXB0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
PiAwICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpKQotICAgICAgICBtX3dvcmtRdWV1ZS5hZGRX
b3JrKG5ldyBXb3JrSXRlbU5vbkxvYWRpbmdTY3JpcHQoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkp
KTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotY2xhc3MgV29ya0l0ZW1Mb2FkIDogcHVi
bGljIFRlc3RSdW5uZXI6OldvcmtJdGVtIHsKLXB1YmxpYzoKLSAgICBXb3JrSXRlbUxvYWQoY29u
c3QgV2ViVVJMJiB1cmwsIGNvbnN0IHN0cmluZyYgdGFyZ2V0KQotICAgICAgICA6IG1fdXJsKHVy
bCkKLSAgICAgICAgLCBtX3RhcmdldCh0YXJnZXQpIHsgfQotICAgIGJvb2wgcnVuKFdlYlRlc3RE
ZWxlZ2F0ZSogZGVsZWdhdGUsIFdlYlZpZXcqKQotICAgIHsKLSAgICAgICAgZGVsZWdhdGUtPmxv
YWRVUkxGb3JGcmFtZShtX3VybCwgbV90YXJnZXQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsgLy8g
RklYTUU6IERpZCBpdCByZWFsbHkgc3RhcnQgYSBuYXZpZ2F0aW9uPwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBXZWJVUkwgbV91cmw7Ci0gICAgc3RyaW5nIG1fdGFyZ2V0OwotfTsKLQotdm9pZCBU
ZXN0UnVubmVyOjpxdWV1ZUxvYWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJn
dW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBXZWJV
Ukw6OnJlc29sdmUoKSBhbmQgYXZvaWQgR1VSTC4KLSAgICAgICAgR1VSTCBjdXJyZW50VVJMID0g
bV93ZWJWaWV3LT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS51cmwoKTsKLSAgICAgICAgR1VSTCBm
dWxsVVJMID0gY3VycmVudFVSTC5SZXNvbHZlKGFyZ3VtZW50c1swXS50b1N0cmluZygpKTsKLQot
ICAgICAgICBzdHJpbmcgdGFyZ2V0ID0gIiI7Ci0gICAgICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
ID4gMSAmJiBhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHRhcmdldCA9IGFy
Z3VtZW50c1sxXS50b1N0cmluZygpOwotCi0gICAgICAgIG1fd29ya1F1ZXVlLmFkZFdvcmsobmV3
IFdvcmtJdGVtTG9hZChmdWxsVVJMLCB0YXJnZXQpKTsKLSAgICB9Ci0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci19Ci0KLWNsYXNzIFdvcmtJdGVtTG9hZEhUTUxTdHJpbmcgOiBwdWJsaWMgVGVzdFJ1
bm5lcjo6V29ya0l0ZW0gIHsKLXB1YmxpYzoKLSAgICBXb3JrSXRlbUxvYWRIVE1MU3RyaW5nKGNv
bnN0IHN0ZDo6c3RyaW5nJiBodG1sLCBjb25zdCBXZWJVUkwmIGJhc2VVUkwpCi0gICAgICAgIDog
bV9odG1sKGh0bWwpCi0gICAgICAgICwgbV9iYXNlVVJMKGJhc2VVUkwpIHsgfQotICAgIFdvcmtJ
dGVtTG9hZEhUTUxTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIGh0bWwsIGNvbnN0IFdlYlVSTCYg
YmFzZVVSTCwgY29uc3QgV2ViVVJMJiB1bnJlYWNoYWJsZVVSTCkKLSAgICAgICAgOiBtX2h0bWwo
aHRtbCkKLSAgICAgICAgLCBtX2Jhc2VVUkwoYmFzZVVSTCkKLSAgICAgICAgLCBtX3VucmVhY2hh
YmxlVVJMKHVucmVhY2hhYmxlVVJMKSB7IH0KLSAgICBib29sIHJ1bihXZWJUZXN0RGVsZWdhdGUq
LCBXZWJWaWV3KiB3ZWJWaWV3KQotICAgIHsKLSAgICAgICAgd2ViVmlldy0+bWFpbkZyYW1lKCkt
PmxvYWRIVE1MU3RyaW5nKAotICAgICAgICAgICAgV2ViS2l0OjpXZWJEYXRhKG1faHRtbC5kYXRh
KCksIG1faHRtbC5sZW5ndGgoKSksIG1fYmFzZVVSTCwgbV91bnJlYWNoYWJsZVVSTCk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnN0cmluZyBtX2h0
bWw7Ci0gICAgV2ViVVJMIG1fYmFzZVVSTDsKLSAgICBXZWJVUkwgbV91bnJlYWNoYWJsZVVSTDsK
LX07Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkSFRNTFN0cmluZyhjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgewotICAgICAgICBz
dHJpbmcgaHRtbCA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOwotICAgICAgICBXZWJVUkwgYmFz
ZVVSTChHVVJMKCIiKSk7Ci0gICAgICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMSAmJiBhcmd1
bWVudHNbMV0uaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIGJhc2VVUkwgPSBXZWJVUkwoR1VSTChh
cmd1bWVudHNbMV0udG9TdHJpbmcoKSkpOwotICAgICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+
IDIgJiYgYXJndW1lbnRzWzJdLmlzU3RyaW5nKCkpCi0gICAgICAgICAgICBtX3dvcmtRdWV1ZS5h
ZGRXb3JrKG5ldyBXb3JrSXRlbUxvYWRIVE1MU3RyaW5nKGh0bWwsIGJhc2VVUkwsIFdlYlVSTChH
VVJMKGFyZ3VtZW50c1syXS50b1N0cmluZygpKSkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbV93b3JrUXVldWUuYWRkV29yayhuZXcgV29ya0l0ZW1Mb2FkSFRNTFN0cmluZyhodG1sLCBi
YXNlVVJMKSk7Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RS
dW5uZXI6OmxvY2F0aW9uQ2hhbmdlRG9uZSgpCi17Ci0gICAgbV93ZWJIaXN0b3J5SXRlbUNvdW50
LnNldChtX2RlbGVnYXRlLT5uYXZpZ2F0aW9uRW50cnlDb3VudCgpKTsKLQotICAgIC8vIE5vIG1v
cmUgbmV3IHdvcmsgYWZ0ZXIgdGhlIGZpcnN0IGNvbXBsZXRlIGxvYWQuCi0gICAgbV93b3JrUXVl
dWUuc2V0RnJvemVuKHRydWUpOwotCi0gICAgaWYgKCFtX3dhaXRVbnRpbERvbmUpCi0gICAgICAg
IG1fd29ya1F1ZXVlLnByb2Nlc3NXb3JrU29vbigpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6Ondp
bmRvd0NvdW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICByZXN1bHQtPnNldChzdGF0aWNfY2FzdDxpbnQ+KG1fdGVzdEludGVyZmFjZXMtPndpbmRv
d0xpc3QoKS5zaXplKCkpKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRDbG9zZVJlbWFpbmlu
Z1dpbmRvd3NXaGVuQ29tcGxldGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJn
dW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX2Nsb3NlUmVtYWluaW5nV2luZG93cyA9IGFy
Z3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0K
LXZvaWQgVGVzdFJ1bm5lcjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7Ci0gICAgICAgIG1fcG9s
aWN5RGVsZWdhdGVFbmFibGVkID0gYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZTsKLSAgICAg
ICAgbV9wb2xpY3lEZWxlZ2F0ZUlzUGVybWlzc2l2ZSA9IGZhbHNlOwotICAgICAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+IDEgJiYgYXJndW1lbnRzWzFdLmlzQm9vbCgpKQotICAgICAgICAgICAg
bV9wb2xpY3lEZWxlZ2F0ZUlzUGVybWlzc2l2ZSA9IGFyZ3VtZW50c1sxXS52YWx1ZS5ib29sVmFs
dWU7Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6
OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgbV9wb2xpY3lEZWxlZ2F0ZUVuYWJsZWQgPSB0cnVlOwotICAgIG1f
cG9saWN5RGVsZWdhdGVTaG91bGROb3RpZnlEb25lID0gdHJ1ZTsKLSAgICBtX3dhaXRVbnRpbERv
bmUgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6
OmR1bXBQZXJtaXNzaW9uQ2xpZW50Q2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX3dlYlBlcm1pc3Npb25zLT5zZXREdW1wQ2FsbGJh
Y2tzKHRydWUpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6
OnNldEltYWdlc0FsbG93ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1l
bnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX3dlYlBlcm1pc3Npb25zLT5zZXRJbWFnZXNBbGxv
d2VkKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19
Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0U2NyaXB0c0FsbG93ZWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX3dlYlBlcm1p
c3Npb25zLT5zZXRTY3JpcHRzQWxsb3dlZChhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOwotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFN0b3JhZ2VBbGxv
d2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2wo
KSkKLSAgICAgICAgbV93ZWJQZXJtaXNzaW9ucy0+c2V0U3RvcmFnZUFsbG93ZWQoYXJndW1lbnRz
WzBdLnRvQm9vbGVhbigpKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0
UnVubmVyOjpzZXRQbHVnaW5zQWxsb3dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAm
JiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIG1fd2ViUGVybWlzc2lvbnMtPnNldFBs
dWdpbnNBbGxvd2VkKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7Ci0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNv
bnRlbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9v
bCgpKQotICAgICAgICBtX3dlYlBlcm1pc3Npb25zLT5zZXREaXNwbGF5aW5nSW5zZWN1cmVDb250
ZW50QWxsb3dlZChhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOwotCi0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNv
bnRlbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9v
bCgpKQotICAgICAgICBtX3dlYlBlcm1pc3Npb25zLT5zZXRSdW5uaW5nSW5zZWN1cmVDb250ZW50
QWxsb3dlZChhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlKTsKLQotICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmR1bXBXaW5kb3dTdGF0dXNDaGFuZ2VzKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX2R1bXBX
aW5kb3dTdGF0dXNDaGFuZ2VzID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQot
dm9pZCBUZXN0UnVubmVyOjpkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX2R1bXBQcm9ncmVzc0Zp
bmlzaGVkQ2FsbGJhY2sgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lk
IFRlc3RSdW5uZXI6OmR1bXBCYWNrRm9yd2FyZExpc3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fZHVtcEJhY2tGb3J3YXJkTGlzdCA9IHRydWU7
Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0RGVmZXJN
YWluUmVzb3VyY2VEYXRhTG9hZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID09IDEpCi0gICAg
ICAgIG1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCA9IGNwcFZhcmlhbnRUb0Jvb2woYXJndW1l
bnRzWzBdKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpkdW1wU2VsZWN0aW9uUmVjdChjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1f
ZHVtcFNlbGVjdGlvblJlY3QgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12
b2lkIFRlc3RSdW5uZXI6OnRlc3RSZXBhaW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX3Rlc3RSZXBhaW50ID0gdHJ1ZTsKLSAgICByZXN1bHQt
PnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpyZXBhaW50U3dlZXBIb3Jpem9udGFs
bHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1f
c3dlZXBIb3Jpem9udGFsbHkgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12
b2lkIFRlc3RSdW5uZXI6OnNldFByaW50aW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9pc1ByaW50aW5nID0gdHJ1ZTsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGRTdGF5
T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
ID09IDEgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX3Nob3VsZFN0YXlPblBh
Z2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkID0gYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpOwot
Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0V2lsbFNl
bmRSZXF1ZXN0Q2xlYXJIZWFkZXIoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJn
dW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgc3RyaW5nIGhlYWRlciA9IGFyZ3VtZW50
c1swXS50b1N0cmluZygpOwotICAgICAgICBpZiAoIWhlYWRlci5lbXB0eSgpKQotICAgICAgICAg
ICAgbV9odHRwSGVhZGVyc1RvQ2xlYXIuaW5zZXJ0KGhlYWRlcik7Ci0gICAgfQotICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFdpbGxTZW5kUmVxdWVzdFJl
dHVybnNOdWxsT25SZWRpcmVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1
bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIG1fc2hvdWxkQmxvY2tSZWRpcmVjdHMgPSBhcmd1
bWVudHNbMF0udG9Cb29sZWFuKCk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQg
VGVzdFJ1bm5lcjo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX3dpbGxT
ZW5kUmVxdWVzdFNob3VsZFJldHVybk51bGwgPSBhcmd1bWVudHNbMF0udG9Cb29sZWFuKCk7Ci0g
ICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0VGFiS2V5Q3lj
bGVzVGhyb3VnaEVsZW1lbnRzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3Vt
ZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgbV93ZWJWaWV3LT5zZXRUYWJLZXlDeWNsZXNUaHJv
dWdoRWxlbWVudHMoYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpKTsKLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpleGVjQ29tbWFuZChjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDw9IDAgfHwgIWFyZ3VtZW50c1swXS5p
c1N0cmluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGQ6OnN0cmluZyBjb21tYW5kID0g
YXJndW1lbnRzWzBdLnRvU3RyaW5nKCk7Ci0gICAgc3RkOjpzdHJpbmcgdmFsdWUoIiIpOwotICAg
IC8vIElnbm9yZSB0aGUgc2Vjb25kIHBhcmFtZXRlciAod2hpY2ggaXMgdXNlckludGVyZmFjZSkK
LSAgICAvLyBzaW5jZSB0aGlzIGNvbW1hbmQgZW11bGF0ZXMgYSBtYW51YWwgYWN0aW9uLgotICAg
IGlmIChhcmd1bWVudHMuc2l6ZSgpID49IDMgJiYgYXJndW1lbnRzWzJdLmlzU3RyaW5nKCkpCi0g
ICAgICAgIHZhbHVlID0gYXJndW1lbnRzWzJdLnRvU3RyaW5nKCk7Ci0KLSAgICAvLyBOb3RlOiB3
ZWJraXQncyB2ZXJzaW9uIGRvZXMgbm90IHJldHVybiB0aGUgYm9vbGVhbiwgc28gbmVpdGhlciBk
byB3ZS4KLSAgICBtX3dlYlZpZXctPmZvY3VzZWRGcmFtZSgpLT5leGVjdXRlQ29tbWFuZChXZWJT
dHJpbmc6OmZyb21VVEY4KGNvbW1hbmQpLCBXZWJTdHJpbmc6OmZyb21VVEY4KHZhbHVlKSk7Ci19
Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMu
c2l6ZSgpIDw9IDAgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RkOjpzdHJpbmcg
Y29tbWFuZCA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOwotICAgIGJvb2wgcnYgPSBtX3dlYlZp
ZXctPmZvY3VzZWRGcmFtZSgpLT5pc0NvbW1hbmRFbmFibGVkKFdlYlN0cmluZzo6ZnJvbVVURjgo
Y29tbWFuZCkpOwotICAgIHJlc3VsdC0+c2V0KHJ2KTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpj
YWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KG1fd2ViVmlldy0+ZGlzcGF0Y2hCZWZvcmVV
bmxvYWRFdmVudCgpKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXREb21haW5SZWxheGF0aW9u
Rm9yYmlkZGVuRm9yVVJMU2NoZW1lKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMiB8fCAh
YXJndW1lbnRzWzBdLmlzQm9vbCgpIHx8ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fd2ViVmlldy0+c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbihj
cHBWYXJpYW50VG9Cb29sKGFyZ3VtZW50c1swXSksIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1
bWVudHNbMV0pKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZEFuZFJldHVyblZhbHVlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgIFdl
YlZlY3Rvcjx2ODo6TG9jYWw8djg6OlZhbHVlPiA+IHZhbHVlczsKLSAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+PSAyICYmIGFyZ3VtZW50c1swXS5pc051bWJlcigpICYmIGFyZ3VtZW50c1sxXS5p
c1N0cmluZygpKSB7Ci0gICAgICAgIFdlYlNjcmlwdFNvdXJjZSBzb3VyY2UoY3BwVmFyaWFudFRv
V2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOwotICAgICAgICAvLyBUaGlzIHJlbGllcyBvbiB0aGUg
aWZyYW1lIGZvY3VzaW5nIGl0c2VsZiB3aGVuIGl0IGxvYWRzLiBUaGlzIGlzIGEgYml0Ci0gICAg
ICAgIC8vIHNrZXRjaHksIGJ1dCBpdCBzZWVtcyB0byBiZSB3aGF0IG90aGVyIHRlc3RzIGRvLgot
ICAgICAgICBtX3dlYlZpZXctPmZvY3VzZWRGcmFtZSgpLT5leGVjdXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkKGFyZ3VtZW50c1swXS50b0ludDMyKCksICZzb3VyY2UsIDEsIDEsICZ2YWx1ZXMpOwot
ICAgIH0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICAvLyBTaW5jZSBvbmx5IG9uZSBzY3Jp
cHQgd2FzIGFkZGVkLCBvbmx5IG9uZSByZXN1bHQgaXMgZXhwZWN0ZWQKLSAgICBpZiAodmFsdWVz
LnNpemUoKSA9PSAxICYmICF2YWx1ZXNbMF0uSXNFbXB0eSgpKSB7Ci0gICAgICAgIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHNjcmlwdFZhbHVlID0gdmFsdWVzWzBdOwotICAgICAgICAvLyBGSVhNRTog
VGhlcmUgYXJlIG1hbnkgbW9yZSB0eXBlcyB0aGF0IGNhbiBiZSBoYW5kbGVkLgotICAgICAgICBp
ZiAoc2NyaXB0VmFsdWUtPklzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIHY4OjpTdHJpbmc6OkFz
Y2lpVmFsdWUgYXNjaWlWOChzY3JpcHRWYWx1ZSk7Ci0gICAgICAgICAgICByZXN1bHQtPnNldChz
dGQ6OnN0cmluZygqYXNjaWlWOCkpOwotICAgICAgICB9IGVsc2UgaWYgKHNjcmlwdFZhbHVlLT5J
c0Jvb2xlYW4oKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0KHNjcmlwdFZhbHVlLT5Ub0Jvb2xl
YW4oKS0+VmFsdWUoKSk7Ci0gICAgICAgIGVsc2UgaWYgKHNjcmlwdFZhbHVlLT5Jc051bWJlcigp
KSB7Ci0gICAgICAgICAgICBpZiAoc2NyaXB0VmFsdWUtPklzSW50MzIoKSkKLSAgICAgICAgICAg
ICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9JbnQzMigpLT5WYWx1ZSgpKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9O
dW1iZXIoKS0+VmFsdWUoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2NyaXB0VmFsdWUtPklzTnVs
bCgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgfQotfQotCi12b2lkIFRl
c3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPj0gMiAmJiBhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMV0u
aXNTdHJpbmcoKSkgewotICAgICAgICBXZWJTY3JpcHRTb3VyY2Ugc291cmNlKGNwcFZhcmlhbnRU
b1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKLSAgICAgICAgLy8gVGhpcyByZWxpZXMgb24gdGhl
IGlmcmFtZSBmb2N1c2luZyBpdHNlbGYgd2hlbiBpdCBsb2Fkcy4gVGhpcyBpcyBhIGJpdAotICAg
ICAgICAvLyBza2V0Y2h5LCBidXQgaXQgc2VlbXMgdG8gYmUgd2hhdCBvdGhlciB0ZXN0cyBkby4K
LSAgICAgICAgbV93ZWJWaWV3LT5mb2N1c2VkRnJhbWUoKS0+ZXhlY3V0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZChhcmd1bWVudHNbMF0udG9JbnQzMigpLCAmc291cmNlLCAxLCAxKTsKLSAgICB9Ci0g
ICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0SXNvbGF0ZWRX
b3JsZFNlY3VyaXR5T3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhKGFyZ3Vt
ZW50c1sxXS5pc1N0cmluZygpIHx8IGFyZ3VtZW50c1sxXS5pc051bGwoKSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFdlYlNlY3VyaXR5T3JpZ2luIG9yaWdpbjsKLSAgICBpZiAoYXJndW1lbnRz
WzFdLmlzU3RyaW5nKCkpCi0gICAgICAgIG9yaWdpbiA9IFdlYlNlY3VyaXR5T3JpZ2luOjpjcmVh
dGVGcm9tU3RyaW5nKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKLSAgICBt
X3dlYlZpZXctPmZvY3VzZWRGcmFtZSgpLT5zZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4o
YXJndW1lbnRzWzBdLnRvSW50MzIoKSwgb3JpZ2luKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpz
ZXRJc29sYXRlZFdvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci0KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVudHNbMF0uaXNO
dW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fd2ViVmlldy0+Zm9jdXNlZEZyYW1lKCktPnNldElzb2xhdGVkV29ybGRDb250ZW50U2Vj
dXJpdHlQb2xpY3koYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgY3BwVmFyaWFudFRvV2ViU3RyaW5n
KGFyZ3VtZW50c1sxXSkpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmFkZE9yaWdpbkFjY2Vzc1do
aXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSAhPSA0IHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzFd
LmlzU3RyaW5nKCkKLSAgICAgICAgfHwgIWFyZ3VtZW50c1syXS5pc1N0cmluZygpIHx8ICFhcmd1
bWVudHNbM10uaXNCb29sKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYktpdDo6V2ViVVJM
IHVybChHVVJMKGFyZ3VtZW50c1swXS50b1N0cmluZygpKSk7Ci0gICAgaWYgKCF1cmwuaXNWYWxp
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJTZWN1cml0eVBvbGljeTo6YWRkT3JpZ2lu
QWNjZXNzV2hpdGVsaXN0RW50cnkoCi0gICAgICAgIHVybCwKLSAgICAgICAgY3BwVmFyaWFudFRv
V2ViU3RyaW5nKGFyZ3VtZW50c1sxXSksCi0gICAgICAgIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhh
cmd1bWVudHNbMl0pLAotICAgICAgICBhcmd1bWVudHNbM10udG9Cb29sZWFuKCkpOwotfQotCi12
b2lkIFRlc3RSdW5uZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVz
dWx0LT5zZXROdWxsKCk7Ci0KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSA0IHx8ICFhcmd1
bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkKLSAgICAgICAg
fHwgIWFyZ3VtZW50c1syXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbM10uaXNCb29sKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFdlYktpdDo6V2ViVVJMIHVybChHVVJMKGFyZ3VtZW50c1sw
XS50b1N0cmluZygpKSk7Ci0gICAgaWYgKCF1cmwuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBXZWJTZWN1cml0eVBvbGljeTo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkoCi0gICAgICAgIHVybCwKLSAgICAgICAgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50
c1sxXSksCi0gICAgICAgIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMl0pLAotICAg
ICAgICBhcmd1bWVudHNbM10udG9Cb29sZWFuKCkpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6Omhh
c0N1c3RvbVBhZ2VTaXplU3R5bGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChmYWxzZSk7Ci0gICAgaW50IHBh
Z2VJbmRleCA9IDA7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAxKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPT0gMSkKLSAgICAgICAgcGFnZUluZGV4ID0g
Y3BwVmFyaWFudFRvSW50MzIoYXJndW1lbnRzWzBdKTsKLSAgICBXZWJGcmFtZSogZnJhbWUgPSBt
X3dlYlZpZXctPm1haW5GcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsK
LSAgICByZXN1bHQtPnNldChmcmFtZS0+aGFzQ3VzdG9tUGFnZVNpemVTdHlsZShwYWdlSW5kZXgp
KTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpmb3JjZVJlZFNlbGVjdGlvbkNvbG9ycyhjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwotICAgIG1fd2ViVmlldy0+c2V0U2VsZWN0aW9uQ29sb3JzKDB4ZmZl
ZTAwMDAsIDB4ZmYwMGVlMDAsIDB4ZmYwMDAwMDAsIDB4ZmZjMGMwYzApOwotfQotCi12b2lkIFRl
c3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAo
YXJndW1lbnRzLnNpemUoKSA8IDMgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpIHx8ICFhcmd1
bWVudHNbMV0uaXNCb29sKCkgfHwgIWFyZ3VtZW50c1syXS5pc0Jvb2woKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIFdlYlZpZXc6OmFkZFVzZXJTY3JpcHQoCi0gICAgICAgIGNwcFZhcmlhbnRUb1dl
YlN0cmluZyhhcmd1bWVudHNbMF0pLCBXZWJWZWN0b3I8V2ViU3RyaW5nPigpLAotICAgICAgICBh
cmd1bWVudHNbMV0udG9Cb29sZWFuKCkgPyBXZWJWaWV3OjpVc2VyU2NyaXB0SW5qZWN0QXREb2N1
bWVudFN0YXJ0IDogV2ViVmlldzo6VXNlclNjcmlwdEluamVjdEF0RG9jdW1lbnRFbmQsCi0gICAg
ICAgIGFyZ3VtZW50c1syXS50b0Jvb2xlYW4oKSA/IFdlYlZpZXc6OlVzZXJDb250ZW50SW5qZWN0
SW5BbGxGcmFtZXMgOiBXZWJWaWV3OjpVc2VyQ29udGVudEluamVjdEluVG9wRnJhbWVPbmx5KTsK
LX0KLQotdm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVTaGVldChjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1lbnRzWzBdLmlz
U3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sxXS5pc0Jvb2woKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IFdlYlZpZXc6OmFkZFVzZXJTdHlsZVNoZWV0KAotICAgICAgICBjcHBWYXJpYW50VG9XZWJTdHJp
bmcoYXJndW1lbnRzWzBdKSwgV2ViVmVjdG9yPFdlYlN0cmluZz4oKSwKLSAgICAgICAgYXJndW1l
bnRzWzFdLnRvQm9vbGVhbigpID8gV2ViVmlldzo6VXNlckNvbnRlbnRJbmplY3RJbkFsbEZyYW1l
cyA6IFdlYlZpZXc6OlVzZXJDb250ZW50SW5qZWN0SW5Ub3BGcmFtZU9ubHksCi0gICAgICAgIC8v
IENocm9taXVtIGRlZmF1bHRzIHRvIEluamVjdEluU3Vic2VxdWVudERvY3VtZW50cywgYnV0IGZv
ciBjb21wYXRpYmlsaXR5Ci0gICAgICAgIC8vIHdpdGggdGhlIG90aGVyIHBvcnRzJyBEUlRzLCB3
ZSB1c2UgVXNlclN0eWxlSW5qZWN0SW5FeGlzdGluZ0RvY3VtZW50cy4KLSAgICAgICAgV2ViVmll
dzo6VXNlclN0eWxlSW5qZWN0SW5FeGlzdGluZ0RvY3VtZW50cyk7Ci19Ci0KLXZvaWQgVGVzdFJ1
bm5lcjo6c3RhcnRTcGVlY2hJbnB1dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChh
cmd1bWVudHMuc2l6ZSgpICE9IDEpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkVsZW1lbnQg
ZWxlbWVudDsKLSAgICBpZiAoIVdlYkJpbmRpbmdzOjpnZXRFbGVtZW50KGFyZ3VtZW50c1swXS52
YWx1ZS5vYmplY3RWYWx1ZSwgJmVsZW1lbnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJJ
bnB1dEVsZW1lbnQqIGlucHV0ID0gdG9XZWJJbnB1dEVsZW1lbnQoJmVsZW1lbnQpOwotICAgIGlm
ICghaW5wdXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghaW5wdXQtPmlzU3BlZWNoSW5w
dXRFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlucHV0LT5zdGFydFNwZWVjaElu
cHV0KCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFdlYkZpbmRPcHRpb25zIGZpbmRPcHRpb25zOwotICAgIGJvb2wgd3JhcEFyb3Vu
ZCA9IGZhbHNlOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID49IDIpIHsKLSAgICAgICAgdmVj
dG9yPHN0cmluZz4gb3B0aW9uc0FycmF5ID0gYXJndW1lbnRzWzFdLnRvU3RyaW5nVmVjdG9yKCk7
Ci0gICAgICAgIGZpbmRPcHRpb25zLm1hdGNoQ2FzZSA9IHRydWU7Ci0KLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBvcHRpb25zQXJyYXkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBvcHRpb24gPSBvcHRpb25zQXJyYXlbaV07Ci0gICAgICAgICAg
ICAvLyBGSVhNRTogU3VwcG9ydCBhbGwgdGhlIG9wdGlvbnMsIHNvIHdlIGNhbiBydW4gZmluZFN0
cmluZy5odG1sIHRvby4KLSAgICAgICAgICAgIGlmIChvcHRpb24gPT0gIkNhc2VJbnNlbnNpdGl2
ZSIpCi0gICAgICAgICAgICAgICAgZmluZE9wdGlvbnMubWF0Y2hDYXNlID0gZmFsc2U7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChvcHRpb24gPT0gIkJhY2t3YXJkcyIpCi0gICAgICAgICAgICAgICAg
ZmluZE9wdGlvbnMuZm9yd2FyZCA9IGZhbHNlOwotICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9u
ID09ICJXcmFwQXJvdW5kIikKLSAgICAgICAgICAgICAgICB3cmFwQXJvdW5kID0gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIFdlYkZyYW1lKiBmcmFtZSA9IG1fd2ViVmlldy0+bWFpbkZy
YW1lKCk7Ci0gICAgY29uc3QgYm9vbCBmaW5kUmVzdWx0ID0gZnJhbWUtPmZpbmQoMCwgY3BwVmFy
aWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSksIGZpbmRPcHRpb25zLCB3cmFwQXJvdW5kLCAw
KTsKLSAgICByZXN1bHQtPnNldChmaW5kUmVzdWx0KTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpz
ZXRWYWx1ZUZvclVzZXIoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSAhPSAyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJFbGVtZW50IGVsZW1lbnQ7
Ci0gICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0RWxlbWVudChhcmd1bWVudHNbMF0udmFsdWUub2Jq
ZWN0VmFsdWUsICZlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViSW5wdXRFbGVt
ZW50KiBpbnB1dCA9IHRvV2ViSW5wdXRFbGVtZW50KCZlbGVtZW50KTsKLSAgICBpZiAoIWlucHV0
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnB1dC0+c2V0VmFsdWUoY3BwVmFyaWFudFRvV2Vi
U3RyaW5nKGFyZ3VtZW50c1sxXSksIHRydWUpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmVuYWJs
ZUZpeGVkTGF5b3V0TW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpIDwgIDEgfHwgIWFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGJvb2wgZW5hYmxlRml4ZWRMYXlvdXQgPSBhcmd1bWVudHNbMF0udG9Cb29sZWFuKCk7
Ci0gICAgbV93ZWJWaWV3LT5lbmFibGVGaXhlZExheW91dE1vZGUoZW5hYmxlRml4ZWRMYXlvdXQp
OwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldEZpeGVkTGF5b3V0U2l6ZShjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgIDIgfHwgIWFyZ3VtZW50c1sw
XS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGludCB3aWR0aCA9IGFyZ3VtZW50c1swXS50b0ludDMyKCk7Ci0gICAgaW50IGhlaWdo
dCA9IGFyZ3VtZW50c1sxXS50b0ludDMyKCk7Ci0gICAgbV93ZWJWaWV3LT5zZXRGaXhlZExheW91
dFNpemUoV2ViU2l6ZSh3aWR0aCwgaGVpZ2h0KSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2Vs
ZWN0aW9uQXNNYXJrdXAoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChtX3dlYlZpZXctPm1haW5GcmFtZSgpLT5z
ZWxlY3Rpb25Bc01hcmt1cCgpLnV0ZjgoKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0VGV4
dFN1YnBpeGVsUG9zaXRpb25pbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChB
TkRST0lEKQotICAgIC8vIFNpbmNlIEZvbnRDb25maWcgZG9lc24ndCBwcm92aWRlIGEgdmFyaWFi
bGUgdG8gY29udHJvbCBzdWJwaXhlbCBwb3NpdGlvbmluZywgd2UnbGwgZmFsbCBiYWNrCi0gICAg
Ly8gdG8gc2V0dGluZyBpdCBnbG9iYWxseSBmb3IgYWxsIGZvbnRzLgotICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIFdlYkZvbnRS
ZW5kZXJpbmc6OnNldFN1YnBpeGVsUG9zaXRpb25pbmcoYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xW
YWx1ZSk7Ci0jZW5kaWYKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVu
bmVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV93ZWJWaWV3LT5zZXRWaXNpYmlsaXR5U3Rh
dGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGUsIHRydWUpOwotfQotCi12b2lkIFRlc3RS
dW5uZXI6OnNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYm
IGFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHN0cmluZyBuZXdWaXNpYmlsaXR5
ID0gYXJndW1lbnRzWzBdLnRvU3RyaW5nKCk7Ci0gICAgICAgIGlmIChuZXdWaXNpYmlsaXR5ID09
ICJ2aXNpYmxlIikKLSAgICAgICAgICAgIG1fd2ViVmlldy0+c2V0VmlzaWJpbGl0eVN0YXRlKFdl
YlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlLCBmYWxzZSk7Ci0gICAgICAgIGVsc2UgaWYgKG5l
d1Zpc2liaWxpdHkgPT0gImhpZGRlbiIpCi0gICAgICAgICAgICBtX3dlYlZpZXctPnNldFZpc2li
aWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRlSGlkZGVuLCBmYWxzZSk7Ci0gICAgICAg
IGVsc2UgaWYgKG5ld1Zpc2liaWxpdHkgPT0gInByZXJlbmRlciIpCi0gICAgICAgICAgICBtX3dl
YlZpZXctPnNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRlUHJlcmVuZGVy
LCBmYWxzZSk7Ci0gICAgICAgIGVsc2UgaWYgKG5ld1Zpc2liaWxpdHkgPT0gInByZXZpZXciKQot
ICAgICAgICAgICAgbV93ZWJWaWV3LT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxp
dHlTdGF0ZVByZXZpZXcsIGZhbHNlKTsKLSAgICB9Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0
VGV4dERpcmVjdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMu
c2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBNYXAgYSBkaXJlY3Rpb24gbmFtZSB0byBhIFdlYlRleHREaXJlY3Rpb24gdmFs
dWUuCi0gICAgc3RkOjpzdHJpbmcgZGlyZWN0aW9uTmFtZSA9IGFyZ3VtZW50c1swXS50b1N0cmlu
ZygpOwotICAgIFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247Ci0gICAgaWYgKGRp
cmVjdGlvbk5hbWUgPT0gImF1dG8iKQotICAgICAgICBkaXJlY3Rpb24gPSBXZWJLaXQ6OldlYlRl
eHREaXJlY3Rpb25EZWZhdWx0OwotICAgIGVsc2UgaWYgKGRpcmVjdGlvbk5hbWUgPT0gInJ0bCIp
Ci0gICAgICAgIGRpcmVjdGlvbiA9IFdlYktpdDo6V2ViVGV4dERpcmVjdGlvblJpZ2h0VG9MZWZ0
OwotICAgIGVsc2UgaWYgKGRpcmVjdGlvbk5hbWUgPT0gImx0ciIpCi0gICAgICAgIGRpcmVjdGlv
biA9IFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbkxlZnRUb1JpZ2h0OwotICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV93ZWJWaWV3LT5zZXRUZXh0RGlyZWN0aW9uKGRpcmVjdGlvbik7
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6dGV4dFN1cnJvdW5kaW5nTm9kZShjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgNCB8fCAhYXJndW1lbnRzWzBd
LmlzT2JqZWN0KCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMl0u
aXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzNdLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFdlYk5vZGUgbm9kZTsKLSAgICBpZiAoIVdlYkJpbmRpbmdzOjpnZXROb2RlKGFyZ3Vt
ZW50c1swXS52YWx1ZS5vYmplY3RWYWx1ZSwgJm5vZGUpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobm9kZS5pc051bGwoKSB8fCAhbm9kZS5pc1RleHROb2RlKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFdlYlBvaW50IHBvaW50KGFyZ3VtZW50c1sxXS50b0ludDMyKCksIGFyZ3VtZW50
c1syXS50b0ludDMyKCkpOwotICAgIHVuc2lnbmVkIG1heExlbmd0aCA9IGFyZ3VtZW50c1szXS50
b0ludDMyKCk7Ci0KLSAgICBXZWJTdXJyb3VuZGluZ1RleHQgc3Vycm91bmRpbmdUZXh0OwotICAg
IHN1cnJvdW5kaW5nVGV4dC5pbml0aWFsaXplKG5vZGUsIHBvaW50LCBtYXhMZW5ndGgpOwotICAg
IGlmIChzdXJyb3VuZGluZ1RleHQuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJl
c3VsdC0+c2V0KHN1cnJvdW5kaW5nVGV4dC50ZXh0Q29udGVudCgpLnV0ZjgoKSk7Ci19Ci0KLXZv
aWQgVGVzdFJ1bm5lcjo6ZHVtcFJlc291cmNlUmVxdWVzdFByaW9yaXRpZXMoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX3Nob3Vs
ZER1bXBSZXNvdXJjZVByaW9yaXRpZXMgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwot
fQotCi12b2lkIFRlc3RSdW5uZXI6OmVuYWJsZUF1dG9SZXNpemVNb2RlKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgIT0gNCkgewotICAgICAgICByZXN1bHQtPnNldChmYWxzZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaW50IG1pbldpZHRoID0gY3BwVmFyaWFudFRvSW50MzIoYXJn
dW1lbnRzWzBdKTsKLSAgICBpbnQgbWluSGVpZ2h0ID0gY3BwVmFyaWFudFRvSW50MzIoYXJndW1l
bnRzWzFdKTsKLSAgICBXZWJLaXQ6OldlYlNpemUgbWluU2l6ZShtaW5XaWR0aCwgbWluSGVpZ2h0
KTsKLQotICAgIGludCBtYXhXaWR0aCA9IGNwcFZhcmlhbnRUb0ludDMyKGFyZ3VtZW50c1syXSk7
Ci0gICAgaW50IG1heEhlaWdodCA9IGNwcFZhcmlhbnRUb0ludDMyKGFyZ3VtZW50c1szXSk7Ci0g
ICAgV2ViS2l0OjpXZWJTaXplIG1heFNpemUobWF4V2lkdGgsIG1heEhlaWdodCk7Ci0KLSAgICBt
X3dlYlZpZXctPmVuYWJsZUF1dG9SZXNpemVNb2RlKG1pblNpemUsIG1heFNpemUpOwotICAgIHJl
c3VsdC0+c2V0KHRydWUpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmRpc2FibGVBdXRvUmVzaXpl
TW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9MikgewotICAgICAgICByZXN1bHQtPnNl
dChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaW50IG5ld1dpZHRoID0gY3Bw
VmFyaWFudFRvSW50MzIoYXJndW1lbnRzWzBdKTsKLSAgICBpbnQgbmV3SGVpZ2h0ID0gY3BwVmFy
aWFudFRvSW50MzIoYXJndW1lbnRzWzFdKTsKLSAgICBXZWJLaXQ6OldlYlNpemUgbmV3U2l6ZShu
ZXdXaWR0aCwgbmV3SGVpZ2h0KTsKLQotICAgIG1fZGVsZWdhdGUtPnNldENsaWVudFdpbmRvd1Jl
Y3QoV2ViUmVjdCgwLCAwLCBuZXdTaXplLndpZHRoLCBuZXdTaXplLmhlaWdodCkpOwotICAgIG1f
d2ViVmlldy0+ZGlzYWJsZUF1dG9SZXNpemVNb2RlKCk7Ci0gICAgbV93ZWJWaWV3LT5yZXNpemUo
bmV3U2l6ZSk7Ci0gICAgcmVzdWx0LT5zZXQodHJ1ZSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6
c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPCA2IHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkgfHwgIWFyZ3Vt
ZW50c1sxXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMl0uaXNCb29sKCkgfHwgIWFyZ3VtZW50
c1szXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbNF0uaXNCb29sKCkgfHwgIWFyZ3VtZW50c1s1
XS5pc051bWJlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJEZXZpY2VPcmllbnRhdGlv
biBvcmllbnRhdGlvbjsKLSAgICBvcmllbnRhdGlvbi5zZXROdWxsKGZhbHNlKTsKLSAgICBpZiAo
YXJndW1lbnRzWzBdLnRvQm9vbGVhbigpKQotICAgICAgICBvcmllbnRhdGlvbi5zZXRBbHBoYShh
cmd1bWVudHNbMV0udG9Eb3VibGUoKSk7Ci0gICAgaWYgKGFyZ3VtZW50c1syXS50b0Jvb2xlYW4o
KSkKLSAgICAgICAgb3JpZW50YXRpb24uc2V0QmV0YShhcmd1bWVudHNbM10udG9Eb3VibGUoKSk7
Ci0gICAgaWYgKGFyZ3VtZW50c1s0XS50b0Jvb2xlYW4oKSkKLSAgICAgICAgb3JpZW50YXRpb24u
c2V0R2FtbWEoYXJndW1lbnRzWzVdLnRvRG91YmxlKCkpOwotCi0gICAgLy8gTm90ZSB0aGF0IHdl
IG9ubHkgY2FsbCBzZXRPcmllbnRhdGlvbiBvbiB0aGUgbWFpbiBwYWdlJ3MgbW9jayBzaW5jZSB0
aGlzCi0gICAgLy8gdGVzdHMgcmVxdWlyZS4gSWYgbmVjZXNzYXJ5LCB3ZSBjb3VsZCBnZXQgYSBs
aXN0IG9mIFdlYlZpZXdIb3N0cyBmcm9tIHRoCi0gICAgLy8gY2FsbCBzZXRPcmllbnRhdGlvbiBv
biBlYWNoIERldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay4KLSAgICBtX3Byb3h5LT5kZXZpY2VP
cmllbnRhdGlvbkNsaWVudE1vY2soKS0+c2V0T3JpZW50YXRpb24ob3JpZW50YXRpb24pOwotfQot
Ci12b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpIHsKLSAgICAgICAgbV9k
ZWxlZ2F0ZS0+cHJlZmVyZW5jZXMoKS0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IGFyZ3VtZW50
c1swXS52YWx1ZS5ib29sVmFsdWUgPyBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24gOiBXZWJVUkwo
KTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+YXBwbHlQcmVmZXJlbmNlcygpOwotICAgIH0KLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVl
dExvY2F0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5p
c1N0cmluZygpKSB7Ci0gICAgICAgIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IG1fZGVsZWdh
dGUtPmxvY2FsRmlsZVRvRGF0YVVSTChtX2RlbGVnYXRlLT5yZXdyaXRlTGF5b3V0VGVzdHNVUkwo
YXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJlZmVyZW5j
ZXMoKS0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsK
LSAgICAgICAgbV9kZWxlZ2F0ZS0+YXBwbHlQcmVmZXJlbmNlcygpOwotICAgIH0KLSAgICByZXN1
bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRBdXRob3JBbmRVc2VyU3R5
bGVzRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0u
aXNCb29sKCkpIHsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJlZmVyZW5jZXMoKS0+YXV0aG9yQW5k
VXNlclN0eWxlc0VuYWJsZWQgPSBhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlOwotICAgICAg
ICBtX2RlbGVnYXRlLT5hcHBseVByZWZlcmVuY2VzKCk7Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0g
ICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgewot
ICAgICAgICBib29sIGJsb2NrUG9wdXBzID0gYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpOwotICAg
ICAgICBtX2RlbGVnYXRlLT5wcmVmZXJlbmNlcygpLT5qYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NB
dXRvbWF0aWNhbGx5ID0gIWJsb2NrUG9wdXBzOwotICAgICAgICBtX2RlbGVnYXRlLT5hcHBseVBy
ZWZlcmVuY2VzKCk7Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRl
c3RSdW5uZXI6OnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7Ci0gICAgICAgIG1fZGVs
ZWdhdGUtPnByZWZlcmVuY2VzKCktPmphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQgPSBhcmd1
bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlOwotICAgICAgICBtX2RlbGVnYXRlLT5hcHBseVByZWZl
cmVuY2VzKCk7Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RS
dW5uZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAw
ICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgewotICAgICAgICBtX2RlbGVnYXRlLT5wcmVmZXJl
bmNlcygpLT5YU1NBdWRpdG9yRW5hYmxlZCA9IGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWU7
Ci0gICAgICAgIG1fZGVsZWdhdGUtPmFwcGx5UHJlZmVyZW5jZXMoKTsKLSAgICB9Ci0gICAgcmVz
dWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxsb3dVbml2ZXJzYWxB
Y2Nlc3NGcm9tRmlsZVVSTHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1l
bnRzWzBdLmlzQm9vbCgpKSB7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByZWZlcmVuY2VzKCktPmFs
bG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzID0gYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xW
YWx1ZTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+YXBwbHlQcmVmZXJlbmNlcygpOwotICAgIH0KLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd0ZpbGVB
Y2Nlc3NGcm9tRmlsZVVSTHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1l
bnRzWzBdLmlzQm9vbCgpKSB7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByZWZlcmVuY2VzKCktPmFs
bG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyA9IGFyZ3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWU7
Ci0gICAgICAgIG1fZGVsZWdhdGUtPmFwcGx5UHJlZmVyZW5jZXMoKTsKLSAgICB9Ci0gICAgcmVz
dWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6b3ZlcnJpZGVQcmVmZXJlbmNl
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMiB8
fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0cmlu
ZyBrZXkgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKLSAgICBDcHBWYXJpYW50IHZhbHVlID0g
YXJndW1lbnRzWzFdOwotICAgIFdlYlByZWZlcmVuY2VzKiBwcmVmcyA9IG1fZGVsZWdhdGUtPnBy
ZWZlcmVuY2VzKCk7Ci0gICAgaWYgKGtleSA9PSAiV2ViS2l0RGVmYXVsdEZvbnRTaXplIikKLSAg
ICAgICAgcHJlZnMtPmRlZmF1bHRGb250U2l6ZSA9IGNwcFZhcmlhbnRUb0ludDMyKHZhbHVlKTsK
LSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdE1pbmltdW1Gb250U2l6ZSIpCi0gICAgICAgIHBy
ZWZzLT5taW5pbXVtRm9udFNpemUgPSBjcHBWYXJpYW50VG9JbnQzMih2YWx1ZSk7Ci0gICAgZWxz
ZSBpZiAoa2V5ID09ICJXZWJLaXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZSIpCi0gICAgICAgIHBy
ZWZzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSA9IGNwcFZhcmlhbnRUb1dlYlN0cmluZyh2YWx1
ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZCIpCi0gICAg
ICAgIHByZWZzLT5qYXZhU2NyaXB0RW5hYmxlZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwot
ICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0U3VwcG9ydHNNdWx0aXBsZVdpbmRvd3MiKQotICAg
ICAgICBwcmVmcy0+c3VwcG9ydHNNdWx0aXBsZVdpbmRvd3MgPSBjcHBWYXJpYW50VG9Cb29sKHZh
bHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdERpc3BsYXlJbWFnZXNLZXkiKQotICAg
ICAgICBwcmVmcy0+bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5ID0gY3BwVmFyaWFudFRvQm9vbCh2
YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRQbHVnaW5zRW5hYmxlZCIpCi0gICAg
ICAgIHByZWZzLT5wbHVnaW5zRW5hYmxlZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwotICAg
IGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0SmF2YUVuYWJsZWQiKQotICAgICAgICBwcmVmcy0+amF2
YUVuYWJsZWQgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0g
IldlYktpdFVzZXNQYWdlQ2FjaGVQcmVmZXJlbmNlS2V5IikKLSAgICAgICAgcHJlZnMtPnVzZXNQ
YWdlQ2FjaGUgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0g
IldlYktpdFBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2luc1ByZWZlcmVuY2VLZXkiKQotICAgICAgICBw
cmVmcy0+cGFnZUNhY2hlU3VwcG9ydHNQbHVnaW5zID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7
Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVu
YWJsZWQiKQotICAgICAgICBwcmVmcy0+b2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVk
ID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRU
YWJUb0xpbmtzUHJlZmVyZW5jZUtleSIpCi0gICAgICAgIHByZWZzLT50YWJzVG9MaW5rcyA9IGNw
cFZhcmlhbnRUb0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0V2ViR0xF
bmFibGVkIikKLSAgICAgICAgcHJlZnMtPmV4cGVyaW1lbnRhbFdlYkdMRW5hYmxlZCA9IGNwcFZh
cmlhbnRUb0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0Q1NTUmVnaW9u
c0VuYWJsZWQiKQotICAgICAgICBwcmVmcy0+ZXhwZXJpbWVudGFsQ1NTUmVnaW9uc0VuYWJsZWQg
PSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdENT
U0dyaWRMYXlvdXRFbmFibGVkIikKLSAgICAgICAgcHJlZnMtPmV4cGVyaW1lbnRhbENTU0dyaWRM
YXlvdXRFbmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5
ID09ICJXZWJLaXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQiKQotICAgICAgICBwcmVmcy0+aHlw
ZXJsaW5rQXVkaXRpbmdFbmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxz
ZSBpZiAoa2V5ID09ICJXZWJLaXRFbmFibGVDYXJldEJyb3dzaW5nIikKLSAgICAgICAgcHJlZnMt
PmNhcmV0QnJvd3NpbmdFbmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxz
ZSBpZiAoa2V5ID09ICJXZWJLaXRBbGxvd0Rpc3BsYXlpbmdJbnNlY3VyZUNvbnRlbnQiKQotICAg
ICAgICBwcmVmcy0+YWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQgPSBjcHBWYXJpYW50VG9C
b29sKHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdEFsbG93UnVubmluZ0luc2Vj
dXJlQ29udGVudCIpCi0gICAgICAgIHByZWZzLT5hbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVu
dCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0
Q1NTQ3VzdG9tRmlsdGVyRW5hYmxlZCIpCi0gICAgICAgIHByZWZzLT5jc3NDdXN0b21GaWx0ZXJF
bmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJX
ZWJLaXRTaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiIpCi0gICAgICAgIHByZWZzLT5zaG91
bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwotICAg
IGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0V2ViQXVkaW9FbmFibGVkIikKLSAgICAgICAgV0VCS0lU
X0FTU0VSVChjcHBWYXJpYW50VG9Cb29sKHZhbHVlKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0
cmluZyBtZXNzYWdlKCJJbnZhbGlkIG5hbWUgZm9yIHByZWZlcmVuY2U6ICIpOwotICAgICAgICBt
ZXNzYWdlLmFwcGVuZChrZXkpOwotICAgICAgICBwcmludEVycm9yTWVzc2FnZShtZXNzYWdlKTsK
LSAgICB9Ci0gICAgbV9kZWxlZ2F0ZS0+YXBwbHlQcmVmZXJlbmNlcygpOwotfQotCi12b2lkIFRl
c3RSdW5uZXI6OnNldFBsdWdpbnNFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAw
ICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgewotICAgICAgICBtX2RlbGVnYXRlLT5wcmVmZXJl
bmNlcygpLT5wbHVnaW5zRW5hYmxlZCA9IGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKTsKLSAgICAg
ICAgbV9kZWxlZ2F0ZS0+YXBwbHlQcmVmZXJlbmNlcygpOwotICAgIH0KLSAgICByZXN1bHQtPnNl
dE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzaG93V2ViSW5zcGVjdG9yKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBzaG93RGV2VG9vbHMo
KTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpjbG9zZVdl
Ykluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICBtX2RlbGVnYXRlLT5jbG9zZURldlRvb2xzKCk7Ci0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJn
dW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpKQotICAgICAg
ICByZXR1cm47Ci0gICAgbV9kZWxlZ2F0ZS0+ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihhcmd1bWVu
dHNbMF0udG9JbnQzMigpLCBhcmd1bWVudHNbMV0udG9TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgVGVz
dFJ1bm5lcjo6Y2xlYXJBbGxEYXRhYmFzZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBt
X2RlbGVnYXRlLT5jbGVhckFsbERhdGFiYXNlcygpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNl
dERhdGFiYXNlUXVvdGEoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoKGFyZ3VtZW50
cy5zaXplKCkgPj0gMSkgJiYgYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkpCi0gICAgICAgIG1fZGVs
ZWdhdGUtPnNldERhdGFiYXNlUXVvdGEoYXJndW1lbnRzWzBdLnRvSW50MzIoKSk7Ci19Ci0KLXZv
aWQgVGVzdFJ1bm5lcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMu
c2l6ZSgpID4gMCkKLSAgICAgICAgbV9kZWxlZ2F0ZS0+c2V0QWNjZXB0QWxsQ29va2llcyhjcHBW
YXJpYW50VG9Cb29sKGFyZ3VtZW50c1swXSkpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci12b2lkIFRlc3RSdW5uZXI6OnNldFdpbmRvd0lzS2V5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgbV9kZWxlZ2F0ZS0+c2V0
Rm9jdXMobV9wcm94eSwgYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZSk7Ci0gICAgcmVzdWx0
LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDw9IDAgfHwg
IWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZXN1bHQt
PnNldChtX2RlbGVnYXRlLT5wYXRoVG9Mb2NhbFJlc291cmNlKGFyZ3VtZW50c1swXS50b1N0cmlu
ZygpKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAh
YXJndW1lbnRzWzFdLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHZh
bHVlID0gYXJndW1lbnRzWzBdLnZhbHVlLmRvdWJsZVZhbHVlOwotICAgIG1fZGVsZWdhdGUtPnNl
dERldmljZVNjYWxlRmFjdG9yKHZhbHVlKTsKLSAgICBtX3Byb3h5LT5kaXNjYXJkQmFja2luZ1N0
b3JlKCk7Ci0KLSAgICBhdXRvX3B0cjxDcHBWYXJpYW50PiBjYWxsYmFja0FyZ3VtZW50cyhuZXcg
Q3BwVmFyaWFudCgpKTsKLSAgICBjYWxsYmFja0FyZ3VtZW50cy0+c2V0KGFyZ3VtZW50c1sxXSk7
Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgbV9kZWxlZ2F0ZS0+cG9zdFRhc2sobmV3IElu
dm9rZUNhbGxiYWNrVGFzayh0aGlzLCBjYWxsYmFja0FyZ3VtZW50cykpOwotfQotCi12b2lkIFRl
c3RSdW5uZXI6OnNldFBPU0lYTG9jYWxlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPT0gMSAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKLSAgICAg
ICAgbV9kZWxlZ2F0ZS0+c2V0TG9jYWxlKGFyZ3VtZW50c1swXS50b1N0cmluZygpKTsKLX0KLQot
dm9pZCBUZXN0UnVubmVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0cyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIHJlc3VsdC0+c2V0KG1fcHJveHktPmdlb2xvY2F0aW9uQ2xpZW50TW9jaygpLT5u
dW1iZXJPZlBlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMoKSk7Ci19Ci0KLS8vIEZJWE1FOiBGb3Ig
Z3JlYXRlciB0ZXN0IGZsZXhpYmlsaXR5LCB3ZSBzaG91bGQgYmUgYWJsZSB0byBzZXQgZWFjaCBw
YWdlJ3MgZ2VvbG9jYXRpb24gbW9jayBpbmRpdmlkdWFsbHkuCi0vLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIzNjgKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0R2VvbG9j
YXRpb25QZXJtaXNzaW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBjb25zdCB2ZWN0b3I8V2ViVGVzdFByb3h5QmFzZSo+JiB3aW5kb3dMaXN0ID0gbV90ZXN0
SW50ZXJmYWNlcy0+d2luZG93TGlzdCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3
aW5kb3dMaXN0LnNpemUoKTsgKytpKQotICAgICAgICB3aW5kb3dMaXN0LmF0KGkpLT5nZW9sb2Nh
dGlvbkNsaWVudE1vY2soKS0+c2V0UGVybWlzc2lvbihhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkp
OwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAzIHx8ICFhcmd1
bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkgfHwgIWFyZ3Vt
ZW50c1syXS5pc051bWJlcigpKQotICAgICAgICByZXR1cm47Ci0gICAgY29uc3QgdmVjdG9yPFdl
YlRlc3RQcm94eUJhc2UqPiYgd2luZG93TGlzdCA9IG1fdGVzdEludGVyZmFjZXMtPndpbmRvd0xp
c3QoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2luZG93TGlzdC5zaXplKCk7ICsr
aSkKLSAgICAgICAgd2luZG93TGlzdC5hdChpKS0+Z2VvbG9jYXRpb25DbGllbnRNb2NrKCktPnNl
dFBvc2l0aW9uKGFyZ3VtZW50c1swXS50b0RvdWJsZSgpLCBhcmd1bWVudHNbMV0udG9Eb3VibGUo
KSwgYXJndW1lbnRzWzJdLnRvRG91YmxlKCkpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldE1v
Y2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0
cmluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgY29uc3QgdmVjdG9yPFdlYlRlc3RQcm94eUJh
c2UqPiYgd2luZG93TGlzdCA9IG1fdGVzdEludGVyZmFjZXMtPndpbmRvd0xpc3QoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2luZG93TGlzdC5zaXplKCk7ICsraSkKLSAgICAgICAg
d2luZG93TGlzdC5hdChpKS0+Z2VvbG9jYXRpb25DbGllbnRNb2NrKCktPnNldFBvc2l0aW9uVW5h
dmFpbGFibGVFcnJvcihXZWJTdHJpbmc6OmZyb21VVEY4KGFyZ3VtZW50c1swXS50b1N0cmluZygp
KSk7Ci19Ci0KLSNpZiBFTkFCTEVfTk9USUZJQ0FUSU9OUwotdm9pZCBUZXN0UnVubmVyOjpncmFu
dFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAx
IHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgewotICAgICAgICByZXN1bHQtPnNldChmYWxz
ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9ub3RpZmljYXRpb25QcmVzZW50ZXIt
PmdyYW50UGVybWlzc2lvbihXZWJTdHJpbmc6OmZyb21VVEY4KGFyZ3VtZW50c1swXS50b1N0cmlu
ZygpKSk7Ci0gICAgcmVzdWx0LT5zZXQodHJ1ZSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2lt
dWxhdGVMZWdhY3lXZWJOb3RpZmljYXRpb25DbGljayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
ICE9IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0
KGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICByZXN1bHQtPnNldChtX25vdGlm
aWNhdGlvblByZXNlbnRlci0+c2ltdWxhdGVDbGljayhXZWJTdHJpbmc6OmZyb21VVEY4KGFyZ3Vt
ZW50c1swXS50b1N0cmluZygpKSkpOwotfQotI2VuZGlmCi0KLXZvaWQgVGVzdFJ1bm5lcjo6YWRk
TW9ja1NwZWVjaElucHV0UmVzdWx0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgPCAzIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAhYXJndW1l
bnRzWzFdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1syXS5pc1N0cmluZygpKQotICAgICAgICBy
ZXR1cm47Ci0KLSNpZiBFTkFCTEVfSU5QVVRfU1BFRUNICi0gICAgbV9wcm94eS0+c3BlZWNoSW5w
dXRDb250cm9sbGVyTW9jaygpLT5hZGRNb2NrUmVjb2duaXRpb25SZXN1bHQoV2ViU3RyaW5nOjpm
cm9tVVRGOChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSksIGFyZ3VtZW50c1sxXS50b0RvdWJsZSgp
LCBXZWJTdHJpbmc6OmZyb21VVEY4KGFyZ3VtZW50c1syXS50b1N0cmluZygpKSk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1l
bnRzWzBdLmlzQm9vbCgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEVfSU5QVVRfU1BF
RUNICi0gICAgbV9wcm94eS0+c3BlZWNoSW5wdXRDb250cm9sbGVyTW9jaygpLT5zZXREdW1wUmVj
dChhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOwotI2VuZGlmCi19Ci0KLXZvaWQgVGVzdFJ1bm5l
cjo6YWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmco
KSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
cHJveHktPnNwZWVjaFJlY29nbml6ZXJNb2NrKCktPmFkZE1vY2tSZXN1bHQoV2ViU3RyaW5nOjpm
cm9tVVRGOChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSksIGFyZ3VtZW50c1sxXS50b0RvdWJsZSgp
KTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrU3BlZWNoUmVjb2duaXRpb25FcnJvcihj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIgfHwg
IWFyZ3VtZW50c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9wcm94eS0+c3BlZWNoUmVjb2duaXplck1vY2soKS0+c2V0
RXJyb3IoV2ViU3RyaW5nOjpmcm9tVVRGOChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSksIFdlYlN0
cmluZzo6ZnJvbVVURjgoYXJndW1lbnRzWzFdLnRvU3RyaW5nKCkpKTsKLX0KLQotdm9pZCBUZXN0
UnVubmVyOjp3YXNNb2NrU3BlZWNoUmVjb2duaXRpb25BYm9ydGVkKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChtX3Byb3h5LT5z
cGVlY2hSZWNvZ25pemVyTW9jaygpLT53YXNBYm9ydGVkKCkpOwotfQotCi12b2lkIFRlc3RSdW5u
ZXI6OmRpc3BsYXkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICBtX3Byb3h5LT5kaXNwbGF5KCk7Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGxheUludmFsaWRhdGVkUmVnaW9uKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
bV9wcm94eS0+ZGlzcGxheUludmFsaWRhdGVkUmVnaW9uKCk7Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZHVtcEVkaXRpbmdDYWxsYmFja3MoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fZHVtcEVkaXRpbmdD
YWxsYmFja3MgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RS
dW5uZXI6OmR1bXBBc1RleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX2R1bXBBc1RleHQgPSB0cnVlOwotICAgIG1fZ2VuZXJh
dGVQaXhlbFJlc3VsdHMgPSBmYWxzZTsKLQotICAgIC8vIE9wdGlvbmFsIHBhcmFtYXRlciwgZGVz
Y3JpYmluZyB3aGV0aGVyIGl0J3MgYWxsb3dlZCB0byBkdW1wIHBpeGVsIHJlc3VsdHMgaW4gZHVt
cEFzVGV4dCBtb2RlLgotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNb
MF0uaXNCb29sKCkpCi0gICAgICAgIG1fZ2VuZXJhdGVQaXhlbFJlc3VsdHMgPSBhcmd1bWVudHNb
MF0udmFsdWUuYm9vbFZhbHVlOwotCi0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQg
VGVzdFJ1bm5lcjo6ZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fZHVtcENoaWxkRnJhbWVTY3Jv
bGxQb3NpdGlvbnMgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRl
c3RSdW5uZXI6OmR1bXBDaGlsZEZyYW1lc0FzVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9kdW1wQ2hpbGRGcmFtZXNBc1RleHQgPSB0cnVl
OwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmR1bXBJY29u
Q2hhbmdlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0g
ICAgbV9kdW1wSWNvbkNoYW5nZXMgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci12b2lkIFRlc3RSdW5uZXI6OnNldEF1ZGlvRGF0YShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwot
Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNPYmplY3Qo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBwYXNzZWQtaW4gb2JqZWN0
IGlzLCBpbiBmYWN0LCBhbiBBcnJheUJ1ZmZlclZpZXcuCi0gICAgTlBPYmplY3QqIG5wb2JqZWN0
ID0gTlBWQVJJQU5UX1RPX09CSkVDVChhcmd1bWVudHNbMF0pOwotICAgIGlmICghbnBvYmplY3Qp
Ci0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIVdlYkJpbmRpbmdzOjpnZXRBcnJheUJ1ZmZlclZp
ZXcobnBvYmplY3QsICZtX2F1ZGlvRGF0YSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZHVt
cEFzQXVkaW8gPSB0cnVlOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmR1bXBGcmFtZUxvYWRDYWxs
YmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcyA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFj
a3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1f
ZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MgPSB0cnVlOwotICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFN0b3BQcm92aXNpb25hbEZyYW1l
TG9hZHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIG1fc3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcyA9IHRy
dWU7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZHVtcFRpdGxlQ2hhbmdlcyhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9kdW1wVGl0bGVDaGFuZ2Vz
ID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpk
dW1wQ3JlYXRlVmlldyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgbV9kdW1wQ3JlYXRlVmlldyA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2FuT3BlbldpbmRvd3MoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fY2FuT3BlbldpbmRvd3MgPSB0
cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmR1bXBS
ZXNvdXJjZUxvYWRDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIG1fZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcyA9IHRydWU7Ci0gICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZHVtcFJlc291cmNlUmVx
dWVzdENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgbV9kdW1wUmVzb3VyY2VSZXF1ZXN0Q2FsbGJhY2tzID0gdHJ1ZTsKLSAgICByZXN1
bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpkdW1wUmVzb3VyY2VSZXNwb25z
ZU1JTUVUeXBlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgbV9kdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyA9IHRydWU7Ci0gICAgcmVzdWx0
LT5zZXROdWxsKCk7Ci19Ci0KLS8vIE5lZWQgdGhlc2UgY29udmVyc2lvbnMgYmVjYXVzZSB0aGUg
Zm9ybWF0IG9mIHRoZSB2YWx1ZSBmb3IgYm9vbGVhbnMKLS8vIG1heSB2YXJ5IC0gZm9yIGV4YW1w
bGUsIG9uIG1hYyAiMSIgYW5kICIwIiBhcmUgdXNlZCBmb3IgYm9vbGVhbi4KLWJvb2wgVGVzdFJ1
bm5lcjo6Y3BwVmFyaWFudFRvQm9vbChjb25zdCBDcHBWYXJpYW50JiB2YWx1ZSkKLXsKLSAgICBp
ZiAodmFsdWUuaXNCb29sKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oKTsKLSAg
ICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoKTsK
LSAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBzdHJpbmcgdmFsdWVTdHJpbmcg
PSB2YWx1ZS50b1N0cmluZygpOwotICAgICAgICBpZiAodmFsdWVTdHJpbmcgPT0gInRydWUiIHx8
IHZhbHVlU3RyaW5nID09ICIxIikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBp
ZiAodmFsdWVTdHJpbmcgPT0gImZhbHNlIiB8fCB2YWx1ZVN0cmluZyA9PSAiMCIpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHByaW50RXJyb3JNZXNzYWdlKCJJbnZhbGlk
IHZhbHVlLiBFeHBlY3RlZCBib29sZWFuIHZhbHVlLiIpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotaW50MzJfdCBUZXN0UnVubmVyOjpjcHBWYXJpYW50VG9JbnQzMihjb25zdCBDcHBWYXJpYW50
JiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIHZh
bHVlLnRvSW50MzIoKTsKLSAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBzdHJp
bmcgc3RyaW5nU291cmNlID0gdmFsdWUudG9TdHJpbmcoKTsKLSAgICAgICAgY29uc3QgY2hhciog
c291cmNlID0gc3RyaW5nU291cmNlLmRhdGEoKTsKLSAgICAgICAgY2hhciogZW5kOwotICAgICAg
ICBsb25nIG51bWJlciA9IHN0cnRvbChzb3VyY2UsICZlbmQsIDEwKTsKLSAgICAgICAgaWYgKGVu
ZCA9PSBzb3VyY2UgKyBzdHJpbmdTb3VyY2UubGVuZ3RoKCkgJiYgbnVtYmVyID49IG51bWVyaWNf
bGltaXRzPGludDMyX3Q+OjptaW4oKSAmJiBudW1iZXIgPD0gbnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1heCgpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KG51bWJl
cik7Ci0gICAgfQotICAgIHByaW50RXJyb3JNZXNzYWdlKCJJbnZhbGlkIHZhbHVlIGZvciBwcmVm
ZXJlbmNlLiBFeHBlY3RlZCBpbnRlZ2VyIHZhbHVlLiIpOwotICAgIHJldHVybiAwOwotfQotCi1X
ZWJTdHJpbmcgVGVzdFJ1bm5lcjo6Y3BwVmFyaWFudFRvV2ViU3RyaW5nKGNvbnN0IENwcFZhcmlh
bnQmIHZhbHVlKQotewotICAgIGlmICghdmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBwcmlu
dEVycm9yTWVzc2FnZSgiSW52YWxpZCB2YWx1ZSBmb3IgcHJlZmVyZW5jZS4gRXhwZWN0ZWQgc3Ry
aW5nIHZhbHVlLiIpOwotICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7Ci0gICAgfQotICAgIHJl
dHVybiBXZWJTdHJpbmc6OmZyb21VVEY4KHZhbHVlLnRvU3RyaW5nKCkpOwotfQotCi12b2lkIFRl
c3RSdW5uZXI6OnByaW50RXJyb3JNZXNzYWdlKGNvbnN0IHN0cmluZyYgdGV4dCkKLXsKLSAgICBt
X2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uoc3RyaW5nKCJDT05TT0xFIE1FU1NBR0U6ICIpICsgdGV4
dCArICJcbiIpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmZhbGxiYWNrTWV0aG9kKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBwcmludEVycm9yTWVz
c2FnZSgiSmF2YVNjcmlwdCBFUlJPUjogdW5rbm93biBtZXRob2QgY2FsbGVkIG9uIFRlc3RSdW5u
ZXIiKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpub3RJ
bXBsZW1lbnRlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZGlkQWNxdWly
ZVBvaW50ZXJMb2NrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICBkaWRBY3F1aXJlUG9pbnRlckxvY2tJbnRlcm5hbCgpOwotICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmRpZE5vdEFjcXVpcmVQb2ludGVyTG9jayhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgZGlkTm90
QWNxdWlyZVBvaW50ZXJMb2NrSW50ZXJuYWwoKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0K
LQotdm9pZCBUZXN0UnVubmVyOjpkaWRMb3NlUG9pbnRlckxvY2soY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGRpZExvc2VQb2ludGVyTG9ja0ludGVy
bmFsKCk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0
UG9pbnRlckxvY2tXaWxsUmVzcG9uZEFzeW5jaHJvbm91c2x5KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX3BvaW50ZXJMb2NrUGxhbm5lZFJlc3Vs
dCA9IFBvaW50ZXJMb2NrV2lsbFJlc3BvbmRBc3luYzsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRQb2ludGVyTG9ja1dpbGxGYWlsU3luY2hyb25vdXNs
eShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9w
b2ludGVyTG9ja1BsYW5uZWRSZXN1bHQgPSBQb2ludGVyTG9ja1dpbGxGYWlsU3luYzsKLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5oIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjMWFhN2QyNzE0MjRiMzNmNDBhZDZlMzAyMzlkYjQzMmVlYzA0MGYx
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDcwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF3ZWwg
SGFqZGFuIChwaGFqZGFuLmpyQGNocm9taXVtLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUZXN0UnVubmVyX2gKLSNkZWZpbmUg
VGVzdFJ1bm5lcl9oCi0KLSNpbmNsdWRlICJDcHBCb3VuZENsYXNzLmgiCi0jaW5jbHVkZSAiVGVz
dENvbW1vbi5oIgotI2luY2x1ZGUgIldlYkFycmF5QnVmZmVyVmlldy5oIgotI2luY2x1ZGUgIldl
YlRhc2suaCIKLSNpbmNsdWRlICJXZWJUZXN0UnVubmVyLmgiCi0jaW5jbHVkZSAiV2ViVGV4dERp
cmVjdGlvbi5oIgotI2luY2x1ZGUgPGRlcXVlPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRl
IDxwdWJsaWMvV2ViVVJMLmg+Ci0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUgPHN0cmluZz4KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJBcnJheUJ1ZmZlclZpZXc7Ci1jbGFzcyBXZWJO
b3RpZmljYXRpb25QcmVzZW50ZXI7Ci1jbGFzcyBXZWJQZXJtaXNzaW9uQ2xpZW50OwotY2xhc3Mg
V2ViVmlldzsKLX0KLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1jbGFzcyBOb3RpZmlj
YXRpb25QcmVzZW50ZXI7Ci1jbGFzcyBUZXN0SW50ZXJmYWNlczsKLWNsYXNzIFdlYlBlcm1pc3Np
b25zOwotY2xhc3MgV2ViVGVzdERlbGVnYXRlOwotY2xhc3MgV2ViVGVzdFByb3h5QmFzZTsKLQot
Y2xhc3MgVGVzdFJ1bm5lciA6IHB1YmxpYyBXZWJUZXN0UnVubmVyLCBwdWJsaWMgQ3BwQm91bmRD
bGFzcyB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgVGVzdFJ1bm5lcihUZXN0SW50ZXJmYWNlcyop
OwotICAgIHZpcnR1YWwgflRlc3RSdW5uZXIoKTsKLQotICAgIHZvaWQgc2V0RGVsZWdhdGUoV2Vi
VGVzdERlbGVnYXRlKik7Ci0gICAgdm9pZCBzZXRXZWJWaWV3KFdlYktpdDo6V2ViVmlldyosIFdl
YlRlc3RQcm94eUJhc2UqKTsKLQotICAgIHZvaWQgcmVzZXQoKTsKLQotICAgIFdlYlRhc2tMaXN0
KiB0YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rhc2tMaXN0OyB9Ci0KLSAgICB2b2lkIHNldFRlc3RJ
c1J1bm5pbmcoYm9vbCk7Ci0KLSAgICAvLyBXZWJUZXN0UnVubmVyIGltcGxlbWVudGF0aW9uLgot
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cygpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGREdW1wQXNBdWRpbygpIGNvbnN0IE9WRVJSSURFOwotICAg
IHZpcnR1YWwgY29uc3QgV2ViS2l0OjpXZWJBcnJheUJ1ZmZlclZpZXcqIGF1ZGlvRGF0YSgpIGNv
bnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGREdW1wQmFja0ZvcndhcmRMaXN0
KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlBlcm1pc3Npb25DbGll
bnQqIHdlYlBlcm1pc3Npb25zKCkgY29uc3QgT1ZFUlJJREU7Ci0KLSAgICAvLyBNZXRob2RzIHVz
ZWQgYnkgV2ViVGVzdFByb3h5QmFzZS4KLSAgICBib29sIHNob3VsZER1bXBTZWxlY3Rpb25SZWN0
KCkgY29uc3Q7Ci0gICAgYm9vbCB0ZXN0UmVwYWludCgpIGNvbnN0OwotICAgIGJvb2wgc3dlZXBI
b3Jpem9udGFsbHkoKSBjb25zdDsKLSAgICBib29sIGlzUHJpbnRpbmcoKSBjb25zdDsKLSAgICBi
b29sIHNob3VsZER1bXBBc1RleHQoKTsKLSAgICBib29sIHNob3VsZER1bXBDaGlsZEZyYW1lU2Ny
b2xsUG9zaXRpb25zKCkgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGREdW1wQ2hpbGRGcmFtZXNBc1Rl
eHQoKSBjb25zdDsKLSAgICB2b2lkIHNob3dEZXZUb29scygpOwotICAgIHZvaWQgc2V0U2hvdWxk
RHVtcEFzVGV4dChib29sKTsKLSAgICB2b2lkIHNldFNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRz
KGJvb2wpOwotICAgIHZvaWQgc2V0U2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcyhib29sKTsK
LSAgICBib29sIHNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgY29uc3Q7Ci0gICAgYm9vbCBz
aG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGREdW1w
VXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcygpIGNvbnN0OwotICAgIGJvb2wgc3RvcFBy
b3Zpc2lvbmFsRnJhbWVMb2FkcygpIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkRHVtcFRpdGxlQ2hh
bmdlcygpIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkRHVtcEljb25DaGFuZ2VzKCkgY29uc3Q7Ci0g
ICAgYm9vbCBzaG91bGREdW1wQ3JlYXRlVmlldygpIGNvbnN0OwotICAgIGJvb2wgY2FuT3Blbldp
bmRvd3MoKSBjb25zdDsKLSAgICBib29sIHNob3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3Mo
KSBjb25zdDsKLSAgICBib29sIHNob3VsZER1bXBSZXNvdXJjZVJlcXVlc3RDYWxsYmFja3MoKSBj
b25zdDsKLSAgICBib29sIHNob3VsZER1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKCkgY29u
c3Q7Ci0gICAgYm9vbCBzaG91bGREdW1wU3RhdHVzQ2FsbGJhY2tzKCkgY29uc3Q7Ci0gICAgYm9v
bCBzaG91bGREdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKCkgY29uc3Q7Ci0gICAgYm9vbCBk
ZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKCkgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRTdGF5T25Q
YWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VGl0bGVU
ZXh0RGlyZWN0aW9uKFdlYktpdDo6V2ViVGV4dERpcmVjdGlvbik7Ci0gICAgY29uc3Qgc3RkOjpz
ZXQ8c3RkOjpzdHJpbmc+KiBodHRwSGVhZGVyc1RvQ2xlYXIoKSBjb25zdDsKLSAgICBib29sIHNo
b3VsZEJsb2NrUmVkaXJlY3RzKCkgY29uc3Q7Ci0gICAgYm9vbCB3aWxsU2VuZFJlcXVlc3RTaG91
bGRSZXR1cm5OdWxsKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUb3BMb2FkaW5nRnJhbWUoV2ViS2l0
OjpXZWJGcmFtZSosIGJvb2wpOwotICAgIFdlYktpdDo6V2ViRnJhbWUqIHRvcExvYWRpbmdGcmFt
ZSgpIGNvbnN0OwotICAgIHZvaWQgcG9saWN5RGVsZWdhdGVEb25lKCk7Ci0gICAgYm9vbCBwb2xp
Y3lEZWxlZ2F0ZUVuYWJsZWQoKSBjb25zdDsKLSAgICBib29sIHBvbGljeURlbGVnYXRlSXNQZXJt
aXNzaXZlKCkgY29uc3Q7Ci0gICAgYm9vbCBwb2xpY3lEZWxlZ2F0ZVNob3VsZE5vdGlmeURvbmUo
KSBjb25zdDsKLSAgICBib29sIHNob3VsZEludGVyY2VwdFBvc3RNZXNzYWdlKCkgY29uc3Q7Ci0g
ICAgYm9vbCBzaG91bGREdW1wUmVzb3VyY2VQcmlvcml0aWVzKCkgY29uc3Q7Ci0jaWYgRU5BQkxF
X05PVElGSUNBVElPTlMKLSAgICBXZWJLaXQ6OldlYk5vdGlmaWNhdGlvblByZXNlbnRlciogbm90
aWZpY2F0aW9uUHJlc2VudGVyKCkgY29uc3Q7Ci0jZW5kaWYKLSAgICBib29sIHJlcXVlc3RQb2lu
dGVyTG9jaygpOwotICAgIHZvaWQgcmVxdWVzdFBvaW50ZXJVbmxvY2soKTsKLSAgICBib29sIGlz
UG9pbnRlckxvY2tlZCgpOwotCi0gICAgLy8gQSBzaW5nbGUgaXRlbSBpbiB0aGUgd29yayBxdWV1
ZS4KLSAgICBjbGFzcyBXb3JrSXRlbSB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5X
b3JrSXRlbSgpIHsgfQotCi0gICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHN0YXJ0ZWQg
YSBsb2FkLgotICAgICAgICB2aXJ0dWFsIGJvb2wgcnVuKFdlYlRlc3REZWxlZ2F0ZSosIFdlYktp
dDo6V2ViVmlldyopID0gMDsKLSAgICB9OwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBX
b3JrUXVldWU7Ci0KLSAgICAvLyBIZWxwZXIgY2xhc3MgZm9yIG1hbmFnaW5nIGV2ZW50cyBxdWV1
ZWQgYnkgbWV0aG9kcyBsaWtlIHF1ZXVlTG9hZCBvcgotICAgIC8vIHF1ZXVlU2NyaXB0LgotICAg
IGNsYXNzIFdvcmtRdWV1ZSB7Ci0gICAgcHVibGljOgotICAgICAgICBXb3JrUXVldWUoVGVzdFJ1
bm5lciogY29udHJvbGxlcikgOiBtX2Zyb3plbihmYWxzZSksIG1fY29udHJvbGxlcihjb250cm9s
bGVyKSB7IH0KLSAgICAgICAgdmlydHVhbCB+V29ya1F1ZXVlKCk7Ci0gICAgICAgIHZvaWQgcHJv
Y2Vzc1dvcmtTb29uKCk7Ci0KLSAgICAgICAgLy8gUmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBjbGFz
cyBiZXR3ZWVuIHRlc3RzLgotICAgICAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICAgICAgdm9pZCBh
ZGRXb3JrKFdvcmtJdGVtKik7Ci0KLSAgICAgICAgdm9pZCBzZXRGcm96ZW4oYm9vbCBmcm96ZW4p
IHsgbV9mcm96ZW4gPSBmcm96ZW47IH0KLSAgICAgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4g
bV9xdWV1ZS5lbXB0eSgpOyB9Ci0gICAgICAgIFdlYlRhc2tMaXN0KiB0YXNrTGlzdCgpIHsgcmV0
dXJuICZtX3Rhc2tMaXN0OyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIHByb2Nlc3NX
b3JrKCk7Ci0gICAgICAgIGNsYXNzIFdvcmtRdWV1ZVRhc2s6IHB1YmxpYyBXZWJNZXRob2RUYXNr
PFdvcmtRdWV1ZT4gewotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBXb3JrUXVldWVUYXNr
KFdvcmtRdWV1ZSogb2JqZWN0KTogV2ViTWV0aG9kVGFzazxXb3JrUXVldWU+KG9iamVjdCkgeyB9
Ci0gICAgICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxpZCgpIHsgbV9vYmplY3QtPnByb2Nl
c3NXb3JrKCk7IH0KLSAgICAgICAgfTsKLQotICAgICAgICBXZWJUYXNrTGlzdCBtX3Rhc2tMaXN0
OwotICAgICAgICBzdGQ6OmRlcXVlPFdvcmtJdGVtKj4gbV9xdWV1ZTsKLSAgICAgICAgYm9vbCBt
X2Zyb3plbjsKLSAgICAgICAgVGVzdFJ1bm5lciogbV9jb250cm9sbGVyOwotICAgIH07Ci0gICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gTWV0aG9kcyBkZWFsaW5nIHdpdGggdGhlIHRlc3Qg
bG9naWMKLQotICAgIC8vIEJ5IGRlZmF1bHQsIHRlc3RzIGVuZCB3aGVuIHBhZ2UgbG9hZCBpcyBj
b21wbGV0ZS4gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZAotICAgIC8vIHRvIGRlbGF5IHRoZSBjb21w
bGV0aW9uIG9mIHRoZSB0ZXN0IHVudGlsIG5vdGlmeURvbmUgaXMgY2FsbGVkLgotICAgIHZvaWQg
d2FpdFVudGlsRG9uZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAg
dm9pZCBub3RpZnlEb25lKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQot
ICAgIC8vIE1ldGhvZHMgZm9yIGFkZGluZyBhY3Rpb25zIHRvIHRoZSB3b3JrIHF1ZXVlLiBVc2Vk
IGluIGNvbmp1bmN0aW9uIHdpdGgKLSAgICAvLyB3YWl0VW50aWxEb25lL25vdGlmeURvbmUgYWJv
dmUuCi0gICAgdm9pZCBxdWV1ZUJhY2tOYXZpZ2F0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHF1ZXVlRm9yd2FyZE5hdmlnYXRpb24oY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgcXVldWVSZWxvYWQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgcXVldWVMb2FkaW5nU2Ny
aXB0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHF1ZXVl
Tm9uTG9hZGluZ1NjcmlwdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0g
ICAgdm9pZCBxdWV1ZUxvYWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgcXVldWVMb2FkSFRNTFN0cmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7Ci0KLQotICAgIC8vIENhdXNlcyBuYXZpZ2F0aW9uIGFjdGlvbnMganVzdCBwcmlu
dG91dCB0aGUgaW50ZW5kZWQgbmF2aWdhdGlvbiBpbnN0ZWFkCi0gICAgLy8gb2YgdGFraW5nIHlv
dSB0byB0aGUgcGFnZS4gVGhpcyBpcyB1c2VkIGZvciBjYXNlcyBsaWtlIG1haWx0bywgd2hlcmUg
eW91Ci0gICAgLy8gZG9uJ3QgYWN0dWFsbHkgd2FudCB0byBvcGVuIHRoZSBtYWlsIHByb2dyYW0u
Ci0gICAgdm9pZCBzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBEZWxheXMgY29tcGxldGlvbiBvZiB0aGUgdGVzdCB1
bnRpbCB0aGUgcG9saWN5IGRlbGVnYXRlIHJ1bnMuCi0gICAgdm9pZCB3YWl0Rm9yUG9saWN5RGVs
ZWdhdGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gRnVu
Y3Rpb25zIGZvciBkZWFsaW5nIHdpdGggd2luZG93cy4gQnkgZGVmYXVsdCB3ZSBibG9jayBhbGwg
bmV3IHdpbmRvd3MuCi0gICAgdm9pZCB3aW5kb3dDb3VudChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29t
cGxldGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0gICAgLy8gTWV0aG9kcyBpbXBsZW1lbnRlZCBlbnRpcmVseSBpbiB0ZXJt
cyBvZiBjaHJvbWl1bSdzIHB1YmxpYyBXZWJLaXQgQVBJCi0KLSAgICAvLyBNZXRob2QgdGhhdCBj
b250cm9scyB3aGV0aGVyIHByZXNzaW5nIFRhYiBrZXkgY3ljbGVzIHRocm91Z2ggcGFnZSBlbGVt
ZW50cwotICAgIC8vIG9yIGluc2VydHMgYSAnXHQnIGNoYXIgaW4gdGV4dCBhcmVhCi0gICAgdm9p
ZCBzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotCi0gICAgLy8gRXhlY3V0ZXMgYW4gaW50ZXJuYWwgY29tbWFuZCAoc3Vw
ZXJzZXQgb2YgZG9jdW1lbnQuZXhlY0NvbW1hbmQoKSBjb21tYW5kcykuCi0gICAgdm9pZCBleGVj
Q29tbWFuZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBD
aGVja3MgaWYgYW4gaW50ZXJuYWwgY29tbWFuZCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlLgotICAg
IHZvaWQgaXNDb21tYW5kRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0KLSAgICB2b2lkIGNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXREb21haW5SZWxheGF0aW9uRm9yYmlk
ZGVuRm9yVVJMU2NoZW1lKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAg
IHZvaWQgc2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldElzb2xhdGVkV29ybGRDb250ZW50U2VjdXJp
dHlQb2xpY3koY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8g
QWxsb3dzIGxheW91dCB0ZXN0cyB0byBtYW5hZ2Ugb3JpZ2lucycgd2hpdGVsaXN0aW5nLgotICAg
IHZvaWQgYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgcmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50
cnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBjdXJyZW50IHBhZ2UgYm94IGhhcyBjdXN0b20gcGFnZSBzaXplIHN0eWxl
IGZvcgotICAgIC8vIHByaW50aW5nLgotICAgIHZvaWQgaGFzQ3VzdG9tUGFnZVNpemVTdHlsZShj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBGb3JjZXMgdGhl
IHNlbGVjdGlvbiBjb2xvcnMgZm9yIHRlc3RpbmcgdW5kZXIgTGludXguCi0gICAgdm9pZCBmb3Jj
ZVJlZFNlbGVjdGlvbkNvbG9ycyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0KLSAgICAvLyBBZGRzIGEgdXNlciBzY3JpcHQgb3IgdXNlciBzdHlsZSBzaGVldCB0byBiZSBp
bmplY3RlZCBpbnRvIG5ldyBkb2N1bWVudHMuCi0gICAgdm9pZCBhZGRVc2VyU2NyaXB0KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGFkZFVzZXJTdHlsZVNo
ZWV0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIHZvaWQgc3Rh
cnRTcGVlY2hJbnB1dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAg
ICB2b2lkIGZpbmRTdHJpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
Ci0gICAgLy8gRXhwZWN0cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gYmUgYW4gaW5wdXQgZWxlbWVu
dCBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIHN0cmluZyB2YWx1ZS4KLSAgICAvLyBG
b3J3YXJkcyB0aGUgc2V0VmFsdWVGb3JVc2VyKCkgY2FsbCB0byB0aGUgZWxlbWVudC4KLSAgICB2
b2lkIHNldFZhbHVlRm9yVXNlcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0KLSAgICB2b2lkIGVuYWJsZUZpeGVkTGF5b3V0TW9kZShjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRGaXhlZExheW91dFNpemUoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgdm9pZCBzZWxlY3Rpb25Bc01hcmt1cChj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBFbmFibGVzIG9y
IGRpc2FibGVzIHN1YnBpeGVsIHBvc2l0aW9uaW5nIChpLmUuIGZyYWN0aW9uYWwgWCBwb3NpdGlv
bnMgZm9yCi0gICAgLy8gZ2x5cGhzKSBpbiB0ZXh0IHJlbmRlcmluZyBvbiBMaW51eC4gU2luY2Ug
dGhpcyBtZXRob2QgY2hhbmdlcyBnbG9iYWwKLSAgICAvLyBzZXR0aW5ncywgdGVzdHMgdGhhdCBj
YWxsIGl0IG11c3QgdXNlIHRoZWlyIG93biBjdXN0b20gZm9udCBmYW1pbHkgZm9yCi0gICAgLy8g
YWxsIHRleHQgdGhhdCB0aGV5IHJlbmRlci4gSWYgbm90LCBhbiBhbHJlYWR5LWNhY2hlZCBzdHls
ZSB3aWxsIGJlIHVzZWQsCi0gICAgLy8gcmVzdWx0aW5nIGluIHRoZSBjaGFuZ2VkIHNldHRpbmcg
YmVpbmcgaWdub3JlZC4KLSAgICB2b2lkIHNldFRleHRTdWJwaXhlbFBvc2l0aW9uaW5nKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFN3aXRjaCB0aGUgdmlz
aWJpbGl0eSBvZiB0aGUgcGFnZS4KLSAgICB2b2lkIHNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHJlc2V0UGFnZVZpc2liaWxp
dHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gQ2hhbmdl
cyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBmb2N1c2VkIGVsZW1lbnQuCi0gICAgdm9pZCBzZXRUZXh0
RGlyZWN0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8v
IFJldHJpZXZlcyB0aGUgdGV4dCBzdXJyb3VuZGluZyBhIHBvc2l0aW9uIGluIGEgdGV4dCBub2Rl
LgotICAgIC8vIEV4cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgdGV4dCBub2RlLCB0
aGUgc2Vjb25kIGFuZCB0aGlyZCB0byBiZQotICAgIC8vIHBvaW50IGNvb3JkaW5hdGVzIHJlbGF0
aXZlIHRvIHRoZSBub2RlIGFuZCB0aGUgZm91cnRoIHRoZSBtYXhpbXVtIHRleHQKLSAgICAvLyBs
ZW5ndGggdG8gcmV0cmlldmUuCi0gICAgdm9pZCB0ZXh0U3Vycm91bmRpbmdOb2RlKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIHZvaWQgZW5hYmxlQXV0b1Jlc2l6
ZU1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZGlz
YWJsZUF1dG9SZXNpemVNb2RlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LQotICAgIC8vIERldmljZU9yaWVudGF0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zCi0gICAgdm9pZCBz
ZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotCi0gICAgdm9pZCBkaWRBY3F1aXJlUG9pbnRlckxvY2soY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZGlkTm90QWNxdWlyZVBvaW50ZXJMb2NrKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGRpZExvc2VQb2lu
dGVyTG9jayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBz
ZXRQb2ludGVyTG9ja1dpbGxGYWlsU3luY2hyb25vdXNseShjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRQb2ludGVyTG9ja1dpbGxSZXNwb25kQXN5bmNo
cm9ub3VzbHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0gICAgLy8gTWV0aG9kcyBtb2RpZnlpbmcgV2ViUHJlZmVyZW5jZXMu
Ci0KLSAgICAvLyBQYXNzZXMgdGhyb3VnaCB0byBXZWJQcmVmZXJlbmNlcyB3aGljaCBhbGxvd3Mg
dGhlIHVzZXIgdG8gaGF2ZSBhIGN1c3RvbQotICAgIC8vIHN0eWxlIHNoZWV0LgotICAgIHZvaWQg
c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLSAgICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gUGFzc2VzIHRoaXMgcHJlZmVyZW5jZSB0
aHJvdWdoIHRvIFdlYlNldHRpbmdzLgotICAgIHZvaWQgc2V0QXV0aG9yQW5kVXNlclN0eWxlc0Vu
YWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gU2V0
IHRoZSBXZWJQcmVmZXJlbmNlIHRoYXQgY29udHJvbHMgd2Via2l0J3MgcG9wdXAgYmxvY2tpbmcu
Ci0gICAgdm9pZCBzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lkIHNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9h
cmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0WFNT
QXVkaXRvckVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAg
IHZvaWQgc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZp
bGVVUkxzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIG92
ZXJyaWRlUHJlZmVyZW5jZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0K
LSAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSBwbHVnaW5zLgotICAgIHZvaWQgc2V0UGx1Z2luc0Vu
YWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0gICAgLy8gTWV0aG9kcyB0aGF0IG1vZGlmeSB0aGUgc3RhdGUgb2YgVGVz
dFJ1bm5lcgotCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRlbGxzIHRo
ZSB0ZXN0X3NoZWxsIHRvIHByaW50IGEgbGluZSBvZgotICAgIC8vIGRlc2NyaXB0aXZlIHRleHQg
Zm9yIGVhY2ggZWRpdGluZyBjb21tYW5kLiBJdCB0YWtlcyBubyBhcmd1bWVudHMsIGFuZAotICAg
IC8vIGlnbm9yZXMgYW55IHRoYXQgbWF5IGJlIHByZXNlbnQuCi0gICAgdm9pZCBkdW1wRWRpdGlu
Z0NhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAv
LyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8g
ZHVtcCBwYWdlcyBhcwotICAgIC8vIHBsYWluIHRleHQsIHJhdGhlciB0aGFuIGFzIGEgdGV4dCBy
ZXByZXNlbnRhdGlvbiBvZiB0aGUgcmVuZGVyZXIncyBzdGF0ZS4KLSAgICAvLyBJdCB0YWtlcyBh
biBvcHRpb25hbCBhcmd1bWVudCwgd2hldGhlciB0byBkdW1wIHBpeGVscyByZXN1bHRzIG9yIG5v
dC4KLSAgICB2b2lkIGR1bXBBc1RleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRlbGxzIHRoZSB0
ZXN0X3NoZWxsIHRvIHByaW50IG91dCB0aGUKLSAgICAvLyBzY3JvbGwgb2Zmc2V0cyBvZiB0aGUg
Y2hpbGQgZnJhbWVzLiBJdCBpZ25vcmVzIGFsbC4KLSAgICB2b2lkIGR1bXBDaGlsZEZyYW1lU2Ny
b2xsUG9zaXRpb25zKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAg
IC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9zaGVsbCB0
byByZWN1cnNpdmVseQotICAgIC8vIGR1bXAgYWxsIGZyYW1lcyBhcyBwbGFpbiB0ZXh0IGlmIHRo
ZSBkdW1wQXNUZXh0IGZsYWcgaXMgc2V0LgotICAgIC8vIEl0IHRha2VzIG5vIGFyZ3VtZW50cywg
YW5kIGlnbm9yZXMgYW55IHRoYXQgbWF5IGJlIHByZXNlbnQuCi0gICAgdm9pZCBkdW1wQ2hpbGRG
cmFtZXNBc1RleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAg
Ly8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRv
IHByaW50IG91dCB0aGUKLSAgICAvLyBpbmZvcm1hdGlvbiBhYm91dCBpY29uIGNoYW5nZXMgbm90
aWZpY2F0aW9ucyBmcm9tIFdlYktpdC4KLSAgICB2b2lkIGR1bXBJY29uQ2hhbmdlcyhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBEZWFscyB3aXRoIFdlYiBB
dWRpbyBXQVYgZmlsZSBkYXRhLgotICAgIHZvaWQgc2V0QXVkaW9EYXRhKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZs
YWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9zaGVsbCB0byBwcmludCBhIGxpbmUgb2YKLSAgICAvLyBk
ZXNjcmlwdGl2ZSB0ZXh0IGZvciBlYWNoIGZyYW1lIGxvYWQgY2FsbGJhY2suIEl0IHRha2VzIG5v
IGFyZ3VtZW50cywgYW5kCi0gICAgLy8gaWdub3JlcyBhbnkgdGhhdCBtYXkgYmUgcHJlc2VudC4K
LSAgICB2b2lkIGR1bXBGcmFtZUxvYWRDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRl
bGxzIHRoZSB0ZXN0X3NoZWxsIHRvIHByaW50IGEgbGluZSBvZgotICAgIC8vIHVzZXIgZ2VzdHVy
ZSBzdGF0dXMgdGV4dCBmb3Igc29tZSBmcmFtZSBsb2FkIGNhbGxiYWNrcy4gSXQgdGFrZXMgbm8K
LSAgICAvLyBhcmd1bWVudHMsIGFuZCBpZ25vcmVzIGFueSB0aGF0IG1heSBiZSBwcmVzZW50Lgot
ICAgIHZvaWQgZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gSWYgdHJ1ZSwgY2F1c2VzIHByb3Zp
c2lvbmFsIGZyYW1lIGxvYWRzIHRvIGJlIHN0b3BwZWQgZm9yIHRoZSByZW1haW5kZXIgb2YKLSAg
ICAvLyB0aGUgdGVzdC4KLSAgICB2b2lkIHNldFN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgdm9pZCBkdW1wVGl0bGVD
aGFuZ2VzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFRo
aXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9zaGVsbCB0byBkdW1w
IGFsbCBjYWxscyB0bwotICAgIC8vIFdlYlZpZXdDbGllbnQ6OmNyZWF0ZVZpZXcoKS4KLSAgICAv
LyBJdCB0YWtlcyBubyBhcmd1bWVudHMsIGFuZCBpZ25vcmVzIGFueSB0aGF0IG1heSBiZSBwcmVz
ZW50LgotICAgIHZvaWQgZHVtcENyZWF0ZVZpZXcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotCi0gICAgdm9pZCBzZXRDYW5PcGVuV2luZG93cyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFn
IHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gZHVtcCBhIGRlc2NyaXB0aXZlCi0gICAgLy8g
bGluZSBmb3IgZWFjaCByZXNvdXJjZSBsb2FkIGNhbGxiYWNrLiBJdCB0YWtlcyBubyBhcmd1bWVu
dHMsIGFuZCBpZ25vcmVzCi0gICAgLy8gYW55IHRoYXQgbWF5IGJlIHByZXNlbnQuCi0gICAgdm9p
ZCBkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0
aGUgdGVzdF9zaGVsbCB0byBwcmludCBhIGxpbmUgb2YKLSAgICAvLyBkZXNjcmlwdGl2ZSB0ZXh0
IGZvciBlYWNoIGVsZW1lbnQgdGhhdCByZXF1ZXN0ZWQgYSByZXNvdXJjZS4gSXQgdGFrZXMgbm8K
LSAgICAvLyBhcmd1bWVudHMsIGFuZCBpZ25vcmVzIGFueSB0aGF0IG1heSBiZSBwcmVzZW50Lgot
ICAgIHZvaWQgZHVtcFJlc291cmNlUmVxdWVzdENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFnIHRo
YXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gZHVtcCB0aGUgTUlNRSB0eXBlCi0gICAgLy8gZm9y
IGVhY2ggcmVzb3VyY2UgdGhhdCB3YXMgbG9hZGVkLiBJdCB0YWtlcyBubyBhcmd1bWVudHMsIGFu
ZCBpZ25vcmVzIGFueQotICAgIC8vIHRoYXQgbWF5IGJlIHByZXNlbnQuCi0gICAgdm9pZCBkdW1w
UmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Ci0KLSAgICAvLyBXZWJQZXJtaXNzaW9uQ2xpZW50IHJlbGF0ZWQuCi0gICAgdm9pZCBz
ZXRJbWFnZXNBbGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIHNldFNjcmlwdHNBbGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLSAgICB2b2lkIHNldFN0b3JhZ2VBbGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldFBsdWdpbnNBbGxvd2VkKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldEFsbG93RGlzcGxheU9mSW5zZWN1
cmVDb250ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lk
IHNldEFsbG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGR1bXBQZXJtaXNzaW9uQ2xpZW50Q2FsbGJhY2tzKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFRoaXMgZnVuY3Rp
b24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9zaGVsbCB0byBkdW1wIGFsbCBjYWxs
cwotICAgIC8vIHRvIHdpbmRvdy5zdGF0dXMoKS4KLSAgICAvLyBJdCB0YWtlcyBubyBhcmd1bWVu
dHMsIGFuZCBpZ25vcmVzIGFueSB0aGF0IG1heSBiZSBwcmVzZW50LgotICAgIHZvaWQgZHVtcFdp
bmRvd1N0YXR1c0NoYW5nZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3No
ZWxsIHRvIHByaW50IGEgbGluZSBvZgotICAgIC8vIGRlc2NyaXB0aXZlIHRleHQgZm9yIHRoZSBw
cm9ncmVzcyBmaW5pc2hlZCBjYWxsYmFjay4gSXQgdGFrZXMgbm8KLSAgICAvLyBhcmd1bWVudHMs
IGFuZCBpZ25vcmVzIGFueSB0aGF0IG1heSBiZSBwcmVzZW50LgotICAgIHZvaWQgZHVtcFByb2dy
ZXNzRmluaXNoZWRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rf
c2hlbGwgdG8gcHJpbnQgb3V0IGEgdGV4dAotICAgIC8vIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBi
YWNrL2ZvcndhcmQgbGlzdC4gSXQgaWdub3JlcyBhbGwgYXJndW1lbnRzLgotICAgIHZvaWQgZHVt
cEJhY2tGb3J3YXJkTGlzdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0K
LSAgICB2b2lkIHNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZHVtcFNlbGVjdGlvblJlY3QoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgdGVzdFJlcGFpbnQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgcmVwYWludFN3ZWVwSG9y
aXpvbnRhbGx5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8v
IENhdXNlcyBsYXlvdXQgdG8gaGFwcGVuIGFzIGlmIHRhcmdldHRlZCB0byBwcmludGVkIHBhZ2Vz
LgotICAgIHZvaWQgc2V0UHJpbnRpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotCi0gICAgdm9pZCBzZXRTaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVu
bG9hZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBDYXVz
ZXMgV2lsbFNlbmRSZXF1ZXN0IHRvIGNsZWFyIGNlcnRhaW4gaGVhZGVycy4KLSAgICB2b2lkIHNl
dFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLQotICAgIC8vIENhdXNlcyBXaWxsU2VuZFJlcXVlc3QgdG8gYmxvY2sgcmVkaXJl
Y3RzLgotICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIENhdXNlcyBXaWxs
U2VuZFJlcXVlc3QgdG8gcmV0dXJuIGFuIGVtcHR5IHJlcXVlc3QuCi0gICAgdm9pZCBzZXRXaWxs
U2VuZFJlcXVlc3RSZXR1cm5zTnVsbChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRl
c3Rfc2hlbGwgdG8gZHVtcCBhIGRlc2NyaXB0aXZlCi0gICAgLy8gbGluZSBmb3IgZWFjaCByZXNv
dXJjZSBsb2FkJ3MgcHJpb3JpdHkgYW5kIGFueSB0aW1lIHRoYXQgcHJpb3JpdHkKLSAgICAvLyBj
aGFuZ2VzLiBJdCB0YWtlcyBubyBhcmd1bWVudHMsIGFuZCBpZ25vcmVzIGFueSB0aGF0IG1heSBi
ZSBwcmVzZW50LgotICAgIHZvaWQgZHVtcFJlc291cmNlUmVxdWVzdFByaW9yaXRpZXMoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci0gICAgLy8gTWV0aG9kcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBXZWJUZXN0UHJveHkKLQotICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIE1ldGhvZHMgZm9yd2FyZGluZyB0byB0aGUgV2Vi
VGVzdERlbGVnYXRlCi0KLSAgICAvLyBTaG93cyBEZXZUb29scyB3aW5kb3cuCi0gICAgdm9pZCBz
aG93V2ViSW5zcGVjdG9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIGNsb3NlV2ViSW5zcGVjdG9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLQotICAgIC8vIEFsbG93cyBsYXlvdXQgdGVzdHMgdG8gZXhlYyBzY3JpcHRzIGF0IFdl
Ykluc3BlY3RvciBzaWRlLgotICAgIHZvaWQgZXZhbHVhdGVJbldlYkluc3BlY3Rvcihjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBDbGVhcnMgYWxsIGRhdGFi
YXNlcy4KLSAgICB2b2lkIGNsZWFyQWxsRGF0YWJhc2VzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICAvLyBTZXRzIHRoZSBkZWZhdWx0IHF1b3RhIGZvciBhbGwgb3Jp
Z2lucwotICAgIHZvaWQgc2V0RGF0YWJhc2VRdW90YShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0KLSAgICAvLyBDaGFuZ2VzIHRoZSBjb29raWUgcG9saWN5IGZyb20gdGhl
IGRlZmF1bHQgdG8gYWxsb3cgYWxsIGNvb2tpZXMuCi0gICAgdm9pZCBzZXRBbHdheXNBY2NlcHRD
b29raWVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEdp
dmVzIGZvY3VzIHRvIHRoZSB3aW5kb3cuCi0gICAgdm9pZCBzZXRXaW5kb3dJc0tleShjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBDb252ZXJ0cyBhIFVSTCBz
dGFydGluZyB3aXRoIGZpbGU6Ly8vdG1wLyB0byB0aGUgbG9jYWwgbWFwcGluZy4KLSAgICB2b2lk
IHBhdGhUb0xvY2FsUmVzb3VyY2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OwotCi0gICAgLy8gVXNlZCB0byBzZXQgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IuCi0gICAgdm9p
ZCBzZXRCYWNraW5nU2NhbGVGYWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotCi0gICAgLy8gQ2FsbHMgc2V0bG9jYWxlKExDX0FMTCwgLi4uKSBmb3IgYSBzcGVjaWZp
ZWQgbG9jYWxlLgotICAgIC8vIFJlc2V0cyBiZXR3ZWVuIHRlc3RzLgotICAgIHZvaWQgc2V0UE9T
SVhMb2NhbGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8g
R2V0cyB0aGUgbnVtYmVyIG9mIGdlb2xvY2F0aW9uIHBlcm1pc3Npb25zIHJlcXVlc3RzIHBlbmRp
bmcuCi0gICAgdm9pZCBudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBHZW9sb2Nh
dGlvbiByZWxhdGVkIGZ1bmN0aW9ucy4KLSAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lv
bihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRNb2Nr
R2VvbG9jYXRpb25Qb3NpdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0gICAgdm9pZCBzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0jaWYgRU5BQkxFX05PVElGSUNB
VElPTlMKLSAgICAvLyBHcmFudHMgcGVybWlzc2lvbiBmb3IgZGVza3RvcCBub3RpZmljYXRpb25z
IHRvIGFuIG9yaWdpbgotICAgIHZvaWQgZ3JhbnRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICAvLyBTaW11bGF0ZXMgYSBj
bGljayBvbiBhIGRlc2t0b3Agbm90aWZpY2F0aW9uLgotICAgIHZvaWQgc2ltdWxhdGVMZWdhY3lX
ZWJOb3RpZmljYXRpb25DbGljayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0jZW5kaWYKLQotICAgIC8vIFNwZWVjaCBpbnB1dCByZWxhdGVkIGZ1bmN0aW9ucy4KLSAgICB2
b2lkIGFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7Ci0gICAgdm9pZCBzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBhZGRNb2NrU3BlZWNoUmVjb2du
aXRpb25SZXN1bHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZv
aWQgc2V0TW9ja1NwZWVjaFJlY29nbml0aW9uRXJyb3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotICAgIHZvaWQgd2FzTW9ja1NwZWVjaFJlY29nbml0aW9uQWJvcnRlZChj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lkIGRpc3BsYXko
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZGlzcGxheUlu
dmFsaWRhdGVkUmVnaW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQot
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gRmFsbGJhY2sgYW5kIHN0dWIgbWV0aG9kcwot
Ci0gICAgLy8gVGhlIGZhbGxiYWNrIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhIG5vbmV4aXN0ZW50
IG1ldGhvZCBpcyBjYWxsZWQgb24KLSAgICAvLyB0aGUgbGF5b3V0IHRlc3QgY29udHJvbGxlciBv
YmplY3QuCi0gICAgLy8gSXQgaXMgdXNlZnVsbCB0byBjYXRjaCB0eXBvcyBpbiB0aGUgSmF2YVNj
cmlwdCBjb2RlIChhIGZldyBsYXlvdXQgdGVzdHMKLSAgICAvLyBkbyBoYXZlIHR5cG9zIGluIHRo
ZW0pIGFuZCBpdCBhbGxvd3MgdGhlIHNjcmlwdCB0byBjb250aW51ZSBydW5uaW5nIGluCi0gICAg
Ly8gdGhhdCBjYXNlIChhcyB0aGUgTWFjIGRvZXMpLgotICAgIHZvaWQgZmFsbGJhY2tNZXRob2Qo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gU3R1YiBmb3Ig
bm90IGltcGxlbWVudGVkIG1ldGhvZHMuCi0gICAgdm9pZCBub3RJbXBsZW1lbnRlZChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LSAgICAvLyBJbnRlcm5hbCBoZWxwZXJzCi0gICAgdm9pZCBjaGVja1Jlc3BvbnNlTWltZVR5cGUo
KTsKLSAgICB2b2lkIGNvbXBsZXRlTm90aWZ5RG9uZShib29sIGlzVGltZW91dCk7Ci0gICAgY2xh
c3MgTm90aWZ5RG9uZVRpbWVkT3V0VGFzazogcHVibGljIFdlYk1ldGhvZFRhc2s8VGVzdFJ1bm5l
cj4gewotICAgIHB1YmxpYzoKLSAgICAgICAgTm90aWZ5RG9uZVRpbWVkT3V0VGFzayhUZXN0UnVu
bmVyKiBvYmplY3QpOiBXZWJNZXRob2RUYXNrPFRlc3RSdW5uZXI+KG9iamVjdCkgeyB9Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBydW5JZlZhbGlkKCkgeyBtX29iamVjdC0+Y29tcGxldGVOb3RpZnlE
b25lKHRydWUpOyB9Ci0gICAgfTsKLQotICAgIGNsYXNzIEhvc3RNZXRob2RUYXNrIDogcHVibGlj
IFdlYk1ldGhvZFRhc2s8VGVzdFJ1bm5lcj4gewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRl
ZiB2b2lkIChUZXN0UnVubmVyOjoqQ2FsbGJhY2tNZXRob2RUeXBlKSgpOwotICAgICAgICBIb3N0
TWV0aG9kVGFzayhUZXN0UnVubmVyKiBvYmplY3QsIENhbGxiYWNrTWV0aG9kVHlwZSBjYWxsYmFj
aykKLSAgICAgICAgICAgIDogV2ViTWV0aG9kVGFzazxUZXN0UnVubmVyPihvYmplY3QpCi0gICAg
ICAgICAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCi0gICAgICAgIHsgfQotCi0gICAgICAgIHZp
cnR1YWwgdm9pZCBydW5JZlZhbGlkKCkgeyAobV9vYmplY3QtPiptX2NhbGxiYWNrKSgpOyB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBDYWxsYmFja01ldGhvZFR5cGUgbV9jYWxsYmFjazsKLSAg
ICB9OwotICAgIHZvaWQgZGlkQWNxdWlyZVBvaW50ZXJMb2NrSW50ZXJuYWwoKTsKLSAgICB2b2lk
IGRpZE5vdEFjcXVpcmVQb2ludGVyTG9ja0ludGVybmFsKCk7Ci0gICAgdm9pZCBkaWRMb3NlUG9p
bnRlckxvY2tJbnRlcm5hbCgpOwotCi0gICAgYm9vbCBjcHBWYXJpYW50VG9Cb29sKGNvbnN0IENw
cFZhcmlhbnQmKTsKLSAgICBpbnQzMl90IGNwcFZhcmlhbnRUb0ludDMyKGNvbnN0IENwcFZhcmlh
bnQmKTsKLSAgICBXZWJLaXQ6OldlYlN0cmluZyBjcHBWYXJpYW50VG9XZWJTdHJpbmcoY29uc3Qg
Q3BwVmFyaWFudCYpOwotCi0gICAgdm9pZCBwcmludEVycm9yTWVzc2FnZShjb25zdCBzdGQ6OnN0
cmluZyYpOwotCi0gICAgLy8gSW4gdGhlIE1hYyBjb2RlLCB0aGlzIGlzIGNhbGxlZCB0byB0cmln
Z2VyIHRoZSBlbmQgb2YgYSB0ZXN0IGFmdGVyIHRoZQotICAgIC8vIHBhZ2UgaGFzIGZpbmlzaGVk
IGxvYWRpbmcuIEZyb20gaGVyZSwgd2UgY2FuIGdlbmVyYXRlIHRoZSBkdW1wIGZvciB0aGUKLSAg
ICAvLyB0ZXN0LgotICAgIHZvaWQgbG9jYXRpb25DaGFuZ2VEb25lKCk7Ci0KLSAgICBib29sIG1f
dGVzdElzUnVubmluZzsKLQotICAgIC8vIFdoZW4gcmVzZXQgaXMgY2FsbGVkLCBnbyB0aHJvdWdo
IGFuZCBjbG9zZSBhbGwgYnV0IHRoZSBtYWluIHRlc3Qgc2hlbGwKLSAgICAvLyB3aW5kb3cuIEJ5
IGRlZmF1bHQsIHNldCB0byB0cnVlIGJ1dCB0b2dnbGVkIHRvIGZhbHNlIHVzaW5nCi0gICAgLy8g
c2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKCkuCi0gICAgYm9vbCBtX2Nsb3Nl
UmVtYWluaW5nV2luZG93czsKLQotICAgIC8vIElmIHRydWUsIGRvbid0IGR1bXAgb3V0cHV0IHVu
dGlsIG5vdGlmeURvbmUgaXMgY2FsbGVkLgotICAgIGJvb2wgbV93YWl0VW50aWxEb25lOwotCi0g
ICAgLy8gQ2F1c2VzIG5hdmlnYXRpb24gYWN0aW9ucyBqdXN0IHByaW50b3V0IHRoZSBpbnRlbmRl
ZCBuYXZpZ2F0aW9uIGluc3RlYWQKLSAgICAvLyBvZiB0YWtpbmcgeW91IHRvIHRoZSBwYWdlLiBU
aGlzIGlzIHVzZWQgZm9yIGNhc2VzIGxpa2UgbWFpbHRvLCB3aGVyZSB5b3UKLSAgICAvLyBkb24n
dCBhY3R1YWxseSB3YW50IHRvIG9wZW4gdGhlIG1haWwgcHJvZ3JhbS4KLSAgICBib29sIG1fcG9s
aWN5RGVsZWdhdGVFbmFibGVkOwotCi0gICAgLy8gVG9nZ2xlcyB0aGUgYmVoYXZpb3Igb2YgdGhl
IHBvbGljeSBkZWxlZ2F0ZS4gSWYgdHJ1ZSwgdGhlbiBuYXZpZ2F0aW9ucwotICAgIC8vIHdpbGwg
YmUgYWxsb3dlZC4gT3RoZXJ3aXNlLCB0aGV5IHdpbGwgYmUgaWdub3JlZCAoZHJvcHBlZCkuCi0g
ICAgYm9vbCBtX3BvbGljeURlbGVnYXRlSXNQZXJtaXNzaXZlOwotCi0gICAgLy8gSWYgdHJ1ZSwg
dGhlIHBvbGljeSBkZWxlZ2F0ZSB3aWxsIHNpZ25hbCBsYXlvdXQgdGVzdCBjb21wbGV0aW9uLgot
ICAgIGJvb2wgbV9wb2xpY3lEZWxlZ2F0ZVNob3VsZE5vdGlmeURvbmU7Ci0KLSAgICBXb3JrUXVl
dWUgbV93b3JrUXVldWU7Ci0KLSAgICBXZWJLaXQ6OldlYlVSTCBtX3VzZXJTdHlsZVNoZWV0TG9j
YXRpb247Ci0KLSAgICAvLyBnbG9iYWxGbGFnIGlzIHVzZWQgYnkgYSBudW1iZXIgb2YgbGF5b3V0
IHRlc3RzIGluIGh0dHAvdGVzdHMvc2VjdXJpdHkvZGF0YVVSTC4KLSAgICBDcHBWYXJpYW50IG1f
Z2xvYmFsRmxhZzsKLQotICAgIC8vIEJvdW5kIHZhcmlhYmxlIHRvIHJldHVybiB0aGUgbmFtZSBv
ZiB0aGlzIHBsYXRmb3JtIChjaHJvbWl1bSkuCi0gICAgQ3BwVmFyaWFudCBtX3BsYXRmb3JtTmFt
ZTsKLQotICAgIC8vIEJvdW5kIHZhcmlhYmxlIHRyYWNraW5nIHRoZSBkaXJlY3Rpb25hbGl0eSBv
ZiB0aGUgPHRpdGxlPiB0YWcuCi0gICAgQ3BwVmFyaWFudCBtX3RpdGxlVGV4dERpcmVjdGlvbjsK
LQotICAgIC8vIEJvdW5kIHZhcmlhYmxlIGNvdW50aW5nIHRoZSBudW1iZXIgb2YgdG9wIFVSTHMg
dmlzaXRlZC4KLSAgICBDcHBWYXJpYW50IG1fd2ViSGlzdG9yeUl0ZW1Db3VudDsKLQotICAgIC8v
IEJvdW5kIHZhcmlhYmxlIHRvIHNldCB3aGV0aGVyIHBvc3RNZXNzYWdlcyBzaG91bGQgYmUgaW50
ZXJjZXB0ZWQgb3Igbm90Ci0gICAgQ3BwVmFyaWFudCBtX2ludGVyY2VwdFBvc3RNZXNzYWdlOwot
Ci0gICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCB3cml0ZSBhIGRlc2NyaXB0aXZl
IGxpbmUgZm9yIGVhY2ggZWRpdGluZwotICAgIC8vIGNvbW1hbmQuCi0gICAgYm9vbCBtX2R1bXBF
ZGl0aW5nQ2FsbGJhY2tzOwotCi0gICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCBn
ZW5lcmF0ZSBwaXhlbCByZXN1bHRzIGluIGR1bXBBc1RleHQgbW9kZQotICAgIGJvb2wgbV9nZW5l
cmF0ZVBpeGVsUmVzdWx0czsKLQotICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwg
cHJvZHVjZSBhIHBsYWluIHRleHQgZHVtcCByYXRoZXIgdGhhbiBhCi0gICAgLy8gdGV4dCByZXBy
ZXNlbnRhdGlvbiBvZiB0aGUgcmVuZGVyZXIuCi0gICAgYm9vbCBtX2R1bXBBc1RleHQ7Ci0KLSAg
ICAvLyBJZiB0cnVlIGFuZCBpZiBkdW1wX2FzX3RleHRfIGlzIHRydWUsIHRoZSB0ZXN0X3NoZWxs
IHdpbGwgcmVjdXJzaXZlbHkKLSAgICAvLyBkdW1wIGFsbCBmcmFtZXMgYXMgcGxhaW4gdGV4dC4K
LSAgICBib29sIG1fZHVtcENoaWxkRnJhbWVzQXNUZXh0OwotCi0gICAgLy8gSWYgdHJ1ZSwgdGhl
IHRlc3Rfc2hlbGwgd2lsbCBwcmludCBvdXQgdGhlIGNoaWxkIGZyYW1lIHNjcm9sbCBvZmZzZXRz
IGFzCi0gICAgLy8gd2VsbC4KLSAgICBib29sIG1fZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlv
bnM7Ci0KLSAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIHByaW50IG91dCB0aGUg
aWNvbiBjaGFuZ2Ugbm90aWZpY2F0aW9ucy4KLSAgICBib29sIG1fZHVtcEljb25DaGFuZ2VzOwot
Ci0gICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCBvdXRwdXQgYSBiYXNlNjQgZW5j
b2RlZCBXQVZFIGZpbGUuCi0gICAgYm9vbCBtX2R1bXBBc0F1ZGlvOwotCi0gICAgLy8gSWYgdHJ1
ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCBvdXRwdXQgYSBkZXNjcmlwdGl2ZSBsaW5lIGZvciBlYWNo
IGZyYW1lCi0gICAgLy8gbG9hZCBjYWxsYmFjay4KLSAgICBib29sIG1fZHVtcEZyYW1lTG9hZENh
bGxiYWNrczsKLQotICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgb3V0cHV0IGEg
bGluZSBvZiB0aGUgdXNlciBnZXN0dXJlIHN0YXR1cwotICAgIC8vIHRleHQgZm9yIHNvbWUgZnJh
bWUgbG9hZCBjYWxsYmFja3MuCi0gICAgYm9vbCBtX2R1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2Fk
Q2FsbGJhY2tzOwotCi0gICAgLy8gSWYgdHJ1ZSwgc3RvcHMgcHJvdmlzaW9uYWwgZnJhbWUgbG9h
ZHMgZHVyaW5nIHRoZQotICAgIC8vIERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUgY2Fs
bGJhY2suCi0gICAgYm9vbCBtX3N0b3BQcm92aXNpb25hbEZyYW1lTG9hZHM7Ci0KLSAgICAvLyBJ
ZiB0cnVlLCBvdXRwdXQgYSBtZXNzYWdlIHdoZW4gdGhlIHBhZ2UgdGl0bGUgaXMgY2hhbmdlZC4K
LSAgICBib29sIG1fZHVtcFRpdGxlQ2hhbmdlczsKLQotICAgIC8vIElmIHRydWUsIG91dHB1dCBh
IGRlc2NyaXB0aXZlIGxpbmUgZWFjaCB0aW1lIFdlYlZpZXdDbGllbnQ6OmNyZWF0ZVZpZXcKLSAg
ICAvLyBpcyBpbnZva2VkLgotICAgIGJvb2wgbV9kdW1wQ3JlYXRlVmlldzsKLQotICAgIC8vIElm
IHRydWUsIG5ldyB3aW5kb3dzIGNhbiBiZSBvcGVuZWQgdmlhIGphdmFzY3JpcHQgb3IgYnkgcGx1
Z2lucy4gQnkKLSAgICAvLyBkZWZhdWx0LCBzZXQgdG8gZmFsc2UgYW5kIGNhbiBiZSB0b2dnbGVk
IHRvIHRydWUgdXNpbmcKLSAgICAvLyBzZXRDYW5PcGVuV2luZG93cygpLgotICAgIGJvb2wgbV9j
YW5PcGVuV2luZG93czsKLQotICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgb3V0
cHV0IGEgZGVzY3JpcHRpdmUgbGluZSBmb3IgZWFjaCByZXNvdXJjZQotICAgIC8vIGxvYWQgY2Fs
bGJhY2suCi0gICAgYm9vbCBtX2R1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3M7Ci0KLSAgICAvLyBJ
ZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIG91dHB1dCBhIGRlc2NyaXB0aXZlIGxpbmUgZm9y
IGVhY2ggcmVzb3VyY2UKLSAgICAvLyByZXF1ZXN0IGNhbGxiYWNrLgotICAgIGJvb2wgbV9kdW1w
UmVzb3VyY2VSZXF1ZXN0Q2FsbGJhY2tzOwotCi0gICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hl
bGwgd2lsbCBvdXRwdXQgdGhlIE1JTUUgdHlwZSBmb3IgZWFjaCByZXNvdXJjZSB0aGF0IAotICAg
IC8vIHdhcyBsb2FkZWQuCi0gICAgYm9vbCBtX2R1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVz
OwotCi0gICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCBkdW1wIGFsbCBjaGFuZ2Vz
IHRvIHdpbmRvdy5zdGF0dXMuCi0gICAgYm9vbCBtX2R1bXBXaW5kb3dTdGF0dXNDaGFuZ2VzOwot
Ci0gICAgLy8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCBvdXRwdXQgYSBkZXNjcmlwdGl2
ZSBsaW5lIGZvciB0aGUgcHJvZ3Jlc3MKLSAgICAvLyBmaW5pc2hlZCBjYWxsYmFjay4KLSAgICBi
b29sIG1fZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjazsKLQotICAgIC8vIElmIHRydWUsIHRo
ZSB0ZXN0X3NoZWxsIHdpbGwgcHJvZHVjZSBhIGR1bXAgb2YgdGhlIGJhY2sgZm9yd2FyZCBsaXN0
IGFzCi0gICAgLy8gd2VsbC4KLSAgICBib29sIG1fZHVtcEJhY2tGb3J3YXJkTGlzdDsKLQotICAg
IC8vIElmIGZhbHNlLCBhbGwgbmV3IHJlcXVlc3RzIHdpbGwgbm90IGRlZmVyIHRoZSBtYWluIHJl
c291cmNlIGRhdGEgbG9hZC4KLSAgICBib29sIG1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZDsK
LQotICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgZHJhdyB0aGUgYm91bmRzIG9m
IHRoZSBjdXJyZW50IHNlbGVjdGlvbiByZWN0Ci0gICAgLy8gdGFraW5nIHBvc3NpYmxlIHRyYW5z
Zm9ybXMgb2YgdGhlIHNlbGVjdGlvbiByZWN0IGludG8gYWNjb3VudC4KLSAgICBib29sIG1fZHVt
cFNlbGVjdGlvblJlY3Q7Ci0KLSAgICAvLyBJZiB0cnVlLCBwaXhlbCBkdW1wIHdpbGwgYmUgcHJv
ZHVjZWQgYXMgYSBzZXJpZXMgb2YgMXB4LXRhbGwsIHZpZXctd2lkZQotICAgIC8vIGluZGl2aWR1
YWwgcGFpbnRzIG92ZXIgdGhlIGhlaWdodCBvZiB0aGUgdmlldy4KLSAgICBib29sIG1fdGVzdFJl
cGFpbnQ7Ci0KLSAgICAvLyBJZiB0cnVlIGFuZCB0ZXN0X3JlcGFpbnRfIGlzIHRydWUgYXMgd2Vs
bCwgcGl4ZWwgZHVtcCB3aWxsIGJlIHByb2R1Y2VkIGFzCi0gICAgLy8gYSBzZXJpZXMgb2YgMXB4
LXdpZGUsIHZpZXctdGFsbCBwYWludHMgYWNyb3NzIHRoZSB3aWR0aCBvZiB0aGUgdmlldy4KLSAg
ICBib29sIG1fc3dlZXBIb3Jpem9udGFsbHk7Ci0KLSAgICAvLyBJZiB0cnVlLCBsYXlvdXQgaXMg
dG8gdGFyZ2V0IHByaW50ZWQgcGFnZXMuCi0gICAgYm9vbCBtX2lzUHJpbnRpbmc7Ci0KLSAgICBi
b29sIG1fc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQ7Ci0KLSAgICBi
b29sIG1fc2hvdWxkQmxvY2tSZWRpcmVjdHM7Ci0KLSAgICBib29sIG1fd2lsbFNlbmRSZXF1ZXN0
U2hvdWxkUmV0dXJuTnVsbDsKLQotICAgIGJvb2wgbV9zaG91bGREdW1wUmVzb3VyY2VQcmlvcml0
aWVzOwotCi0gICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1faHR0cEhlYWRlcnNUb0NsZWFyOwot
Ci0gICAgLy8gV0FWIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGhlcmUuCi0gICAgV2ViS2l0OjpXZWJB
cnJheUJ1ZmZlclZpZXcgbV9hdWRpb0RhdGE7Ci0KLSAgICAvLyBVc2VkIGZvciB0ZXN0IHRpbWVv
dXRzLgotICAgIFdlYlRhc2tMaXN0IG1fdGFza0xpc3Q7Ci0KLSAgICBUZXN0SW50ZXJmYWNlcyog
bV90ZXN0SW50ZXJmYWNlczsKLSAgICBXZWJUZXN0RGVsZWdhdGUqIG1fZGVsZWdhdGU7Ci0gICAg
V2ViS2l0OjpXZWJWaWV3KiBtX3dlYlZpZXc7Ci0gICAgV2ViVGVzdFByb3h5QmFzZSogbV9wcm94
eTsKLQotICAgIC8vIFRoaXMgaXMgbm9uLTAgSUZGIGEgbG9hZCBpcyBpbiBwcm9ncmVzcy4KLSAg
ICBXZWJLaXQ6OldlYkZyYW1lKiBtX3RvcExvYWRpbmdGcmFtZTsKLQotICAgIC8vIFdlYlBlcm1p
c3Npb25DbGllbnQgbW9jayBvYmplY3QuCi0gICAgc3RkOjphdXRvX3B0cjxXZWJQZXJtaXNzaW9u
cz4gbV93ZWJQZXJtaXNzaW9uczsKLQotI2lmIEVOQUJMRV9OT1RJRklDQVRJT05TCi0gICAgc3Rk
OjphdXRvX3B0cjxOb3RpZmljYXRpb25QcmVzZW50ZXI+IG1fbm90aWZpY2F0aW9uUHJlc2VudGVy
OwotI2VuZGlmCi0KLSAgICBib29sIG1fcG9pbnRlckxvY2tlZDsKLSAgICBlbnVtIHsKLSAgICAg
ICAgUG9pbnRlckxvY2tXaWxsU3VjY2VlZCwKLSAgICAgICAgUG9pbnRlckxvY2tXaWxsUmVzcG9u
ZEFzeW5jLAotICAgICAgICBQb2ludGVyTG9ja1dpbGxGYWlsU3luYywKLSAgICB9IG1fcG9pbnRl
ckxvY2tQbGFubmVkUmVzdWx0OwotfTsKLQotfQotCi0jZW5kaWYgLy8gVGVzdFJ1bm5lcl9oCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9U
ZXh0SW5wdXRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvc3JjL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBmNWY5YjJhZTgwOTJhMzc4YzMyNjUyM2FkZjM3YTE4YWE5NDQwNTUyLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGV4dElucHV0Q29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiVGVzdENvbW1vbi5oIgotI2lu
Y2x1ZGUgIldlYkJpbmRpbmdzLmgiCi0jaW5jbHVkZSAiV2ViQ29tcG9zaXRpb25VbmRlcmxpbmUu
aCIKLSNpbmNsdWRlICJXZWJGcmFtZS5oIgotI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIKLSNp
bmNsdWRlICJXZWJSYW5nZS5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlIDxwdWJs
aWMvV2ViU3RyaW5nLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlZlY3Rvci5oPgotI2luY2x1ZGUg
PHN0cmluZz4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7
Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotVGV4dElucHV0Q29udHJvbGxlcjo6VGV4
dElucHV0Q29udHJvbGxlcigpCi17Ci0gICAgYmluZE1ldGhvZCgiYXR0cmlidXRlZFN1YnN0cmlu
Z0Zyb21SYW5nZSIsICZUZXh0SW5wdXRDb250cm9sbGVyOjphdHRyaWJ1dGVkU3Vic3RyaW5nRnJv
bVJhbmdlKTsKLSAgICBiaW5kTWV0aG9kKCJjaGFyYWN0ZXJJbmRleEZvclBvaW50IiwgJlRleHRJ
bnB1dENvbnRyb2xsZXI6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnQpOwotICAgIGJpbmRNZXRob2Qo
ImNvbnZlcnNhdGlvbklkZW50aWZpZXIiLCAmVGV4dElucHV0Q29udHJvbGxlcjo6Y29udmVyc2F0
aW9uSWRlbnRpZmllcik7Ci0gICAgYmluZE1ldGhvZCgiZG9Db21tYW5kIiwgJlRleHRJbnB1dENv
bnRyb2xsZXI6OmRvQ29tbWFuZCk7Ci0gICAgYmluZE1ldGhvZCgiZmlyc3RSZWN0Rm9yQ2hhcmFj
dGVyUmFuZ2UiLCAmVGV4dElucHV0Q29udHJvbGxlcjo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFu
Z2UpOwotICAgIGJpbmRNZXRob2QoImhhc01hcmtlZFRleHQiLCAmVGV4dElucHV0Q29udHJvbGxl
cjo6aGFzTWFya2VkVGV4dCk7Ci0gICAgYmluZE1ldGhvZCgiaW5zZXJ0VGV4dCIsICZUZXh0SW5w
dXRDb250cm9sbGVyOjppbnNlcnRUZXh0KTsKLSAgICBiaW5kTWV0aG9kKCJtYWtlQXR0cmlidXRl
ZFN0cmluZyIsICZUZXh0SW5wdXRDb250cm9sbGVyOjptYWtlQXR0cmlidXRlZFN0cmluZyk7Ci0g
ICAgYmluZE1ldGhvZCgibWFya2VkUmFuZ2UiLCAmVGV4dElucHV0Q29udHJvbGxlcjo6bWFya2Vk
UmFuZ2UpOwotICAgIGJpbmRNZXRob2QoInNlbGVjdGVkUmFuZ2UiLCAmVGV4dElucHV0Q29udHJv
bGxlcjo6c2VsZWN0ZWRSYW5nZSk7Ci0gICAgYmluZE1ldGhvZCgic2V0TWFya2VkVGV4dCIsICZU
ZXh0SW5wdXRDb250cm9sbGVyOjpzZXRNYXJrZWRUZXh0KTsKLSAgICBiaW5kTWV0aG9kKCJzdWJz
dHJpbmdGcm9tUmFuZ2UiLCAmVGV4dElucHV0Q29udHJvbGxlcjo6c3Vic3RyaW5nRnJvbVJhbmdl
KTsKLSAgICBiaW5kTWV0aG9kKCJ1bm1hcmtUZXh0IiwgJlRleHRJbnB1dENvbnRyb2xsZXI6OnVu
bWFya1RleHQpOwotICAgIGJpbmRNZXRob2QoInZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRleHQi
LCAmVGV4dElucHV0Q29udHJvbGxlcjo6dmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dCk7Ci0g
ICAgYmluZE1ldGhvZCgic2V0Q29tcG9zaXRpb24iLCAmVGV4dElucHV0Q29udHJvbGxlcjo6c2V0
Q29tcG9zaXRpb24pOwotfQotCi12b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6Omluc2VydFRleHQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8
fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fd2Vi
Vmlldy0+Y29uZmlybUNvbXBvc2l0aW9uKFdlYlN0cmluZzo6ZnJvbVVURjgoYXJndW1lbnRzWzBd
LnRvU3RyaW5nKCkpKTsKLX0KLQotdm9pZCBUZXh0SW5wdXRDb250cm9sbGVyOjpkb0NvbW1hbmQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIFdlYkZyYW1lKiBtYWluRnJhbWUgPSBtX3dl
YlZpZXctPm1haW5GcmFtZSgpOwotICAgIGlmICghbWFpbkZyYW1lKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAxICYmIGFyZ3VtZW50c1swXS5pc1N0cmlu
ZygpKQotICAgICAgICBtYWluRnJhbWUtPmV4ZWN1dGVDb21tYW5kKFdlYlN0cmluZzo6ZnJvbVVU
RjgoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKLX0KLQotdm9pZCBUZXh0SW5wdXRDb250cm9s
bGVyOjpzZXRNYXJrZWRUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+PSAzICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpCi0gICAgICAgICYm
IGFyZ3VtZW50c1sxXS5pc051bWJlcigpICYmIGFyZ3VtZW50c1syXS5pc051bWJlcigpKSB7Ci0g
ICAgICAgIFdlYlZlY3RvcjxXZWJDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lczsKLSAg
ICAgICAgbV93ZWJWaWV3LT5zZXRDb21wb3NpdGlvbihXZWJTdHJpbmc6OmZyb21VVEY4KGFyZ3Vt
ZW50c1swXS50b1N0cmluZygpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bmRlcmxpbmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1sx
XS50b0ludDMyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRz
WzFdLnRvSW50MzIoKSArIGFyZ3VtZW50c1syXS50b0ludDMyKCkpOwotICAgIH0KLX0KLQotdm9p
ZCBUZXh0SW5wdXRDb250cm9sbGVyOjp1bm1hcmtUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIG1f
d2ViVmlldy0+Y29uZmlybUNvbXBvc2l0aW9uKCk7Ci19Ci0KLXZvaWQgVGV4dElucHV0Q29udHJv
bGxlcjo6aGFzTWFya2VkVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBXZWJGcmFtZSogbWFpbkZy
YW1lID0gbV93ZWJWaWV3LT5tYWluRnJhbWUoKTsKLSAgICBpZiAoIW1haW5GcmFtZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgcmVzdWx0LT5zZXQobWFpbkZyYW1lLT5oYXNNYXJrZWRUZXh0KCkp
OwotfQotCi12b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6OmNvbnZlcnNhdGlvbklkZW50aWZpZXIo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBU
ZXh0SW5wdXRDb250cm9sbGVyOjpzdWJzdHJpbmdGcm9tUmFuZ2UoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cy4KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXh0SW5wdXRDb250cm9sbGVy
OjphdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6bWFya2Vk
UmFuZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotCi0gICAgV2ViRnJhbWUqIG1haW5GcmFtZSA9IG1fd2ViVmll
dy0+bWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFtYWluRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFdlYlJhbmdlIHJhbmdlID0gbWFpbkZyYW1lLT5tYXJrZWRSYW5nZSgpOwotICAgIHZlY3Rv
cjxpbnQ+IGludEFycmF5KDIpOwotICAgIGludEFycmF5WzBdID0gcmFuZ2Uuc3RhcnRPZmZzZXQo
KTsKLSAgICBpbnRBcnJheVsxXSA9IHJhbmdlLmVuZE9mZnNldCgpOwotICAgIHJlc3VsdC0+c2V0
KFdlYkJpbmRpbmdzOjptYWtlSW50QXJyYXkoaW50QXJyYXkpKTsKLX0KLQotdm9pZCBUZXh0SW5w
dXRDb250cm9sbGVyOjpzZWxlY3RlZFJhbmdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIFdlYkZyYW1l
KiBtYWluRnJhbWUgPSBtX3dlYlZpZXctPm1haW5GcmFtZSgpOwotICAgIGlmICghbWFpbkZyYW1l
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJSYW5nZSByYW5nZSA9IG1haW5GcmFtZS0+c2Vs
ZWN0aW9uUmFuZ2UoKTsKLSAgICB2ZWN0b3I8aW50PiBpbnRBcnJheSgyKTsKLSAgICBpbnRBcnJh
eVswXSA9IHJhbmdlLnN0YXJ0T2Zmc2V0KCk7Ci0gICAgaW50QXJyYXlbMV0gPSByYW5nZS5lbmRP
ZmZzZXQoKTsKLSAgICByZXN1bHQtPnNldChXZWJCaW5kaW5nczo6bWFrZUludEFycmF5KGludEFy
cmF5KSk7Ci19Ci0KLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6Zmlyc3RSZWN0Rm9yQ2hhcmFj
dGVyUmFuZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIFdlYkZyYW1lKiBmcmFtZSA9
IG1fd2ViVmlldy0+Zm9jdXNlZEZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyIHx8ICFhcmd1bWVudHNbMF0uaXNO
dW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFdlYlJlY3QgcmVjdDsKLSAgICBpZiAoIWZyYW1lLT5maXJzdFJlY3RGb3JDaGFyYWN0ZXJS
YW5nZShhcmd1bWVudHNbMF0udG9JbnQzMigpLCBhcmd1bWVudHNbMV0udG9JbnQzMigpLCByZWN0
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdmVjdG9yPGludD4gaW50QXJyYXkoNCk7Ci0gICAg
aW50QXJyYXlbMF0gPSByZWN0Lng7Ci0gICAgaW50QXJyYXlbMV0gPSByZWN0Lnk7Ci0gICAgaW50
QXJyYXlbMl0gPSByZWN0LndpZHRoOwotICAgIGludEFycmF5WzNdID0gcmVjdC5oZWlnaHQ7Ci0g
ICAgcmVzdWx0LT5zZXQoV2ViQmluZGluZ3M6Om1ha2VJbnRBcnJheShpbnRBcnJheSkpOwotfQot
Ci12b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcy4KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXh0SW5w
dXRDb250cm9sbGVyOjp2YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LQotICAgIFdlYkZyYW1lKiBtYWluRnJhbWUgPSBtX3dlYlZpZXctPm1haW5GcmFtZSgpOwotICAg
IGlmICghbWFpbkZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZXN1bHQtPnNldCgiTlNV
bmRlcmxpbmUsTlNVbmRlcmxpbmVDb2xvcixOU01hcmtlZENsYXVzZVNlZ21lbnQsIgotICAgICAg
ICAgICAgICAgICJOU1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lIik7Ci19
Ci0KLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6bWFrZUF0dHJpYnV0ZWRTdHJpbmcoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcy4KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXh0SW5w
dXRDb250cm9sbGVyOjpzZXRDb21wb3NpdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotCi0g
ICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBT
ZW5kcyBhIGtleWRvd24gZXZlbnQgd2l0aCBrZXkgY29kZSA9IDB4RTUgdG8gZW11bGF0ZSBpbnB1
dCBtZXRob2QgYmVoYXZpb3IuCi0gICAgV2ViS2V5Ym9hcmRFdmVudCBrZXlEb3duOwotICAgIGtl
eURvd24udHlwZSA9IFdlYklucHV0RXZlbnQ6OlJhd0tleURvd247Ci0gICAga2V5RG93bi5tb2Rp
ZmllcnMgPSAwOwotICAgIGtleURvd24ud2luZG93c0tleUNvZGUgPSAweEU1OyAvLyBWS0VZX1BS
T0NFU1NLRVkKLSAgICBrZXlEb3duLnNldEtleUlkZW50aWZpZXJGcm9tV2luZG93c0tleUNvZGUo
KTsKLSAgICBtX3dlYlZpZXctPmhhbmRsZUlucHV0RXZlbnQoa2V5RG93bik7Ci0KLSAgICBXZWJW
ZWN0b3I8V2ViQ29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXM7Ci0gICAgV2ViU3RyaW5n
IHRleHQoV2ViU3RyaW5nOjpmcm9tVVRGOChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSkpOwotICAg
IG1fd2ViVmlldy0+c2V0Q29tcG9zaXRpb24odGV4dCwgdW5kZXJsaW5lcywgMCwgdGV4dC5sZW5n
dGgoKSk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvc3JjL1RleHRJbnB1dENvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1RleHRJbnB1dENvbnRyb2xsZXIuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg2ZDgzMzU2NDFmZjQ5YTNmMGMwOTJjZDEzOTE2Yzdk
NWQyYWE2Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXh0SW5wdXRDb250
cm9sbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gVGV4dElucHV0Q29udHJv
bGxlciBpcyBib3VuZCB0byB3aW5kb3cudGV4dElucHV0Q29udHJvbGxlciBpbiBKYXZhc2NyaXB0
Ci0vLyB3aGVuIERSVCBpcyBydW5uaW5nLiBMYXlvdXQgdGVzdHMgdXNlIGl0IHRvIGV4ZXJjaXNl
IHZhcmlvdXMgY29ybmVycyBvZgotLy8gdGV4dCBpbnB1dC4KLQotI2lmbmRlZiBUZXh0SW5wdXRD
b250cm9sbGVyX2gKLSNkZWZpbmUgVGV4dElucHV0Q29udHJvbGxlcl9oCi0KLSNpbmNsdWRlICJD
cHBCb3VuZENsYXNzLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViVmlldzsKLX0K
LQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1jbGFzcyBUZXh0SW5wdXRDb250cm9sbGVy
IDogcHVibGljIENwcEJvdW5kQ2xhc3MgewotcHVibGljOgotICAgIFRleHRJbnB1dENvbnRyb2xs
ZXIoKTsKLQotICAgIHZvaWQgc2V0V2ViVmlldyhXZWJLaXQ6OldlYlZpZXcqIHdlYlZpZXcpIHsg
bV93ZWJWaWV3ID0gd2ViVmlldzsgfQotCi0gICAgdm9pZCBpbnNlcnRUZXh0KGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGRvQ29tbWFuZChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRNYXJrZWRUZXh0KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHVubWFya1RleHQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaGFzTWFya2VkVGV4
dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBjb252ZXJz
YXRpb25JZGVudGlmaWVyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIHN1YnN0cmluZ0Zyb21SYW5nZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Ci0gICAgdm9pZCBhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIG1hcmtlZFJhbmdlKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNlbGVjdGVkUmFuZ2UoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZmlyc3RSZWN0Rm9y
Q2hhcmFjdGVyUmFuZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAg
IHZvaWQgY2hhcmFjdGVySW5kZXhGb3JQb2ludChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7Ci0gICAgdm9pZCB2YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIG1ha2VBdHRyaWJ1dGVkU3Ry
aW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldENv
bXBvc2l0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotcHJpdmF0
ZToKLSAgICBXZWJLaXQ6OldlYlZpZXcqIG1fd2ViVmlldzsKLX07Ci0KLX0KLQotI2VuZGlmIC8v
IFRleHRJbnB1dENvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViUGVybWlzc2lvbnMuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViUGVybWlzc2lvbnMuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjFjYmM3NTRhMjk0ZmI2MGQ1MGNhNjgwMTQ4YTQ0
MWZkYWQyMGJiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlBlcm1pc3Np
b25zLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldlYlBlcm1pc3Npb25zLmgiCi0KLSNpbmNsdWRlICJUZXN0Q29tbW9uLmgi
Ci0jaW5jbHVkZSAiV2ViVGVzdERlbGVnYXRlLmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYkNTdHJp
bmcuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViVVJMLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7
Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotV2ViUGVybWlzc2lvbnM6OldlYlBlcm1p
c3Npb25zKCkKLSAgICA6IG1fZGVsZWdhdGUoMCkKLXsKLSAgICByZXNldCgpOwotfQotCi1XZWJQ
ZXJtaXNzaW9uczo6fldlYlBlcm1pc3Npb25zKCkKLXsKLX0KLQotYm9vbCBXZWJQZXJtaXNzaW9u
czo6YWxsb3dJbWFnZShXZWJLaXQ6OldlYkZyYW1lKiwgYm9vbCBlbmFibGVkUGVyU2V0dGluZ3Ms
IGNvbnN0IFdlYktpdDo6V2ViVVJMJiBpbWFnZVVSTCkKLXsKLSAgICBib29sIGFsbG93ZWQgPSBl
bmFibGVkUGVyU2V0dGluZ3MgJiYgbV9pbWFnZXNBbGxvd2VkOwotICAgIGlmIChtX2R1bXBDYWxs
YmFja3MgJiYgbV9kZWxlZ2F0ZSkKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0
ZDo6c3RyaW5nKCJQRVJNSVNTSU9OIENMSUVOVDogYWxsb3dJbWFnZSgiKSArIG5vcm1hbGl6ZUxh
eW91dFRlc3RVUkwoaW1hZ2VVUkwuc3BlYygpKSArICIpOiAiICsgKGFsbG93ZWQgPyAidHJ1ZSIg
OiAiZmFsc2UiKSArICJcbiIpOwotICAgIHJldHVybiBhbGxvd2VkOwotfQotCi1ib29sIFdlYlBl
cm1pc3Npb25zOjphbGxvd1NjcmlwdEZyb21Tb3VyY2UoV2ViS2l0OjpXZWJGcmFtZSosIGJvb2wg
ZW5hYmxlZFBlclNldHRpbmdzLCBjb25zdCBXZWJLaXQ6OldlYlVSTCYgc2NyaXB0VVJMKQotewot
ICAgIGJvb2wgYWxsb3dlZCA9IGVuYWJsZWRQZXJTZXR0aW5ncyAmJiBtX3NjcmlwdHNBbGxvd2Vk
OwotICAgIGlmIChtX2R1bXBDYWxsYmFja3MgJiYgbV9kZWxlZ2F0ZSkKLSAgICAgICAgbV9kZWxl
Z2F0ZS0+cHJpbnRNZXNzYWdlKHN0ZDo6c3RyaW5nKCJQRVJNSVNTSU9OIENMSUVOVDogYWxsb3dT
Y3JpcHRGcm9tU291cmNlKCIpICsgbm9ybWFsaXplTGF5b3V0VGVzdFVSTChzY3JpcHRVUkwuc3Bl
YygpKSArICIpOiAiICsgKGFsbG93ZWQgPyAidHJ1ZSIgOiAiZmFsc2UiKSArICJcbiIpOwotICAg
IHJldHVybiBhbGxvd2VkOwotfQotCi1ib29sIFdlYlBlcm1pc3Npb25zOjphbGxvd1N0b3JhZ2Uo
V2ViS2l0OjpXZWJGcmFtZSosIGJvb2wpCi17Ci0gICAgcmV0dXJuIG1fc3RvcmFnZUFsbG93ZWQ7
Ci19Ci0KLWJvb2wgV2ViUGVybWlzc2lvbnM6OmFsbG93UGx1Z2lucyhXZWJLaXQ6OldlYkZyYW1l
KiwgYm9vbCBlbmFibGVkUGVyU2V0dGluZ3MpCi17Ci0gICAgcmV0dXJuIGVuYWJsZWRQZXJTZXR0
aW5ncyAmJiBtX3BsdWdpbnNBbGxvd2VkOwotfQotCi1ib29sIFdlYlBlcm1pc3Npb25zOjphbGxv
d0Rpc3BsYXlpbmdJbnNlY3VyZUNvbnRlbnQoV2ViS2l0OjpXZWJGcmFtZSosIGJvb2wgZW5hYmxl
ZFBlclNldHRpbmdzLCBjb25zdCBXZWJLaXQ6OldlYlNlY3VyaXR5T3JpZ2luJiwgY29uc3QgV2Vi
S2l0OjpXZWJVUkwmKQotewotICAgIHJldHVybiBlbmFibGVkUGVyU2V0dGluZ3MgfHwgbV9kaXNw
bGF5aW5nSW5zZWN1cmVDb250ZW50QWxsb3dlZDsKLX0KLQotYm9vbCBXZWJQZXJtaXNzaW9uczo6
YWxsb3dSdW5uaW5nSW5zZWN1cmVDb250ZW50KFdlYktpdDo6V2ViRnJhbWUqLCBib29sIGVuYWJs
ZWRQZXJTZXR0aW5ncywgY29uc3QgV2ViS2l0OjpXZWJTZWN1cml0eU9yaWdpbiYsIGNvbnN0IFdl
YktpdDo6V2ViVVJMJikKLXsKLSAgICByZXR1cm4gZW5hYmxlZFBlclNldHRpbmdzIHx8IG1fcnVu
bmluZ0luc2VjdXJlQ29udGVudEFsbG93ZWQ7Ci19Ci0KLXZvaWQgV2ViUGVybWlzc2lvbnM6OnNl
dEltYWdlc0FsbG93ZWQoYm9vbCBpbWFnZXNBbGxvd2VkKQotewotICAgIG1faW1hZ2VzQWxsb3dl
ZCA9IGltYWdlc0FsbG93ZWQ7Ci19Ci0KLXZvaWQgV2ViUGVybWlzc2lvbnM6OnNldFNjcmlwdHNB
bGxvd2VkKGJvb2wgc2NyaXB0c0FsbG93ZWQpCi17Ci0gICAgbV9zY3JpcHRzQWxsb3dlZCA9IHNj
cmlwdHNBbGxvd2VkOwotfQotCi12b2lkIFdlYlBlcm1pc3Npb25zOjpzZXRTdG9yYWdlQWxsb3dl
ZChib29sIHN0b3JhZ2VBbGxvd2VkKQotewotICAgIG1fc3RvcmFnZUFsbG93ZWQgPSBzdG9yYWdl
QWxsb3dlZDsKLX0KLQotdm9pZCBXZWJQZXJtaXNzaW9uczo6c2V0UGx1Z2luc0FsbG93ZWQoYm9v
bCBwbHVnaW5zQWxsb3dlZCkKLXsKLSAgICBtX3BsdWdpbnNBbGxvd2VkID0gcGx1Z2luc0FsbG93
ZWQ7Ci19Ci0KLXZvaWQgV2ViUGVybWlzc2lvbnM6OnNldERpc3BsYXlpbmdJbnNlY3VyZUNvbnRl
bnRBbGxvd2VkKGJvb2wgYWxsb3dlZCkKLXsKLSAgICBtX2Rpc3BsYXlpbmdJbnNlY3VyZUNvbnRl
bnRBbGxvd2VkID0gYWxsb3dlZDsKLX0KLQotdm9pZCBXZWJQZXJtaXNzaW9uczo6c2V0UnVubmlu
Z0luc2VjdXJlQ29udGVudEFsbG93ZWQoYm9vbCBhbGxvd2VkKQotewotICAgIG1fcnVubmluZ0lu
c2VjdXJlQ29udGVudEFsbG93ZWQgPSBhbGxvd2VkOwotfQotCi12b2lkIFdlYlBlcm1pc3Npb25z
OjpzZXREZWxlZ2F0ZShXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRlKQotewotICAgIG1fZGVsZWdh
dGUgPSBkZWxlZ2F0ZTsKLX0KLQotdm9pZCBXZWJQZXJtaXNzaW9uczo6c2V0RHVtcENhbGxiYWNr
cyhib29sIGR1bXBDYWxsYmFja3MpCi17Ci0gICAgbV9kdW1wQ2FsbGJhY2tzID0gZHVtcENhbGxi
YWNrczsKLX0KLQotdm9pZCBXZWJQZXJtaXNzaW9uczo6cmVzZXQoKQotewotICAgIG1fZHVtcENh
bGxiYWNrcyA9IGZhbHNlOwotICAgIG1faW1hZ2VzQWxsb3dlZCA9IHRydWU7Ci0gICAgbV9zY3Jp
cHRzQWxsb3dlZCA9IHRydWU7Ci0gICAgbV9zdG9yYWdlQWxsb3dlZCA9IHRydWU7Ci0gICAgbV9w
bHVnaW5zQWxsb3dlZCA9IHRydWU7Ci0gICAgbV9kaXNwbGF5aW5nSW5zZWN1cmVDb250ZW50QWxs
b3dlZCA9IGZhbHNlOwotICAgIG1fcnVubmluZ0luc2VjdXJlQ29udGVudEFsbG93ZWQgPSBmYWxz
ZTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9zcmMvV2ViUGVybWlzc2lvbnMuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlBlcm1pc3Npb25zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDhhZGVmNGMxYmIxZmUwMTY5NmEyMjIzYzM4ZDI1NTM0OTA0ZDc2N2UuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViUGVybWlzc2lvbnMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlBlcm1pc3Npb25zX2gKLSNkZWZpbmUgV2Vi
UGVybWlzc2lvbnNfaAotCi0jaW5jbHVkZSAiV2ViUGVybWlzc2lvbkNsaWVudC5oIgotCi1uYW1l
c3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLWNsYXNzIFdlYlRlc3REZWxlZ2F0ZTsKLQotY2xhc3Mg
V2ViUGVybWlzc2lvbnMgOiBwdWJsaWMgV2ViS2l0OjpXZWJQZXJtaXNzaW9uQ2xpZW50IHsKLXB1
YmxpYzoKLSAgICBXZWJQZXJtaXNzaW9ucygpOwotICAgIHZpcnR1YWwgfldlYlBlcm1pc3Npb25z
KCk7Ci0KLSAgICAvLyBPdmVycmlkZSBXZWJQZXJtaXNzaW9uQ2xpZW50IG1ldGhvZHMuCi0gICAg
dmlydHVhbCBib29sIGFsbG93SW1hZ2UoV2ViS2l0OjpXZWJGcmFtZSosIGJvb2wgZW5hYmxlZFBl
clNldHRpbmdzLCBjb25zdCBXZWJLaXQ6OldlYlVSTCYgaW1hZ2VVUkwpOwotICAgIHZpcnR1YWwg
Ym9vbCBhbGxvd1NjcmlwdEZyb21Tb3VyY2UoV2ViS2l0OjpXZWJGcmFtZSosIGJvb2wgZW5hYmxl
ZFBlclNldHRpbmdzLCBjb25zdCBXZWJLaXQ6OldlYlVSTCYgc2NyaXB0VVJMKTsKLSAgICB2aXJ0
dWFsIGJvb2wgYWxsb3dTdG9yYWdlKFdlYktpdDo6V2ViRnJhbWUqLCBib29sIGxvY2FsKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgYWxsb3dQbHVnaW5zKFdlYktpdDo6V2ViRnJhbWUqLCBib29sIGVuYWJs
ZWRQZXJTZXR0aW5ncyk7Ci0gICAgdmlydHVhbCBib29sIGFsbG93RGlzcGxheWluZ0luc2VjdXJl
Q29udGVudChXZWJLaXQ6OldlYkZyYW1lKiwgYm9vbCBlbmFibGVkUGVyU2V0dGluZ3MsIGNvbnN0
IFdlYktpdDo6V2ViU2VjdXJpdHlPcmlnaW4mLCBjb25zdCBXZWJLaXQ6OldlYlVSTCYpOwotICAg
IHZpcnR1YWwgYm9vbCBhbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQoV2ViS2l0OjpXZWJGcmFt
ZSosIGJvb2wgZW5hYmxlZFBlclNldHRpbmdzLCBjb25zdCBXZWJLaXQ6OldlYlNlY3VyaXR5T3Jp
Z2luJiwgY29uc3QgV2ViS2l0OjpXZWJVUkwmKTsKLQotICAgIC8vIEhvb2tzIHRvIHNldCB0aGUg
ZGlmZmVyZW50IHBvbGljaWVzLgotICAgIHZvaWQgc2V0SW1hZ2VzQWxsb3dlZChib29sKTsKLSAg
ICB2b2lkIHNldFNjcmlwdHNBbGxvd2VkKGJvb2wpOwotICAgIHZvaWQgc2V0U3RvcmFnZUFsbG93
ZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRQbHVnaW5zQWxsb3dlZChib29sKTsKLSAgICB2b2lkIHNl
dERpc3BsYXlpbmdJbnNlY3VyZUNvbnRlbnRBbGxvd2VkKGJvb2wpOwotICAgIHZvaWQgc2V0UnVu
bmluZ0luc2VjdXJlQ29udGVudEFsbG93ZWQoYm9vbCk7Ci0KLSAgICAvLyBSZXNldHMgdGhlIHBv
bGljeSB0byBhbGxvdyBldmVyeXRoaW5nLCBleGNlcHQgZm9yIHJ1bm5pbmcgaW5zZWN1cmUgY29u
dGVudC4KLSAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICB2b2lkIHNldERlbGVnYXRlKFdlYlRlc3RE
ZWxlZ2F0ZSopOwotICAgIHZvaWQgc2V0RHVtcENhbGxiYWNrcyhib29sKTsKLQotcHJpdmF0ZToK
LSAgICBXZWJUZXN0RGVsZWdhdGUqIG1fZGVsZWdhdGU7Ci0gICAgYm9vbCBtX2R1bXBDYWxsYmFj
a3M7Ci0KLSAgICBib29sIG1faW1hZ2VzQWxsb3dlZDsKLSAgICBib29sIG1fc2NyaXB0c0FsbG93
ZWQ7Ci0gICAgYm9vbCBtX3N0b3JhZ2VBbGxvd2VkOwotICAgIGJvb2wgbV9wbHVnaW5zQWxsb3dl
ZDsKLSAgICBib29sIG1fZGlzcGxheWluZ0luc2VjdXJlQ29udGVudEFsbG93ZWQ7Ci0gICAgYm9v
bCBtX3J1bm5pbmdJbnNlY3VyZUNvbnRlbnRBbGxvd2VkOwotfTsKLQotfQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dl
YlByZWZlcmVuY2VzLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5u
ZXIvc3JjL1dlYlByZWZlcmVuY2VzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
N2YwMjE2Zjc4YjVmOWQ5OWQ1ZGJiNzdiY2JiYzkwOTVlNzEwMzkxMi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9XZWJQcmVmZXJlbmNlcy5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJQcmVmZXJlbmNl
cy5oIgotCi0jaW5jbHVkZSAiV2ViUnVudGltZUZlYXR1cmVzLmgiCi0jaW5jbHVkZSAiV2ViVmll
dy5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5l
ciB7Ci0KLXZvaWQgV2ViUHJlZmVyZW5jZXM6OnJlc2V0KCkKLXsKLSNpZmRlZiBfX0FQUExFX18K
LSAgICBjdXJzaXZlRm9udEZhbWlseSA9IFdlYlN0cmluZzo6ZnJvbVVURjgoIkFwcGxlIENoYW5j
ZXJ5Iik7Ci0gICAgZmFudGFzeUZvbnRGYW1pbHkgPSBXZWJTdHJpbmc6OmZyb21VVEY4KCJQYXB5
cnVzIik7Ci0gICAgV2ViU3RyaW5nIHNlcmlmID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgiVGltZXMi
KTsKLSNlbHNlCi0gICAgLy8gVGhlc2UgdHdvIGZvbnRzIGFyZSBwaWNrZWQgZnJvbSB0aGUgaW50
ZXJzZWN0aW9uIG9mCi0gICAgLy8gV2luIFhQIGZvbnQgbGlzdCBhbmQgVmlzdGEgZm9udCBsaXN0
IDoKLSAgICAvLyAgIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L2ZvbnRzL3dp
bnhwLmh0bQotICAgIC8vICAgaHR0cDovL2Jsb2dzLm1zZG4uY29tL21pY2hrYXAvYXJjaGl2ZS8y
MDA2LzA0LzA0LzU2Nzg4MS5hc3B4Ci0gICAgLy8gU29tZSBvZiB0aGVtIGFyZSBpbnN0YWxsZWQg
b25seSB3aXRoIENKSyBhbmQgY29tcGxleCBzY3JpcHQKLSAgICAvLyBzdXBwb3J0IGVuYWJsZWQg
b24gV2luZG93cyBYUCBhbmQgYXJlIG91dCBvZiBjb25zaWRlcmF0aW9uIGhlcmUuCi0gICAgLy8g
KGFsdGhvdWdoIHdlIGVuYWJsZWQgYm90aCBvbiBvdXIgYnVpbGRib3RzLikKLSAgICAvLyBUaGV5
IChlc3BlY2lhbGx5IEltcGFjdCBmb3IgZmFudGFzeSkgYXJlIG5vdCB0eXBpY2FsIGN1cnNpdmUK
LSAgICAvLyBhbmQgZmFudGFzeSBmb250cywgYnV0IGl0IHNob3VsZCBub3QgbWF0dGVyIGZvciBs
YXlvdXQgdGVzdHMKLSAgICAvLyBhcyBsb25nIGFzIHRoZXkncmUgYXZhaWxhYmxlLgotICAgIGN1
cnNpdmVGb250RmFtaWx5ID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgiQ29taWMgU2FucyBNUyIpOwot
ICAgIGZhbnRhc3lGb250RmFtaWx5ID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgiSW1wYWN0Iik7Ci0g
ICAgLy8gTk9URTogY2FzZSBtYXR0ZXJzIGhlcmUsIHRoaXMgbXVzdCBiZSAndGltZXMgbmV3IHJv
bWFuJywgZWxzZQotICAgIC8vIHNvbWUgbGF5b3V0IHRlc3RzIGZhaWwuCi0gICAgV2ViU3RyaW5n
IHNlcmlmID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgidGltZXMgbmV3IHJvbWFuIik7Ci0jZW5kaWYK
LSAgICBzZXJpZkZvbnRGYW1pbHkgPSBzZXJpZjsKLSAgICBzdGFuZGFyZEZvbnRGYW1pbHkgPSBz
ZXJpZjsKLSAgICBmaXhlZEZvbnRGYW1pbHkgPSBXZWJTdHJpbmc6OmZyb21VVEY4KCJDb3VyaWVy
Iik7Ci0gICAgc2Fuc1NlcmlmRm9udEZhbWlseSA9IFdlYlN0cmluZzo6ZnJvbVVURjgoIkhlbHZl
dGljYSIpOwotCi0gICAgZGVmYXVsdEZvbnRTaXplID0gMTY7Ci0gICAgZGVmYXVsdEZpeGVkRm9u
dFNpemUgPSAxMzsKLSAgICBtaW5pbXVtRm9udFNpemUgPSAwOwotICAgIG1pbmltdW1Mb2dpY2Fs
Rm9udFNpemUgPSA5OwotICAgIC8vIERvIG5vdCBkaXNhYmxlIGFjY2VsZXJhdGlvbiBmb3IgMmQg
Y2FudmFzIGJhc2VkIG9uIHNpemUuCi0gICAgLy8gVGhpcyBtYWtlcyBoYXZpbmcgdGVzdCBleHBl
Y3RhdGlvbnMgY29uc2lzdGVudC4KLSAgICBtaW5pbXVtQWNjZWxlcmF0ZWQyZENhbnZhc1NpemUg
PSAwOwotCi0gICAgRE9NUGFzdGVBbGxvd2VkID0gdHJ1ZTsKLSAgICBYU1NBdWRpdG9yRW5hYmxl
ZCA9IGZhbHNlOwotICAgIGFsbG93RGlzcGxheU9mSW5zZWN1cmVDb250ZW50ID0gdHJ1ZTsKLSAg
ICBhbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMgPSB0cnVlOwotICAgIGFsbG93UnVubmluZ09m
SW5zZWN1cmVDb250ZW50ID0gdHJ1ZTsKLSAgICBhdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCA9
IHRydWU7Ci0gICAgZGVmYXVsdFRleHRFbmNvZGluZ05hbWUgPSBXZWJTdHJpbmc6OmZyb21VVEY4
KCJJU08tODg1OS0xIik7Ci0gICAgZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCA9IHRydWU7Ci0gICAg
ZXhwZXJpbWVudGFsV2ViR0xFbmFibGVkID0gZmFsc2U7Ci0gICAgZXhwZXJpbWVudGFsQ1NTUmVn
aW9uc0VuYWJsZWQgPSB0cnVlOwotICAgIGV4cGVyaW1lbnRhbENTU0dyaWRMYXlvdXRFbmFibGVk
ID0gZmFsc2U7Ci0gICAgamF2YUVuYWJsZWQgPSBmYWxzZTsKLSAgICBqYXZhU2NyaXB0Q2FuQWNj
ZXNzQ2xpcGJvYXJkID0gdHJ1ZTsKLSAgICBqYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0
aWNhbGx5ID0gdHJ1ZTsKLSAgICBzdXBwb3J0c011bHRpcGxlV2luZG93cyA9IHRydWU7Ci0gICAg
amF2YVNjcmlwdEVuYWJsZWQgPSB0cnVlOwotICAgIGxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSA9
IHRydWU7Ci0gICAgbG9jYWxTdG9yYWdlRW5hYmxlZCA9IHRydWU7Ci0gICAgb2ZmbGluZVdlYkFw
cGxpY2F0aW9uQ2FjaGVFbmFibGVkID0gdHJ1ZTsKLSAgICBwbHVnaW5zRW5hYmxlZCA9IHRydWU7
Ci0gICAgc2hyaW5rc1N0YW5kYWxvbmVJbWFnZXNUb0ZpdCA9IGZhbHNlOwotICAgIHRleHRBcmVh
c0FyZVJlc2l6YWJsZSA9IHRydWU7Ci0gICAgdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IFdlYlVS
TCgpOwotICAgIHVzZXNQYWdlQ2FjaGUgPSBmYWxzZTsKLSAgICBwYWdlQ2FjaGVTdXBwb3J0c1Bs
dWdpbnMgPSBmYWxzZTsKLSAgICB3ZWJTZWN1cml0eUVuYWJsZWQgPSB0cnVlOwotICAgIGNhcmV0
QnJvd3NpbmdFbmFibGVkID0gZmFsc2U7Ci0KLSAgICAvLyBBbGxvdyB0aG9zZSBsYXlvdXQgdGVz
dHMgcnVubmluZyBhcyBsb2NhbCBmaWxlcywgaS5lLiB1bmRlcgotICAgIC8vIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbG9jYWwsIHRvIGFjY2VzcyBodHRwIHNlcnZlci4KLSAgICBhbGxvd1VuaXZl
cnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyA9IHRydWU7Ci0KLSNpZmRlZiBfX0FQUExFX18KLSAgICBl
ZGl0aW5nQmVoYXZpb3IgPSBXZWJTZXR0aW5nczo6RWRpdGluZ0JlaGF2aW9yTWFjOwotI2Vsc2UK
LSAgICBlZGl0aW5nQmVoYXZpb3IgPSBXZWJTZXR0aW5nczo6RWRpdGluZ0JlaGF2aW9yV2luOwot
I2VuZGlmCi0KLSAgICB0YWJzVG9MaW5rcyA9IGZhbHNlOwotICAgIGh5cGVybGlua0F1ZGl0aW5n
RW5hYmxlZCA9IGZhbHNlOwotICAgIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWRlb0VuYWJs
ZWQgPSBmYWxzZTsKLSAgICBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVu
YWJsZWQgPSBmYWxzZTsKLSAgICBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3Jv
bGxFbmFibGVkID0gZmFsc2U7Ci0gICAgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQgPSBm
YWxzZTsKLSAgICBhY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZCA9IGZhbHNlOwotICAgIGZvcmNl
Q29tcG9zaXRpbmdNb2RlID0gZmFsc2U7Ci0gICAgdGhyZWFkZWRIVE1MUGFyc2VyID0gdHJ1ZTsK
LSAgICBwZXJUaWxlUGFpbnRpbmdFbmFibGVkID0gZmFsc2U7Ci0gICAgZGVmZXJyZWRJbWFnZURl
Y29kaW5nRW5hYmxlZCA9IGZhbHNlOwotICAgIG1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0
dXJlID0gZmFsc2U7Ci0gICAgbW9ja1Njcm9sbGJhcnNFbmFibGVkID0gZmFsc2U7Ci0gICAgY3Nz
Q3VzdG9tRmlsdGVyRW5hYmxlZCA9IGZhbHNlOwotICAgIHNob3VsZFJlc3BlY3RJbWFnZU9yaWVu
dGF0aW9uID0gZmFsc2U7Ci0gICAgYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBm
YWxzZTsKLX0KLQotdm9pZCBXZWJQcmVmZXJlbmNlczo6YXBwbHlUbyhXZWJWaWV3KiB3ZWJWaWV3
KQotewotICAgIFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYlZpZXctPnNldHRpbmdzKCk7Ci0g
ICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseShzdGFuZGFyZEZvbnRGYW1pbHkpOwot
ICAgIHNldHRpbmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoZml4ZWRGb250RmFtaWx5KTsKLSAgICBz
ZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5KHNlcmlmRm9udEZhbWlseSk7Ci0gICAgc2V0dGlu
Z3MtPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoc2Fuc1NlcmlmRm9udEZhbWlseSk7Ci0gICAgc2V0
dGluZ3MtPnNldEN1cnNpdmVGb250RmFtaWx5KGN1cnNpdmVGb250RmFtaWx5KTsKLSAgICBzZXR0
aW5ncy0+c2V0RmFudGFzeUZvbnRGYW1pbHkoZmFudGFzeUZvbnRGYW1pbHkpOwotCi0gICAgc2V0
dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZShkZWZhdWx0Rm9udFNpemUpOwotICAgIHNldHRpbmdz
LT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZShkZWZhdWx0Rml4ZWRGb250U2l6ZSk7Ci0gICAgc2V0
dGluZ3MtPnNldE1pbmltdW1Gb250U2l6ZShtaW5pbXVtRm9udFNpemUpOwotICAgIHNldHRpbmdz
LT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKG1pbmltdW1Mb2dpY2FsRm9udFNpemUpOwotICAg
IHNldHRpbmdzLT5zZXRNaW5pbXVtQWNjZWxlcmF0ZWQyZENhbnZhc1NpemUobWluaW11bUFjY2Vs
ZXJhdGVkMmRDYW52YXNTaXplKTsKLQotICAgIHNldHRpbmdzLT5zZXRET01QYXN0ZUFsbG93ZWQo
RE9NUGFzdGVBbGxvd2VkKTsKLSAgICBzZXR0aW5ncy0+c2V0WFNTQXVkaXRvckVuYWJsZWQoWFNT
QXVkaXRvckVuYWJsZWQpOwotICAgIHNldHRpbmdzLT5zZXRBbGxvd0Rpc3BsYXlPZkluc2VjdXJl
Q29udGVudChhbGxvd0Rpc3BsYXlPZkluc2VjdXJlQ29udGVudCk7Ci0gICAgc2V0dGluZ3MtPnNl
dEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhhbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMp
OwotICAgIHNldHRpbmdzLT5zZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudChhbGxvd1J1
bm5pbmdPZkluc2VjdXJlQ29udGVudCk7Ci0gICAgc2V0dGluZ3MtPnNldEF1dGhvckFuZFVzZXJT
dHlsZXNFbmFibGVkKGF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKTsKLSAgICBzZXR0aW5ncy0+
c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoZGVmYXVsdFRleHRFbmNvZGluZ05hbWUpOwotICAg
IHNldHRpbmdzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGRldmVsb3BlckV4dHJhc0VuYWJs
ZWQpOwotICAgIHNldHRpbmdzLT5zZXRFeHBlcmltZW50YWxXZWJHTEVuYWJsZWQoZXhwZXJpbWVu
dGFsV2ViR0xFbmFibGVkKTsKLSAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUNTU1JlZ2lv
bnMoZXhwZXJpbWVudGFsQ1NTUmVnaW9uc0VuYWJsZWQpOwotICAgIHNldHRpbmdzLT5zZXRFeHBl
cmltZW50YWxDU1NHcmlkTGF5b3V0RW5hYmxlZChleHBlcmltZW50YWxDU1NHcmlkTGF5b3V0RW5h
YmxlZCk7Ci0gICAgc2V0dGluZ3MtPnNldEV4cGVyaW1lbnRhbENTU0N1c3RvbUZpbHRlckVuYWJs
ZWQoY3NzQ3VzdG9tRmlsdGVyRW5hYmxlZCk7Ci0gICAgc2V0dGluZ3MtPnNldEphdmFFbmFibGVk
KGphdmFFbmFibGVkKTsKLSAgICBzZXR0aW5ncy0+c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBi
b2FyZChqYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKTsKLSAgICBzZXR0aW5ncy0+c2V0SmF2
YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseShqYXZhU2NyaXB0Q2FuT3BlbldpbmRv
d3NBdXRvbWF0aWNhbGx5KTsKLSAgICBzZXR0aW5ncy0+c2V0U3VwcG9ydHNNdWx0aXBsZVdpbmRv
d3Moc3VwcG9ydHNNdWx0aXBsZVdpbmRvd3MpOwotICAgIHNldHRpbmdzLT5zZXRKYXZhU2NyaXB0
RW5hYmxlZChqYXZhU2NyaXB0RW5hYmxlZCk7Ci0gICAgc2V0dGluZ3MtPnNldExvYWRzSW1hZ2Vz
QXV0b21hdGljYWxseShsb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkpOwotICAgIHNldHRpbmdzLT5z
ZXRMb2NhbFN0b3JhZ2VFbmFibGVkKGxvY2FsU3RvcmFnZUVuYWJsZWQpOwotICAgIHNldHRpbmdz
LT5zZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQob2ZmbGluZVdlYkFwcGxpY2F0
aW9uQ2FjaGVFbmFibGVkKTsKLSAgICBzZXR0aW5ncy0+c2V0UGx1Z2luc0VuYWJsZWQocGx1Z2lu
c0VuYWJsZWQpOwotICAgIHNldHRpbmdzLT5zZXRTaHJpbmtzU3RhbmRhbG9uZUltYWdlc1RvRml0
KHNocmlua3NTdGFuZGFsb25lSW1hZ2VzVG9GaXQpOwotICAgIHNldHRpbmdzLT5zZXRUZXh0QXJl
YXNBcmVSZXNpemFibGUodGV4dEFyZWFzQXJlUmVzaXphYmxlKTsKLSAgICBzZXR0aW5ncy0+c2V0
VXNlclN0eWxlU2hlZXRMb2NhdGlvbih1c2VyU3R5bGVTaGVldExvY2F0aW9uKTsKLSAgICBzZXR0
aW5ncy0+c2V0VXNlc1BhZ2VDYWNoZSh1c2VzUGFnZUNhY2hlKTsKLSAgICBzZXR0aW5ncy0+c2V0
UGFnZUNhY2hlU3VwcG9ydHNQbHVnaW5zKHBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucyk7Ci0gICAg
c2V0dGluZ3MtPnNldFdlYlNlY3VyaXR5RW5hYmxlZCh3ZWJTZWN1cml0eUVuYWJsZWQpOwotICAg
IHNldHRpbmdzLT5zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhhbGxvd1VuaXZl
cnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyk7Ci0gICAgc2V0dGluZ3MtPnNldEVkaXRpbmdCZWhhdmlv
cihlZGl0aW5nQmVoYXZpb3IpOwotICAgIHNldHRpbmdzLT5zZXRIeXBlcmxpbmtBdWRpdGluZ0Vu
YWJsZWQoaHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkKTsKLSAgICAvLyBMYXlvdXRUZXN0cyB3ZXJl
IHdyaXR0ZW4gd2l0aCBTYWZhcmkgTWFjIGluIG1pbmQgd2hpY2ggZG9lcyBub3QgYWxsb3cKLSAg
ICAvLyB0YWJiaW5nIHRvIGxpbmtzIGJ5IGRlZmF1bHQuCi0gICAgd2ViVmlldy0+c2V0VGFic1Rv
TGlua3ModGFic1RvTGlua3MpOwotICAgIHNldHRpbmdzLT5zZXRDYXJldEJyb3dzaW5nRW5hYmxl
ZChjYXJldEJyb3dzaW5nRW5hYmxlZCk7Ci0gICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdFbmFibGVkKGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKTsKLSAgICBzZXR0
aW5ncy0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVvRW5hYmxlZChhY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRm9yVmlkZW9FbmFibGVkKTsKLSAgICBzZXR0aW5ncy0+c2V0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCk7Ci0gICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJsZWQoYWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCk7Ci0gICAgc2V0dGluZ3MtPnNldEZpeGVkUG9zaXRp
b25DcmVhdGVzU3RhY2tpbmdDb250ZXh0KGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBv
c2l0aW9uRW5hYmxlZCk7Ci0gICAgc2V0dGluZ3MtPnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKGZv
cmNlQ29tcG9zaXRpbmdNb2RlKTsKLSAgICBzZXR0aW5ncy0+c2V0VGhyZWFkZWRIVE1MUGFyc2Vy
KHRocmVhZGVkSFRNTFBhcnNlcik7Ci0gICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkMmRDYW52
YXNFbmFibGVkKGFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKTsKLSAgICBzZXR0aW5ncy0+c2V0
UGVyVGlsZVBhaW50aW5nRW5hYmxlZChwZXJUaWxlUGFpbnRpbmdFbmFibGVkKTsKLSAgICBzZXR0
aW5ncy0+c2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChkZWZlcnJlZEltYWdlRGVjb2Rp
bmdFbmFibGVkKTsKLSAgICBzZXR0aW5ncy0+c2V0TWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdl
c3R1cmUobWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUpOwotICAgIHNldHRpbmdzLT5z
ZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQobW9ja1Njcm9sbGJhcnNFbmFibGVkKTsKLSAgICBzZXR0
aW5ncy0+c2V0U2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oc2hvdWxkUmVzcGVjdEltYWdl
T3JpZW50YXRpb24pOwotICAgIHNldHRpbmdzLT5zZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5n
RW5hYmxlZChhc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7Ci0KLSAgICAvLyBGaXhl
ZCB2YWx1ZXMuCi0gICAgc2V0dGluZ3MtPnNldFRvdWNoRHJhZ0Ryb3BFbmFibGVkKGZhbHNlKTsK
LSAgICBzZXR0aW5ncy0+c2V0VGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25CZWhhdmlvck5l
dmVySW5jbHVkZWQoKTsKLSAgICBzZXR0aW5ncy0+c2V0RG93bmxvYWRhYmxlQmluYXJ5Rm9udHNF
bmFibGVkKHRydWUpOwotICAgIHNldHRpbmdzLT5zZXRBbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93
cyhmYWxzZSk7Ci0gICAgc2V0dGluZ3MtPnNldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKHRydWUp
OwotICAgIHNldHRpbmdzLT5zZXRFZGl0YWJsZUxpbmtCZWhhdmlvck5ldmVyTGl2ZSgpOwotICAg
IHNldHRpbmdzLT5zZXRFbmFibGVTY3JvbGxBbmltYXRvcihmYWxzZSk7Ci0gICAgc2V0dGluZ3Mt
PnNldEZvbnRSZW5kZXJpbmdNb2RlTm9ybWFsKCk7Ci0gICAgc2V0dGluZ3MtPnNldFRleHREaXJl
Y3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZpb3JOZXZlckluY2x1ZGVkKCk7Ci0gICAgc2V0dGlu
Z3MtPnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKGZhbHNlKTsKLSAgICBzZXR0aW5ncy0+c2V0SW1h
Z2VzRW5hYmxlZCh0cnVlKTsKLSAgICBzZXR0aW5ncy0+c2V0SW50ZXJhY3RpdmVGb3JtVmFsaWRh
dGlvbkVuYWJsZWQodHJ1ZSk7Ci0gICAgLy8gRW5hYmxlIGZ1bGxzY3JlZW4gc28gdGhlIGZ1bGxz
Y3JlZW4gbGF5b3V0IHRlc3RzIGNhbiBydW4uCi0gICAgc2V0dGluZ3MtPnNldEZ1bGxTY3JlZW5F
bmFibGVkKHRydWUpOwotICAgIHNldHRpbmdzLT5zZXRWYWxpZGF0aW9uTWVzc2FnZVRpbWVyTWFn
bmlmaWNhdGlvbigtMSk7Ci0gICAgc2V0dGluZ3MtPnNldFZpc3VhbFdvcmRNb3ZlbWVudEVuYWJs
ZWQoZmFsc2UpOwotICAgIHNldHRpbmdzLT5zZXRQYXNzd29yZEVjaG9FbmFibGVkKGZhbHNlKTsK
LSAgICBzZXR0aW5ncy0+c2V0QXBwbHlEZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcih0cnVl
KTsKLSAgICBzZXR0aW5ncy0+c2V0QXBwbHlQYWdlU2NhbGVGYWN0b3JJbkNvbXBvc2l0b3IodHJ1
ZSk7Ci0gICAgc2V0dGluZ3MtPnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCh0cnVlKTsKLSNp
ZmRlZiBXSU4zMgotICAgIHNldHRpbmdzLT5zZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFi
bGVkKHRydWUpOwotI2Vsc2UKLSAgICBzZXR0aW5ncy0+c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNw
YWNlRW5hYmxlZChmYWxzZSk7Ci0jZW5kaWYKLX0KLQotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGFzay5jcHAgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUYXNrLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc5ZjUzZTU4YWU4NTQyMjJlZDg1NmYzZjE1MjBjMTg0
ZWFhYmEwMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUYXNrLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiV2ViVGFzay5oIgotCi0jaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSA8YWxnb3JpdGht
PgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0K
LVdlYlRhc2s6OldlYlRhc2soV2ViVGFza0xpc3QqIGxpc3QpCi0gICAgOiBtX3Rhc2tMaXN0KGxp
c3QpCi17Ci0gICAgbV90YXNrTGlzdC0+cmVnaXN0ZXJUYXNrKHRoaXMpOwotfQotCi1XZWJUYXNr
Ojp+V2ViVGFzaygpCi17Ci0gICAgaWYgKG1fdGFza0xpc3QpCi0gICAgICAgIG1fdGFza0xpc3Qt
PnVucmVnaXN0ZXJUYXNrKHRoaXMpOwotfQotCi1XZWJUYXNrTGlzdDo6V2ViVGFza0xpc3QoKQot
ewotfQotCi1XZWJUYXNrTGlzdDo6fldlYlRhc2tMaXN0KCkKLXsKLSAgICByZXZva2VBbGwoKTsK
LX0KLQotdm9pZCBXZWJUYXNrTGlzdDo6cmVnaXN0ZXJUYXNrKFdlYlRhc2sqIHRhc2spCi17Ci0g
ICAgbV90YXNrcy5wdXNoX2JhY2sodGFzayk7Ci19Ci0KLXZvaWQgV2ViVGFza0xpc3Q6OnVucmVn
aXN0ZXJUYXNrKFdlYlRhc2sqIHRhc2spCi17Ci0gICAgdmVjdG9yPFdlYlRhc2sqPjo6aXRlcmF0
b3IgaXRlciA9IGZpbmQobV90YXNrcy5iZWdpbigpLCBtX3Rhc2tzLmVuZCgpLCB0YXNrKTsKLSAg
ICBpZiAoaXRlciAhPSBtX3Rhc2tzLmVuZCgpKQotICAgICAgICBtX3Rhc2tzLmVyYXNlKGl0ZXIp
OwotfQotCi12b2lkIFdlYlRhc2tMaXN0OjpyZXZva2VBbGwoKQotewotICAgIHdoaWxlICghbV90
YXNrcy5lbXB0eSgpKQotICAgICAgICBtX3Rhc2tzWzBdLT5jYW5jZWwoKTsKLX0KLQotfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2Vi
VGVzdEludGVyZmFjZXMuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9zcmMvV2ViVGVzdEludGVyZmFjZXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjMmRiZDE2OWJjZmRmYTI5ZjA0NGVjNzQzYTAxZDI3MjYxN2EzMmZkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RJbnRlcmZhY2VzLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlRl
c3RJbnRlcmZhY2VzLmgiCi0KLSNpbmNsdWRlICJNb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXIuaCIK
LSNpbmNsdWRlICJNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgiCi0jaW5jbHVkZSAi
VGVzdEludGVyZmFjZXMuaCIKLSNpbmNsdWRlICJUZXN0UnVubmVyLmgiCi0KLXVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotV2ViVGVzdEludGVy
ZmFjZXM6OldlYlRlc3RJbnRlcmZhY2VzKCkKLSAgICA6IG1faW50ZXJmYWNlcyhuZXcgVGVzdElu
dGVyZmFjZXMoKSkKLXsKLX0KLQotV2ViVGVzdEludGVyZmFjZXM6On5XZWJUZXN0SW50ZXJmYWNl
cygpCi17Ci19Ci0KLXZvaWQgV2ViVGVzdEludGVyZmFjZXM6OnNldFdlYlZpZXcoV2ViVmlldyog
d2ViVmlldywgV2ViVGVzdFByb3h5QmFzZSogcHJveHkpCi17Ci0gICAgbV9pbnRlcmZhY2VzLT5z
ZXRXZWJWaWV3KHdlYlZpZXcsIHByb3h5KTsKLX0KLQotdm9pZCBXZWJUZXN0SW50ZXJmYWNlczo6
c2V0RGVsZWdhdGUoV2ViVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSkKLXsKLSAgICBtX2ludGVyZmFj
ZXMtPnNldERlbGVnYXRlKGRlbGVnYXRlKTsKLX0KLQotdm9pZCBXZWJUZXN0SW50ZXJmYWNlczo6
YmluZFRvKFdlYkZyYW1lKiBmcmFtZSkKLXsKLSAgICBtX2ludGVyZmFjZXMtPmJpbmRUbyhmcmFt
ZSk7Ci19Ci0KLXZvaWQgV2ViVGVzdEludGVyZmFjZXM6OnJlc2V0QWxsKCkKLXsKLSAgICBtX2lu
dGVyZmFjZXMtPnJlc2V0QWxsKCk7Ci19Ci0KLXZvaWQgV2ViVGVzdEludGVyZmFjZXM6OnNldFRl
c3RJc1J1bm5pbmcoYm9vbCBydW5uaW5nKQotewotICAgIG1faW50ZXJmYWNlcy0+c2V0VGVzdElz
UnVubmluZyhydW5uaW5nKTsKLX0KLQotdm9pZCBXZWJUZXN0SW50ZXJmYWNlczo6Y29uZmlndXJl
Rm9yVGVzdFdpdGhVUkwoY29uc3QgV2ViVVJMJiB0ZXN0VVJMLCBib29sIGdlbmVyYXRlUGl4ZWxz
KQotewotICAgIG1faW50ZXJmYWNlcy0+Y29uZmlndXJlRm9yVGVzdFdpdGhVUkwodGVzdFVSTCwg
Z2VuZXJhdGVQaXhlbHMpOwotfQotCi1XZWJUZXN0UnVubmVyKiBXZWJUZXN0SW50ZXJmYWNlczo6
dGVzdFJ1bm5lcigpCi17Ci0gICAgcmV0dXJuIG1faW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpOwot
fQotCi1XZWJUaGVtZUVuZ2luZSogV2ViVGVzdEludGVyZmFjZXM6OnRoZW1lRW5naW5lKCkKLXsK
LSAgICByZXR1cm4gbV9pbnRlcmZhY2VzLT50aGVtZUVuZ2luZSgpOwotfQotCi1UZXN0SW50ZXJm
YWNlcyogV2ViVGVzdEludGVyZmFjZXM6OnRlc3RJbnRlcmZhY2VzKCkKLXsKLSAgICByZXR1cm4g
bV9pbnRlcmZhY2VzLmdldCgpOwotfQotCi0jaWYgRU5BQkxFX1dFQlJUQwotV2ViTWVkaWFTdHJl
YW1DZW50ZXIqIFdlYlRlc3RJbnRlcmZhY2VzOjpjcmVhdGVNZWRpYVN0cmVhbUNlbnRlcihXZWJN
ZWRpYVN0cmVhbUNlbnRlckNsaWVudCogY2xpZW50KQotewotICAgIHJldHVybiBuZXcgTW9ja1dl
Yk1lZGlhU3RyZWFtQ2VudGVyKGNsaWVudCk7Ci19Ci0KLVdlYlJUQ1BlZXJDb25uZWN0aW9uSGFu
ZGxlciogV2ViVGVzdEludGVyZmFjZXM6OmNyZWF0ZVdlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxl
cihXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICByZXR1
cm4gbmV3IE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIoY2xpZW50LCBtX2ludGVyZmFj
ZXMuZ2V0KCkpOwotfQotI2VuZGlmIC8vIEVOQUJMRV9XRUJSVEMKLQotfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFByb3h5
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRl
c3RQcm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjM2ViYjdkZjA0OGJk
ODAxZGE2YzJkZTRmNWJjOWFmYzBhNmJmZTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5l
ci9zcmMvV2ViVGVzdFByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0OTQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJUZXN0UHJveHkuaCIKLQotI2luY2x1ZGUg
IkFjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJFdmVudFNlbmRl
ci5oIgotI2luY2x1ZGUgIk1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuaCIKLSNpbmNsdWRl
ICJNb2NrV2ViU3BlZWNoUmVjb2duaXplci5oIgotI2luY2x1ZGUgIlNwZWxsQ2hlY2tDbGllbnQu
aCIKLSNpbmNsdWRlICJUZXN0Q29tbW9uLmgiCi0jaW5jbHVkZSAiVGVzdEludGVyZmFjZXMuaCIK
LSNpbmNsdWRlICJUZXN0UGx1Z2luLmgiCi0jaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgotI2luY2x1
ZGUgIldlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24uaCIKLSNpbmNsdWRlICJXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0LmgiCi0jaW5jbHVkZSAiV2ViQ2FjaGVkVVJMUmVxdWVzdC5oIgotI2luY2x1
ZGUgIldlYkNvbnNvbGVNZXNzYWdlLmgiCi0jaW5jbHVkZSAiV2ViRGF0YVNvdXJjZS5oIgotI2lu
Y2x1ZGUgIldlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5oIgotI2luY2x1ZGUgIldlYkRv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiV2ViRWxlbWVudC5oIgotI2luY2x1ZGUgIldlYkZyYW1lLmgi
Ci0jaW5jbHVkZSAiV2ViR2VvbG9jYXRpb25DbGllbnRNb2NrLmgiCi0jaW5jbHVkZSAiV2ViSGlz
dG9yeUl0ZW0uaCIKLSNpbmNsdWRlICJXZWJOb2RlLmgiCi0jaW5jbHVkZSAiV2ViUGx1Z2luUGFy
YW1zLmgiCi0jaW5jbHVkZSAiV2ViUHJpbnRQYXJhbXMuaCIKLSNpbmNsdWRlICJXZWJSYW5nZS5o
IgotI2luY2x1ZGUgIldlYlNjcmlwdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJXZWJUZXN0RGVs
ZWdhdGUuaCIKLSNpbmNsdWRlICJXZWJUZXN0SW50ZXJmYWNlcy5oIgotI2luY2x1ZGUgIldlYlRl
c3RSdW5uZXIuaCIKLSNpbmNsdWRlICJXZWJVc2VyR2VzdHVyZUluZGljYXRvci5oIgotI2luY2x1
ZGUgIldlYlVzZXJNZWRpYUNsaWVudE1vY2suaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0vLyBG
SVhNRTogSW5jbHVkaW5nIHBsYXRmb3JtX2NhbnZhcy5oIGhlcmUgaXMgYSBsYXllcmluZyB2aW9s
YXRpb24uCi0jaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCi0jaW5jbHVkZSA8
Y2N0eXBlPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJDU3RyaW5nLmg+Ci0jaW5jbHVkZSA8cHVibGlj
L1dlYlVSTEVycm9yLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlVSTFJlcXVlc3QuaD4KLSNpbmNs
dWRlIDxwdWJsaWMvV2ViVVJMUmVzcG9uc2UuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
LXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotbmFt
ZXNwYWNlIHsKLQotdm9pZCBwcmludE5vZGVEZXNjcmlwdGlvbihXZWJUZXN0RGVsZWdhdGUqIGRl
bGVnYXRlLCBjb25zdCBXZWJOb2RlJiBub2RlLCBpbnQgZXhjZXB0aW9uKQotewotICAgIGlmIChl
eGNlcHRpb24pIHsKLSAgICAgICAgZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiRVJST1IiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAobm9kZS5pc051bGwoKSkgewotICAgICAgICBk
ZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCIobnVsbCkiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBkZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKG5vZGUubm9kZU5hbWUoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICBjb25zdCBXZWJOb2RlJiBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsKLSAgICBp
ZiAoIXBhcmVudC5pc051bGwoKSkgewotICAgICAgICBkZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCIg
PiAiKTsKLSAgICAgICAgcHJpbnROb2RlRGVzY3JpcHRpb24oZGVsZWdhdGUsIHBhcmVudCwgMCk7
Ci0gICAgfQotfQotCi12b2lkIHByaW50UmFuZ2VEZXNjcmlwdGlvbihXZWJUZXN0RGVsZWdhdGUq
IGRlbGVnYXRlLCBjb25zdCBXZWJSYW5nZSYgcmFuZ2UpCi17Ci0gICAgaWYgKHJhbmdlLmlzTnVs
bCgpKSB7Ci0gICAgICAgIGRlbGVnYXRlLT5wcmludE1lc3NhZ2UoIihudWxsKSIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGNoYXIgYnVmZmVyWzEwMF07Ci0gICAgc25wcmludGYoYnVm
ZmVyLCBzaXplb2YoYnVmZmVyKSwgInJhbmdlIGZyb20gJWQgb2YgIiwgcmFuZ2Uuc3RhcnRPZmZz
ZXQoKSk7Ci0gICAgZGVsZWdhdGUtPnByaW50TWVzc2FnZShidWZmZXIpOwotICAgIGludCBleGNl
cHRpb24gPSAwOwotICAgIFdlYk5vZGUgc3RhcnROb2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIo
ZXhjZXB0aW9uKTsKLSAgICBwcmludE5vZGVEZXNjcmlwdGlvbihkZWxlZ2F0ZSwgc3RhcnROb2Rl
LCBleGNlcHRpb24pOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIgdG8g
JWQgb2YgIiwgcmFuZ2UuZW5kT2Zmc2V0KCkpOwotICAgIGRlbGVnYXRlLT5wcmludE1lc3NhZ2Uo
YnVmZmVyKTsKLSAgICBXZWJOb2RlIGVuZE5vZGUgPSByYW5nZS5lbmRDb250YWluZXIoZXhjZXB0
aW9uKTsKLSAgICBwcmludE5vZGVEZXNjcmlwdGlvbihkZWxlZ2F0ZSwgZW5kTm9kZSwgZXhjZXB0
aW9uKTsKLX0KLQotc3RyaW5nIGVkaXRpbmdBY3Rpb25EZXNjcmlwdGlvbihXZWJFZGl0aW5nQWN0
aW9uIGFjdGlvbikKLXsKLSAgICBzd2l0Y2ggKGFjdGlvbikgewotICAgIGNhc2UgV2ViS2l0OjpX
ZWJFZGl0aW5nQWN0aW9uVHlwZWQ6Ci0gICAgICAgIHJldHVybiAiV2ViVmlld0luc2VydEFjdGlv
blR5cGVkIjsKLSAgICBjYXNlIFdlYktpdDo6V2ViRWRpdGluZ0FjdGlvblBhc3RlZDoKLSAgICAg
ICAgcmV0dXJuICJXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkIjsKLSAgICBjYXNlIFdlYktpdDo6
V2ViRWRpdGluZ0FjdGlvbkRyb3BwZWQ6Ci0gICAgICAgIHJldHVybiAiV2ViVmlld0luc2VydEFj
dGlvbkRyb3BwZWQiOwotICAgIH0KLSAgICByZXR1cm4gIihVTktOT1dOIEFDVElPTikiOwotfQot
Ci1zdHJpbmcgdGV4dEFmZmluaXR5RGVzY3JpcHRpb24oV2ViVGV4dEFmZmluaXR5IGFmZmluaXR5
KQotewotICAgIHN3aXRjaCAoYWZmaW5pdHkpIHsKLSAgICBjYXNlIFdlYktpdDo6V2ViVGV4dEFm
ZmluaXR5VXBzdHJlYW06Ci0gICAgICAgIHJldHVybiAiTlNTZWxlY3Rpb25BZmZpbml0eVVwc3Ry
ZWFtIjsKLSAgICBjYXNlIFdlYktpdDo6V2ViVGV4dEFmZmluaXR5RG93bnN0cmVhbToKLSAgICAg
ICAgcmV0dXJuICJOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSI7Ci0gICAgfQotICAgIHJl
dHVybiAiKFVOS05PV04gQUZGSU5JVFkpIjsKLX0KLQotdm9pZCBwcmludEZyYW1lRGVzY3JpcHRp
b24oV2ViVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSwgV2ViRnJhbWUqIGZyYW1lKQotewotICAgIHN0
cmluZyBuYW1lOCA9IGZyYW1lLT51bmlxdWVOYW1lKCkudXRmOCgpOwotICAgIGlmIChmcmFtZSA9
PSBmcmFtZS0+dmlldygpLT5tYWluRnJhbWUoKSkgewotICAgICAgICBpZiAoIW5hbWU4Lmxlbmd0
aCgpKSB7Ci0gICAgICAgICAgICBkZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJtYWluIGZyYW1lIik7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZWdhdGUtPnByaW50
TWVzc2FnZShzdHJpbmcoIm1haW4gZnJhbWUgXCIiKSArIG5hbWU4ICsgIlwiIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFuYW1lOC5sZW5ndGgoKSkgewotICAgICAgICBkZWxl
Z2F0ZS0+cHJpbnRNZXNzYWdlKCJmcmFtZSAoYW5vbnltb3VzKSIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGRlbGVnYXRlLT5wcmludE1lc3NhZ2Uoc3RyaW5nKCJmcmFtZSBcIiIpICsg
bmFtZTggKyAiXCIiKTsKLX0KLQotdm9pZCBwcmludEZyYW1lVXNlckdlc3R1cmVTdGF0dXMoV2Vi
VGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBjaGFyKiBtc2cp
Ci17Ci0gICAgYm9vbCBpc1VzZXJHZXN0dXJlID0gV2ViVXNlckdlc3R1cmVJbmRpY2F0b3I6Omlz
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7Ci0gICAgZGVsZWdhdGUtPnByaW50TWVzc2FnZShzdHJp
bmcoIkZyYW1lIHdpdGggdXNlciBnZXN0dXJlIFwiIikgKyAoaXNVc2VyR2VzdHVyZSA/ICJ0cnVl
IiA6ICJmYWxzZSIpICsgIlwiIiArIG1zZyk7Ci19Ci0KLS8vIFVzZWQgdG8gd3JpdGUgYSBwbGF0
Zm9ybSBuZXV0cmFsIGZpbGU6Ly8vIFVSTCBieSB0YWtpbmcgdGhlCi0vLyBmaWxlbmFtZSBhbmQg
aXRzIGRpcmVjdG9yeS4gKGUuZy4sIGNvbnZlcnRzCi0vLyAiZmlsZTovLy90bXAvZm9vL2Jhci50
eHQiIHRvIGp1c3QgImJhci50eHQiKS4KLXN0cmluZyBkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVz
dFJlc3VsdChjb25zdCBzdHJpbmcmIHVybCkKLXsKLSAgICBpZiAodXJsLmVtcHR5KCkgfHwgc3Ry
aW5nOjpucG9zID09IHVybC5maW5kKCJmaWxlOi8vIikpCi0gICAgICAgIHJldHVybiB1cmw7Ci0K
LSAgICBzaXplX3QgcG9zID0gdXJsLnJmaW5kKCcvJyk7Ci0gICAgaWYgKHBvcyA9PSBzdHJpbmc6
Om5wb3MgfHwgIXBvcykKLSAgICAgICAgcmV0dXJuICJFUlJPUjoiICsgdXJsOwotICAgIHBvcyA9
IHVybC5yZmluZCgnLycsIHBvcyAtIDEpOwotICAgIGlmIChwb3MgPT0gc3RyaW5nOjpucG9zKQot
ICAgICAgICByZXR1cm4gIkVSUk9SOiIgKyB1cmw7Ci0KLSAgICByZXR1cm4gdXJsLnN1YnN0cihw
b3MgKyAxKTsKLX0KLQotdm9pZCBwcmludFJlc3BvbnNlRGVzY3JpcHRpb24oV2ViVGVzdERlbGVn
YXRlKiBkZWxlZ2F0ZSwgY29uc3QgV2ViVVJMUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIGlm
IChyZXNwb25zZS5pc051bGwoKSkgewotICAgICAgICBkZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCIo
bnVsbCkiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzdHJpbmcgdXJsID0gcmVzcG9u
c2UudXJsKCkuc3BlYygpOwotICAgIGNoYXIgZGF0YVsxMDBdOwotICAgIHNucHJpbnRmKGRhdGEs
IHNpemVvZihkYXRhKSwgIiVkIiwgcmVzcG9uc2UuIGh0dHBTdGF0dXNDb2RlKCkpOwotICAgIGRl
bGVnYXRlLT5wcmludE1lc3NhZ2Uoc3RyaW5nKCI8TlNVUkxSZXNwb25zZSAiKSArIGRlc2NyaXB0
aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVybCkgKyAiLCBodHRwIHN0YXR1cyBjb2RlICIgKyBk
YXRhICsgIj4iKTsKLX0KLQotc3RyaW5nIFVSTERlc2NyaXB0aW9uKGNvbnN0IEdVUkwmIHVybCkK
LXsKLSAgICBpZiAodXJsLlNjaGVtZUlzKCJmaWxlIikpCi0gICAgICAgIHJldHVybiB1cmwuRXh0
cmFjdEZpbGVOYW1lKCk7Ci0gICAgcmV0dXJuIHVybC5wb3NzaWJseV9pbnZhbGlkX3NwZWMoKTsK
LX0KLQotc3RyaW5nIFByaW9yaXR5RGVzY3JpcHRpb24oY29uc3QgV2ViVVJMUmVxdWVzdDo6UHJp
b3JpdHkmIHByaW9yaXR5KQotewotICAgIHN3aXRjaCAocHJpb3JpdHkpIHsKLSAgICBjYXNlIFdl
YlVSTFJlcXVlc3Q6OlByaW9yaXR5VmVyeUxvdzoKLSAgICAgICAgcmV0dXJuICJWZXJ5TG93IjsK
LSAgICBjYXNlIFdlYlVSTFJlcXVlc3Q6OlByaW9yaXR5TG93OgotICAgICAgICByZXR1cm4gIkxv
dyI7Ci0gICAgY2FzZSBXZWJVUkxSZXF1ZXN0OjpQcmlvcml0eU1lZGl1bToKLSAgICAgICAgcmV0
dXJuICJNZWRpdW0iOwotICAgIGNhc2UgV2ViVVJMUmVxdWVzdDo6UHJpb3JpdHlIaWdoOgotICAg
ICAgICByZXR1cm4gIkhpZ2giOwotICAgIGNhc2UgV2ViVVJMUmVxdWVzdDo6UHJpb3JpdHlWZXJ5
SGlnaDoKLSAgICAgICAgcmV0dXJuICJWZXJ5SGlnaCI7Ci0gICAgY2FzZSBXZWJVUkxSZXF1ZXN0
OjpQcmlvcml0eVVucmVzb2x2ZWQ6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuICJVbnJl
c29sdmVkIjsKLSAgICB9Ci19Ci0KLXZvaWQgYmxvY2tSZXF1ZXN0KFdlYlVSTFJlcXVlc3QmIHJl
cXVlc3QpCi17Ci0gICAgcmVxdWVzdC5zZXRVUkwoV2ViVVJMKCkpOwotfQotCi1ib29sIGlzTG9j
YWxob3N0KGNvbnN0IHN0cmluZyYgaG9zdCkKLXsKLSAgICByZXR1cm4gaG9zdCA9PSAiMTI3LjAu
MC4xIiB8fCBob3N0ID09ICJsb2NhbGhvc3QiOwotfQotCi1ib29sIGhvc3RJc1VzZWRCeVNvbWVU
ZXN0c1RvR2VuZXJhdGVFcnJvcihjb25zdCBzdHJpbmcmIGhvc3QpCi17Ci0gICAgcmV0dXJuIGhv
c3QgPT0gIjI1NS4yNTUuMjU1LjI1NSI7Ci19Ci0KLS8vIFVzZWQgdG8gd3JpdGUgYSBwbGF0Zm9y
bSBuZXV0cmFsIGZpbGU6Ly8vIFVSTCBieSBvbmx5IHRha2luZyB0aGUgZmlsZW5hbWUKLS8vIChl
LmcuLCBjb252ZXJ0cyAiZmlsZTovLy90bXAvZm9vLnR4dCIgdG8ganVzdCAiZm9vLnR4dCIpLgot
c3RyaW5nIHVybFN1aXRhYmxlRm9yVGVzdFJlc3VsdChjb25zdCBzdHJpbmcmIHVybCkKLXsKLSAg
ICBpZiAodXJsLmVtcHR5KCkgfHwgc3RyaW5nOjpucG9zID09IHVybC5maW5kKCJmaWxlOi8vIikp
Ci0gICAgICAgIHJldHVybiB1cmw7Ci0KLSAgICBzaXplX3QgcG9zID0gdXJsLnJmaW5kKCcvJyk7
Ci0gICAgaWYgKHBvcyA9PSBzdHJpbmc6Om5wb3MpIHsKLSNpZmRlZiBXSU4zMgotICAgICAgICBw
b3MgPSB1cmwucmZpbmQoJ1xcJyk7Ci0gICAgICAgIGlmIChwb3MgPT0gc3RyaW5nOjpucG9zKQot
ICAgICAgICAgICAgcG9zID0gMDsKLSNlbHNlCi0gICAgICAgIHBvcyA9IDA7Ci0jZW5kaWYKLSAg
ICB9Ci0gICAgc3RyaW5nIGZpbGVuYW1lID0gdXJsLnN1YnN0cihwb3MgKyAxKTsKLSAgICBpZiAo
ZmlsZW5hbWUuZW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICJmaWxlOiI7IC8vIEEgV2ViS2l0IHRl
c3QgaGFzIHRoaXMgaW4gaXRzIGV4cGVjdGVkIG91dHB1dC4KLSAgICByZXR1cm4gZmlsZW5hbWU7
Ci19Ci0KLS8vIFdlYk5hdmlnYXRpb25UeXBlIGRlYnVnZ2luZyBzdHJpbmdzIHRha2VuIGZyb20g
UG9saWN5RGVsZWdhdGUubW0uCi1jb25zdCBjaGFyKiBsaW5rQ2xpY2tlZFN0cmluZyA9ICJsaW5r
IGNsaWNrZWQiOwotY29uc3QgY2hhciogZm9ybVN1Ym1pdHRlZFN0cmluZyA9ICJmb3JtIHN1Ym1p
dHRlZCI7Ci1jb25zdCBjaGFyKiBiYWNrRm9yd2FyZFN0cmluZyA9ICJiYWNrL2ZvcndhcmQiOwot
Y29uc3QgY2hhciogcmVsb2FkU3RyaW5nID0gInJlbG9hZCI7Ci1jb25zdCBjaGFyKiBmb3JtUmVz
dWJtaXR0ZWRTdHJpbmcgPSAiZm9ybSByZXN1Ym1pdHRlZCI7Ci1jb25zdCBjaGFyKiBvdGhlclN0
cmluZyA9ICJvdGhlciI7Ci1jb25zdCBjaGFyKiBpbGxlZ2FsU3RyaW5nID0gImlsbGVnYWwgdmFs
dWUiOwotCi0vLyBHZXQgYSBkZWJ1Z2dpbmcgc3RyaW5nIGZyb20gYSBXZWJOYXZpZ2F0aW9uVHlw
ZS4KLWNvbnN0IGNoYXIqIHdlYk5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV2ViTmF2aWdhdGlvblR5
cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFdlYktpdDo6V2ViTmF2
aWdhdGlvblR5cGVMaW5rQ2xpY2tlZDoKLSAgICAgICAgcmV0dXJuIGxpbmtDbGlja2VkU3RyaW5n
OwotICAgIGNhc2UgV2ViS2l0OjpXZWJOYXZpZ2F0aW9uVHlwZUZvcm1TdWJtaXR0ZWQ6Ci0gICAg
ICAgIHJldHVybiBmb3JtU3VibWl0dGVkU3RyaW5nOwotICAgIGNhc2UgV2ViS2l0OjpXZWJOYXZp
Z2F0aW9uVHlwZUJhY2tGb3J3YXJkOgotICAgICAgICByZXR1cm4gYmFja0ZvcndhcmRTdHJpbmc7
Ci0gICAgY2FzZSBXZWJLaXQ6OldlYk5hdmlnYXRpb25UeXBlUmVsb2FkOgotICAgICAgICByZXR1
cm4gcmVsb2FkU3RyaW5nOwotICAgIGNhc2UgV2ViS2l0OjpXZWJOYXZpZ2F0aW9uVHlwZUZvcm1S
ZXN1Ym1pdHRlZDoKLSAgICAgICAgcmV0dXJuIGZvcm1SZXN1Ym1pdHRlZFN0cmluZzsKLSAgICBj
YXNlIFdlYktpdDo6V2ViTmF2aWdhdGlvblR5cGVPdGhlcjoKLSAgICAgICAgcmV0dXJuIG90aGVy
U3RyaW5nOwotICAgIH0KLSAgICByZXR1cm4gaWxsZWdhbFN0cmluZzsKLX0KLQotc3RyaW5nIGR1
bXBEb2N1bWVudFRleHQoV2ViRnJhbWUqIGZyYW1lKQotewotICAgIC8vIFdlIHVzZSB0aGUgZG9j
dW1lbnQgZWxlbWVudCdzIHRleHQgaW5zdGVhZCBvZiB0aGUgYm9keSB0ZXh0IGhlcmUgYmVjYXVz
ZQotICAgIC8vIG5vdCBhbGwgZG9jdW1lbnRzIGhhdmUgYSBib2R5LCBzdWNoIGFzIFhNTCBkb2N1
bWVudHMuCi0gICAgV2ViRWxlbWVudCBkb2N1bWVudEVsZW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQo
KS5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICBpZiAoZG9jdW1lbnRFbGVtZW50LmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm4gc3RyaW5nKCk7Ci0gICAgcmV0dXJuIGRvY3VtZW50RWxlbWVudC5pbm5l
clRleHQoKS51dGY4KCk7Ci19Ci0KLXN0cmluZyBkdW1wRnJhbWVzQXNUZXh0KFdlYkZyYW1lKiBm
cmFtZSwgYm9vbCByZWN1cnNpdmUpCi17Ci0gICAgc3RyaW5nIHJlc3VsdDsKLQotICAgIC8vIEFk
ZCBoZWFkZXIgZm9yIGFsbCBidXQgdGhlIG1haW4gZnJhbWUuIFNraXAgZW1wdHkgZnJhbWVzLgot
ICAgIGlmIChmcmFtZS0+cGFyZW50KCkgJiYgIWZyYW1lLT5kb2N1bWVudCgpLmRvY3VtZW50RWxl
bWVudCgpLmlzTnVsbCgpKSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIlxuLS0tLS0tLS1cbkZy
YW1lOiAnIik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZnJhbWUtPnVuaXF1ZU5hbWUoKS51dGY4
KCkuZGF0YSgpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiJ1xuLS0tLS0tLS1cbiIpOwotICAg
IH0KLQotICAgIHJlc3VsdC5hcHBlbmQoZHVtcERvY3VtZW50VGV4dChmcmFtZSkpOwotICAgIHJl
c3VsdC5hcHBlbmQoIlxuIik7Ci0KLSAgICBpZiAocmVjdXJzaXZlKSB7Ci0gICAgICAgIGZvciAo
V2ViRnJhbWUqIGNoaWxkID0gZnJhbWUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGR1bXBGcmFtZXNB
c1RleHQoY2hpbGQsIHJlY3Vyc2l2ZSkpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXN0cmluZyBkdW1wRnJhbWVzQXNQcmludGVkVGV4dChXZWJGcmFtZSogZnJhbWUsIGJvb2wg
cmVjdXJzaXZlKQotewotICAgIHN0cmluZyByZXN1bHQ7Ci0KLSAgICAvLyBDYW5ub3QgZG8gcHJp
bnRlZCBmb3JtYXQgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gSFRNTAotICAgIGlmICghZnJhbWUt
PmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIHN0cmluZygpOwot
Ci0gICAgLy8gQWRkIGhlYWRlciBmb3IgYWxsIGJ1dCB0aGUgbWFpbiBmcmFtZS4gU2tpcCBlbXB0
eSBmcmFtZXMuCi0gICAgaWYgKGZyYW1lLT5wYXJlbnQoKSAmJiAhZnJhbWUtPmRvY3VtZW50KCku
ZG9jdW1lbnRFbGVtZW50KCkuaXNOdWxsKCkpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiXG4t
LS0tLS0tLVxuRnJhbWU6ICciKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChmcmFtZS0+dW5pcXVl
TmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCInXG4tLS0tLS0t
LVxuIik7Ci0gICAgfQotCi0gICAgcmVzdWx0LmFwcGVuZChmcmFtZS0+cmVuZGVyVHJlZUFzVGV4
dChXZWJGcmFtZTo6UmVuZGVyQXNUZXh0UHJpbnRpbmcpLnV0ZjgoKSk7Ci0gICAgcmVzdWx0LmFw
cGVuZCgiXG4iKTsKLQotICAgIGlmIChyZWN1cnNpdmUpIHsKLSAgICAgICAgZm9yIChXZWJGcmFt
ZSogY2hpbGQgPSBmcmFtZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZHVtcEZyYW1lc0FzUHJpbnRl
ZFRleHQoY2hpbGQsIHJlY3Vyc2l2ZSkpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXN0cmluZyBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihXZWJGcmFtZSogZnJhbWUsIGJvb2wg
cmVjdXJzaXZlKQotewotICAgIHN0cmluZyByZXN1bHQ7Ci0gICAgV2ViU2l6ZSBvZmZzZXQgPSBm
cmFtZS0+c2Nyb2xsT2Zmc2V0KCk7Ci0gICAgaWYgKG9mZnNldC53aWR0aCA+IDAgfHwgb2Zmc2V0
LmhlaWdodCA+IDApIHsKLSAgICAgICAgaWYgKGZyYW1lLT5wYXJlbnQoKSkKLSAgICAgICAgICAg
IHJlc3VsdCA9IHN0cmluZygiZnJhbWUgJyIpICsgZnJhbWUtPnVuaXF1ZU5hbWUoKS51dGY4KCku
ZGF0YSgpICsgIicgIjsKLSAgICAgICAgY2hhciBkYXRhWzEwMF07Ci0gICAgICAgIHNucHJpbnRm
KGRhdGEsIHNpemVvZihkYXRhKSwgInNjcm9sbGVkIHRvICVkLCVkXG4iLCBvZmZzZXQud2lkdGgs
IG9mZnNldC5oZWlnaHQpOwotICAgICAgICByZXN1bHQgKz0gZGF0YTsKLSAgICB9Ci0KLSAgICBp
ZiAoIXJlY3Vyc2l2ZSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBmb3IgKFdlYkZyYW1l
KiBjaGlsZCA9IGZyYW1lLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpKQotICAgICAgICByZXN1bHQgKz0gZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oY2hp
bGQsIHJlY3Vyc2l2ZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RydWN0IFRvTG93ZXIg
ewotICAgIGNoYXIxNiBvcGVyYXRvcigpKGNoYXIxNiBjKSB7IHJldHVybiB0b2xvd2VyKGMpOyB9
Ci19OwotCi0vLyBSZXR1cm5zIFRydWUgaWYgaXRlbTEgPCBpdGVtMi4KLWJvb2wgSGlzdG9yeUl0
ZW1Db21wYXJlTGVzcyhjb25zdCBXZWJIaXN0b3J5SXRlbSYgaXRlbTEsIGNvbnN0IFdlYkhpc3Rv
cnlJdGVtJiBpdGVtMikKLXsKLSAgICBzdHJpbmcxNiB0YXJnZXQxID0gaXRlbTEudGFyZ2V0KCk7
Ci0gICAgc3RyaW5nMTYgdGFyZ2V0MiA9IGl0ZW0yLnRhcmdldCgpOwotICAgIHN0ZDo6dHJhbnNm
b3JtKHRhcmdldDEuYmVnaW4oKSwgdGFyZ2V0MS5lbmQoKSwgdGFyZ2V0MS5iZWdpbigpLCBUb0xv
d2VyKCkpOwotICAgIHN0ZDo6dHJhbnNmb3JtKHRhcmdldDIuYmVnaW4oKSwgdGFyZ2V0Mi5lbmQo
KSwgdGFyZ2V0Mi5iZWdpbigpLCBUb0xvd2VyKCkpOwotICAgIHJldHVybiB0YXJnZXQxIDwgdGFy
Z2V0MjsKLX0KLQotc3RyaW5nIGR1bXBIaXN0b3J5SXRlbShjb25zdCBXZWJIaXN0b3J5SXRlbSYg
aXRlbSwgaW50IGluZGVudCwgYm9vbCBpc0N1cnJlbnQpCi17Ci0gICAgc3RyaW5nIHJlc3VsdDsK
LQotICAgIGlmIChpc0N1cnJlbnQpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiY3Vyci0+Iik7
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoaW5kZW50IC0gNiwgJyAnKTsgLy8gNiA9PSAiY3Vyci0+
Ii5sZW5ndGgoKQotICAgIH0gZWxzZQotICAgICAgICByZXN1bHQuYXBwZW5kKGluZGVudCwgJyAn
KTsKLQotICAgIHN0cmluZyB1cmwgPSBub3JtYWxpemVMYXlvdXRUZXN0VVJMKGl0ZW0udXJsU3Ry
aW5nKCkudXRmOCgpKTsKLSAgICByZXN1bHQuYXBwZW5kKHVybCk7Ci0gICAgaWYgKCFpdGVtLnRh
cmdldCgpLmlzRW1wdHkoKSkgewotICAgICAgICByZXN1bHQuYXBwZW5kKCIgKGluIGZyYW1lIFwi
Iik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS50YXJnZXQoKS51dGY4KCkpOwotICAgICAg
ICByZXN1bHQuYXBwZW5kKCJcIikiKTsKLSAgICB9Ci0gICAgaWYgKGl0ZW0uaXNUYXJnZXRJdGVt
KCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiAgKipuYXYgdGFyZ2V0KioiKTsKLSAgICByZXN1
bHQuYXBwZW5kKCJcbiIpOwotCi0gICAgY29uc3QgV2ViVmVjdG9yPFdlYkhpc3RvcnlJdGVtPiYg
Y2hpbGRyZW4gPSBpdGVtLmNoaWxkcmVuKCk7Ci0gICAgaWYgKCFjaGlsZHJlbi5pc0VtcHR5KCkp
IHsKLSAgICAgICAgLy8gTXVzdCBzb3J0IHRvIGVsaW1pbmF0ZSBhcmJpdHJhcnkgcmVzdWx0IG9y
ZGVyaW5nIHdoaWNoIGRlZmVhdHMKLSAgICAgICAgLy8gcmVwcm9kdWNpYmxlIHRlc3RpbmcuCi0g
ICAgICAgIC8vIEZJWE1FOiBXZWJWZWN0b3Igc2hvdWxkIHByb2JhYmx5IGp1c3QgYmUgYSBzdGQ6
OnZlY3RvciEhCi0gICAgICAgIHN0ZDo6dmVjdG9yPFdlYkhpc3RvcnlJdGVtPiBzb3J0ZWRDaGls
ZHJlbjsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgIHNvcnRlZENoaWxkcmVuLnB1c2hfYmFjayhjaGlsZHJlbltpXSk7Ci0g
ICAgICAgIHN0ZDo6c29ydChzb3J0ZWRDaGlsZHJlbi5iZWdpbigpLCBzb3J0ZWRDaGlsZHJlbi5l
bmQoKSwgSGlzdG9yeUl0ZW1Db21wYXJlTGVzcyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc29ydGVkQ2hpbGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICByZXN1bHQgKz0g
ZHVtcEhpc3RvcnlJdGVtKHNvcnRlZENoaWxkcmVuW2ldLCBpbmRlbnQgKyA0LCBmYWxzZSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBkdW1wQmFja0ZvcndhcmRMaXN0
KGNvbnN0IFdlYlZlY3RvcjxXZWJIaXN0b3J5SXRlbT4mIGhpc3RvcnksIHNpemVfdCBjdXJyZW50
RW50cnlJbmRleCwgc3RyaW5nJiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LmFwcGVuZCgiXG49PT09
PT09PT09PT09PSBCYWNrIEZvcndhcmQgTGlzdCA9PT09PT09PT09PT09PVxuIik7Ci0gICAgZm9y
IChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGhpc3Rvcnkuc2l6ZSgpOyArK2luZGV4KQotICAg
ICAgICByZXN1bHQuYXBwZW5kKGR1bXBIaXN0b3J5SXRlbShoaXN0b3J5W2luZGV4XSwgOCwgaW5k
ZXggPT0gY3VycmVudEVudHJ5SW5kZXgpKTsKLSAgICByZXN1bHQuYXBwZW5kKCI9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7Ci19Ci0KLXN0cmluZyBk
dW1wQWxsQmFja0ZvcndhcmRMaXN0cyhUZXN0SW50ZXJmYWNlcyogaW50ZXJmYWNlcywgV2ViVGVz
dERlbGVnYXRlKiBkZWxlZ2F0ZSkKLXsKLSAgICBzdHJpbmcgcmVzdWx0OwotICAgIGNvbnN0IHZl
Y3RvcjxXZWJUZXN0UHJveHlCYXNlKj4mIHdpbmRvd0xpc3QgPSBpbnRlcmZhY2VzLT53aW5kb3dM
aXN0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHdpbmRvd0xpc3Quc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgc2l6ZV90IGN1cnJlbnRFbnRyeUluZGV4ID0gMDsKLSAgICAgICAgV2Vi
VmVjdG9yPFdlYkhpc3RvcnlJdGVtPiBoaXN0b3J5OwotICAgICAgICBkZWxlZ2F0ZS0+Y2FwdHVy
ZUhpc3RvcnlGb3JXaW5kb3cod2luZG93TGlzdC5hdChpKSwgJmhpc3RvcnksICZjdXJyZW50RW50
cnlJbmRleCk7Ci0gICAgICAgIGR1bXBCYWNrRm9yd2FyZExpc3QoaGlzdG9yeSwgY3VycmVudEVu
dHJ5SW5kZXgsIHJlc3VsdCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0KLQot
V2ViVGVzdFByb3h5QmFzZTo6V2ViVGVzdFByb3h5QmFzZSgpCi0gICAgOiBtX3Rlc3RJbnRlcmZh
Y2VzKDApCi0gICAgLCBtX2RlbGVnYXRlKDApCi0gICAgLCBtX3NwZWxsY2hlY2sobmV3IFNwZWxs
Q2hlY2tDbGllbnQpCi17Ci0gICAgcmVzZXQoKTsKLX0KLQotV2ViVGVzdFByb3h5QmFzZTo6fldl
YlRlc3RQcm94eUJhc2UoKQotewotICAgIG1fdGVzdEludGVyZmFjZXMtPndpbmRvd0Nsb3NlZCh0
aGlzKTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpzZXRJbnRlcmZhY2VzKFdlYlRlc3RJ
bnRlcmZhY2VzKiBpbnRlcmZhY2VzKQotewotICAgIG1fdGVzdEludGVyZmFjZXMgPSBpbnRlcmZh
Y2VzLT50ZXN0SW50ZXJmYWNlcygpOwotICAgIG1fdGVzdEludGVyZmFjZXMtPndpbmRvd09wZW5l
ZCh0aGlzKTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpzZXREZWxlZ2F0ZShXZWJUZXN0
RGVsZWdhdGUqIGRlbGVnYXRlKQotewotICAgIG1fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLSAgICBt
X3NwZWxsY2hlY2stPnNldERlbGVnYXRlKGRlbGVnYXRlKTsKLSNpZiBFTkFCTEVfSU5QVVRfU1BF
RUNICi0gICAgaWYgKG1fc3BlZWNoSW5wdXRDb250cm9sbGVyLmdldCgpKQotICAgICAgICBtX3Nw
ZWVjaElucHV0Q29udHJvbGxlci0+c2V0RGVsZWdhdGUoZGVsZWdhdGUpOwotI2VuZGlmCi0gICAg
aWYgKG1fc3BlZWNoUmVjb2duaXplci5nZXQoKSkKLSAgICAgICAgbV9zcGVlY2hSZWNvZ25pemVy
LT5zZXREZWxlZ2F0ZShkZWxlZ2F0ZSk7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6cmVz
ZXQoKQotewotICAgIG1fcGFpbnRSZWN0ID0gV2ViUmVjdCgpOwotICAgIG1fY2FudmFzLnJlc2V0
KCk7Ci0gICAgbV9pc1BhaW50aW5nID0gZmFsc2U7Ci0gICAgbV9yZXNvdXJjZUlkZW50aWZpZXJN
YXAuY2xlYXIoKTsKLSAgICBtX2xvZ0NvbnNvbGVPdXRwdXQgPSB0cnVlOwotICAgIGlmIChtX2dl
b2xvY2F0aW9uQ2xpZW50LmdldCgpKQotICAgICAgICBtX2dlb2xvY2F0aW9uQ2xpZW50LT5yZXNl
dE1vY2soKTsKLSNpZiBFTkFCTEVfSU5QVVRfU1BFRUNICi0gICAgaWYgKG1fc3BlZWNoSW5wdXRD
b250cm9sbGVyLmdldCgpKQotICAgICAgICBtX3NwZWVjaElucHV0Q29udHJvbGxlci0+Y2xlYXJS
ZXN1bHRzKCk7Ci0jZW5kaWYKLX0KLQotV2ViU3BlbGxDaGVja0NsaWVudCogV2ViVGVzdFByb3h5
QmFzZTo6c3BlbGxDaGVja0NsaWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3BlbGxjaGVj
ay5nZXQoKTsKLX0KLQotc3RyaW5nIFdlYlRlc3RQcm94eUJhc2U6OmNhcHR1cmVUcmVlKGJvb2wg
ZGVidWdSZW5kZXJUcmVlKQotewotICAgIFdlYlNjcmlwdENvbnRyb2xsZXI6OmZsdXNoQ29uc29s
ZU1lc3NhZ2VzKCk7Ci0KLSAgICBib29sIHNob3VsZER1bXBBc1RleHQgPSBtX3Rlc3RJbnRlcmZh
Y2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBBc1RleHQoKTsKLSAgICBib29sIHNob3VsZER1
bXBBc1ByaW50ZWQgPSBtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPmlzUHJpbnRpbmco
KTsKLSAgICBXZWJGcmFtZSogZnJhbWUgPSBtX3Rlc3RJbnRlcmZhY2VzLT53ZWJWaWV3KCktPm1h
aW5GcmFtZSgpOwotICAgIHN0cmluZyBkYXRhVXRmODsKLSAgICBpZiAoc2hvdWxkRHVtcEFzVGV4
dCkgewotICAgICAgICBib29sIHJlY3Vyc2l2ZSA9IG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7Ci0gICAgICAgIGRhdGFVdGY4ID0g
c2hvdWxkRHVtcEFzUHJpbnRlZCA/IGR1bXBGcmFtZXNBc1ByaW50ZWRUZXh0KGZyYW1lLCByZWN1
cnNpdmUpIDogZHVtcEZyYW1lc0FzVGV4dChmcmFtZSwgcmVjdXJzaXZlKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBib29sIHJlY3Vyc2l2ZSA9IG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIo
KS0+c2hvdWxkRHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMoKTsKLSAgICAgICAgV2ViRnJh
bWU6OlJlbmRlckFzVGV4dENvbnRyb2xzIHJlbmRlclRleHRCZWhhdmlvciA9IFdlYkZyYW1lOjpS
ZW5kZXJBc1RleHROb3JtYWw7Ci0gICAgICAgIGlmIChzaG91bGREdW1wQXNQcmludGVkKQotICAg
ICAgICAgICAgcmVuZGVyVGV4dEJlaGF2aW9yIHw9IFdlYkZyYW1lOjpSZW5kZXJBc1RleHRQcmlu
dGluZzsKLSAgICAgICAgaWYgKGRlYnVnUmVuZGVyVHJlZSkKLSAgICAgICAgICAgIHJlbmRlclRl
eHRCZWhhdmlvciB8PSBXZWJGcmFtZTo6UmVuZGVyQXNUZXh0RGVidWc7Ci0gICAgICAgIGRhdGFV
dGY4ID0gZnJhbWUtPnJlbmRlclRyZWVBc1RleHQocmVuZGVyVGV4dEJlaGF2aW9yKS51dGY4KCk7
Ci0gICAgICAgIGRhdGFVdGY4ICs9IGR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKGZyYW1lLCByZWN1
cnNpdmUpOwotICAgIH0KLQotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBCYWNrRm9yd2FyZExpc3QoKSkKLSAgICAgICAgZGF0YVV0ZjggKz0gZHVtcEFs
bEJhY2tGb3J3YXJkTGlzdHMobV90ZXN0SW50ZXJmYWNlcywgbV9kZWxlZ2F0ZSk7Ci0KLSAgICBy
ZXR1cm4gZGF0YVV0Zjg7Ci19Ci0KLVNrQ2FudmFzKiBXZWJUZXN0UHJveHlCYXNlOjpjYXB0dXJl
UGl4ZWxzKCkKLXsKLSAgICBtX3Rlc3RJbnRlcmZhY2VzLT53ZWJWaWV3KCktPmxheW91dCgpOwot
ICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnRlc3RSZXBhaW50KCkpIHsK
LSAgICAgICAgV2ViU2l6ZSB2aWV3U2l6ZSA9IG1fdGVzdEludGVyZmFjZXMtPndlYlZpZXcoKS0+
c2l6ZSgpOwotICAgICAgICBpbnQgd2lkdGggPSB2aWV3U2l6ZS53aWR0aDsKLSAgICAgICAgaW50
IGhlaWdodCA9IHZpZXdTaXplLmhlaWdodDsKLSAgICAgICAgaWYgKG1fdGVzdEludGVyZmFjZXMt
PnRlc3RSdW5uZXIoKS0+c3dlZXBIb3Jpem9udGFsbHkoKSkgewotICAgICAgICAgICAgZm9yIChX
ZWJSZWN0IGNvbHVtbigwLCAwLCAxLCBoZWlnaHQpOyBjb2x1bW4ueCA8IHdpZHRoOyBjb2x1bW4u
eCsrKQotICAgICAgICAgICAgICAgIHBhaW50UmVjdChjb2x1bW4pOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgZm9yIChXZWJSZWN0IGxpbmUoMCwgMCwgd2lkdGgsIDEpOyBsaW5lLnkg
PCBoZWlnaHQ7IGxpbmUueSsrKQotICAgICAgICAgICAgICAgIHBhaW50UmVjdChsaW5lKTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5p
c1ByaW50aW5nKCkpCi0gICAgICAgIHBhaW50UGFnZXNXaXRoQm91bmRhcmllcygpOwotICAgIGVs
c2UKLSAgICAgICAgcGFpbnRJbnZhbGlkYXRlZFJlZ2lvbigpOwotCi0gICAgLy8gU2VlIGlmIHdl
IG5lZWQgdG8gZHJhdyB0aGUgc2VsZWN0aW9uIGJvdW5kcyByZWN0LiBTZWxlY3Rpb24gYm91bmRz
Ci0gICAgLy8gcmVjdCBpcyB0aGUgcmVjdCBlbmNsb3NpbmcgdGhlIChwb3NzaWJseSB0cmFuc2Zv
cm1lZCkgc2VsZWN0aW9uLgotICAgIC8vIFRoZSByZWN0IHNob3VsZCBiZSBkcmF3biBhZnRlciBl
dmVyeXRoaW5nIGlzIGxhaWQgb3V0IGFuZCBwYWludGVkLgotICAgIGlmIChtX3Rlc3RJbnRlcmZh
Y2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBTZWxlY3Rpb25SZWN0KCkpIHsKLSAgICAgICAg
Ly8gSWYgdGhlcmUgaXMgYSBzZWxlY3Rpb24gcmVjdCAtIGRyYXcgYSByZWQgMXB4IGJvcmRlciBl
bmNsb3NpbmcgcmVjdAotICAgICAgICBXZWJSZWN0IHdyID0gbV90ZXN0SW50ZXJmYWNlcy0+d2Vi
VmlldygpLT5tYWluRnJhbWUoKS0+c2VsZWN0aW9uQm91bmRzUmVjdCgpOwotICAgICAgICBpZiAo
IXdyLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gUmVuZGVyIGEgcmVkIHJlY3RhbmdsZSBi
b3VuZGluZyBzZWxlY3Rpb24gcmVjdAotICAgICAgICAgICAgU2tQYWludCBwYWludDsKLSAgICAg
ICAgICAgIHBhaW50LnNldENvbG9yKDB4RkZGRjAwMDApOyAvLyBGdWxseSBvcGFxdWUgcmVkCi0g
ICAgICAgICAgICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprU3Ryb2tlX1N0eWxlKTsKLSAgICAg
ICAgICAgIHBhaW50LnNldEZsYWdzKFNrUGFpbnQ6OmtBbnRpQWxpYXNfRmxhZyk7Ci0gICAgICAg
ICAgICBwYWludC5zZXRTdHJva2VXaWR0aCgxLjBmKTsKLSAgICAgICAgICAgIFNrSVJlY3QgcmVj
dDsgLy8gQm91bmRpbmcgcmVjdAotICAgICAgICAgICAgcmVjdC5zZXQod3IueCwgd3IueSwgd3Iu
eCArIHdyLndpZHRoLCB3ci55ICsgd3IuaGVpZ2h0KTsKLSAgICAgICAgICAgIGNhbnZhcygpLT5k
cmF3SVJlY3QocmVjdCwgcGFpbnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGNh
bnZhcygpOwotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OnNldExvZ0NvbnNvbGVPdXRwdXQo
Ym9vbCBlbmFibGVkKQotewotICAgIG1fbG9nQ29uc29sZU91dHB1dCA9IGVuYWJsZWQ7Ci19Ci0K
LXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6cGFpbnRSZWN0KGNvbnN0IFdlYlJlY3QmIHJlY3QpCi17
Ci0gICAgV0VCS0lUX0FTU0VSVCghbV9pc1BhaW50aW5nKTsKLSAgICBXRUJLSVRfQVNTRVJUKGNh
bnZhcygpKTsKLSAgICBtX2lzUGFpbnRpbmcgPSB0cnVlOwotICAgIGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yID0gbV90ZXN0SW50ZXJmYWNlcy0+d2ViVmlldygpLT5kZXZpY2VTY2FsZUZhY3Rvcigp
OwotICAgIGludCBzY2FsZWRYID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0aWNfY2FzdDxmbG9hdD4o
cmVjdC54KSAqIGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICBpbnQgc2NhbGVkWSA9IHN0YXRpY19j
YXN0PGludD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJlY3QueSkgKiBkZXZpY2VTY2FsZUZhY3Rvcik7
Ci0gICAgaW50IHNjYWxlZFdpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsKHN0YXRpY19jYXN0
PGZsb2F0PihyZWN0LndpZHRoKSAqIGRldmljZVNjYWxlRmFjdG9yKSk7Ci0gICAgaW50IHNjYWxl
ZEhlaWdodCA9IHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4ocmVjdC5o
ZWlnaHQpICogZGV2aWNlU2NhbGVGYWN0b3IpKTsKLSAgICBXZWJSZWN0IGRldmljZVJlY3Qoc2Nh
bGVkWCwgc2NhbGVkWSwgc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV90ZXN0SW50
ZXJmYWNlcy0+d2ViVmlldygpLT5wYWludChjYW52YXMoKSwgZGV2aWNlUmVjdCk7Ci0gICAgbV9p
c1BhaW50aW5nID0gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6cGFpbnRJbnZh
bGlkYXRlZFJlZ2lvbigpCi17Ci0gICAgbV90ZXN0SW50ZXJmYWNlcy0+d2ViVmlldygpLT5hbmlt
YXRlKDAuMCk7Ci0gICAgbV90ZXN0SW50ZXJmYWNlcy0+d2ViVmlldygpLT5sYXlvdXQoKTsKLSAg
ICBXZWJTaXplIHdpZGdldFNpemUgPSBtX3Rlc3RJbnRlcmZhY2VzLT53ZWJWaWV3KCktPnNpemUo
KTsKLSAgICBXZWJSZWN0IGNsaWVudFJlY3QoMCwgMCwgd2lkZ2V0U2l6ZS53aWR0aCwgd2lkZ2V0
U2l6ZS5oZWlnaHQpOwotCi0gICAgLy8gUGFpbnQgdGhlIGNhbnZhcyBpZiBuZWNlc3NhcnkuIEFs
bG93IHBhaW50aW5nIHRvIGdlbmVyYXRlIGV4dHJhIHJlY3RzCi0gICAgLy8gZm9yIHRoZSBmaXJz
dCB0d28gY2FsbHMuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc29tZSBXZWJDb3JlIHJlbmRl
cmluZwotICAgIC8vIG9iamVjdHMgdXBkYXRlIHRoZWlyIGxheW91dCBvbmx5IHdoZW4gcGFpbnRl
ZC4KLSAgICAvLyBTdG9yZSB0aGUgdG90YWwgYXJlYSBwYWludGVkIGluIHRvdGFsX3BhaW50LiBU
aGVuIHRlbGwgdGhlIGdkayB3aW5kb3cKLSAgICAvLyB0byB1cGRhdGUgdGhhdCBhcmVhIGFmdGVy
IHdlJ3JlIGRvbmUgcGFpbnRpbmcgaXQuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kp
IHsKLSAgICAgICAgLy8gcmVjdCA9IGludGVyc2VjdChtX3BhaW50UmVjdCAsIGNsaWVudFJlY3Qp
Ci0gICAgICAgIFdlYlJlY3QgZGFtYWdlUmVjdCA9IG1fcGFpbnRSZWN0OwotICAgICAgICBpbnQg
bGVmdCA9IG1heChkYW1hZ2VSZWN0LngsIGNsaWVudFJlY3QueCk7Ci0gICAgICAgIGludCB0b3Ag
PSBtYXgoZGFtYWdlUmVjdC55LCBjbGllbnRSZWN0LnkpOwotICAgICAgICBpbnQgcmlnaHQgPSBt
aW4oZGFtYWdlUmVjdC54ICsgZGFtYWdlUmVjdC53aWR0aCwgY2xpZW50UmVjdC54ICsgY2xpZW50
UmVjdC53aWR0aCk7Ci0gICAgICAgIGludCBib3R0b20gPSBtaW4oZGFtYWdlUmVjdC55ICsgZGFt
YWdlUmVjdC5oZWlnaHQsIGNsaWVudFJlY3QueSArIGNsaWVudFJlY3QuaGVpZ2h0KTsKLSAgICAg
ICAgV2ViUmVjdCByZWN0OwotICAgICAgICBpZiAobGVmdCA8IHJpZ2h0ICYmIHRvcCA8IGJvdHRv
bSkKLSAgICAgICAgICAgIHJlY3QgPSBXZWJSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBi
b3R0b20gLSB0b3ApOwotCi0gICAgICAgIG1fcGFpbnRSZWN0ID0gV2ViUmVjdCgpOwotICAgICAg
ICBpZiAocmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcGFp
bnRSZWN0KHJlY3QpOwotICAgIH0KLSAgICBXRUJLSVRfQVNTRVJUKG1fcGFpbnRSZWN0LmlzRW1w
dHkoKSk7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6cGFpbnRQYWdlc1dpdGhCb3VuZGFy
aWVzKCkKLXsKLSAgICBXRUJLSVRfQVNTRVJUKCFtX2lzUGFpbnRpbmcpOwotICAgIFdFQktJVF9B
U1NFUlQoY2FudmFzKCkpOwotICAgIG1faXNQYWludGluZyA9IHRydWU7Ci0KLSAgICBXZWJTaXpl
IHBhZ2VTaXplSW5QaXhlbHMgPSBtX3Rlc3RJbnRlcmZhY2VzLT53ZWJWaWV3KCktPnNpemUoKTsK
LSAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBtX3Rlc3RJbnRlcmZhY2VzLT53ZWJWaWV3KCktPm1h
aW5GcmFtZSgpOwotCi0gICAgaW50IHBhZ2VDb3VudCA9IHdlYkZyYW1lLT5wcmludEJlZ2luKHBh
Z2VTaXplSW5QaXhlbHMpOwotICAgIGludCB0b3RhbEhlaWdodCA9IHBhZ2VDb3VudCAqIChwYWdl
U2l6ZUluUGl4ZWxzLmhlaWdodCArIDEpIC0gMTsKLQotICAgIFNrQ2FudmFzKiB0ZXN0Q2FudmFz
ID0gc2tpYTo6VHJ5Q3JlYXRlQml0bWFwQ2FudmFzKHBhZ2VTaXplSW5QaXhlbHMud2lkdGgsIHRv
dGFsSGVpZ2h0LCB0cnVlKTsKLSAgICBpZiAodGVzdENhbnZhcykgewotICAgICAgICBkaXNjYXJk
QmFja2luZ1N0b3JlKCk7Ci0gICAgICAgIG1fY2FudmFzLnJlc2V0KHRlc3RDYW52YXMpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIHdlYkZyYW1lLT5wcmludEVuZCgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgd2ViRnJhbWUtPnByaW50UGFnZXNXaXRoQm91bmRhcmllcyhjYW52YXMo
KSwgcGFnZVNpemVJblBpeGVscyk7Ci0gICAgd2ViRnJhbWUtPnByaW50RW5kKCk7Ci0KLSAgICBt
X2lzUGFpbnRpbmcgPSBmYWxzZTsKLX0KLQotU2tDYW52YXMqIFdlYlRlc3RQcm94eUJhc2U6OmNh
bnZhcygpCi17Ci0gICAgaWYgKG1fY2FudmFzLmdldCgpKQotICAgICAgICByZXR1cm4gbV9jYW52
YXMuZ2V0KCk7Ci0gICAgV2ViU2l6ZSB3aWRnZXRTaXplID0gbV90ZXN0SW50ZXJmYWNlcy0+d2Vi
VmlldygpLT5zaXplKCk7Ci0gICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBtX3Rlc3RJbnRl
cmZhY2VzLT53ZWJWaWV3KCktPmRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgaW50IHNjYWxlZFdp
ZHRoID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pih3aWRnZXRTaXpl
LndpZHRoKSAqIGRldmljZVNjYWxlRmFjdG9yKSk7Ci0gICAgaW50IHNjYWxlZEhlaWdodCA9IHN0
YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4od2lkZ2V0U2l6ZS5oZWlnaHQp
ICogZGV2aWNlU2NhbGVGYWN0b3IpKTsKLSAgICBtX2NhbnZhcy5yZXNldChza2lhOjpDcmVhdGVC
aXRtYXBDYW52YXMoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCwgdHJ1ZSkpOwotICAgIHJldHVy
biBtX2NhbnZhcy5nZXQoKTsKLX0KLQotLy8gUGFpbnRzIHRoZSBlbnRpcmUgY2FudmFzIGEgc2Vt
aS10cmFuc3BhcmVudCBibGFjayAoZ3JheWlzaCkuIFRoaXMgaXMgdXNlZAotLy8gYnkgdGhlIGxh
eW91dCB0ZXN0cyBpbiBmYXN0L3JlcGFpbnQuIFRoZSBhbHBoYSB2YWx1ZSBtYXRjaGVzIHVwc3Ry
ZWFtLgotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaXNwbGF5UmVwYWludE1hc2soKQotewotICAg
IGNhbnZhcygpLT5kcmF3QVJHQigxNjcsIDAsIDAsIDApOwotfQotCi12b2lkIFdlYlRlc3RQcm94
eUJhc2U6OmRpc3BsYXkoKQotewotICAgIGNvbnN0IFdlYktpdDo6V2ViU2l6ZSYgc2l6ZSA9IG1f
dGVzdEludGVyZmFjZXMtPndlYlZpZXcoKS0+c2l6ZSgpOwotICAgIFdlYlJlY3QgcmVjdCgwLCAw
LCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7Ci0gICAgbV9wYWludFJlY3QgPSByZWN0OwotICAg
IHBhaW50SW52YWxpZGF0ZWRSZWdpb24oKTsKLSAgICBkaXNwbGF5UmVwYWludE1hc2soKTsKLX0K
LQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaXNwbGF5SW52YWxpZGF0ZWRSZWdpb24oKQotewot
ICAgIHBhaW50SW52YWxpZGF0ZWRSZWdpb24oKTsKLSAgICBkaXNwbGF5UmVwYWludE1hc2soKTsK
LX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaXNjYXJkQmFja2luZ1N0b3JlKCkKLXsKLSAg
ICBtX2NhbnZhcy5yZXNldCgpOwotfQotCi1XZWJHZW9sb2NhdGlvbkNsaWVudE1vY2sqIFdlYlRl
c3RQcm94eUJhc2U6Omdlb2xvY2F0aW9uQ2xpZW50TW9jaygpCi17Ci0gICAgaWYgKCFtX2dlb2xv
Y2F0aW9uQ2xpZW50LmdldCgpKQotICAgICAgICBtX2dlb2xvY2F0aW9uQ2xpZW50LnJlc2V0KFdl
Ykdlb2xvY2F0aW9uQ2xpZW50TW9jazo6Y3JlYXRlKCkpOwotICAgIHJldHVybiBtX2dlb2xvY2F0
aW9uQ2xpZW50LmdldCgpOwotfQotCi1XZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2sqIFdl
YlRlc3RQcm94eUJhc2U6OmRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jaygpCi17Ci0gICAgaWYg
KCFtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50LmdldCgpKQotICAgICAgICBtX2RldmljZU9yaWVu
dGF0aW9uQ2xpZW50LnJlc2V0KFdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jazo6Y3JlYXRl
KCkpOwotICAgIHJldHVybiBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50LmdldCgpOwotfQotCi0j
aWYgRU5BQkxFX0lOUFVUX1NQRUVDSAotTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlciogV2Vi
VGVzdFByb3h5QmFzZTo6c3BlZWNoSW5wdXRDb250cm9sbGVyTW9jaygpCi17Ci0gICAgV0VCS0lU
X0FTU0VSVChtX3NwZWVjaElucHV0Q29udHJvbGxlci5nZXQoKSk7Ci0gICAgcmV0dXJuIG1fc3Bl
ZWNoSW5wdXRDb250cm9sbGVyLmdldCgpOwotfQotI2VuZGlmCi0KLU1vY2tXZWJTcGVlY2hSZWNv
Z25pemVyKiBXZWJUZXN0UHJveHlCYXNlOjpzcGVlY2hSZWNvZ25pemVyTW9jaygpCi17Ci0gICAg
aWYgKCFtX3NwZWVjaFJlY29nbml6ZXIuZ2V0KCkpIHsKLSAgICAgICAgbV9zcGVlY2hSZWNvZ25p
emVyLnJlc2V0KG5ldyBNb2NrV2ViU3BlZWNoUmVjb2duaXplcigpKTsKLSAgICAgICAgbV9zcGVl
Y2hSZWNvZ25pemVyLT5zZXREZWxlZ2F0ZShtX2RlbGVnYXRlKTsKLSAgICB9Ci0gICAgcmV0dXJu
IG1fc3BlZWNoUmVjb2duaXplci5nZXQoKTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpk
aWRJbnZhbGlkYXRlUmVjdChjb25zdCBXZWJSZWN0JiByZWN0KQotewotICAgIC8vIG1fcGFpbnRS
ZWN0ID0gbV9wYWludFJlY3QgVSByZWN0Ci0gICAgaWYgKHJlY3QuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKG1fcGFpbnRSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICBtX3Bh
aW50UmVjdCA9IHJlY3Q7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaW50IGxlZnQgPSBt
aW4obV9wYWludFJlY3QueCwgcmVjdC54KTsKLSAgICBpbnQgdG9wID0gbWluKG1fcGFpbnRSZWN0
LnksIHJlY3QueSk7Ci0gICAgaW50IHJpZ2h0ID0gbWF4KG1fcGFpbnRSZWN0LnggKyBtX3BhaW50
UmVjdC53aWR0aCwgcmVjdC54ICsgcmVjdC53aWR0aCk7Ci0gICAgaW50IGJvdHRvbSA9IG1heCht
X3BhaW50UmVjdC55ICsgbV9wYWludFJlY3QuaGVpZ2h0LCByZWN0LnkgKyByZWN0LmhlaWdodCk7
Ci0gICAgbV9wYWludFJlY3QgPSBXZWJSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0
b20gLSB0b3ApOwotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OmRpZFNjcm9sbFJlY3QoaW50
LCBpbnQsIGNvbnN0IFdlYlJlY3QmIGNsaXBSZWN0KQotewotICAgIGRpZEludmFsaWRhdGVSZWN0
KGNsaXBSZWN0KTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpzY2hlZHVsZUNvbXBvc2l0
ZSgpCi17Ci0gICAgbV9wYWludFJlY3QgPSBXZWJSZWN0KDAsIDAsIElOVF9NQVgsIElOVF9NQVgp
OwotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OnNjaGVkdWxlQW5pbWF0aW9uKCkKLXsKLSAg
ICBzY2hlZHVsZUNvbXBvc2l0ZSgpOwotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OnNob3co
V2ViTmF2aWdhdGlvblBvbGljeSkKLXsKLSAgICBzY2hlZHVsZUNvbXBvc2l0ZSgpOwotfQotCi12
b2lkIFdlYlRlc3RQcm94eUJhc2U6OnNldFdpbmRvd1JlY3QoY29uc3QgV2ViUmVjdCYgcmVjdCkK
LXsKLSAgICBzY2hlZHVsZUNvbXBvc2l0ZSgpOwotICAgIGRpc2NhcmRCYWNraW5nU3RvcmUoKTsK
LX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaWRBdXRvUmVzaXplKGNvbnN0IFdlYlNpemUm
KQotewotICAgIHNjaGVkdWxlQ29tcG9zaXRlKCk7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFz
ZTo6cG9zdEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24oY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0JiBvYmosIFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbiBu
b3RpZmljYXRpb24pCi17Ci0gICAgaWYgKG5vdGlmaWNhdGlvbiA9PSBXZWJLaXQ6OldlYkFjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb25Gb2N1c2VkVUlFbGVtZW50Q2hhbmdlZCkKLSAgICAgICAgbV90
ZXN0SW50ZXJmYWNlcy0+YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEVsZW1l
bnQob2JqKTsKLQotICAgIGNvbnN0IGNoYXIqIG5vdGlmaWNhdGlvbk5hbWU7Ci0gICAgc3dpdGNo
IChub3RpZmljYXRpb24pIHsKLSAgICBjYXNlIFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvbkFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkOgotICAgICAgICBub3RpZmljYXRpb25OYW1l
ID0gIkFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBX
ZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25BdXRvY29ycmVjdGlvbk9jY3VyZWQ6
Ci0gICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiQXV0b2NvcnJlY3Rpb25PY2N1cmVkIjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b25DaGVja2VkU3RhdGVDaGFuZ2VkOgotICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIkNoZWNr
ZWRTdGF0ZUNoYW5nZWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYktpdDo6V2ViQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkNoaWxkcmVuQ2hhbmdlZDoKLSAgICAgICAgbm90aWZpY2F0
aW9uTmFtZSA9ICJDaGlsZHJlbkNoYW5nZWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdl
YktpdDo6V2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkZvY3VzZWRVSUVsZW1lbnRDaGFuZ2Vk
OgotICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIkZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkIjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25MYXlvdXRDb21wbGV0ZToKLSAgICAgICAgbm90aWZpY2F0aW9uTmFtZSA9ICJMYXlvdXRD
b21wbGV0ZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uTG9hZENvbXBsZXRlOgotICAgICAgICBub3RpZmljYXRpb25OYW1lID0g
IkxvYWRDb21wbGV0ZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJBY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uU2VsZWN0ZWRDaGlsZHJlbkNoYW5nZWQ6Ci0gICAgICAgIG5v
dGlmaWNhdGlvbk5hbWUgPSAiU2VsZWN0ZWRDaGlsZHJlbkNoYW5nZWQiOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvblNlbGVjdGVk
VGV4dENoYW5nZWQ6Ci0gICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiU2VsZWN0ZWRUZXh0Q2hh
bmdlZCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uVmFsdWVDaGFuZ2VkOgotICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIlZh
bHVlQ2hhbmdlZCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJBY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uU2Nyb2xsZWRUb0FuY2hvcjoKLSAgICAgICAgbm90aWZpY2F0aW9u
TmFtZSA9ICJTY3JvbGxlZFRvQW5jaG9yIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJL
aXQ6OldlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25MaXZlUmVnaW9uQ2hhbmdlZDoKLSAgICAg
ICAgbm90aWZpY2F0aW9uTmFtZSA9ICJMaXZlUmVnaW9uQ2hhbmdlZCI7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uTWVudUxpc3RJ
dGVtU2VsZWN0ZWQ6Ci0gICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiTWVudUxpc3RJdGVtU2Vs
ZWN0ZWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0
eU5vdGlmaWNhdGlvbk1lbnVMaXN0VmFsdWVDaGFuZ2VkOgotICAgICAgICBub3RpZmljYXRpb25O
YW1lID0gIk1lbnVMaXN0VmFsdWVDaGFuZ2VkIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBX
ZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25Sb3dDb3VudENoYW5nZWQ6Ci0gICAg
ICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiUm93Q291bnRDaGFuZ2VkIjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25Sb3dDb2xsYXBz
ZWQ6Ci0gICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiUm93Q29sbGFwc2VkIjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25Sb3dF
eHBhbmRlZDoKLSAgICAgICAgbm90aWZpY2F0aW9uTmFtZSA9ICJSb3dFeHBhbmRlZCI7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9u
SW52YWxpZFN0YXR1c0NoYW5nZWQ6Ci0gICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiSW52YWxp
ZFN0YXR1c0NoYW5nZWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYktpdDo6V2ViQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvblRleHRDaGFuZ2VkOgotICAgICAgICBub3RpZmljYXRpb25O
YW1lID0gIlRleHRDaGFuZ2VkIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6Oldl
YkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25BcmlhQXR0cmlidXRlQ2hhbmdlZDoKLSAgICAgICAg
bm90aWZpY2F0aW9uTmFtZSA9ICJBcmlhQXR0cmlidXRlQ2hhbmdlZCI7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiVW5rbm93bk5vdGlm
aWNhdGlvbiI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIG1fdGVzdEludGVyZmFjZXMt
PmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCktPm5vdGlmaWNhdGlvblJlY2VpdmVkKG9iaiwgbm90
aWZpY2F0aW9uTmFtZSk7Ci0KLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+YWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIoKS0+c2hvdWxkTG9nQWNjZXNzaWJpbGl0eUV2ZW50cygpKSB7Ci0gICAgICAg
IHN0cmluZyBtZXNzYWdlKCJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uIC0gIik7Ci0gICAgICAg
IG1lc3NhZ2UgKz0gbm90aWZpY2F0aW9uTmFtZTsKLQotICAgICAgICBXZWJLaXQ6OldlYk5vZGUg
bm9kZSA9IG9iai5ub2RlKCk7Ci0gICAgICAgIGlmICghbm9kZS5pc051bGwoKSAmJiBub2RlLmlz
RWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgV2ViS2l0OjpXZWJFbGVtZW50IGVsZW1lbnQg
PSBub2RlLnRvPFdlYktpdDo6V2ViRWxlbWVudD4oKTsKLSAgICAgICAgICAgIGlmIChlbGVtZW50
Lmhhc0F0dHJpYnV0ZSgiaWQiKSkgewotICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gIiAtIGlk
OiI7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZSArPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQi
KS51dGY4KCkuZGF0YSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbV9k
ZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKG1lc3NhZ2UgKyAiXG4iKTsKLSAgICB9Ci19Ci0KLXZvaWQg
V2ViVGVzdFByb3h5QmFzZTo6c3RhcnREcmFnZ2luZyhXZWJGcmFtZSosIGNvbnN0IFdlYkRyYWdE
YXRhJiBkYXRhLCBXZWJEcmFnT3BlcmF0aW9uc01hc2sgbWFzaywgY29uc3QgV2ViSW1hZ2UmLCBj
b25zdCBXZWJQb2ludCYpCi17Ci0gICAgLy8gV2hlbiBydW5uaW5nIGEgdGVzdCwgd2UgbmVlZCB0
byBmYWtlIGEgZHJhZyBkcm9wIG9wZXJhdGlvbiBvdGhlcndpc2UKLSAgICAvLyBXaW5kb3dzIHdh
aXRzIGZvciByZWFsIG1vdXNlIGV2ZW50cyB0byBrbm93IHdoZW4gdGhlIGRyYWcgaXMgb3Zlci4K
LSAgICBtX3Rlc3RJbnRlcmZhY2VzLT5ldmVudFNlbmRlcigpLT5kb0RyYWdEcm9wKGRhdGEsIG1h
c2spOwotfQotCi0vLyBUaGUgb3V0cHV0IGZyb20gdGhlc2UgbWV0aG9kcyBpbiBsYXlvdXQgdGVz
dCBtb2RlIHNob3VsZCBtYXRjaCB0aGF0Ci0vLyBleHBlY3RlZCBieSB0aGUgbGF5b3V0IHRlc3Rz
LiBTZWUgRWRpdGluZ0RlbGVnYXRlLm0gaW4gRHVtcFJlbmRlclRyZWUuCi0KLWJvb2wgV2ViVGVz
dFByb3h5QmFzZTo6c2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFdlYlJhbmdlJiByYW5nZSkKLXsK
LSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGlu
Z0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiRURJVElO
RyBERUxFR0FURTogc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZToiKTsKLSAgICAgICAgcHJp
bnRSYW5nZURlc2NyaXB0aW9uKG1fZGVsZWdhdGUsIHJhbmdlKTsKLSAgICAgICAgbV9kZWxlZ2F0
ZS0+cHJpbnRNZXNzYWdlKCJcbiIpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBXZWJUZXN0UHJveHlCYXNlOjpzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFdlYlJhbmdlJiByYW5n
ZSkKLXsKLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1w
RWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgi
RURJVElORyBERUxFR0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6Iik7Ci0gICAgICAg
IHByaW50UmFuZ2VEZXNjcmlwdGlvbihtX2RlbGVnYXRlLCByYW5nZSk7Ci0gICAgICAgIG1fZGVs
ZWdhdGUtPnByaW50TWVzc2FnZSgiXG4iKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgV2ViVGVzdFByb3h5QmFzZTo6c2hvdWxkSW5zZXJ0Tm9kZShjb25zdCBXZWJOb2RlJiBu
b2RlLCBjb25zdCBXZWJSYW5nZSYgcmFuZ2UsIFdlYkVkaXRpbmdBY3Rpb24gYWN0aW9uKQotewot
ICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkpIHsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJFRElUSU5H
IERFTEVHQVRFOiBzaG91bGRJbnNlcnROb2RlOiIpOwotICAgICAgICBwcmludE5vZGVEZXNjcmlw
dGlvbihtX2RlbGVnYXRlLCBub2RlLCAwKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNz
YWdlKCIgcmVwbGFjaW5nRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHByaW50UmFuZ2VEZXNjcmlwdGlv
bihtX2RlbGVnYXRlLCByYW5nZSk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShz
dHJpbmcoIiBnaXZlbkFjdGlvbjoiKSArIGVkaXRpbmdBY3Rpb25EZXNjcmlwdGlvbihhY3Rpb24p
ICsgIlxuIik7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYlRlc3RQcm94
eUJhc2U6OnNob3VsZEluc2VydFRleHQoY29uc3QgV2ViU3RyaW5nJiB0ZXh0LCBjb25zdCBXZWJS
YW5nZSYgcmFuZ2UsIFdlYkVkaXRpbmdBY3Rpb24gYWN0aW9uKQotewotICAgIGlmIChtX3Rlc3RJ
bnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsK
LSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0cmluZygiRURJVElORyBERUxFR0FU
RTogc2hvdWxkSW5zZXJ0VGV4dDoiKSArIHRleHQudXRmOCgpLmRhdGEoKSArICIgcmVwbGFjaW5n
RE9NUmFuZ2U6Iik7Ci0gICAgICAgIHByaW50UmFuZ2VEZXNjcmlwdGlvbihtX2RlbGVnYXRlLCBy
YW5nZSk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShzdHJpbmcoIiBnaXZlbkFj
dGlvbjoiKSArIGVkaXRpbmdBY3Rpb25EZXNjcmlwdGlvbihhY3Rpb24pICsgIlxuIik7Ci0gICAg
fQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYlRlc3RQcm94eUJhc2U6OnNob3VsZENo
YW5nZVNlbGVjdGVkUmFuZ2UoCi0gICAgY29uc3QgV2ViUmFuZ2UmIGZyb21SYW5nZSwgY29uc3Qg
V2ViUmFuZ2UmIHRvUmFuZ2UsIFdlYlRleHRBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNl
bGVjdGluZykKLXsKLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVz
c2FnZSgiRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToiKTsK
LSAgICAgICAgcHJpbnRSYW5nZURlc2NyaXB0aW9uKG1fZGVsZWdhdGUsIGZyb21SYW5nZSk7Ci0g
ICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiIHRvRE9NUmFuZ2U6Iik7Ci0gICAgICAg
IHByaW50UmFuZ2VEZXNjcmlwdGlvbihtX2RlbGVnYXRlLCB0b1JhbmdlKTsKLSAgICAgICAgbV9k
ZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0cmluZygiIGFmZmluaXR5OiIpICsgdGV4dEFmZmluaXR5
RGVzY3JpcHRpb24oYWZmaW5pdHkpICsgIiBzdGlsbFNlbGVjdGluZzoiICsgKHN0aWxsU2VsZWN0
aW5nID8gIlRSVUUiIDogIkZBTFNFIikgKyAiXG4iKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgV2ViVGVzdFByb3h5QmFzZTo6c2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgV2Vi
UmFuZ2UmIHJhbmdlKQotewotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJp
bnRNZXNzYWdlKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGREZWxldGVET01SYW5nZToiKTsKLSAg
ICAgICAgcHJpbnRSYW5nZURlc2NyaXB0aW9uKG1fZGVsZWdhdGUsIHJhbmdlKTsKLSAgICAgICAg
bV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJcbiIpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBXZWJUZXN0UHJveHlCYXNlOjpzaG91bGRBcHBseVN0eWxlKGNvbnN0IFdlYlN0
cmluZyYgc3R5bGUsIGNvbnN0IFdlYlJhbmdlJiByYW5nZSkKLXsKLSAgICBpZiAobV90ZXN0SW50
ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0g
ICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShzdHJpbmcoIkVESVRJTkcgREVMRUdBVEU6
IHNob3VsZEFwcGx5U3R5bGU6IikgKyBzdHlsZS51dGY4KCkuZGF0YSgpICsgIiB0b0VsZW1lbnRz
SW5ET01SYW5nZToiKTsKLSAgICAgICAgcHJpbnRSYW5nZURlc2NyaXB0aW9uKG1fZGVsZWdhdGUs
IHJhbmdlKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJcbiIpOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaWRCZWdpbkVk
aXRpbmcoKQotewotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3Vs
ZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCi0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2Fn
ZSgiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEJlZ2luRWRpdGluZzpXZWJWaWV3RGlkQmVn
aW5FZGl0aW5nTm90aWZpY2F0aW9uXG4iKTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpk
aWRDaGFuZ2VTZWxlY3Rpb24oYm9vbCBpc0VtcHR5U2VsZWN0aW9uKQotewotICAgIGlmIChtX3Rl
c3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkp
Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiRURJVElORyBERUxFR0FURTogd2Vi
Vmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0
aW9uXG4iKTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaWRDaGFuZ2VDb250ZW50cygp
Ci17Ci0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVk
aXRpbmdDYWxsYmFja3MoKSkKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJFRElU
SU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRp
b25cbiIpOwotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OmRpZEVuZEVkaXRpbmcoKQotewot
ICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkpCi0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6V2ViVmlld0RpZEVuZEVkaXRpbmdOb3RpZmlj
YXRpb25cbiIpOwotfQotCi1ib29sIFdlYlRlc3RQcm94eUJhc2U6OmNyZWF0ZVZpZXcoV2ViRnJh
bWUqLCBjb25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJXaW5kb3dGZWF0dXJl
cyYsIGNvbnN0IFdlYlN0cmluZyYsIFdlYk5hdmlnYXRpb25Qb2xpY3kpCi17Ci0gICAgaWYgKCFt
X3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPmNhbk9wZW5XaW5kb3dzKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5z
aG91bGREdW1wQ3JlYXRlVmlldygpKQotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uo
c3RyaW5nKCJjcmVhdGVWaWV3KCIpICsgVVJMRGVzY3JpcHRpb24ocmVxdWVzdC51cmwoKSkgKyAi
KVxuIik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVdlYlBsdWdpbiogV2ViVGVzdFByb3h5QmFz
ZTo6Y3JlYXRlUGx1Z2luKFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViUGx1Z2luUGFyYW1zJiBw
YXJhbXMpCi17Ci0gICAgaWYgKHBhcmFtcy5taW1lVHlwZSA9PSBUZXN0UGx1Z2luOjptaW1lVHlw
ZSgpKQotICAgICAgICByZXR1cm4gVGVzdFBsdWdpbjo6Y3JlYXRlKGZyYW1lLCBwYXJhbXMsIG1f
ZGVsZWdhdGUpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OnNl
dFN0YXR1c1RleHQoY29uc3QgV2ViU3RyaW5nJiB0ZXh0KQotewotICAgIGlmICghbV90ZXN0SW50
ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uoc3RyaW5nKCJVSSBERUxF
R0FURSBTVEFUVVMgQ0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6IikgKyB0ZXh0LnV0ZjgoKS5kYXRh
KCkgKyAiXG4iKTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaWRTdG9wTG9hZGluZygp
Ci17Ci0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFBy
b2dyZXNzRmluaXNoZWRDYWxsYmFjaygpKQotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3Nh
Z2UoInBvc3RQcm9ncmVzc0ZpbmlzaGVkTm90aWZpY2F0aW9uXG4iKTsKLX0KLQotdm9pZCBXZWJU
ZXN0UHJveHlCYXNlOjpzaG93Q29udGV4dE1lbnUoV2ViRnJhbWUqLCBjb25zdCBXZWJDb250ZXh0
TWVudURhdGEmIGNvbnRleHRNZW51RGF0YSkKLXsKLSAgICBtX3Rlc3RJbnRlcmZhY2VzLT5ldmVu
dFNlbmRlcigpLT5zZXRDb250ZXh0TWVudURhdGEoY29udGV4dE1lbnVEYXRhKTsKLX0KLQotV2Vi
VXNlck1lZGlhQ2xpZW50KiBXZWJUZXN0UHJveHlCYXNlOjp1c2VyTWVkaWFDbGllbnQoKQotewot
I2lmIEVOQUJMRV9XRUJSVEMKLSAgICBpZiAoIW1fdXNlck1lZGlhQ2xpZW50LmdldCgpKQotICAg
ICAgICBtX3VzZXJNZWRpYUNsaWVudC5yZXNldChuZXcgV2ViVXNlck1lZGlhQ2xpZW50TW9jayht
X2RlbGVnYXRlKSk7Ci0gICAgcmV0dXJuIG1fdXNlck1lZGlhQ2xpZW50LmdldCgpOwotI2Vsc2UK
LSAgICByZXR1cm4gMDsKLSNlbmRpZiAvLyBFTkFCTEVfV0VCUlRDCi19Ci0KLS8vIFNpbXVsYXRl
IGEgcHJpbnQgYnkgZ29pbmcgaW50byBwcmludCBtb2RlIGFuZCB0aGVuIGV4aXQgc3RyYWlnaHQg
YXdheS4KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6cHJpbnRQYWdlKFdlYkZyYW1lKiBmcmFtZSkK
LXsKLSAgICBXZWJTaXplIHBhZ2VTaXplSW5QaXhlbHMgPSBtX3Rlc3RJbnRlcmZhY2VzLT53ZWJW
aWV3KCktPnNpemUoKTsKLSAgICBXZWJQcmludFBhcmFtcyBwcmludFBhcmFtcyhwYWdlU2l6ZUlu
UGl4ZWxzKTsKLSAgICBmcmFtZS0+cHJpbnRCZWdpbihwcmludFBhcmFtcyk7Ci0gICAgZnJhbWUt
PnByaW50RW5kKCk7Ci19Ci0KLVdlYk5vdGlmaWNhdGlvblByZXNlbnRlciogV2ViVGVzdFByb3h5
QmFzZTo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCkKLXsKLSNpZiBFTkFCTEVfTk9USUZJQ0FUSU9O
UwotICAgIHJldHVybiBtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPm5vdGlmaWNhdGlv
blByZXNlbnRlcigpOwotI2Vsc2UKLSAgICByZXR1cm4gMDsKLSNlbmRpZgotfQotCi1XZWJHZW9s
b2NhdGlvbkNsaWVudCogV2ViVGVzdFByb3h5QmFzZTo6Z2VvbG9jYXRpb25DbGllbnQoKQotewot
ICAgIHJldHVybiBnZW9sb2NhdGlvbkNsaWVudE1vY2soKTsKLX0KLQotV2ViU3BlZWNoSW5wdXRD
b250cm9sbGVyKiBXZWJUZXN0UHJveHlCYXNlOjpzcGVlY2hJbnB1dENvbnRyb2xsZXIoV2ViU3Bl
ZWNoSW5wdXRMaXN0ZW5lciogbGlzdGVuZXIpCi17Ci0jaWYgRU5BQkxFX0lOUFVUX1NQRUVDSAot
ICAgIGlmICghbV9zcGVlY2hJbnB1dENvbnRyb2xsZXIuZ2V0KCkpIHsKLSAgICAgICAgbV9zcGVl
Y2hJbnB1dENvbnRyb2xsZXIucmVzZXQobmV3IE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIo
bGlzdGVuZXIpKTsKLSAgICAgICAgbV9zcGVlY2hJbnB1dENvbnRyb2xsZXItPnNldERlbGVnYXRl
KG1fZGVsZWdhdGUpOwotICAgIH0KLSAgICByZXR1cm4gbV9zcGVlY2hJbnB1dENvbnRyb2xsZXIu
Z2V0KCk7Ci0jZWxzZQotICAgIFdFQktJVF9BU1NFUlQobGlzdGVuZXIpOwotICAgIHJldHVybiAw
OwotI2VuZGlmCi19Ci0KLVdlYlNwZWVjaFJlY29nbml6ZXIqIFdlYlRlc3RQcm94eUJhc2U6OnNw
ZWVjaFJlY29nbml6ZXIoKQotewotICAgIHJldHVybiBzcGVlY2hSZWNvZ25pemVyTW9jaygpOwot
fQotCi1XZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudCogV2ViVGVzdFByb3h5QmFzZTo6ZGV2aWNl
T3JpZW50YXRpb25DbGllbnQoKQotewotICAgIHJldHVybiBkZXZpY2VPcmllbnRhdGlvbkNsaWVu
dE1vY2soKTsKLX0KLQotYm9vbCBXZWJUZXN0UHJveHlCYXNlOjpyZXF1ZXN0UG9pbnRlckxvY2so
KQotewotICAgIHJldHVybiBtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnJlcXVlc3RQ
b2ludGVyTG9jaygpOwotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OnJlcXVlc3RQb2ludGVy
VW5sb2NrKCkKLXsKLSAgICBtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnJlcXVlc3RQ
b2ludGVyVW5sb2NrKCk7Ci19Ci0KLWJvb2wgV2ViVGVzdFByb3h5QmFzZTo6aXNQb2ludGVyTG9j
a2VkKCkKLXsKLSAgICByZXR1cm4gbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5pc1Bv
aW50ZXJMb2NrZWQoKTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaWRGb2N1cygpCi17
Ci0gICAgbV9kZWxlZ2F0ZS0+c2V0Rm9jdXModGhpcywgdHJ1ZSk7Ci19Ci0KLXZvaWQgV2ViVGVz
dFByb3h5QmFzZTo6ZGlkQmx1cigpCi17Ci0gICAgbV9kZWxlZ2F0ZS0+c2V0Rm9jdXModGhpcywg
ZmFsc2UpOwotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OndpbGxQZXJmb3JtQ2xpZW50UmVk
aXJlY3QoV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJVUkwmLCBjb25zdCBXZWJVUkwmIHRvLCBk
b3VibGUsIGRvdWJsZSkKLXsKLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigp
LT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgcHJpbnRGcmFtZURl
c2NyaXB0aW9uKG1fZGVsZWdhdGUsIGZyYW1lKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRN
ZXNzYWdlKHN0cmluZygiIC0gd2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMOiAiKSArIHRv
LnNwZWMoKS5kYXRhKCkgKyAiIFxuIik7Ci0gICAgfQotCi0gICAgaWYgKG1fdGVzdEludGVyZmFj
ZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFj
a3MoKSkKLSAgICAgICAgcHJpbnRGcmFtZVVzZXJHZXN0dXJlU3RhdHVzKG1fZGVsZWdhdGUsIGZy
YW1lLCAiIC0gaW4gd2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFxuIik7Ci19Ci0KLXZvaWQgV2Vi
VGVzdFByb3h5QmFzZTo6ZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3QoV2ViRnJhbWUqIGZyYW1lKQot
ewotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFt
ZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBwcmludEZyYW1lRGVzY3JpcHRpb24obV9kZWxl
Z2F0ZSwgZnJhbWUpOwotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIiAtIGRpZENh
bmNlbENsaWVudFJlZGlyZWN0Rm9yRnJhbWVcbiIpOwotICAgIH0KLX0KLQotdm9pZCBXZWJUZXN0
UHJveHlCYXNlOjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZChXZWJGcmFtZSogZnJhbWUpCi17Ci0g
ICAgaWYgKCFtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnRvcExvYWRpbmdGcmFtZSgp
KQotICAgICAgICBtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNldFRvcExvYWRpbmdG
cmFtZShmcmFtZSwgZmFsc2UpOwotCi0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIHByaW50RnJh
bWVEZXNjcmlwdGlvbihtX2RlbGVnYXRlLCBmcmFtZSk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnBy
aW50TWVzc2FnZSgiIC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZVxuIik7Ci0gICAg
fQotCi0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFVz
ZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MoKSkKLSAgICAgICAgcHJpbnRGcmFtZVVzZXJH
ZXN0dXJlU3RhdHVzKG1fZGVsZWdhdGUsIGZyYW1lLCAiIC0gaW4gZGlkU3RhcnRQcm92aXNpb25h
bExvYWRGb3JGcmFtZVxuIik7Ci0KLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5l
cigpLT5zdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKCkpIHsKLSAgICAgICAgcHJpbnRGcmFtZURl
c2NyaXB0aW9uKG1fZGVsZWdhdGUsIGZyYW1lKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRN
ZXNzYWdlKCIgLSBzdG9wcGluZyBsb2FkIGluIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJh
bWUgY2FsbGJhY2tcbiIpOwotICAgICAgICBmcmFtZS0+c3RvcExvYWRpbmcoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJv
dmlzaW9uYWxMb2FkKFdlYkZyYW1lKiBmcmFtZSkKLXsKLSAgICBpZiAobV90ZXN0SW50ZXJmYWNl
cy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKLSAgICAg
ICAgcHJpbnRGcmFtZURlc2NyaXB0aW9uKG1fZGVsZWdhdGUsIGZyYW1lKTsKLSAgICAgICAgbV9k
ZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCIgLSBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92
aXNpb25hbExvYWRGb3JGcmFtZVxuIik7Ci0gICAgfQotfQotCi12b2lkIFdlYlRlc3RQcm94eUJh
c2U6OmRpZEZhaWxQcm92aXNpb25hbExvYWQoV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJVUkxF
cnJvciYpCi17Ci0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIHByaW50RnJhbWVEZXNjcmlwdGlv
bihtX2RlbGVnYXRlLCBmcmFtZSk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgi
IC0gZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvclxuIik7Ci0gICAgfQotICAgIGxvY2F0
aW9uQ2hhbmdlRG9uZShmcmFtZSk7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlkQ29t
bWl0UHJvdmlzaW9uYWxMb2FkKFdlYkZyYW1lKiBmcmFtZSwgYm9vbCkKLXsKLSAgICBpZiAobV90
ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
KCkpIHsKLSAgICAgICAgcHJpbnRGcmFtZURlc2NyaXB0aW9uKG1fZGVsZWdhdGUsIGZyYW1lKTsK
LSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCIgLSBkaWRDb21taXRMb2FkRm9yRnJh
bWVcbiIpOwotICAgIH0KLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaWRSZWNlaXZlVGl0
bGUoV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJTdHJpbmcmIHRpdGxlLCBXZWJUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbikKLXsKLSAgICBXZWJDU3RyaW5nIHRpdGxlOCA9IHRpdGxlLnV0ZjgoKTsK
LQotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFt
ZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBwcmludEZyYW1lRGVzY3JpcHRpb24obV9kZWxl
Z2F0ZSwgZnJhbWUpOwotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uoc3RyaW5nKCIg
LSBkaWRSZWNlaXZlVGl0bGU6ICIpICsgdGl0bGU4LmRhdGEoKSArICJcbiIpOwotICAgIH0KLQot
ICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBUaXRsZUNo
YW5nZXMoKSkKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0cmluZygiVElUTEUg
Q0hBTkdFRDogJyIpICsgdGl0bGU4LmRhdGEoKSArICInXG4iKTsKLQotICAgIG1fdGVzdEludGVy
ZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2V0VGl0bGVUZXh0RGlyZWN0aW9uKGRpcmVjdGlvbik7Ci19
Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlkQ2hhbmdlSWNvbihXZWJGcmFtZSogZnJhbWUs
IFdlYkljb25VUkw6OlR5cGUpCi17Ci0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcEljb25DaGFuZ2VzKCkpIHsKLSAgICAgICAgcHJpbnRGcmFtZURlc2Ny
aXB0aW9uKG1fZGVsZWdhdGUsIGZyYW1lKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNz
YWdlKHN0cmluZygiIC0gZGlkQ2hhbmdlSWNvbnNcbiIpKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2Vi
VGVzdFByb3h5QmFzZTo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkKFdlYkZyYW1lKiBmcmFtZSkKLXsK
LSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVM
b2FkQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgcHJpbnRGcmFtZURlc2NyaXB0aW9uKG1fZGVsZWdh
dGUsIGZyYW1lKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCIgLSBkaWRGaW5p
c2hEb2N1bWVudExvYWRGb3JGcmFtZVxuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdW5zaWdu
ZWQgcGVuZGluZ1VubG9hZEV2ZW50cyA9IGZyYW1lLT51bmxvYWRMaXN0ZW5lckNvdW50KCk7Ci0g
ICAgICAgIGlmIChwZW5kaW5nVW5sb2FkRXZlbnRzKSB7Ci0gICAgICAgICAgICBwcmludEZyYW1l
RGVzY3JpcHRpb24obV9kZWxlZ2F0ZSwgZnJhbWUpOwotICAgICAgICAgICAgY2hhciBidWZmZXJb
MTAwXTsKLSAgICAgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIgLSBo
YXMgJXUgb251bmxvYWQgaGFuZGxlcihzKVxuIiwgcGVuZGluZ1VubG9hZEV2ZW50cyk7Ci0gICAg
ICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoYnVmZmVyKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaWRIYW5kbGVPbmxvYWRFdmVudHMoV2Vi
RnJhbWUqIGZyYW1lKQotewotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBwcmludEZyYW1lRGVz
Y3JpcHRpb24obV9kZWxlZ2F0ZSwgZnJhbWUpOwotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1l
c3NhZ2UoIiAtIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lXG4iKTsKLSAgICB9Ci19Ci0K
LXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlkRmFpbExvYWQoV2ViRnJhbWUqIGZyYW1lLCBjb25z
dCBXZWJVUkxFcnJvciYpCi17Ci0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIo
KS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIHByaW50RnJhbWVE
ZXNjcmlwdGlvbihtX2RlbGVnYXRlLCBmcmFtZSk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50
TWVzc2FnZSgiIC0gZGlkRmFpbExvYWRXaXRoRXJyb3JcbiIpOwotICAgIH0KLSAgICBsb2NhdGlv
bkNoYW5nZURvbmUoZnJhbWUpOwotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OmRpZEZpbmlz
aExvYWQoV2ViRnJhbWUqIGZyYW1lKQotewotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBwcmlu
dEZyYW1lRGVzY3JpcHRpb24obV9kZWxlZ2F0ZSwgZnJhbWUpOwotICAgICAgICBtX2RlbGVnYXRl
LT5wcmludE1lc3NhZ2UoIiAtIGRpZEZpbmlzaExvYWRGb3JGcmFtZVxuIik7Ci0gICAgfQotICAg
IGxvY2F0aW9uQ2hhbmdlRG9uZShmcmFtZSk7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6
ZGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlKFdlYkZyYW1lKiBmcmFtZSkKLXsKLSAgICBpZiAo
bV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJh
Y2tzKCkpIHsKLSAgICAgICAgcHJpbnRGcmFtZURlc2NyaXB0aW9uKG1fZGVsZWdhdGUsIGZyYW1l
KTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCIgLSBkaWRDaGFuZ2VMb2NhdGlv
bldpdGhpblBhZ2VGb3JGcmFtZVxuIik7Ci0gICAgfQotfQotCi12b2lkIFdlYlRlc3RQcm94eUJh
c2U6OmRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnQoV2ViRnJhbWUqKQotewotICAgIGlmIChtX3Rl
c3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3Mo
KSkKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJkaWREaXNwbGF5SW5zZWN1cmVD
b250ZW50XG4iKTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaWRSdW5JbnNlY3VyZUNv
bnRlbnQoV2ViRnJhbWUqLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIGNvbnN0IFdlYlVSTCYp
Ci17Ci0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZy
YW1lTG9hZENhbGxiYWNrcygpKQotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoImRp
ZFJ1bkluc2VjdXJlQ29udGVudFxuIik7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlk
RGV0ZWN0WFNTKFdlYkZyYW1lKiwgY29uc3QgV2ViVVJMJiwgYm9vbCkKLXsKLSAgICBpZiAobV90
ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
KCkpCi0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiZGlkRGV0ZWN0WFNTXG4iKTsK
LX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjphc3NpZ25JZGVudGlmaWVyVG9SZXF1ZXN0KFdl
YkZyYW1lKiwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgV2ViS2l0OjpXZWJVUkxSZXF1ZXN0
JiByZXF1ZXN0KQotewotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSB8fCBtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZVByaW9yaXRpZXMoKSkgewotICAgICAgICBXRUJL
SVRfQVNTRVJUKG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwLmZpbmQoaWRlbnRpZmllcikgPT0gbV9y
ZXNvdXJjZUlkZW50aWZpZXJNYXAuZW5kKCkpOwotICAgICAgICBtX3Jlc291cmNlSWRlbnRpZmll
ck1hcFtpZGVudGlmaWVyXSA9IGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KHJlcXVl
c3QudXJsKCkuc3BlYygpKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6d2ls
bFJlcXVlc3RSZXNvdXJjZShXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYktpdDo6V2ViQ2FjaGVk
VVJMUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VSZXF1ZXN0Q2FsbGJhY2tzKCkpIHsKLSAgICAgICAg
cHJpbnRGcmFtZURlc2NyaXB0aW9uKG1fZGVsZWdhdGUsIGZyYW1lKTsKLSAgICAgICAgV2ViRWxl
bWVudCBlbGVtZW50ID0gcmVxdWVzdC5pbml0aWF0b3JFbGVtZW50KCk7Ci0gICAgICAgIGlmICgh
ZWxlbWVudC5pc051bGwoKSkgewotICAgICAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdl
KCIgLSBlbGVtZW50IHdpdGggIik7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1
dGUoImlkIikpCi0gICAgICAgICAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0cmlu
ZygiaWQgJyIpICsgZWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikudXRmOCgpLmRhdGEoKSArICIn
Iik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRN
ZXNzYWdlKCJubyBpZCIpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fZGVsZWdhdGUt
PnByaW50TWVzc2FnZShzdHJpbmcoIiAtICIpICsgcmVxdWVzdC5pbml0aWF0b3JOYW1lKCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShzdHJpbmcoIiBy
ZXF1ZXN0ZWQgJyIpICsgVVJMRGVzY3JpcHRpb24ocmVxdWVzdC51cmxSZXF1ZXN0KCkudXJsKCkp
LmNfc3RyKCkgKyAiJ1xuIik7Ci0gICAgfQotfQotCi1ib29sIFdlYlRlc3RQcm94eUJhc2U6OmNh
bkhhbmRsZVJlcXVlc3QoV2ViRnJhbWUqLCBjb25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0KQot
ewotICAgIEdVUkwgdXJsID0gcmVxdWVzdC51cmwoKTsKLSAgICAvLyBKdXN0IHJlamVjdCB0aGUg
c2NoZW1lIHVzZWQgaW4KLSAgICAvLyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2MvcmVkaXJl
Y3QtdG8tZXh0ZXJuYWwtdXJsLmh0bWwKLSAgICByZXR1cm4gIXVybC5TY2hlbWVJcygic3BhY2Vi
YWxscyIpOwotfQotCi1XZWJVUkxFcnJvciBXZWJUZXN0UHJveHlCYXNlOjpjYW5ub3RIYW5kbGVS
ZXF1ZXN0RXJyb3IoV2ViRnJhbWUqLCBjb25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0KQotewot
ICAgIFdlYlVSTEVycm9yIGVycm9yOwotICAgIC8vIEEgV2ViS2l0IGxheW91dCB0ZXN0IGV4cGVj
dHMgdGhlIGZvbGxvd2luZyB2YWx1ZXMuCi0gICAgLy8gdW5hYmxlVG9JbXBsZW1lbnRQb2xpY3lX
aXRoRXJyb3IoKSBiZWxvdyBwcmludHMgdGhlbS4KLSAgICBlcnJvci5kb21haW4gPSBXZWJTdHJp
bmc6OmZyb21VVEY4KCJXZWJLaXRFcnJvckRvbWFpbiIpOwotICAgIGVycm9yLnJlYXNvbiA9IDEw
MTsKLSAgICBlcnJvci51bnJlYWNoYWJsZVVSTCA9IHJlcXVlc3QudXJsKCk7Ci0gICAgcmV0dXJu
IGVycm9yOwotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OmRpZENyZWF0ZURhdGFTb3VyY2Uo
V2ViRnJhbWUqLCBXZWJEYXRhU291cmNlKiBkcykKLXsKLSAgICBpZiAoIW1fdGVzdEludGVyZmFj
ZXMtPnRlc3RSdW5uZXIoKS0+ZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCgpKQotICAgICAgICBk
cy0+c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZChmYWxzZSk7Ci19Ci0KLXZvaWQgV2ViVGVz
dFByb3h5QmFzZTo6d2lsbFNlbmRSZXF1ZXN0KFdlYkZyYW1lKiwgdW5zaWduZWQgaWRlbnRpZmll
ciwgV2ViS2l0OjpXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJLaXQ6OldlYlVSTFJl
c3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQotewotICAgIC8vIE5lZWQgdG8gdXNlIEdVUkwgZm9y
IGhvc3QoKSBhbmQgU2NoZW1lSXMoKQotICAgIEdVUkwgdXJsID0gcmVxdWVzdC51cmwoKTsKLSAg
ICBzdHJpbmcgcmVxdWVzdFVSTCA9IHVybC5wb3NzaWJseV9pbnZhbGlkX3NwZWMoKTsKLQotICAg
IEdVUkwgbWFpbkRvY3VtZW50VVJMID0gcmVxdWVzdC5maXJzdFBhcnR5Rm9yQ29va2llcygpOwot
Ci0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291
cmNlTG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIGlmIChtX3Jlc291cmNlSWRlbnRpZmllck1h
cC5maW5kKGlkZW50aWZpZXIpID09IG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwLmVuZCgpKQotICAg
ICAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCI8dW5rbm93bj4iKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKG1fcmVzb3VyY2VJZGVu
dGlmaWVyTWFwW2lkZW50aWZpZXJdKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdl
KCIgLSB3aWxsU2VuZFJlcXVlc3QgPE5TVVJMUmVxdWVzdCBVUkwgIik7Ci0gICAgICAgIG1fZGVs
ZWdhdGUtPnByaW50TWVzc2FnZShkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXF1
ZXN0VVJMKS5jX3N0cigpKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCIsIG1h
aW4gZG9jdW1lbnQgVVJMICIpOwotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoVVJM
RGVzY3JpcHRpb24obWFpbkRvY3VtZW50VVJMKS5jX3N0cigpKTsKLSAgICAgICAgbV9kZWxlZ2F0
ZS0+cHJpbnRNZXNzYWdlKCIsIGh0dHAgbWV0aG9kICIpOwotICAgICAgICBtX2RlbGVnYXRlLT5w
cmludE1lc3NhZ2UocmVxdWVzdC5odHRwTWV0aG9kKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
IG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiPiByZWRpcmVjdFJlc3BvbnNlICIpOwotICAgICAg
ICBwcmludFJlc3BvbnNlRGVzY3JpcHRpb24obV9kZWxlZ2F0ZSwgcmVkaXJlY3RSZXNwb25zZSk7
Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiXG4iKTsKLSAgICB9Ci0KLSAgICBp
ZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VQcmlv
cml0aWVzKCkpIHsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKGRlc2NyaXB0aW9u
U3VpdGFibGVGb3JUZXN0UmVzdWx0KHJlcXVlc3RVUkwpLmNfc3RyKCkpOwotICAgICAgICBtX2Rl
bGVnYXRlLT5wcmludE1lc3NhZ2UoIiBoYXMgcHJpb3JpdHkgIik7Ci0gICAgICAgIG1fZGVsZWdh
dGUtPnByaW50TWVzc2FnZShQcmlvcml0eURlc2NyaXB0aW9uKHJlcXVlc3QucHJpb3JpdHkoKSkp
OwotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIlxuIik7Ci0gICAgfQotCi0gICAg
aWYgKCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpICYmIG1fdGVzdEludGVyZmFjZXMtPnRlc3RS
dW5uZXIoKS0+c2hvdWxkQmxvY2tSZWRpcmVjdHMoKSkgewotICAgICAgICBtX2RlbGVnYXRlLT5w
cmludE1lc3NhZ2UoIlJldHVybmluZyBudWxsIGZvciB0aGlzIHJlZGlyZWN0XG4iKTsKLSAgICAg
ICAgYmxvY2tSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+d2lsbFNlbmRSZXF1ZXN0U2hvdWxk
UmV0dXJuTnVsbCgpKSB7Ci0gICAgICAgIGJsb2NrUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCkt
Pmh0dHBIZWFkZXJzVG9DbGVhcigpKSB7Ci0gICAgICAgIGNvbnN0IHNldDxzdHJpbmc+ICpjbGVh
ckhlYWRlcnMgPSBtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPmh0dHBIZWFkZXJzVG9D
bGVhcigpOwotICAgICAgICBmb3IgKHNldDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBoZWFkZXIg
PSBjbGVhckhlYWRlcnMtPmJlZ2luKCk7IGhlYWRlciAhPSBjbGVhckhlYWRlcnMtPmVuZCgpOyAr
K2hlYWRlcikKLSAgICAgICAgICAgIHJlcXVlc3QuY2xlYXJIVFRQSGVhZGVyRmllbGQoV2ViU3Ry
aW5nOjpmcm9tVVRGOCgqaGVhZGVyKSk7Ci0gICAgfQotCi0gICAgc3RyaW5nIGhvc3QgPSB1cmwu
aG9zdCgpOwotICAgIGlmICghaG9zdC5lbXB0eSgpICYmICh1cmwuU2NoZW1lSXMoImh0dHAiKSB8
fCB1cmwuU2NoZW1lSXMoImh0dHBzIikpKSB7Ci0gICAgICAgIGlmICghaXNMb2NhbGhvc3QoaG9z
dCkgJiYgIWhvc3RJc1VzZWRCeVNvbWVUZXN0c1RvR2VuZXJhdGVFcnJvcihob3N0KQotICAgICAg
ICAgICAgJiYgKCghbWFpbkRvY3VtZW50VVJMLlNjaGVtZUlzKCJodHRwIikgJiYgIW1haW5Eb2N1
bWVudFVSTC5TY2hlbWVJcygiaHR0cHMiKSkgfHwgaXNMb2NhbGhvc3QobWFpbkRvY3VtZW50VVJM
Lmhvc3QoKSkpCi0gICAgICAgICAgICAmJiAhbV9kZWxlZ2F0ZS0+YWxsb3dFeHRlcm5hbFBhZ2Vz
KCkpIHsKLSAgICAgICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShzdHJpbmcoIkJsb2Nr
ZWQgYWNjZXNzIHRvIGV4dGVybmFsIFVSTCAiKSArIHJlcXVlc3RVUkwgKyAiXG4iKTsKLSAgICAg
ICAgICAgIGJsb2NrUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vIFNldCB0aGUgbmV3IHN1YnN0aXR1dGVkIFVSTC4KLSAgICBy
ZXF1ZXN0LnNldFVSTChtX2RlbGVnYXRlLT5yZXdyaXRlTGF5b3V0VGVzdHNVUkwocmVxdWVzdC51
cmwoKS5zcGVjKCkpKTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaWRSZWNlaXZlUmVz
cG9uc2UoV2ViRnJhbWUqLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBXZWJLaXQ6OldlYlVS
TFJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgaWYg
KG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwLmZpbmQoaWRlbnRpZmllcikgPT0gbV9yZXNvdXJjZUlk
ZW50aWZpZXJNYXAuZW5kKCkpCi0gICAgICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uo
Ijx1bmtub3duPiIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2RlbGVnYXRlLT5wcmlu
dE1lc3NhZ2UobV9yZXNvdXJjZUlkZW50aWZpZXJNYXBbaWRlbnRpZmllcl0pOwotICAgICAgICBt
X2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIiAtIGRpZFJlY2VpdmVSZXNwb25zZSAiKTsKLSAgICAg
ICAgcHJpbnRSZXNwb25zZURlc2NyaXB0aW9uKG1fZGVsZWdhdGUsIHJlc3BvbnNlKTsKLSAgICAg
ICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJcbiIpOwotICAgIH0KLSAgICBpZiAobV90ZXN0
SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVU
eXBlcygpKSB7Ci0gICAgICAgIEdVUkwgdXJsID0gcmVzcG9uc2UudXJsKCk7Ci0gICAgICAgIFdl
YlN0cmluZyBtaW1lVHlwZSA9IHJlc3BvbnNlLm1pbWVUeXBlKCk7Ci0gICAgICAgIG1fZGVsZWdh
dGUtPnByaW50TWVzc2FnZSh1cmwuRXh0cmFjdEZpbGVOYW1lKCkpOwotICAgICAgICBtX2RlbGVn
YXRlLT5wcmludE1lc3NhZ2UoIiBoYXMgTUlNRSB0eXBlICIpOwotICAgICAgICAvLyBTaW11bGF0
ZSBOU1VSTFJlc3BvbnNlJ3MgbWFwcGluZyBvZiBlbXB0eS91bmtub3duIE1JTUUgdHlwZXMgdG8g
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCi0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2Fn
ZShtaW1lVHlwZS5pc0VtcHR5KCkgPyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiA6IG1pbWVU
eXBlLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIlxu
Iik7Ci0gICAgfQotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OmRpZENoYW5nZVJlc291cmNl
UHJpb3JpdHkoV2ViRnJhbWUqLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBXZWJLaXQ6Oldl
YlVSTFJlcXVlc3Q6OlByaW9yaXR5JiBwcmlvcml0eSkKLXsKLSAgICBpZiAobV90ZXN0SW50ZXJm
YWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VQcmlvcml0aWVzKCkpIHsKLSAg
ICAgICAgaWYgKG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwLmZpbmQoaWRlbnRpZmllcikgPT0gbV9y
ZXNvdXJjZUlkZW50aWZpZXJNYXAuZW5kKCkpCi0gICAgICAgICAgICBtX2RlbGVnYXRlLT5wcmlu
dE1lc3NhZ2UoIjx1bmtub3duPiIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2RlbGVn
YXRlLT5wcmludE1lc3NhZ2UobV9yZXNvdXJjZUlkZW50aWZpZXJNYXBbaWRlbnRpZmllcl0pOwot
ICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIiBjaGFuZ2VkIHByaW9yaXR5IHRvICIp
OwotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoUHJpb3JpdHlEZXNjcmlwdGlvbihw
cmlvcml0eSkpOwotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIlxuIik7Ci0gICAg
fQotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OmRpZEZpbmlzaFJlc291cmNlTG9hZChXZWJG
cmFtZSosIHVuc2lnbmVkIGlkZW50aWZpZXIpCi17Ci0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMt
PnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7Ci0gICAg
ICAgIGlmIChtX3Jlc291cmNlSWRlbnRpZmllck1hcC5maW5kKGlkZW50aWZpZXIpID09IG1fcmVz
b3VyY2VJZGVudGlmaWVyTWFwLmVuZCgpKQotICAgICAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRN
ZXNzYWdlKCI8dW5rbm93bj4iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9kZWxlZ2F0
ZS0+cHJpbnRNZXNzYWdlKG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwW2lkZW50aWZpZXJdKTsKLSAg
ICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCIgLSBkaWRGaW5pc2hMb2FkaW5nXG4iKTsK
LSAgICB9Ci0gICAgbV9yZXNvdXJjZUlkZW50aWZpZXJNYXAuZXJhc2UoaWRlbnRpZmllcik7Ci19
Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlkRmFpbFJlc291cmNlTG9hZChXZWJGcmFtZSos
IHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFdlYktpdDo6V2ViVVJMRXJyb3ImIGVycm9yKQot
ewotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNv
dXJjZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBpZiAobV9yZXNvdXJjZUlkZW50aWZpZXJN
YXAuZmluZChpZGVudGlmaWVyKSA9PSBtX3Jlc291cmNlSWRlbnRpZmllck1hcC5lbmQoKSkKLSAg
ICAgICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiPHVua25vd24+Iik7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShtX3Jlc291cmNlSWRl
bnRpZmllck1hcFtpZGVudGlmaWVyXSk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2Fn
ZSgiIC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6ICIpOwotICAgICAgICBtX2RlbGVnYXRlLT5w
cmludE1lc3NhZ2UobV9kZWxlZ2F0ZS0+bWFrZVVSTEVycm9yRGVzY3JpcHRpb24oZXJyb3IpKTsK
LSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJcbiIpOwotICAgIH0KLSAgICBtX3Jl
c291cmNlSWRlbnRpZmllck1hcC5lcmFzZShpZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJUZXN0
UHJveHlCYXNlOjp1bmFibGVUb0ltcGxlbWVudFBvbGljeVdpdGhFcnJvcihXZWJLaXQ6OldlYkZy
YW1lKiBmcmFtZSwgY29uc3QgV2ViS2l0OjpXZWJVUkxFcnJvciYgZXJyb3IpCi17Ci0gICAgY2hh
ciBlcnJvckJ1ZmZlcls0MF07Ci0gICAgc25wcmludGYoZXJyb3JCdWZmZXIsIHNpemVvZihlcnJv
ckJ1ZmZlciksICIlZCIsIGVycm9yLnJlYXNvbik7Ci0gICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNz
YWdlKHN0cmluZygiUG9saWN5IGRlbGVnYXRlOiB1bmFibGUgdG8gaW1wbGVtZW50IHBvbGljeSB3
aXRoIGVycm9yIGRvbWFpbiAnIikgKyBlcnJvci5kb21haW4udXRmOCgpLmRhdGEoKSArCi0gICAg
ICAgICInLCBlcnJvciBjb2RlICIgKyAgZXJyb3JCdWZmZXIgKwotICAgICAgICAiLCBpbiBmcmFt
ZSAnIiArIGZyYW1lLT51bmlxdWVOYW1lKCkudXRmOCgpLmRhdGEoKSArICInXG4iKTsKLX0KLQot
dm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaWRBZGRNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFdlYkNv
bnNvbGVNZXNzYWdlJiBtZXNzYWdlLCBjb25zdCBXZWJTdHJpbmcmIHNvdXJjZU5hbWUsIHVuc2ln
bmVkIHNvdXJjZUxpbmUpCi17Ci0gICAgLy8gVGhpcyBtYXRjaGVzIHdpbiBEdW1wUmVuZGVyVHJl
ZSdzIFVJRGVsZWdhdGUuY3BwLgotICAgIGlmICghbV9sb2dDb25zb2xlT3V0cHV0KQotICAgICAg
ICByZXR1cm47Ci0gICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0cmluZygiQ09OU09MRSBN
RVNTQUdFOiAiKSk7Ci0gICAgaWYgKHNvdXJjZUxpbmUpIHsKLSAgICAgICAgY2hhciBidWZmZXJb
NDBdOwotICAgICAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAibGluZSAlZDog
Iiwgc291cmNlTGluZSk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShidWZmZXIp
OwotICAgIH0KLSAgICBpZiAoIW1lc3NhZ2UudGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3Ry
aW5nIG5ld01lc3NhZ2U7Ci0gICAgICAgIG5ld01lc3NhZ2UgPSBtZXNzYWdlLnRleHQudXRmOCgp
OwotICAgICAgICBzaXplX3QgZmlsZVByb3RvY29sID0gbmV3TWVzc2FnZS5maW5kKCJmaWxlOi8v
Iik7Ci0gICAgICAgIGlmIChmaWxlUHJvdG9jb2wgIT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICAg
ICAgICBuZXdNZXNzYWdlID0gbmV3TWVzc2FnZS5zdWJzdHIoMCwgZmlsZVByb3RvY29sKQotICAg
ICAgICAgICAgICAgICsgdXJsU3VpdGFibGVGb3JUZXN0UmVzdWx0KG5ld01lc3NhZ2Uuc3Vic3Ry
KGZpbGVQcm90b2NvbCkpOwotICAgICAgICB9Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVz
c2FnZShuZXdNZXNzYWdlKTsKLSAgICB9Ci0gICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0
cmluZygiXG4iKSk7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6cnVuTW9kYWxBbGVydERp
YWxvZyhXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBtX2RlbGVn
YXRlLT5wcmludE1lc3NhZ2Uoc3RyaW5nKCJBTEVSVDogIikgKyBtZXNzYWdlLnV0ZjgoKS5kYXRh
KCkgKyAiXG4iKTsKLX0KLQotYm9vbCBXZWJUZXN0UHJveHlCYXNlOjpydW5Nb2RhbENvbmZpcm1E
aWFsb2coV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9kZWxl
Z2F0ZS0+cHJpbnRNZXNzYWdlKHN0cmluZygiQ09ORklSTTogIikgKyBtZXNzYWdlLnV0ZjgoKS5k
YXRhKCkgKyAiXG4iKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJUZXN0UHJveHlC
YXNlOjpydW5Nb2RhbFByb21wdERpYWxvZyhXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYlN0cmlu
ZyYgbWVzc2FnZSwgY29uc3QgV2ViU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFdlYlN0cmluZyopCi17
Ci0gICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0cmluZygiUFJPTVBUOiAiKSArIG1lc3Nh
Z2UudXRmOCgpLmRhdGEoKSArICIsIGRlZmF1bHQgdGV4dDogIiArIGRlZmF1bHRWYWx1ZS51dGY4
KCkuZGF0YSgpICsgIlxuIik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViVGVzdFBy
b3h5QmFzZTo6cnVuTW9kYWxCZWZvcmVVbmxvYWREaWFsb2coV2ViRnJhbWUqLCBjb25zdCBXZWJT
dHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0cmluZygi
Q09ORklSTSBOQVZJR0FUSU9OOiAiKSArIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSArICJcbiIpOwot
ICAgIHJldHVybiAhbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGRTdGF5T25Q
YWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZCgpOwotfQotCi12b2lkIFdlYlRlc3RQcm94eUJh
c2U6OmxvY2F0aW9uQ2hhbmdlRG9uZShXZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgaWYgKGZyYW1l
ICE9IG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+dG9wTG9hZGluZ0ZyYW1lKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNldFRv
cExvYWRpbmdGcmFtZShmcmFtZSwgdHJ1ZSk7Ci19Ci0KLVdlYk5hdmlnYXRpb25Qb2xpY3kgV2Vi
VGVzdFByb3h5QmFzZTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbihXZWJGcmFtZSosIGNvbnN0
IFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QsIFdlYk5hdmlnYXRpb25UeXBlIHR5cGUsIGNvbnN0IFdl
Yk5vZGUmIG9yaWdpbmF0aW5nTm9kZSwgV2ViTmF2aWdhdGlvblBvbGljeSBkZWZhdWx0UG9saWN5
LCBib29sIGlzUmVkaXJlY3QpCi17Ci0gICAgV2ViTmF2aWdhdGlvblBvbGljeSByZXN1bHQ7Ci0g
ICAgaWYgKCFtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnBvbGljeURlbGVnYXRlRW5h
YmxlZCgpKQotICAgICAgICByZXR1cm4gZGVmYXVsdFBvbGljeTsKLQotICAgIG1fZGVsZWdhdGUt
PnByaW50TWVzc2FnZShzdHJpbmcoIlBvbGljeSBkZWxlZ2F0ZTogYXR0ZW1wdCB0byBsb2FkICIp
ICsgVVJMRGVzY3JpcHRpb24ocmVxdWVzdC51cmwoKSkgKyAiIHdpdGggbmF2aWdhdGlvbiB0eXBl
ICciICsgd2ViTmF2aWdhdGlvblR5cGVUb1N0cmluZyh0eXBlKSArICInIik7Ci0gICAgaWYgKCFv
cmlnaW5hdGluZ05vZGUuaXNOdWxsKCkpIHsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNz
YWdlKCIgb3JpZ2luYXRpbmcgZnJvbSAiKTsKLSAgICAgICAgcHJpbnROb2RlRGVzY3JpcHRpb24o
bV9kZWxlZ2F0ZSwgb3JpZ2luYXRpbmdOb2RlLCAwKTsKLSAgICB9Ci0gICAgbV9kZWxlZ2F0ZS0+
cHJpbnRNZXNzYWdlKCJcbiIpOwotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVy
KCktPnBvbGljeURlbGVnYXRlSXNQZXJtaXNzaXZlKCkpCi0gICAgICAgIHJlc3VsdCA9IFdlYktp
dDo6V2ViTmF2aWdhdGlvblBvbGljeUN1cnJlbnRUYWI7Ci0gICAgZWxzZQotICAgICAgICByZXN1
bHQgPSBXZWJLaXQ6OldlYk5hdmlnYXRpb25Qb2xpY3lJZ25vcmU7Ci0KLSAgICBpZiAobV90ZXN0
SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5wb2xpY3lEZWxlZ2F0ZVNob3VsZE5vdGlmeURvbmUo
KSkKLSAgICAgICAgbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5wb2xpY3lEZWxlZ2F0
ZURvbmUoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFdlYlRlc3RQcm94eUJhc2U6
OndpbGxDaGVja0FuZERpc3BhdGNoTWVzc2FnZUV2ZW50KFdlYkZyYW1lKiwgV2ViRnJhbWUqLCBX
ZWJTZWN1cml0eU9yaWdpbiwgV2ViRE9NTWVzc2FnZUV2ZW50KQotewotICAgIGlmIChtX3Rlc3RJ
bnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZEludGVyY2VwdFBvc3RNZXNzYWdlKCkpIHsK
LSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJpbnRlcmNlcHRlZCBwb3N0TWVzc2Fn
ZVxuIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9zcmMvV2ViVGVzdFRoZW1lQ29udHJvbFdpbi5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0VGhlbWVDb250cm9sV2luLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRhYjg1OGY3MmU5ZDc5NzJlMzdkODc1ZmJjOTQz
N2RlMzQwOWQ2Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0VGhl
bWVDb250cm9sV2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gVGhpcyBm
aWxlIGltcGxlbWVudHMgYSBzaW1wbGUgZ2VuZXJpYyB2ZXJzaW9uIG9mIHRoZSBXZWJUaGVtZUVu
Z2luZSwKLS8vIHdoaWNoIGlzIHVzZWQgdG8gZHJhdyBhbGwgdGhlIG5hdGl2ZSBjb250cm9scyBv
biBhIHdlYiBwYWdlLiBXZSB1c2UgdGhpcwotLy8gZmlsZSB3aGVuIHJ1bm5pbmcgaW4gbGF5b3V0
IHRlc3QgbW9kZSBpbiBvcmRlciB0byByZW1vdmUgYW55Ci0vLyBwbGF0Zm9ybS1zcGVjaWZpYyBy
ZW5kZXJpbmcgZGlmZmVyZW5jZXMgZHVlIHRvIHRoZW1lcywgY29sb3JzLCBldGMuCi0vLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVGVzdFRoZW1lQ29udHJvbFdpbi5oIgot
Ci0jaW5jbHVkZSAiVGVzdENvbW1vbi5oIgotI2luY2x1ZGUgInNraWEvZXh0L3NraWFfdXRpbHNf
d2luLmgiCi0jaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tDYW52YXMu
aCIKLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta1BhaW50LmgiCi0j
aW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tQYXRoLmgiCi0jaW5jbHVk
ZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tSZWN0LmgiCi0KLSNpbmNsdWRlIDxh
bGdvcml0aG0+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2Ugc3Rk
OwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLWNvbnN0IFNr
Q29sb3IgZWRnZUNvbG9yICAgICA9IFNLX0NvbG9yQkxBQ0s7Ci1jb25zdCBTa0NvbG9yIHJlYWRP
bmx5Q29sb3IgPSBTa0NvbG9yU2V0UkdCKDB4ZTksIDB4YzIsIDB4YTYpOwotY29uc3QgU2tDb2xv
ciBmZ0NvbG9yICAgICAgID0gU0tfQ29sb3JCTEFDSzsKLWNvbnN0IFNrQ29sb3IgYmdDb2xvcnNb
XSAgICA9IHsKLSAgICBTS19Db2xvckJMQUNLLCAvLyBVbmtub3duCi0gICAgU2tDb2xvclNldFJH
QigweGM5LCAweGM5LCAweGM5KSwgLy8gRGlzYWJsZWQKLSAgICBTa0NvbG9yU2V0UkdCKDB4ZjMs
IDB4ZTAsIDB4ZDApLCAvLyBSZWFkb25seQotICAgIFNrQ29sb3JTZXRSR0IoMHg4OSwgMHhjNCwg
MHhmZiksIC8vIE5vcm1hbAotICAgIFNrQ29sb3JTZXRSR0IoMHg0MywgMHhmOSwgMHhmZiksIC8v
IEhvdAotICAgIFNrQ29sb3JTZXRSR0IoMHgyMCwgMHhmNiwgMHhjYyksIC8vIEZvY3VzZWQKLSAg
ICBTa0NvbG9yU2V0UkdCKDB4MDAsIDB4ZjMsIDB4YWMpLCAvLyBIb3ZlcgotICAgIFNrQ29sb3JT
ZXRSR0IoMHhhOSwgMHhmZiwgMHgxMiksIC8vIFByZXNzZWQKLSAgICBTa0NvbG9yU2V0UkdCKDB4
Y2MsIDB4Y2MsIDB4Y2MpIC8vIEluZGV0ZXJtaW5hdGUKLX07Ci0KLVNrSVJlY3QgdmFsaWRhdGUo
Y29uc3QgU2tJUmVjdCYgcmVjdCwgV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VHlwZSBjdHlwZSkK
LXsKLSAgICBzd2l0Y2ggKGN0eXBlKSB7Ci0gICAgY2FzZSBXZWJUZXN0VGhlbWVDb250cm9sV2lu
OjpVbmNoZWNrZWRCb3hUeXBlOgotICAgIGNhc2UgV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Q2hl
Y2tlZEJveFR5cGU6Ci0gICAgY2FzZSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpVbmNoZWNrZWRS
YWRpb1R5cGU6Ci0gICAgY2FzZSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpDaGVja2VkUmFkaW9U
eXBlOiB7Ci0gICAgICAgIFNrSVJlY3QgcmV0dmFsID0gcmVjdDsKLQotICAgICAgICAvLyBUaGUg
bWF4aW11bSB3aWR0aCBhbmQgaGVpZ2h0IGlzIDEzLgotICAgICAgICAvLyBDZW50ZXIgdGhlIHNx
dWFyZSBpbiB0aGUgcGFzc2VkIHJlY3RhbmdsZS4KLSAgICAgICAgY29uc3QgaW50IG1heENvbnRy
b2xTaXplID0gMTM7Ci0gICAgICAgIGludCBjb250cm9sU2l6ZSA9IHN0ZDo6bWluKHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIGNvbnRyb2xTaXplID0gc3RkOjptaW4oY29u
dHJvbFNpemUsIG1heENvbnRyb2xTaXplKTsKLQotICAgICAgICByZXR2YWwuZkxlZnQgICA9IHJl
Y3QuZkxlZnQgKyAocmVjdC53aWR0aCgpIC8gMikgLSAoY29udHJvbFNpemUgLyAyKTsKLSAgICAg
ICAgcmV0dmFsLmZSaWdodCAgPSByZXR2YWwuZkxlZnQgKyBjb250cm9sU2l6ZSAtIDE7Ci0gICAg
ICAgIHJldHZhbC5mVG9wICAgID0gcmVjdC5mVG9wICsgKHJlY3QuaGVpZ2h0KCkgLyAyKSAtIChj
b250cm9sU2l6ZSAvIDIpOwotICAgICAgICByZXR2YWwuZkJvdHRvbSA9IHJldHZhbC5mVG9wICsg
Y29udHJvbFNpemUgLSAxOwotCi0gICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgfQotCi0gICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0gICAgfQotfQotCi19Ci0KLVdlYlRlc3RU
aGVtZUNvbnRyb2xXaW46OldlYlRlc3RUaGVtZUNvbnRyb2xXaW4oU2tDYW52YXMqIGNhbnZhcywg
Y29uc3QgU2tJUmVjdCYgaXJlY3QsIFR5cGUgY3R5cGUsIFN0YXRlIGNzdGF0ZSkKLSAgICA6IG1f
Y2FudmFzKGNhbnZhcykKLSAgICAsIG1faXJlY3QodmFsaWRhdGUoaXJlY3QsIGN0eXBlKSkKLSAg
ICAsIG1fdHlwZShjdHlwZSkKLSAgICAsIG1fc3RhdGUoY3N0YXRlKQotICAgICwgbV9sZWZ0KG1f
aXJlY3QuZkxlZnQpCi0gICAgLCBtX3JpZ2h0KG1faXJlY3QuZlJpZ2h0KQotICAgICwgbV90b3Ao
bV9pcmVjdC5mVG9wKQotICAgICwgbV9ib3R0b20obV9pcmVjdC5mQm90dG9tKQotICAgICwgbV9o
ZWlnaHQobV9pcmVjdC5oZWlnaHQoKSkKLSAgICAsIG1fd2lkdGgobV9pcmVjdC53aWR0aCgpKQot
ICAgICwgbV9lZGdlQ29sb3IoZWRnZUNvbG9yKQotICAgICwgbV9iZ0NvbG9yKGJnQ29sb3JzW2Nz
dGF0ZV0pCi0gICAgLCBtX2ZnQ29sb3IoZmdDb2xvcikKLXsKLX0KLQotV2ViVGVzdFRoZW1lQ29u
dHJvbFdpbjo6fldlYlRlc3RUaGVtZUNvbnRyb2xXaW4oKQotewotfQotCi12b2lkIFdlYlRlc3RU
aGVtZUNvbnRyb2xXaW46OmJveChjb25zdCBTa0lSZWN0JiByZWN0LCBTa0NvbG9yIGZpbGxDb2xv
cikKLXsKLSAgICBTa1BhaW50IHBhaW50OwotCi0gICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6
a0ZpbGxfU3R5bGUpOwotICAgIHBhaW50LnNldENvbG9yKGZpbGxDb2xvcik7Ci0gICAgbV9jYW52
YXMtPmRyYXdJUmVjdChyZWN0LCBwYWludCk7Ci0KLSAgICBwYWludC5zZXRDb2xvcihtX2VkZ2VD
b2xvcik7Ci0gICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a1N0cm9rZV9TdHlsZSk7Ci0gICAg
bV9jYW52YXMtPmRyYXdJUmVjdChyZWN0LCBwYWludCk7Ci19Ci0KLXZvaWQgV2ViVGVzdFRoZW1l
Q29udHJvbFdpbjo6bGluZShpbnQgeDAsIGludCB5MCwgaW50IHgxLCBpbnQgeTEsIFNrQ29sb3Ig
Y29sb3IpCi17Ci0gICAgU2tQYWludCBwYWludDsKLSAgICBwYWludC5zZXRDb2xvcihjb2xvcik7
Ci0gICAgbV9jYW52YXMtPmRyYXdMaW5lKFNrSW50VG9TY2FsYXIoeDApLCBTa0ludFRvU2NhbGFy
KHkwKSwgU2tJbnRUb1NjYWxhcih4MSksIFNrSW50VG9TY2FsYXIoeTEpLCBwYWludCk7Ci19Ci0K
LXZvaWQgV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6dHJpYW5nbGUoaW50IHgwLCBpbnQgeTAsIGlu
dCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiwgU2tDb2xvciBjb2xvcikKLXsKLSAgICBTa1Bh
dGggcGF0aDsKLSAgICBTa1BhaW50IHBhaW50OwotCi0gICAgcGFpbnQuc2V0Q29sb3IoY29sb3Ip
OwotICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtGaWxsX1N0eWxlKTsKLSAgICBwYXRoLmlu
Y1Jlc2VydmUoNCk7Ci0gICAgcGF0aC5tb3ZlVG8oU2tJbnRUb1NjYWxhcih4MCksIFNrSW50VG9T
Y2FsYXIoeTApKTsKLSAgICBwYXRoLmxpbmVUbyhTa0ludFRvU2NhbGFyKHgxKSwgU2tJbnRUb1Nj
YWxhcih5MSkpOwotICAgIHBhdGgubGluZVRvKFNrSW50VG9TY2FsYXIoeDIpLCBTa0ludFRvU2Nh
bGFyKHkyKSk7Ci0gICAgcGF0aC5jbG9zZSgpOwotICAgIG1fY2FudmFzLT5kcmF3UGF0aChwYXRo
LCBwYWludCk7Ci0KLSAgICBwYWludC5zZXRDb2xvcihtX2VkZ2VDb2xvcik7Ci0gICAgcGFpbnQu
c2V0U3R5bGUoU2tQYWludDo6a1N0cm9rZV9TdHlsZSk7Ci0gICAgbV9jYW52YXMtPmRyYXdQYXRo
KHBhdGgsIHBhaW50KTsKLX0KLQotdm9pZCBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpyb3VuZFJl
Y3QoU2tDb2xvciBjb2xvcikKLXsKLSAgICBTa1JlY3QgcmVjdDsKLSAgICBTa1NjYWxhciByYWRp
dXMgPSBTa0ludFRvU2NhbGFyKDUpOwotICAgIFNrUGFpbnQgcGFpbnQ7Ci0KLSAgICByZWN0LnNl
dChtX2lyZWN0KTsKLSAgICBwYWludC5zZXRDb2xvcihjb2xvcik7Ci0gICAgcGFpbnQuc2V0U3R5
bGUoU2tQYWludDo6a0ZpbGxfU3R5bGUpOwotICAgIG1fY2FudmFzLT5kcmF3Um91bmRSZWN0KHJl
Y3QsIHJhZGl1cywgcmFkaXVzLCBwYWludCk7Ci0KLSAgICBwYWludC5zZXRDb2xvcihtX2VkZ2VD
b2xvcik7Ci0gICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a1N0cm9rZV9TdHlsZSk7Ci0gICAg
bV9jYW52YXMtPmRyYXdSb3VuZFJlY3QocmVjdCwgcmFkaXVzLCByYWRpdXMsIHBhaW50KTsKLX0K
LQotdm9pZCBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpvdmFsKFNrQ29sb3IgY29sb3IpCi17Ci0g
ICAgU2tSZWN0IHJlY3Q7Ci0gICAgU2tQYWludCBwYWludDsKLQotICAgIHJlY3Quc2V0KG1faXJl
Y3QpOwotICAgIHBhaW50LnNldENvbG9yKGNvbG9yKTsKLSAgICBwYWludC5zZXRTdHlsZShTa1Bh
aW50OjprRmlsbF9TdHlsZSk7Ci0gICAgbV9jYW52YXMtPmRyYXdPdmFsKHJlY3QsIHBhaW50KTsK
LQotICAgIHBhaW50LnNldENvbG9yKG1fZWRnZUNvbG9yKTsKLSAgICBwYWludC5zZXRTdHlsZShT
a1BhaW50OjprU3Ryb2tlX1N0eWxlKTsKLSAgICBtX2NhbnZhcy0+ZHJhd092YWwocmVjdCwgcGFp
bnQpOwotfQotCi12b2lkIFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OmNpcmNsZShTa1NjYWxhciBy
YWRpdXMsIFNrQ29sb3IgY29sb3IpCi17Ci0gICAgU2tTY2FsYXIgY3kgPSBTa0ludFRvU2NhbGFy
KG1fdG9wICArIG1faGVpZ2h0IC8gMik7Ci0gICAgU2tTY2FsYXIgY3ggPSBTa0ludFRvU2NhbGFy
KG1fbGVmdCArIG1fd2lkdGggLyAyKTsKLSAgICBTa1BhaW50IHBhaW50OwotCi0gICAgcGFpbnQu
c2V0Q29sb3IoY29sb3IpOwotICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtGaWxsX1N0eWxl
KTsKLSAgICBtX2NhbnZhcy0+ZHJhd0NpcmNsZShjeCwgY3ksIHJhZGl1cywgcGFpbnQpOwotCi0g
ICAgcGFpbnQuc2V0Q29sb3IobV9lZGdlQ29sb3IpOwotICAgIHBhaW50LnNldFN0eWxlKFNrUGFp
bnQ6OmtTdHJva2VfU3R5bGUpOwotICAgIG1fY2FudmFzLT5kcmF3Q2lyY2xlKGN4LCBjeSwgcmFk
aXVzLCBwYWludCk7Ci19Ci0KLXZvaWQgV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6bmVzdGVkQm94
ZXMoaW50IGluZGVudExlZnQsIGludCBpbmRlbnRUb3AsIGludCBpbmRlbnRSaWdodCwgaW50IGlu
ZGVudEJvdHRvbSwgU2tDb2xvciBvdXRlckNvbG9yLCBTa0NvbG9yIGlubmVyQ29sb3IpCi17Ci0g
ICAgU2tJUmVjdCBsaXJlY3Q7Ci0gICAgYm94KG1faXJlY3QsIG91dGVyQ29sb3IpOwotICAgIGxp
cmVjdC5zZXQobV9pcmVjdC5mTGVmdCArIGluZGVudExlZnQsIG1faXJlY3QuZlRvcCArIGluZGVu
dFRvcCwgbV9pcmVjdC5mUmlnaHQgLSBpbmRlbnRSaWdodCwgbV9pcmVjdC5mQm90dG9tIC0gaW5k
ZW50Qm90dG9tKTsKLSAgICBib3gobGlyZWN0LCBpbm5lckNvbG9yKTsKLX0KLQotdm9pZCBXZWJU
ZXN0VGhlbWVDb250cm9sV2luOjptYXJrU3RhdGUoKQotewotICAgIC8vIFRoZSBob3Jpem9udGFs
IGxpbmVzIGluIGEgcmVhZCBvbmx5IGNvbnRyb2wgYXJlIHNwYWNlZCBieSB0aGlzIGFtb3VudC4K
LSAgICBjb25zdCBpbnQgcmVhZE9ubHlMaW5lT2Zmc2V0ID0gNTsKLQotICAgIC8vIFRoZSBsZW5n
dGggb2YgYSB0cmlhbmdsZSBzaWRlIGZvciB0aGUgY29ybmVyIG1hcmtzLgotICAgIGNvbnN0IGlu
dCB0cmlhbmdsZVNpemUgPSA1OwotCi0gICAgc3dpdGNoIChtX3N0YXRlKSB7Ci0gICAgY2FzZSBV
bmtub3duU3RhdGU6Ci0gICAgY2FzZSBEaXNhYmxlZFN0YXRlOgotICAgIGNhc2UgTm9ybWFsU3Rh
dGU6Ci0gICAgY2FzZSBJbmRldGVybWluYXRlU3RhdGU6Ci0gICAgICAgIC8vIERvbid0IHZpc3Vh
bGx5IG1hcmsgdGhlc2Ugc3RhdGVzIChjb2xvciBpcyBlbm91Z2gpLgotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFJlYWRPbmx5U3RhdGU6Ci0gICAgICAgIC8vIERyYXdpbmcgbGluZXMgYWNyb3Nz
IHRoZSBjb250cm9sLgotICAgICAgICBmb3IgKGludCBpID0gbV90b3AgKyByZWFkT25seUxpbmVP
ZmZzZXQ7IGkgPCBtX2JvdHRvbTsgaSArPSByZWFkT25seUxpbmVPZmZzZXQpCi0gICAgICAgICAg
ICBsaW5lKG1fbGVmdCArIDEsIGksIG1fcmlnaHQgLSAxLCBpLCByZWFkT25seUNvbG9yKTsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEhvdFN0YXRlOgotICAgICAgICAvLyBEcmF3IGEgdHJp
YW5nbGUgaW4gdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBjb250cm9sLgotICAgICAgICB0
cmlhbmdsZShtX2xlZnQsIG1fdG9wLCBtX2xlZnQgKyB0cmlhbmdsZVNpemUsIG1fdG9wLCBtX2xl
ZnQsIG1fdG9wICsgdHJpYW5nbGVTaXplLCBtX2VkZ2VDb2xvcik7Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgY2FzZSBIb3ZlclN0YXRlOgotICAgICAgICAvLyBEcmF3IGEgdHJpYW5nbGUgaW4gdGhl
IHVwcGVyIHJpZ2h0IGNvcm5lciBvZiB0aGUgY29udHJvbC4KLSAgICAgICAgdHJpYW5nbGUobV9y
aWdodCwgbV90b3AsIG1fcmlnaHQsIG1fdG9wICsgdHJpYW5nbGVTaXplLCBtX3JpZ2h0IC0gdHJp
YW5nbGVTaXplLCBtX3RvcCwgbV9lZGdlQ29sb3IpOwotICAgICAgICBicmVhazsKLQotICAgIGNh
c2UgRm9jdXNlZFN0YXRlOgotICAgICAgICAvLyBEcmF3IGEgdHJpYW5nbGUgaW4gdGhlIGJvdHRv
bSByaWdodCBjb3JuZXIgb2YgdGhlIGNvbnRyb2wuCi0gICAgICAgIHRyaWFuZ2xlKG1fcmlnaHQs
IG1fYm90dG9tLCBtX3JpZ2h0IC0gdHJpYW5nbGVTaXplLCBtX2JvdHRvbSwgbV9yaWdodCwgbV9i
b3R0b20gLSB0cmlhbmdsZVNpemUsIG1fZWRnZUNvbG9yKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICBjYXNlIFByZXNzZWRTdGF0ZToKLSAgICAgICAgLy8gRHJhdyBhIHRyaWFuZ2xlIGluIHRoZSBi
b3R0b20gbGVmdCBjb3JuZXIgb2YgdGhlIGNvbnRyb2wuCi0gICAgICAgIHRyaWFuZ2xlKG1fbGVm
dCwgbV9ib3R0b20sIG1fbGVmdCwgbV9ib3R0b20gLSB0cmlhbmdsZVNpemUsIG1fbGVmdCArIHRy
aWFuZ2xlU2l6ZSwgbV9ib3R0b20sIG1fZWRnZUNvbG9yKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICBkZWZhdWx0OgotICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpkcmF3KCkK
LXsKLSAgICBpbnQgaGFsZldpZHRoID0gbV93aWR0aCAvIDI7Ci0gICAgaW50IGhhbGZIZWlnaHQg
PSBtX2hlaWdodCAvIDI7Ci0gICAgaW50IHF1YXJ0ZXJXaWR0aCA9IG1fd2lkdGggLyA0OwotICAg
IGludCBxdWFydGVySGVpZ2h0ID0gbV9oZWlnaHQgLyA0OwotCi0gICAgLy8gSW5kZW50IGFtb3Vu
dHMgZm9yIHRoZSBjaGVjayBpbiBhIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi4KLSAgICBjb25z
dCBpbnQgY2hlY2tJbmRlbnQgPSAzOwotCi0gICAgLy8gSW5kZW50IGFtb3VudHMgZm9yIHNob3J0
IGFuZCBsb25nIHNpZGVzIG9mIHRoZSBzY3JvbGxiYXIgbm90Y2hlcy4KLSAgICBjb25zdCBpbnQg
bm90Y2hMb25nT2Zmc2V0ID0gMTsKLSAgICBjb25zdCBpbnQgbm90Y2hTaG9ydE9mZnNldCA9IDQ7
Ci0gICAgY29uc3QgaW50IG5vT2Zmc2V0ID0gMDsKLQotICAgIC8vIEluZGVudCBhbW91bnRzIGZv
ciB0aGUgc2hvcnQgYW5kIGxvbmcgc2lkZXMgb2YgYSBzY3JvbGwgdGh1bWIgYm94LgotICAgIGNv
bnN0IGludCB0aHVtYkxvbmdJbmRlbnQgPSAwOwotICAgIGNvbnN0IGludCB0aHVtYlNob3J0SW5k
ZW50ID0gMjsKLQotICAgIC8vIEluZGVudHMgZm9yIHRoZSBjcm9zc2hhdGNoIG9uIGEgc2Nyb2xs
IGdyaXAuCi0gICAgY29uc3QgaW50IGdyaXBMb25nSW5kZW50ID0gMzsKLSAgICBjb25zdCBpbnQg
Z3JpcFNob3J0SW5kZW50ID0gNTsKLQotICAgIC8vIEluZGVudHMgZm9yIHRoZSB0aGUgc2xpZGVy
IHRyYWNrLgotICAgIGNvbnN0IGludCBzbGlkZXJJbmRlbnQgPSAyOwotCi0gICAgc3dpdGNoICht
X3R5cGUpIHsKLSAgICBjYXNlIFVua25vd25UeXBlOgotICAgICAgICBXRUJLSVRfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBUZXh0RmllbGRUeXBlOgot
ICAgICAgICAvLyBXZSByZW5kZXIgdGhpcyBieSBoYW5kIG91dHNpZGUgb2YgdGhpcyBmdW5jdGlv
bi4KLSAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsK
LQotICAgIGNhc2UgUHVzaEJ1dHRvblR5cGU6Ci0gICAgICAgIC8vIHB1c2ggYnV0dG9ucyByZW5k
ZXIgYXMgYSByb3VuZGVkIHJlY3RhbmdsZQotICAgICAgICByb3VuZFJlY3QobV9iZ0NvbG9yKTsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFVuY2hlY2tlZEJveFR5cGU6Ci0gICAgICAgIC8v
IFVuY2hlY2tlZCBib3hlcyBhcmUgc2ltcGx5IHBsYWluIGJveGVzLgotICAgICAgICBib3gobV9p
cmVjdCwgbV9iZ0NvbG9yKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENoZWNrZWRCb3hU
eXBlOgotICAgICAgICBuZXN0ZWRCb3hlcyhjaGVja0luZGVudCwgY2hlY2tJbmRlbnQsIGNoZWNr
SW5kZW50LCBjaGVja0luZGVudCwgbV9iZ0NvbG9yLCBtX2ZnQ29sb3IpOwotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNoZWNrYm94VHlwZToKLSAgICAgICAgLy8gSW5k
ZXRlcm1pbmF0ZSBjaGVja2JveCBpcyBhIGJveCBjb250YWluaW5nICctJy4KLSAgICAgICAgbmVz
dGVkQm94ZXMoY2hlY2tJbmRlbnQsIGhhbGZIZWlnaHQsIGNoZWNrSW5kZW50LCBoYWxmSGVpZ2h0
LCBtX2JnQ29sb3IsIG1fZmdDb2xvcik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBVbmNo
ZWNrZWRSYWRpb1R5cGU6Ci0gICAgICAgIGNpcmNsZShTa0ludFRvU2NhbGFyKGhhbGZIZWlnaHQp
LCBtX2JnQ29sb3IpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ2hlY2tlZFJhZGlvVHlw
ZToKLSAgICAgICAgY2lyY2xlKFNrSW50VG9TY2FsYXIoaGFsZkhlaWdodCksIG1fYmdDb2xvcik7
Ci0gICAgICAgIGNpcmNsZShTa0ludFRvU2NhbGFyKGhhbGZIZWlnaHQgLSBjaGVja0luZGVudCks
IG1fZmdDb2xvcik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBIb3Jpem9udGFsU2Nyb2xs
VHJhY2tCYWNrVHlwZTogewotICAgICAgICAvLyBEcmF3IGEgYm94IHdpdGggYSBub3RjaCBhdCB0
aGUgbGVmdC4KLSAgICAgICAgaW50IGxvbmdPZmZzZXQgPSBoYWxmSGVpZ2h0IC0gbm90Y2hMb25n
T2Zmc2V0OwotICAgICAgICBpbnQgc2hvcnRPZmZzZXQgPSBtX3dpZHRoIC0gbm90Y2hTaG9ydE9m
ZnNldDsKLSAgICAgICAgbmVzdGVkQm94ZXMobm9PZmZzZXQsIGxvbmdPZmZzZXQsIHNob3J0T2Zm
c2V0LCBsb25nT2Zmc2V0LCBtX2JnQ29sb3IsIG1fZWRnZUNvbG9yKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgY2FzZSBIb3Jpem9udGFsU2Nyb2xsVHJhY2tGb3J3YXJkVHlwZTogewot
ICAgICAgICAvLyBEcmF3IGEgYm94IHdpdGggYSBub3RjaCBhdCB0aGUgcmlnaHQuCi0gICAgICAg
IGludCBsb25nT2Zmc2V0ICA9IGhhbGZIZWlnaHQgLSBub3RjaExvbmdPZmZzZXQ7Ci0gICAgICAg
IGludCBzaG9ydE9mZnNldCA9IG1fd2lkdGggLSBub3RjaFNob3J0T2Zmc2V0OwotICAgICAgICBu
ZXN0ZWRCb3hlcyhzaG9ydE9mZnNldCwgbG9uZ09mZnNldCwgbm9PZmZzZXQsIGxvbmdPZmZzZXQs
IG1fYmdDb2xvciwgbV9mZ0NvbG9yKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2Fz
ZSBWZXJ0aWNhbFNjcm9sbFRyYWNrQmFja1R5cGU6IHsKLSAgICAgICAgLy8gRHJhdyBhIGJveCB3
aXRoIGEgbm90Y2ggYXQgdGhlIHRvcC4KLSAgICAgICAgaW50IGxvbmdPZmZzZXQgID0gaGFsZldp
ZHRoIC0gbm90Y2hMb25nT2Zmc2V0OwotICAgICAgICBpbnQgc2hvcnRPZmZzZXQgPSBtX2hlaWdo
dCAtIG5vdGNoU2hvcnRPZmZzZXQ7Ci0gICAgICAgIG5lc3RlZEJveGVzKGxvbmdPZmZzZXQsIG5v
T2Zmc2V0LCBsb25nT2Zmc2V0LCBzaG9ydE9mZnNldCwgbV9iZ0NvbG9yLCBtX2ZnQ29sb3IpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFZlcnRpY2FsU2Nyb2xsVHJhY2tGb3J3
YXJkVHlwZTogewotICAgICAgICAvLyBEcmF3IGEgYm94IHdpdGggYSBub3RjaCBhdCB0aGUgYm90
dG9tLgotICAgICAgICBpbnQgbG9uZ09mZnNldCAgPSBoYWxmV2lkdGggLSBub3RjaExvbmdPZmZz
ZXQ7Ci0gICAgICAgIGludCBzaG9ydE9mZnNldCA9IG1faGVpZ2h0IC0gbm90Y2hTaG9ydE9mZnNl
dDsKLSAgICAgICAgbmVzdGVkQm94ZXMobG9uZ09mZnNldCwgc2hvcnRPZmZzZXQsIGxvbmdPZmZz
ZXQsIG5vT2Zmc2V0LCBtX2JnQ29sb3IsIG1fZmdDb2xvcik7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGNhc2UgSG9yaXpvbnRhbFNjcm9sbFRodW1iVHlwZToKLSAgICAgICAgLy8gRHJh
dyBhIG5hcnJvd2VyIGJveCBvbiB0b3Agb2YgdGhlIG91dHNpZGUgYm94LgotICAgICAgICBuZXN0
ZWRCb3hlcyh0aHVtYkxvbmdJbmRlbnQsIHRodW1iU2hvcnRJbmRlbnQsIHRodW1iTG9uZ0luZGVu
dCwgdGh1bWJTaG9ydEluZGVudCwgbV9iZ0NvbG9yLCBtX2JnQ29sb3IpOwotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgVmVydGljYWxTY3JvbGxUaHVtYlR5cGU6Ci0gICAgICAgIC8vIERyYXcg
YSBzaG9ydGVyIGJveCBvbiB0b3Agb2YgdGhlIG91dHNpZGUgYm94LgotICAgICAgICBuZXN0ZWRC
b3hlcyh0aHVtYlNob3J0SW5kZW50LCB0aHVtYkxvbmdJbmRlbnQsIHRodW1iU2hvcnRJbmRlbnQs
IHRodW1iTG9uZ0luZGVudCwgbV9iZ0NvbG9yLCBtX2JnQ29sb3IpOwotICAgICAgICBicmVhazsK
LQotICAgIGNhc2UgSG9yaXpvbnRhbFNsaWRlclRodW1iVHlwZToKLSAgICBjYXNlIFZlcnRpY2Fs
U2xpZGVyVGh1bWJUeXBlOgotICAgICAgICAvLyBTbGlkZXIgdGh1bWJzIGFyZSBvdmFscy4KLSAg
ICAgICAgb3ZhbChtX2JnQ29sb3IpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSG9yaXpv
bnRhbFNjcm9sbEdyaXBUeXBlOiB7Ci0gICAgICAgIC8vIERyYXcgYSBob3Jpem9udGFsIGNyb3Nz
aGF0Y2ggZm9yIHRoZSBncmlwLgotICAgICAgICBpbnQgbG9uZ09mZnNldCA9IGhhbGZXaWR0aCAt
IGdyaXBMb25nSW5kZW50OwotICAgICAgICBsaW5lKG1fbGVmdCArIGdyaXBMb25nSW5kZW50LCBt
X3RvcCArIGhhbGZIZWlnaHQsIG1fcmlnaHQgLSBncmlwTG9uZ0luZGVudCwgbV90b3AgKyBoYWxm
SGVpZ2h0LCBtX2ZnQ29sb3IpOwotICAgICAgICBsaW5lKG1fbGVmdCArIGxvbmdPZmZzZXQsIG1f
dG9wICsgZ3JpcFNob3J0SW5kZW50LCBtX2xlZnQgKyBsb25nT2Zmc2V0LCBtX2JvdHRvbSAtIGdy
aXBTaG9ydEluZGVudCwgbV9mZ0NvbG9yKTsKLSAgICAgICAgbGluZShtX3JpZ2h0IC0gbG9uZ09m
ZnNldCwgbV90b3AgKyBncmlwU2hvcnRJbmRlbnQsIG1fcmlnaHQgLSBsb25nT2Zmc2V0LCBtX2Jv
dHRvbSAtIGdyaXBTaG9ydEluZGVudCwgbV9mZ0NvbG9yKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgY2FzZSBWZXJ0aWNhbFNjcm9sbEdyaXBUeXBlOiB7Ci0gICAgICAgIC8vIERyYXcg
YSB2ZXJ0aWNhbCBjcm9zc2hhdGNoIGZvciB0aGUgZ3JpcC4KLSAgICAgICAgaW50IGxvbmdPZmZz
ZXQgPSBoYWxmSGVpZ2h0IC0gZ3JpcExvbmdJbmRlbnQ7Ci0gICAgICAgIGxpbmUobV9sZWZ0ICsg
aGFsZldpZHRoLCBtX3RvcCArIGdyaXBMb25nSW5kZW50LCBtX2xlZnQgKyBoYWxmV2lkdGgsIG1f
Ym90dG9tIC0gZ3JpcExvbmdJbmRlbnQsIG1fZmdDb2xvcik7Ci0gICAgICAgIGxpbmUobV9sZWZ0
ICsgZ3JpcFNob3J0SW5kZW50LCBtX3RvcCArIGxvbmdPZmZzZXQsIG1fcmlnaHQgLSBncmlwU2hv
cnRJbmRlbnQsIG1fdG9wICsgbG9uZ09mZnNldCwgbV9mZ0NvbG9yKTsKLSAgICAgICAgbGluZSht
X2xlZnQgKyBncmlwU2hvcnRJbmRlbnQsIG1fYm90dG9tIC0gbG9uZ09mZnNldCwgbV9yaWdodCAt
IGdyaXBTaG9ydEluZGVudCwgbV9ib3R0b20gLSBsb25nT2Zmc2V0LCBtX2ZnQ29sb3IpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIExlZnRBcnJvd1R5cGU6Ci0gICAgICAgIC8v
IERyYXcgYSBsZWZ0IGFycm93IGluc2lkZSBhIGJveC4KLSAgICAgICAgYm94KG1faXJlY3QsIG1f
YmdDb2xvcik7Ci0gICAgICAgIHRyaWFuZ2xlKG1fcmlnaHQgLSBxdWFydGVyV2lkdGgsIG1fdG9w
ICsgcXVhcnRlckhlaWdodCwgbV9yaWdodCAtIHF1YXJ0ZXJXaWR0aCwgbV9ib3R0b20gLSBxdWFy
dGVySGVpZ2h0LCBtX2xlZnQgKyBxdWFydGVyV2lkdGgsIG1fdG9wICsgaGFsZkhlaWdodCwgbV9m
Z0NvbG9yKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFJpZ2h0QXJyb3dUeXBlOgotICAg
ICAgICAvLyBEcmF3IGEgbGVmdCBhcnJvdyBpbnNpZGUgYSBib3guCi0gICAgICAgIGJveChtX2ly
ZWN0LCBtX2JnQ29sb3IpOwotICAgICAgICB0cmlhbmdsZShtX2xlZnQgKyBxdWFydGVyV2lkdGgs
IG1fdG9wICsgcXVhcnRlckhlaWdodCwgbV9yaWdodCAtIHF1YXJ0ZXJXaWR0aCwgbV90b3AgKyBo
YWxmSGVpZ2h0LCBtX2xlZnQgKyBxdWFydGVyV2lkdGgsIG1fYm90dG9tIC0gcXVhcnRlckhlaWdo
dCwgbV9mZ0NvbG9yKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFVwQXJyb3dUeXBlOgot
ICAgICAgICAvLyBEcmF3IGFuIHVwIGFycm93IGluc2lkZSBhIGJveC4KLSAgICAgICAgYm94KG1f
aXJlY3QsIG1fYmdDb2xvcik7Ci0gICAgICAgIHRyaWFuZ2xlKG1fbGVmdCArIHF1YXJ0ZXJXaWR0
aCwgbV9ib3R0b20gLSBxdWFydGVySGVpZ2h0LCBtX2xlZnQgKyBoYWxmV2lkdGgsIG1fdG9wICsg
cXVhcnRlckhlaWdodCwgbV9yaWdodCAtIHF1YXJ0ZXJXaWR0aCwgbV9ib3R0b20gLSBxdWFydGVy
SGVpZ2h0LCBtX2ZnQ29sb3IpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRG93bkFycm93
VHlwZToKLSAgICAgICAgLy8gRHJhdyBhIGRvd24gYXJyb3cgaW5zaWRlIGEgYm94LgotICAgICAg
ICBib3gobV9pcmVjdCwgbV9iZ0NvbG9yKTsKLSAgICAgICAgdHJpYW5nbGUobV9sZWZ0ICsgcXVh
cnRlcldpZHRoLCBtX3RvcCArIHF1YXJ0ZXJIZWlnaHQsIG1fcmlnaHQgLSBxdWFydGVyV2lkdGgs
IG1fdG9wICsgcXVhcnRlckhlaWdodCwgbV9sZWZ0ICsgaGFsZldpZHRoLCBtX2JvdHRvbSAtIHF1
YXJ0ZXJIZWlnaHQsIG1fZmdDb2xvcik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBIb3Jp
em9udGFsU2xpZGVyVHJhY2tUeXBlOiB7Ci0gICAgICAgIC8vIERyYXcgYSBuYXJyb3cgcmVjdCBm
b3IgdGhlIHRyYWNrIHBsdXMgYm94IGhhdGNoZXMgb24gdGhlIGVuZHMuCi0gICAgICAgIFNrSVJl
Y3QgbGlyZWN0OwotICAgICAgICBsaXJlY3QgPSBtX2lyZWN0OwotICAgICAgICBsaXJlY3QuaW5z
ZXQobm9PZmZzZXQsIGhhbGZIZWlnaHQgLSBzbGlkZXJJbmRlbnQpOwotICAgICAgICBib3gobGly
ZWN0LCBtX2JnQ29sb3IpOwotICAgICAgICBsaW5lKG1fbGVmdCwgIG1fdG9wLCBtX2xlZnQsICBt
X2JvdHRvbSwgbV9lZGdlQ29sb3IpOwotICAgICAgICBsaW5lKG1fcmlnaHQsIG1fdG9wLCBtX3Jp
Z2h0LCBtX2JvdHRvbSwgbV9lZGdlQ29sb3IpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBjYXNlIFZlcnRpY2FsU2xpZGVyVHJhY2tUeXBlOiB7Ci0gICAgICAgIC8vIERyYXcgYSBuYXJy
b3cgcmVjdCBmb3IgdGhlIHRyYWNrIHBsdXMgYm94IGhhdGNoZXMgb24gdGhlIGVuZHMuCi0gICAg
ICAgIFNrSVJlY3QgbGlyZWN0OwotICAgICAgICBsaXJlY3QgPSBtX2lyZWN0OwotICAgICAgICBs
aXJlY3QuaW5zZXQoaGFsZldpZHRoIC0gc2xpZGVySW5kZW50LCBub09mZnNldCk7Ci0gICAgICAg
IGJveChsaXJlY3QsIG1fYmdDb2xvcik7Ci0gICAgICAgIGxpbmUobV9sZWZ0LCBtX3RvcCwgbV9y
aWdodCwgbV90b3AsIG1fZWRnZUNvbG9yKTsKLSAgICAgICAgbGluZShtX2xlZnQsIG1fYm90dG9t
LCBtX3JpZ2h0LCBtX2JvdHRvbSwgbV9lZGdlQ29sb3IpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBjYXNlIERyb3BEb3duQnV0dG9uVHlwZToKLSAgICAgICAgLy8gRHJhdyBhIGJveCB3
aXRoIGEgYmlnIGRvd24gYXJyb3cgb24gdG9wLgotICAgICAgICBib3gobV9pcmVjdCwgbV9iZ0Nv
bG9yKTsKLSAgICAgICAgdHJpYW5nbGUobV9sZWZ0ICsgcXVhcnRlcldpZHRoLCBtX3RvcCwgbV9y
aWdodCAtIHF1YXJ0ZXJXaWR0aCwgbV90b3AsIG1fbGVmdCArIGhhbGZXaWR0aCwgbV9ib3R0b20s
IG1fZmdDb2xvcik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgV0VC
S0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBt
YXJrU3RhdGUoKTsKLX0KLQotLy8gQmVjYXVzZSByZW5kZXJpbmcgYSB0ZXh0IGZpZWxkIGlzIGRl
cGVuZGVudCBvbiBpbnB1dAotLy8gcGFyYW1ldGVycyB0aGUgb3RoZXIgY29udHJvbHMgZG9uJ3Qg
aGF2ZSwgd2UgcmVuZGVyIGl0IGRpcmVjdGx5Ci0vLyByYXRoZXIgdGhhbiB0cnlpbmcgdG8gb3Zl
cmNvbXBsaWNhdGUgZHJhdygpIGZ1cnRoZXIuCi12b2lkIFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46
OmRyYXdUZXh0RmllbGQoYm9vbCBkcmF3RWRnZXMsIGJvb2wgZmlsbENvbnRlbnRBcmVhLCBTa0Nv
bG9yIGNvbG9yKQotewotICAgIFNrUGFpbnQgcGFpbnQ7Ci0KLSAgICBpZiAoZmlsbENvbnRlbnRB
cmVhKSB7Ci0gICAgICAgIHBhaW50LnNldENvbG9yKGNvbG9yKTsKLSAgICAgICAgcGFpbnQuc2V0
U3R5bGUoU2tQYWludDo6a0ZpbGxfU3R5bGUpOwotICAgICAgICBtX2NhbnZhcy0+ZHJhd0lSZWN0
KG1faXJlY3QsIHBhaW50KTsKLSAgICB9Ci0gICAgaWYgKGRyYXdFZGdlcykgewotICAgICAgICBw
YWludC5zZXRDb2xvcihtX2VkZ2VDb2xvcik7Ci0gICAgICAgIHBhaW50LnNldFN0eWxlKFNrUGFp
bnQ6OmtTdHJva2VfU3R5bGUpOwotICAgICAgICBtX2NhbnZhcy0+ZHJhd0lSZWN0KG1faXJlY3Qs
IHBhaW50KTsKLSAgICB9Ci0KLSAgICBtYXJrU3RhdGUoKTsKLX0KLQotdm9pZCBXZWJUZXN0VGhl
bWVDb250cm9sV2luOjpkcmF3UHJvZ3Jlc3NCYXIoY29uc3QgU2tJUmVjdCYgZmlsbFJlY3QpCi17
Ci0gICAgU2tQYWludCBwYWludDsKLQotICAgIHBhaW50LnNldENvbG9yKG1fYmdDb2xvcik7Ci0g
ICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a0ZpbGxfU3R5bGUpOwotICAgIG1fY2FudmFzLT5k
cmF3SVJlY3QobV9pcmVjdCwgcGFpbnQpOwotCi0gICAgLy8gRW11bGF0ZSBjbGlwcGluZwotICAg
IFNrSVJlY3QgdG9maWxsOwotICAgIHRvZmlsbC5pbnRlcnNlY3QobV9pcmVjdCwgZmlsbFJlY3Qp
OwotICAgIHBhaW50LnNldENvbG9yKG1fZmdDb2xvcik7Ci0gICAgcGFpbnQuc2V0U3R5bGUoU2tQ
YWludDo6a0ZpbGxfU3R5bGUpOwotICAgIG1fY2FudmFzLT5kcmF3SVJlY3QodG9maWxsLCBwYWlu
dCk7Ci0KLSAgICBtYXJrU3RhdGUoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFRoZW1lQ29udHJvbFdpbi5o
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFRo
ZW1lQ29udHJvbFdpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmFkMThlMjBh
YThhYjYzNzEyNzY2ZjQ0OGQ3NzFmYTMyOTQxMTRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL1dlYlRlc3RUaGVtZUNvbnRyb2xXaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDIw
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gV2ViVGVzdFRoZW1lQ29udHJvbFdpbiBpbXBsZW1lbnRzIHRoZSBnZW5lcmlj
IHJlbmRlcmluZyBvZiBjb250cm9scwotLy8gbmVlZGVkIGJ5IFdlYlRoZW1lRW5naW5lRFJUV2lu
LiBTZWUgdGhlIGNvbW1lbnRzIGluIHRoYXQgY2xhc3MKLS8vIGhlYWRlciBmaWxlIGZvciB3aHkg
dGhpcyBjbGFzcyBpcyBuZWVkZWQgYW5kIHVzZWQuCi0vLwotLy8gVGhpcyBjbGFzcyBpbXBsZW1l
bnRzIGEgZ2VuZXJpYyBzZXQgb2Ygd2lkZ2V0cyB1c2luZyBTa2lhLiBUaGUgd2lkZ2V0cwotLy8g
YXJlIG9wdGltaXplZCBmb3IgdGVzdGFiaWxpdHksIG5vdCBhIHBsZWFzaW5nIGFwcGVhcmFuY2Uu
Ci0vLwotCi0jaWZuZGVmIFdlYlRlc3RUaGVtZUNvbnRyb2xXaW5faAotI2RlZmluZSBXZWJUZXN0
VGhlbWVDb250cm9sV2luX2gKLQotI2luY2x1ZGUgInRoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9j
b3JlL1NrQ29sb3IuaCIKLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9T
a1JlY3QuaCIKLQotLy8gU2tpYSBmb3J3YXJkIGRlY2xhcmF0aW9ucwotY2xhc3MgU2tDYW52YXM7
Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotY2xhc3MgV2ViVGVzdFRoZW1lQ29udHJv
bFdpbiB7Ci1wdWJsaWM6Ci0gICAgLy8gVGhpcyBsaXN0IG9mIHN0YXRlcyBtb3N0bHkgbWlycm9y
cyB0aGUgbGlzdCBpbiBXZWJDb3JlL3BsYXRmb3JtL1RoZW1lVHlwZXMuaAotICAgIC8vIGJ1dCBp
cyBtYWludGFpbmVkIHNlcGFyYXRlbHkgc2luY2UgdGhhdCBpc24ndCBwdWJsaWMgYW5kIGFsc28g
dG8gbWluaW1pemUKLSAgICAvLyBkZXBlbmRlbmNpZXMuCi0gICAgLy8gTm90ZSB0aGF0IHRoZSBX
ZWJLaXQgVGhlbWVUeXBlcyBzZWVtIHRvIGltcGx5IHRoYXQgYSBjb250cm9sIGNhbiBiZQotICAg
IC8vIGluIG11bHRpcGxlIHN0YXRlcyBzaW11bHRhbmVvdXNseSBidXQgV2ViVGhlbWVFbmdpbmUg
b25seSBhbGxvd3MgZm9yCi0gICAgLy8gYSBzaW5nbGUgc3RhdGUgYXQgYSB0aW1lLgotICAgIC8v
Ci0gICAgLy8gU29tZSBkZWZpbml0aW9ucyBmb3IgdGhlIHZhcmlvdXMgc3RhdGVzOgotICAgIC8v
ICAgRGlzYWJsZWQgLSBpbmRpY2F0ZXMgdGhhdCBhIGNvbnRyb2wgY2FuJ3QgYmUgbW9kaWZpZWQg
b3Igc2VsZWN0ZWQKLSAgICAvLyAgICAgICAgICAgICAgKGNvcnJlc3BvbmRzIHRvIEhUTUwgJ2Rp
c2FibGVkJyBhdHRyaWJ1dGUpCi0gICAgLy8gICBSZWFkT25seSAtIGluZGljYXRlcyB0aGF0IGEg
Y29udHJvbCBjYW4ndCBiZSBtb2RpZmllZCBidXQgY2FuIGJlCi0gICAgLy8gICAgICAgICAgICAg
IHNlbGVjdGVkCi0gICAgLy8gICBOb3JtYWwgICAtIHRoZSBub3JtYWwgc3RhdGUgb2YgY29udHJv
bCBvbiB0aGUgcGFnZSB3aGVuIGl0IGlzbid0Ci0gICAgLy8gICAgICAgICAgICAgIGZvY3VzZWQg
b3Igb3RoZXJ3aXNlIGFjdGl2ZQotICAgIC8vICAgSG90ICAgICAgLSB3aGVuIHRoZSBtb3VzZSBp
cyBob3ZlcmluZyBvdmVyIGEgcGFydCBvZiB0aGUgY29udHJvbCwKLSAgICAvLyAgICAgICAgICAg
ICAgYWxsIHRoZSBvdGhlciBwYXJ0cyBhcmUgY29uc2lkZXJlZCAiaG90IgotICAgIC8vICAgSG92
ZXIgICAgLSB3aGVuIHRoZSBtb3VzZSBpcyBkaXJlY3RseSBvdmVyIGEgY29udHJvbCAodGhlIENT
UwotICAgIC8vICAgICAgICAgICAgICAgOmhvdmVyIHBzZXVkby1jbGFzcykKLSAgICAvLyAgIEZv
Y3VzZWQgIC0gd2hlbiB0aGUgY29udHJvbCBoYXMgdGhlIGtleWJvYXJkIGZvY3VzCi0gICAgLy8g
ICBQcmVzc2VkICAtIHdoZW4gdGhlIGNvbnRyb2wgaXMgYmVpbmcgdHJpZ2dlcmVkIChieSBhIG1v
dXNlZG93biBvcgotICAgIC8vICAgICAgICAgICAgICBhIGtleSBldmVudCkuCi0gICAgLy8gICBJ
bmRldGVybWluYXRlIC0gd2hlbiBzZXQgdG8gaW5kZXRlcm1pbmF0ZSAob25seSBmb3IgcHJvZ3Jl
c3MgYmFyKQotICAgIGVudW0gU3RhdGUgewotICAgICAgICBVbmtub3duU3RhdGUgPSAwLAotICAg
ICAgICBEaXNhYmxlZFN0YXRlLAotICAgICAgICBSZWFkT25seVN0YXRlLAotICAgICAgICBOb3Jt
YWxTdGF0ZSwKLSAgICAgICAgSG90U3RhdGUsCi0gICAgICAgIEhvdmVyU3RhdGUsCi0gICAgICAg
IEZvY3VzZWRTdGF0ZSwKLSAgICAgICAgUHJlc3NlZFN0YXRlLAotICAgICAgICBJbmRldGVybWlu
YXRlU3RhdGUKLSAgICB9OwotCi0gICAgLy8gVGhpcyBsaXN0IG9mIHR5cGVzIG1vc3RseSBtaXJy
b3JzIHRoZSBsaXN0IGluCi0gICAgLy8gV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZVR5cGVzLmggYnV0
IGlzIG1haW50YWluZWQKLSAgICAvLyBzZXBhcmF0ZWx5IHNpbmNlIHRoYXQgaXNuJ3QgcHVibGlj
IGFuZCBhbHNvIHRvIG1pbmltaXplIGRlcGVuZGVuY2llcy4KLSAgICAvLwotICAgIC8vIE5vdGUg
dGhhdCB3aGF0IHRoZSB1c2VyIG1pZ2h0IHRoaW5rIG9mIGFzIGEgc2luZ2xlIGNvbnRyb2wgY2Fu
IGJlCi0gICAgLy8gbWFkZSB1cCBvZiBtdWx0aXBsZSBwYXJ0cy4gRm9yIGV4YW1wbGUsIGEgc2lu
Z2xlIHNjcm9sbCBiYXIgY29udGFpbnMKLSAgICAvLyBzaXggY2xpY2thYmxlIHBhcnRzIC0gdHdv
IGFycm93cywgdGhlICJ0aHVtYiIgaW5kaWNhdGluZyB0aGUgY3VycmVudAotICAgIC8vIHBvc2l0
aW9uIG9uIHRoZSBiYXIsIHRoZSBvdGhlciB0d28gcGFydHMgb2YgdGhlIGJhciAoYmVmb3JlIGFu
ZCBhZnRlcgotICAgIC8vIHRoZSB0aHVtYikgYW5kIHRoZSAiZ3JpcHBlciIgb24gdGhlIHRodW1i
IGl0c2VsZi4KLSAgICAvLwotICAgIGVudW0gVHlwZSB7Ci0gICAgICAgIFVua25vd25UeXBlID0g
MCwKLSAgICAgICAgVGV4dEZpZWxkVHlwZSwKLSAgICAgICAgUHVzaEJ1dHRvblR5cGUsCi0gICAg
ICAgIFVuY2hlY2tlZEJveFR5cGUsCi0gICAgICAgIENoZWNrZWRCb3hUeXBlLAotICAgICAgICBJ
bmRldGVybWluYXRlQ2hlY2tib3hUeXBlLAotICAgICAgICBVbmNoZWNrZWRSYWRpb1R5cGUsCi0g
ICAgICAgIENoZWNrZWRSYWRpb1R5cGUsCi0gICAgICAgIEhvcml6b250YWxTY3JvbGxUcmFja0Jh
Y2tUeXBlLAotICAgICAgICBIb3Jpem9udGFsU2Nyb2xsVHJhY2tGb3J3YXJkVHlwZSwKLSAgICAg
ICAgSG9yaXpvbnRhbFNjcm9sbFRodW1iVHlwZSwKLSAgICAgICAgSG9yaXpvbnRhbFNjcm9sbEdy
aXBUeXBlLAotICAgICAgICBWZXJ0aWNhbFNjcm9sbFRyYWNrQmFja1R5cGUsCi0gICAgICAgIFZl
cnRpY2FsU2Nyb2xsVHJhY2tGb3J3YXJkVHlwZSwKLSAgICAgICAgVmVydGljYWxTY3JvbGxUaHVt
YlR5cGUsCi0gICAgICAgIFZlcnRpY2FsU2Nyb2xsR3JpcFR5cGUsCi0gICAgICAgIExlZnRBcnJv
d1R5cGUsCi0gICAgICAgIFJpZ2h0QXJyb3dUeXBlLAotICAgICAgICBVcEFycm93VHlwZSwKLSAg
ICAgICAgRG93bkFycm93VHlwZSwKLSAgICAgICAgSG9yaXpvbnRhbFNsaWRlclRyYWNrVHlwZSwK
LSAgICAgICAgSG9yaXpvbnRhbFNsaWRlclRodW1iVHlwZSwKLSAgICAgICAgVmVydGljYWxTbGlk
ZXJUcmFja1R5cGUsCi0gICAgICAgIFZlcnRpY2FsU2xpZGVyVGh1bWJUeXBlLAotICAgICAgICBE
cm9wRG93bkJ1dHRvblR5cGUsCi0gICAgICAgIFByb2dyZXNzQmFyVHlwZQotICAgIH07Ci0KLSAg
ICAvLyBDb25zdHJ1Y3RzIGEgY29udHJvbCBvZiB0aGUgZ2l2ZW4gc2l6ZSwgdHlwZSBhbmQgc3Rh
dGUgdG8gZHJhdwotICAgIC8vIG9uIHRvIHRoZSBnaXZlbiBjYW52YXMuCi0gICAgV2ViVGVzdFRo
ZW1lQ29udHJvbFdpbihTa0NhbnZhcyosIGNvbnN0IFNrSVJlY3QmLCBUeXBlLCBTdGF0ZSk7Ci0g
ICAgfldlYlRlc3RUaGVtZUNvbnRyb2xXaW4oKTsKLQotICAgIC8vIERyYXdzIHRoZSBjb250cm9s
LgotICAgIHZvaWQgZHJhdygpOwotCi0gICAgLy8gVXNlIHRoaXMgZm9yIFRleHRGaWVsZCBjb250
cm9scyBpbnN0ZWFkLCBiZWNhdXNlIHRoZSBsb2dpYwotICAgIC8vIGZvciBkcmF3aW5nIHRoZW0g
aXMgZGVwZW5kZW50IG9uIHdoYXQgV2ViS2l0IHRlbGxzIHVzIHRvIGRvLgotICAgIC8vIElmIGRy
YXdFZGdlcyBpcyB0cnVlLCBkcmF3IGFuIGVkZ2UgYXJvdW5kIHRoZSBjb250cm9sLiBJZgotICAg
IC8vIGZpbGxDb250ZW50QXJlYSBpcyB0cnVlLCBmaWxsIHRoZSBjb250ZW50IGFyZWEgd2l0aCB0
aGUgZ2l2ZW4gY29sb3IuCi0gICAgdm9pZCBkcmF3VGV4dEZpZWxkKGJvb2wgZHJhd0VkZ2VzLCBi
b29sIGZpbGxDb250ZW50QXJlYSwgU2tDb2xvcik7Ci0KLSAgICAvLyBVc2UgdGhpcyBmb3IgZHJh
d2luZyBQcm9ncmVzc0JhciBjb250cm9scyBpbnN0ZWFkLCBzaW5jZSB3ZQotICAgIC8vIG5lZWQg
dG8ga25vdyB0aGUgcmVjdCB0byBmaWxsIGluc2lkZSB0aGUgYmFyLgotICAgIHZvaWQgZHJhd1By
b2dyZXNzQmFyKGNvbnN0IFNrSVJlY3QmIGZpbGxSZWN0KTsKLQotcHJpdmF0ZToKLSAgICAvLyBE
cmF3cyBhIGJveCBvZiBzaXplIHNwZWNpZmllZCBieSBpcmVjdCwgZmlsbGVkIHdpdGggdGhlIGdp
dmVuIGNvbG9yLgotICAgIC8vIFRoZSBib3ggd2lsbCBoYXZlIGEgYm9yZGVyIGRyYXduIGluIHRo
ZSBkZWZhdWx0IGVkZ2UgY29sb3IuCi0gICAgdm9pZCBib3goY29uc3QgU2tJUmVjdCYgaXJlY3Qs
IFNrQ29sb3IpOwotCi0KLSAgICAvLyBEcmF3cyBhIHRyaWFuZ2xlIG9mIHNpemUgc3BlY2lmaWVk
IGJ5IHRoZSB0aHJlZSBwYWlycyBvZiBjb29yZGluYXRlcywKLSAgICAvLyBmaWxsZWQgd2l0aCB0
aGUgZ2l2ZW4gY29sb3IuIFRoZSBib3ggd2lsbCBoYXZlIGFuIGVkZ2UgZHJhd24gaW4gdGhlCi0g
ICAgLy8gZGVmYXVsdCBlZGdlIGNvbG9yLgotICAgIHZvaWQgdHJpYW5nbGUoaW50IHgwLCBpbnQg
eTAsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiwgU2tDb2xvcik7Ci0KLSAgICAvLyBE
cmF3cyBhIHJlY3RhbmdsZSB0aGUgc2l6ZSBvZiB0aGUgY29udHJvbCB3aXRoIHJvdW5kZWQgY29y
bmVycywgZmlsbGVkCi0gICAgLy8gd2l0aCB0aGUgc3BlY2lmaWVkIGNvbG9yIChhbmQgd2l0aCBh
IGJvcmRlciBpbiB0aGUgZGVmYXVsdCBlZGdlIGNvbG9yKS4KLSAgICB2b2lkIHJvdW5kUmVjdChT
a0NvbG9yKTsKLQotICAgIC8vIERyYXdzIGFuIG92YWwgdGhlIHNpemUgb2YgdGhlIGNvbnRyb2ws
IGZpbGxlZCB3aXRoIHRoZSBzcGVjaWZpZWQgY29sb3IKLSAgICAvLyBhbmQgd2l0aCBhIGJvcmRl
ciBpbiB0aGUgZGVmYXVsdCBlZGdlIGNvbG9yLgotICAgIHZvaWQgb3ZhbChTa0NvbG9yKTsKLQot
ICAgIC8vIERyYXdzIGEgY2lyY2xlIGNlbnRlcmVkIGluIHRoZSBjb250cm9sIHdpdGggdGhlIHNw
ZWNpZmllZCByYWRpdXMsCi0gICAgLy8gZmlsbGVkIHdpdGggdGhlIHNwZWNpZmllZCBjb2xvciwg
YW5kIHdpdGggYSBib3JkZXIgZHJhdyBpbiB0aGUKLSAgICAvLyBkZWZhdWx0IGVkZ2UgY29sb3Iu
Ci0gICAgdm9pZCBjaXJjbGUoU2tTY2FsYXIgcmFkaXVzLCBTa0NvbG9yKTsKLQotICAgIC8vIERy
YXdzIGEgYm94IHRoZSBzaXplIG9mIHRoZSBjb250cm9sLCBmaWxsZWQgd2l0aCB0aGUgb3V0ZXJD
b2xvciBhbmQKLSAgICAvLyB3aXRoIGEgYm9yZGVyIGluIHRoZSBkZWZhdWx0IGVkZ2UgY29sb3Is
IGFuZCB0aGVuIGRyYXdzIGFub3RoZXIgYm94Ci0gICAgLy8gaW5kZW50ZWQgb24gYWxsIGZvdXIg
c2lkZXMgYnkgdGhlIHNwZWNpZmllZCBhbW91bnRzLCBmaWxsZWQgd2l0aCB0aGUKLSAgICAvLyBp
bm5lciBjb2xvciBhbmQgd2l0aCBhIGJvcmRlciBpbiB0aGUgZGVmYXVsdCBlZGdlIGNvbG9yLgot
ICAgIHZvaWQgbmVzdGVkQm94ZXMoaW50IGluZGVudExlZnQsIGludCBpbmRlbnRUb3AsIGludCBp
bmRlbnRSaWdodCwgaW50IGluZGVudEJvdHRvbSwgU2tDb2xvciBvdXRlckNvbG9yLCBTa0NvbG9y
IGlubmVyQ29sb3IpOwotCi0gICAgLy8gRHJhd3MgYSBsaW5lIGJldHdlZW4gdGhlIHR3byBwb2lu
dHMgaW4gdGhlIGdpdmVuIGNvbG9yLgotICAgIHZvaWQgbGluZShpbnQgeDAsIGludCB5MCwgaW50
IHgxLCBpbnQgeTEsIFNrQ29sb3IpOwotCi0gICAgLy8gRHJhd3MgYSBkaXN0aW5jdGl2ZSBtYXJr
IG9uIHRoZSBjb250cm9sIGZvciBlYWNoIHN0YXRlLCBzbyB0aGF0IHRoZQotICAgIC8vIHN0YXRl
IG9mIHRoZSBjb250cm9sIGNhbiBiZSBkZXRlcm1pbmVkIHdpdGhvdXQgbmVlZGluZyB0byBrbm93
IHdoaWNoCi0gICAgLy8gY29sb3IgaXMgd2hpY2guCi0gICAgdm9pZCBtYXJrU3RhdGUoKTsKLQot
ICAgIFNrQ2FudmFzKiBtX2NhbnZhczsKLSAgICBjb25zdCBTa0lSZWN0IG1faXJlY3Q7Ci0gICAg
Y29uc3QgVHlwZSBtX3R5cGU7Ci0gICAgY29uc3QgU3RhdGUgbV9zdGF0ZTsKLSAgICBjb25zdCBT
a0NvbG9yIG1fZWRnZUNvbG9yOwotICAgIGNvbnN0IFNrQ29sb3IgbV9iZ0NvbG9yOwotICAgIGNv
bnN0IFNrQ29sb3IgbV9mZ0NvbG9yOwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBhcmUgY29udmVu
aWVuY2UgYWNjZXNzb3JzIGZvciBtX2lyZWN0LgotICAgIGNvbnN0IGludCBtX2xlZnQ7Ci0gICAg
Y29uc3QgaW50IG1fcmlnaHQ7Ci0gICAgY29uc3QgaW50IG1fdG9wOwotICAgIGNvbnN0IGludCBt
X2JvdHRvbTsKLSAgICBjb25zdCBpbnQgbV93aWR0aDsKLSAgICBjb25zdCBpbnQgbV9oZWlnaHQ7
Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBXZWJUZXN0VGhlbWVDb250cm9sV2luX2gKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RU
aGVtZUVuZ2luZU1hYy5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5l
ci9zcmMvV2ViVGVzdFRoZW1lRW5naW5lTWFjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGYwYjUyMzJmNzdkYzZlOTYzNGEwNGFkM2ExNzJmOTY4MjcyM2ZhNTMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFRoZW1lRW5naW5lTWFjLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIFRoaXMgaW1wbGVtZW50cyB0aGUgV2ViVGhlbWVFbmdpbmUgQVBJIGlu
IHN1Y2ggYSB3YXkgdGhhdCB3ZSBtYXRjaCB0aGUgTWFjCi0vLyBwb3J0IHJlbmRlcmluZyBtb3Jl
IHRoYW4gdXN1YWwgQ2hyb21pdW0gcGF0aCwgdGh1cyBhbGxvd2luZyB1cyB0byBzaGFyZQotLy8g
bW9yZSBwaXhlbCBiYXNlbGluZXMuCi0KLSNpZm5kZWYgV2ViVGVzdFRoZW1lRW5naW5lTWFjX2gK
LSNkZWZpbmUgV2ViVGVzdFRoZW1lRW5naW5lTWFjX2gKLQotI2luY2x1ZGUgPHB1YmxpYy9tYWMv
V2ViVGhlbWVFbmdpbmUuaD4KLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1jbGFzcyBX
ZWJUZXN0VGhlbWVFbmdpbmVNYWMgOiBwdWJsaWMgV2ViS2l0OjpXZWJUaGVtZUVuZ2luZSB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsYmFyVGh1bWIoCi0gICAgICAgIFdl
YktpdDo6V2ViQ2FudmFzKiwKLSAgICAgICAgV2ViS2l0OjpXZWJUaGVtZUVuZ2luZTo6U3RhdGUs
Ci0gICAgICAgIFdlYktpdDo6V2ViVGhlbWVFbmdpbmU6OlNpemUsCi0gICAgICAgIGNvbnN0IFdl
YktpdDo6V2ViUmVjdCYsCi0gICAgICAgIGNvbnN0IFdlYktpdDo6V2ViVGhlbWVFbmdpbmU6OlNj
cm9sbGJhckluZm8mKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRISVRoZW1l
U2Nyb2xsYmFyVGh1bWIoCi0gICAgICAgIFdlYktpdDo6V2ViQ2FudmFzKiwKLSAgICAgICAgV2Vi
S2l0OjpXZWJUaGVtZUVuZ2luZTo6U3RhdGUsCi0gICAgICAgIFdlYktpdDo6V2ViVGhlbWVFbmdp
bmU6OlNpemUsCi0gICAgICAgIGNvbnN0IFdlYktpdDo6V2ViUmVjdCYsCi0gICAgICAgIGNvbnN0
IFdlYktpdDo6V2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhckluZm8mKTsKLSAgICB2aXJ0dWFsIHZv
aWQgcGFpbnROU1Njcm9sbGVyU2Nyb2xsYmFyVGh1bWIoCi0gICAgICAgIFdlYktpdDo6V2ViQ2Fu
dmFzKiwKLSAgICAgICAgV2ViS2l0OjpXZWJUaGVtZUVuZ2luZTo6U3RhdGUsCi0gICAgICAgIFdl
YktpdDo6V2ViVGhlbWVFbmdpbmU6OlNpemUsCi0gICAgICAgIGNvbnN0IFdlYktpdDo6V2ViUmVj
dCYsCi0gICAgICAgIGNvbnN0IFdlYktpdDo6V2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhckluZm8m
KTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFdlYlRlc3RUaGVtZUVuZ2luZU1hY19oCmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0
VGhlbWVFbmdpbmVNYWMubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3NyYy9XZWJUZXN0VGhlbWVFbmdpbmVNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGYzOWZkNTM4YmIyY2MwNWNkYjM3ZThmMDFkMDAxMzg1N2U2ZDdjNzguLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFRoZW1lRW5naW5lTWFjLm1tCisrKyAv
ZGV2L251bGwKQEAgLTEsMTk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiV2ViVGVzdFRoZW1lRW5naW5lTWFj
LmgiCi0KLSNpbmNsdWRlIDxwdWJsaWMvV2ViQ2FudmFzLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dl
YlJlY3QuaD4KLSNpbmNsdWRlICJza2lhL2V4dC9za2lhX3V0aWxzX21hYy5oIgotI2ltcG9ydCA8
QXBwS2l0L05TQWZmaW5lVHJhbnNmb3JtLmg+Ci0jaW1wb3J0IDxBcHBLaXQvTlNHcmFwaGljc0Nv
bnRleHQuaD4KLSNpbXBvcnQgPEFwcEtpdC9OU1Njcm9sbGVyLmg+Ci0jaW1wb3J0IDxBcHBLaXQv
TlNXaW5kb3cuaD4KLSNpbmNsdWRlIDxDYXJib24vQ2FyYm9uLmg+Ci0KLXVzaW5nIFdlYktpdDo6
V2ViQ2FudmFzOwotdXNpbmcgV2ViS2l0OjpXZWJSZWN0OwotdXNpbmcgV2ViS2l0OjpXZWJUaGVt
ZUVuZ2luZTsKLQotLy8gV2UgY2FuJ3QgZGlyZWN0bHkgdGVsbCB0aGUgTlNTY3JvbGxlciB0byBk
cmF3IGl0c2VsZiBhcyBhY3RpdmUgb3IgaW5hY3RpdmUsCi0vLyBpbnN0ZWFkIHdlIGhhdmUgdG8g
bWFrZSBpdCBhIGNoaWxkIG9mIGFuIChpbilhY3RpdmUgd2luZG93LiBUaGlzIGNsYXNzIGxldHMK
LS8vIHVzIGZha2UgdGhhdCBwYXJlbnQgd2luZG93LgotQGludGVyZmFjZSBGYWtlQWN0aXZlV2lu
ZG93IDogTlNXaW5kb3cgewotQHByaXZhdGUKLSAgICBCT09MIGhhc0FjdGl2ZUNvbnRyb2xzOwot
fQotKyAoTlNXaW5kb3cqKWFsd2F5c0FjdGl2ZVdpbmRvdzsKLSsgKE5TV2luZG93KilhbHdheXNJ
bmFjdGl2ZVdpbmRvdzsKLS0gKGlkKWluaXRXaXRoQWN0aXZlQ29udHJvbHM6KEJPT0wpX2hhc0Fj
dGl2ZUNvbnRyb2xzOwotLSAoQk9PTClfaGFzQWN0aXZlQ29udHJvbHM7Ci1AZW5kCi0KLUBpbXBs
ZW1lbnRhdGlvbiBGYWtlQWN0aXZlV2luZG93Ci0KLXN0YXRpYyBOU1dpbmRvdyogYWx3YXlzQWN0
aXZlV2luZG93ID0gbmlsOwotc3RhdGljIE5TV2luZG93KiBhbHdheXNJbmFjdGl2ZVdpbmRvdyA9
IG5pbDsKLQotKyAoTlNXaW5kb3cqKWFsd2F5c0FjdGl2ZVdpbmRvdwotewotICAgIGlmIChhbHdh
eXNBY3RpdmVXaW5kb3cgPT0gbmlsKQotICAgICAgICBhbHdheXNBY3RpdmVXaW5kb3cgPSBbW3Nl
bGYgYWxsb2NdIGluaXRXaXRoQWN0aXZlQ29udHJvbHM6WUVTXTsKLSAgICByZXR1cm4gYWx3YXlz
QWN0aXZlV2luZG93OwotfQotCi0rIChOU1dpbmRvdyopYWx3YXlzSW5hY3RpdmVXaW5kb3cKLXsK
LSAgICBpZiAoYWx3YXlzSW5hY3RpdmVXaW5kb3cgPT0gbmlsKQotICAgICAgICBhbHdheXNJbmFj
dGl2ZVdpbmRvdyA9IFtbc2VsZiBhbGxvY10gaW5pdFdpdGhBY3RpdmVDb250cm9sczpOT107Ci0g
ICAgcmV0dXJuIGFsd2F5c0luYWN0aXZlV2luZG93OwotfQotCi0tIChpZClpbml0V2l0aEFjdGl2
ZUNvbnRyb2xzOihCT09MKV9oYXNBY3RpdmVDb250cm9scwotewotICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07Ci0gICAgaGFzQWN0aXZlQ29udHJvbHMgPSBfaGFzQWN0aXZlQ29udHJvbHM7Ci0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKEJPT0wpX2hhc0FjdGl2ZUNvbnRyb2xzCi17Ci0gICAgcmV0
dXJuIGhhc0FjdGl2ZUNvbnRyb2xzOwotfQotCi1AZW5kCi0KLW5hbWVzcGFjZSBXZWJUZXN0UnVu
bmVyIHsKLQotbmFtZXNwYWNlIHsKLQotVGhlbWVUcmFja0VuYWJsZVN0YXRlIHN0YXRlVG9ISUVu
YWJsZVN0YXRlKFdlYlRoZW1lRW5naW5lOjpTdGF0ZSBzdGF0ZSkKLXsKLSAgICBzd2l0Y2ggKHN0
YXRlKSB7Ci0gICAgY2FzZSBXZWJUaGVtZUVuZ2luZTo6U3RhdGVEaXNhYmxlZDoKLSAgICAgICAg
cmV0dXJuIGtUaGVtZVRyYWNrRGlzYWJsZWQ7Ci0gICAgY2FzZSBXZWJUaGVtZUVuZ2luZTo6U3Rh
dGVJbmFjdGl2ZToKLSAgICAgICAgcmV0dXJuIGtUaGVtZVRyYWNrSW5hY3RpdmU7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIGtUaGVtZVRyYWNrQWN0aXZlOwotICAgIH0KLX0KLQotfQot
Ci12b2lkIFdlYlRlc3RUaGVtZUVuZ2luZU1hYzo6cGFpbnRTY3JvbGxiYXJUaHVtYigKLSAgICBX
ZWJDYW52YXMqIGNhbnZhcywKLSAgICBXZWJUaGVtZUVuZ2luZTo6U3RhdGUgc3RhdGUsCi0gICAg
V2ViVGhlbWVFbmdpbmU6OlNpemUgc2l6ZSwKLSAgICBjb25zdCBXZWJSZWN0JiByZWN0LAotICAg
IGNvbnN0IFdlYlRoZW1lRW5naW5lOjpTY3JvbGxiYXJJbmZvJiBzY3JvbGxiYXJJbmZvKQotewot
ICAgIC8vIFRvIG1hdGNoIHRoZSBNYWMgcG9ydCwgd2Ugc3RpbGwgdXNlIEhJVGhlbWUgZm9yIGlu
bmVyIHNjcm9sbGJhcnMuCi0gICAgaWYgKHNjcm9sbGJhckluZm8ucGFyZW50ID09IFdlYlRoZW1l
RW5naW5lOjpTY3JvbGxiYXJQYXJlbnRSZW5kZXJMYXllcikKLSAgICAgICAgcGFpbnRISVRoZW1l
U2Nyb2xsYmFyVGh1bWIoY2FudmFzLCBzdGF0ZSwgc2l6ZSwgcmVjdCwgc2Nyb2xsYmFySW5mbyk7
Ci0gICAgZWxzZQotICAgICAgICBwYWludE5TU2Nyb2xsZXJTY3JvbGxiYXJUaHVtYihjYW52YXMs
IHN0YXRlLCBzaXplLCByZWN0LCBzY3JvbGxiYXJJbmZvKTsKLX0KLQotLy8gRHVwbGljYXRlZCBm
cm9tIHdlYmtpdC9nbHVlL3dlYnRoZW1lZW5naW5lX2ltcGxfbWFjLmNjIGluIHRoZSBkb3duc3Ry
ZWFtCi0vLyBDaHJvbWl1bSBXZWJUaGVtZUVuZ2luZSBpbXBsZW1lbnRhdGlvbi4KLXZvaWQgV2Vi
VGVzdFRoZW1lRW5naW5lTWFjOjpwYWludEhJVGhlbWVTY3JvbGxiYXJUaHVtYigKLSAgICBXZWJD
YW52YXMqIGNhbnZhcywKLSAgICBXZWJUaGVtZUVuZ2luZTo6U3RhdGUgc3RhdGUsCi0gICAgV2Vi
VGhlbWVFbmdpbmU6OlNpemUgc2l6ZSwKLSAgICBjb25zdCBXZWJSZWN0JiByZWN0LAotICAgIGNv
bnN0IFdlYlRoZW1lRW5naW5lOjpTY3JvbGxiYXJJbmZvJiBzY3JvbGxiYXJJbmZvKQotewotICAg
IEhJVGhlbWVUcmFja0RyYXdJbmZvIHRyYWNrSW5mbzsKLSAgICB0cmFja0luZm8udmVyc2lvbiA9
IDA7Ci0gICAgdHJhY2tJbmZvLmtpbmQgPSBzaXplID09IFdlYlRoZW1lRW5naW5lOjpTaXplUmVn
dWxhciA/IGtUaGVtZU1lZGl1bVNjcm9sbEJhciA6IGtUaGVtZVNtYWxsU2Nyb2xsQmFyOwotICAg
IHRyYWNrSW5mby5ib3VuZHMgPSBDR1JlY3RNYWtlKHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRo
LCByZWN0LmhlaWdodCk7Ci0gICAgdHJhY2tJbmZvLm1pbiA9IDA7Ci0gICAgdHJhY2tJbmZvLm1h
eCA9IHNjcm9sbGJhckluZm8ubWF4VmFsdWU7Ci0gICAgdHJhY2tJbmZvLnZhbHVlID0gc2Nyb2xs
YmFySW5mby5jdXJyZW50VmFsdWU7Ci0gICAgdHJhY2tJbmZvLnRyYWNrSW5mby5zY3JvbGxiYXIu
dmlld3NpemUgPSBzY3JvbGxiYXJJbmZvLnZpc2libGVTaXplOwotICAgIHRyYWNrSW5mby5hdHRy
aWJ1dGVzID0gMDsKLSAgICBpZiAoc2Nyb2xsYmFySW5mby5vcmllbnRhdGlvbiA9PSBXZWJUaGVt
ZUVuZ2luZTo6U2Nyb2xsYmFyT3JpZW50YXRpb25Ib3Jpem9udGFsKQotICAgICAgICB0cmFja0lu
Zm8uYXR0cmlidXRlcyB8PSBrVGhlbWVUcmFja0hvcml6b250YWw7Ci0KLSAgICB0cmFja0luZm8u
ZW5hYmxlU3RhdGUgPSBzdGF0ZVRvSElFbmFibGVTdGF0ZShzdGF0ZSk7Ci0KLSAgICB0cmFja0lu
Zm8udHJhY2tJbmZvLnNjcm9sbGJhci5wcmVzc1N0YXRlID0KLSAgICAgICAgc3RhdGUgPT0gV2Vi
VGhlbWVFbmdpbmU6OlN0YXRlUHJlc3NlZCA/IGtUaGVtZVRodW1iUHJlc3NlZCA6IDA7Ci0gICAg
dHJhY2tJbmZvLmF0dHJpYnV0ZXMgfD0gKGtUaGVtZVRyYWNrU2hvd1RodW1iIHwga1RoZW1lVHJh
Y2tIaWRlVHJhY2spOwotICAgIGdmeDo6U2tpYUJpdExvY2tlciBiaXRMb2NrZXIoY2FudmFzKTsK
LSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gYml0TG9ja2VyLmNnQ29udGV4dCgpOwotICAg
IEhJVGhlbWVEcmF3VHJhY2soJnRyYWNrSW5mbywgMCwgY2dDb250ZXh0LCBrSElUaGVtZU9yaWVu
dGF0aW9uTm9ybWFsKTsKLX0KLQotdm9pZCBXZWJUZXN0VGhlbWVFbmdpbmVNYWM6OnBhaW50TlNT
Y3JvbGxlclNjcm9sbGJhclRodW1iKAotICAgIFdlYkNhbnZhcyogY2FudmFzLAotICAgIFdlYlRo
ZW1lRW5naW5lOjpTdGF0ZSBzdGF0ZSwKLSAgICBXZWJUaGVtZUVuZ2luZTo6U2l6ZSBzaXplLAot
ICAgIGNvbnN0IFdlYlJlY3QmIHJlY3QsCi0gICAgY29uc3QgV2ViVGhlbWVFbmdpbmU6OlNjcm9s
bGJhckluZm8mIHNjcm9sbGJhckluZm8pCi17Ci0gICAgW05TR3JhcGhpY3NDb250ZXh0IHNhdmVH
cmFwaGljc1N0YXRlXTsKLSAgICBOU1Njcm9sbGVyKiBzY3JvbGxlciA9IFtbTlNTY3JvbGxlciBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRo
LCByZWN0LmhlaWdodCldOwotICAgIFtzY3JvbGxlciBzZXRFbmFibGVkOnN0YXRlICE9IFdlYlRo
ZW1lRW5naW5lOjpTdGF0ZURpc2FibGVkXTsKLSAgICBpZiAoc3RhdGUgPT0gV2ViVGhlbWVFbmdp
bmU6OlN0YXRlSW5hY3RpdmUpCi0gICAgICAgIFtbW0Zha2VBY3RpdmVXaW5kb3cgYWx3YXlzSW5h
Y3RpdmVXaW5kb3ddIGNvbnRlbnRWaWV3XSBhZGRTdWJ2aWV3OnNjcm9sbGVyXTsKLSAgICBlbHNl
Ci0gICAgICAgIFtbW0Zha2VBY3RpdmVXaW5kb3cgYWx3YXlzQWN0aXZlV2luZG93XSBjb250ZW50
Vmlld10gYWRkU3VidmlldzpzY3JvbGxlcl07Ci0KLSAgICBbc2Nyb2xsZXIgc2V0Q29udHJvbFNp
emU6c2l6ZSA9PSBXZWJUaGVtZUVuZ2luZTo6U2l6ZVJlZ3VsYXIgPyBOU1JlZ3VsYXJDb250cm9s
U2l6ZSA6IE5TU21hbGxDb250cm9sU2l6ZV07Ci0KLSAgICBkb3VibGUgdmFsdWUgPSBkb3VibGUo
c2Nyb2xsYmFySW5mby5jdXJyZW50VmFsdWUpIC8gZG91YmxlKHNjcm9sbGJhckluZm8ubWF4VmFs
dWUpOwotICAgIFtzY3JvbGxlciBzZXREb3VibGVWYWx1ZTogdmFsdWVdOwotCi0gICAgZmxvYXQg
a25vYlByb3BvcnRpb24gPSBmbG9hdChzY3JvbGxiYXJJbmZvLnZpc2libGVTaXplKSAvIGZsb2F0
KHNjcm9sbGJhckluZm8udG90YWxTaXplKTsKLSAgICBbc2Nyb2xsZXIgc2V0S25vYlByb3BvcnRp
b246IGtub2JQcm9wb3J0aW9uXTsKLQotICAgIGdmeDo6U2tpYUJpdExvY2tlciBiaXRMb2NrZXIo
Y2FudmFzKTsKLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gYml0TG9ja2VyLmNnQ29udGV4
dCgpOwotICAgIE5TR3JhcGhpY3NDb250ZXh0KiBuc0dyYXBoaWNzQ29udGV4dCA9IFtOU0dyYXBo
aWNzQ29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoR3JhcGhpY3NQb3J0OmNnQ29udGV4dCBmbGlw
cGVkOllFU107Ci0gICAgW05TR3JhcGhpY3NDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0Om5zR3Jh
cGhpY3NDb250ZXh0XTsKLQotICAgIC8vIERlc3BpdGUgcGFzc2luZyBpbiBmcmFtZVJlY3QoKSB0
byB0aGUgc2Nyb2xsZXIsIGl0IGFsd2F5cyBkcmF3cyBhdCAoMCwgMCkuCi0gICAgLy8gRm9yY2Ug
aXQgdG8gZHJhdyBpbiB0aGUgcmlnaHQgbG9jYXRpb24gYnkgdHJhbnNsYXRpbmcgdGhlIHdob2xl
IGdyYXBoaWNzCi0gICAgLy8gY29udGV4dC4KLSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNnQ29u
dGV4dCk7Ci0gICAgTlNBZmZpbmVUcmFuc2Zvcm0gKnRyYW5zZm9ybSA9IFtOU0FmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm1dOwotICAgIFt0cmFuc2Zvcm0gdHJhbnNsYXRlWEJ5OnJlY3QueCB5Qnk6
cmVjdC55XTsKLSAgICBbdHJhbnNmb3JtIGNvbmNhdF07Ci0KLSAgICBbc2Nyb2xsZXIgZHJhd0tu
b2JdOwotICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY2dDb250ZXh0KTsKLQotICAgIFtzY3Jv
bGxlciByZWxlYXNlXTsKLQotICAgIFtOU0dyYXBoaWNzQ29udGV4dCByZXN0b3JlR3JhcGhpY3NT
dGF0ZV07Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RUaGVtZUVuZ2luZVdpbi5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0VGhlbWVFbmdpbmVXaW4uY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDMzOWY1NWRkNjYxZGEyYzUwOWYwNTg0
ZDZmNDQ2ZTgzZGZkZTk5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRl
c3RUaGVtZUVuZ2luZVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NDMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJUZXN0VGhlbWVFbmdpbmVXaW4uaCIKLQotI2lu
Y2x1ZGUgIlRlc3RDb21tb24uaCIKLSNpbmNsdWRlICJXZWJUZXN0VGhlbWVDb250cm9sV2luLmgi
Ci0jaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tSZWN0LmgiCi0jaW5j
bHVkZSA8cHVibGljL1dlYlJlY3QuaD4KLQotLy8gQWx0aG91Z2ggYWxsIHRoaXMgY29kZSBpcyBn
ZW5lcmljLCB3ZSBpbmNsdWRlIHRoZXNlIGhlYWRlcnMKLS8vIHRvIHB1bGwgaW4gdGhlIFdpbmRv
d3MgI2RlZmluZXMgZm9yIHRoZSBwYXJ0cyBhbmQgc3RhdGVzIG9mCi0vLyB0aGUgY29udHJvbHMu
Ci0jaW5jbHVkZSA8dnNzdHlsZS5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1uYW1lc3BhY2Ug
ewotCi0vLyBXZSBkZWZpbmUgdGhpcyBmb3IgY2xhcml0eSwgYWx0aG91Z2ggdGhlcmUgcmVhbGx5
IHNob3VsZCBiZSBhIERGQ1NfTk9STUFMIGluIHdpbnVzZXIuaC4KLWNvbnN0IGludCBkZmNzTm9y
bWFsID0gMHgwMDAwOwotCi1Ta0lSZWN0IHdlYlJlY3RUb1NrSVJlY3QoY29uc3QgV2ViUmVjdCYg
d2ViUmVjdCkKLXsKLSAgICBTa0lSZWN0IGlyZWN0OwotICAgIGlyZWN0LnNldCh3ZWJSZWN0Lngs
IHdlYlJlY3QueSwgd2ViUmVjdC54ICsgd2ViUmVjdC53aWR0aCAtIDEsIHdlYlJlY3QueSArIHdl
YlJlY3QuaGVpZ2h0IC0gMSk7Ci0gICAgcmV0dXJuIGlyZWN0OwotfQotCi12b2lkIGRyYXdDb250
cm9sKFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0LCBXZWJUZXN0VGhlbWVD
b250cm9sV2luOjpUeXBlIGN0eXBlLCBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpTdGF0ZSBjc3Rh
dGUpCi17Ci0gICAgV2ViVGVzdFRoZW1lQ29udHJvbFdpbiBjb250cm9sKGNhbnZhcywgd2ViUmVj
dFRvU2tJUmVjdChyZWN0KSwgY3R5cGUsIGNzdGF0ZSk7Ci0gICAgY29udHJvbC5kcmF3KCk7Ci19
Ci0KLXZvaWQgZHJhd1RleHRGaWVsZChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYg
cmVjdCwgV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VHlwZSBjdHlwZSwgV2ViVGVzdFRoZW1lQ29u
dHJvbFdpbjo6U3RhdGUgY3N0YXRlLCBib29sIGRyYXdFZGdlcywgYm9vbCBmaWxsQ29udGVudEFy
ZWEsIFdlYkNvbG9yIGNvbG9yKQotewotICAgIFdlYlRlc3RUaGVtZUNvbnRyb2xXaW4gY29udHJv
bChjYW52YXMsIHdlYlJlY3RUb1NrSVJlY3QocmVjdCksIGN0eXBlLCBjc3RhdGUpOwotICAgIGNv
bnRyb2wuZHJhd1RleHRGaWVsZChkcmF3RWRnZXMsIGZpbGxDb250ZW50QXJlYSwgY29sb3IpOwot
fQotCi12b2lkIGRyYXdQcm9ncmVzc0JhcihXZWJDYW52YXMqIGNhbnZhcywgV2ViVGVzdFRoZW1l
Q29udHJvbFdpbjo6VHlwZSBjdHlwZSwgV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6U3RhdGUgY3N0
YXRlLCBjb25zdCBXZWJSZWN0JiBiYXJSZWN0LCBjb25zdCBXZWJSZWN0JiBmaWxsUmVjdCkKLXsK
LSAgICBXZWJUZXN0VGhlbWVDb250cm9sV2luIGNvbnRyb2woY2FudmFzLCB3ZWJSZWN0VG9Ta0lS
ZWN0KGJhclJlY3QpLCBjdHlwZSwgY3N0YXRlKTsKLSAgICBjb250cm9sLmRyYXdQcm9ncmVzc0Jh
cih3ZWJSZWN0VG9Ta0lSZWN0KGZpbGxSZWN0KSk7Ci19Ci0KLX0KLQotdm9pZCBXZWJUZXN0VGhl
bWVFbmdpbmVXaW46OnBhaW50QnV0dG9uKFdlYkNhbnZhcyogY2FudmFzLCBpbnQgcGFydCwgaW50
IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25zdCBXZWJSZWN0JiByZWN0KQotewotICAgIFdl
YlRlc3RUaGVtZUNvbnRyb2xXaW46OlR5cGUgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2lu
OjpVbmtub3duVHlwZTsKLSAgICBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpTdGF0ZSBjc3RhdGUg
PSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpVbmtub3duU3RhdGU7Ci0KLSAgICBpZiAocGFydCA9
PSBCUF9DSEVDS0JPWCkgewotICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgIGNhc2Ug
Q0JTX1VOQ0hFQ0tFRE5PUk1BTDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0
YXRlID09IGRmY3NOb3JtYWwpOwotICAgICAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250
cm9sV2luOjpVbmNoZWNrZWRCb3hUeXBlOwotICAgICAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRo
ZW1lQ29udHJvbFdpbjo6Tm9ybWFsU3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlIENCU19VTkNIRUNLRURIT1Q6Ci0gICAgICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNz
aWNTdGF0ZSA9PSAoREZDU19CVVRUT05DSEVDSyB8IERGQ1NfSE9UKSk7Ci0gICAgICAgICAgICBj
dHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlVuY2hlY2tlZEJveFR5cGU7Ci0gICAgICAg
ICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpIb3RTdGF0ZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQ0JTX1VOQ0hFQ0tFRFBSRVNTRUQ6Ci0gICAgICAg
ICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19CVVRUT05DSEVDSyB8IERG
Q1NfUFVTSEVEKSk7Ci0gICAgICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46
OlVuY2hlY2tlZEJveFR5cGU7Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250
cm9sV2luOjpQcmVzc2VkU3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IENCU19VTkNIRUNLRURESVNBQkxFRDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3Np
Y1N0YXRlID09IChERkNTX0JVVFRPTkNIRUNLIHwgREZDU19JTkFDVElWRSkpOwotICAgICAgICAg
ICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpVbmNoZWNrZWRCb3hUeXBlOwotICAg
ICAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6RGlzYWJsZWRTdGF0ZTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQ0JTX0NIRUNLRUROT1JNQUw6Ci0g
ICAgICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19CVVRUT05DSEVD
SyB8IERGQ1NfQ0hFQ0tFRCkpOwotICAgICAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250
cm9sV2luOjpDaGVja2VkQm94VHlwZTsKLSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVt
ZUNvbnRyb2xXaW46Ok5vcm1hbFN0YXRlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBDQlNfQ0hFQ0tFREhPVDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0
YXRlID09IChERkNTX0JVVFRPTkNIRUNLIHwgREZDU19DSEVDS0VEIHwgREZDU19IT1QpKTsKLSAg
ICAgICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Q2hlY2tlZEJveFR5cGU7
Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpIb3RTdGF0ZTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQ0JTX0NIRUNLRURQUkVTU0VEOgot
ICAgICAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gKERGQ1NfQlVUVE9OQ0hF
Q0sgfCBERkNTX0NIRUNLRUQgfCBERkNTX1BVU0hFRCkpOwotICAgICAgICAgICAgY3R5cGUgPSBX
ZWJUZXN0VGhlbWVDb250cm9sV2luOjpDaGVja2VkQm94VHlwZTsKLSAgICAgICAgICAgIGNzdGF0
ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlByZXNzZWRTdGF0ZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgQ0JTX0NIRUNLRURESVNBQkxFRDoKLSAgICAgICAgICAgIFdF
QktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IChERkNTX0JVVFRPTkNIRUNLIHwgREZDU19DSEVD
S0VEIHwgREZDU19JTkFDVElWRSkpOwotICAgICAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVD
b250cm9sV2luOjpDaGVja2VkQm94VHlwZTsKLSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RU
aGVtZUNvbnRyb2xXaW46OkRpc2FibGVkU3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBjYXNlIENCU19NSVhFRE5PUk1BTDoKLSAgICAgICAgICAgIC8vIENsYXNzaWMgdGhlbWUg
Y2FuJ3QgcmVwcmVzZW50IG1peGVkIHN0YXRlIGNoZWNrYm94LiBXZSBhc3N1bWUKLSAgICAgICAg
ICAgIC8vIGl0J3MgZXF1aXZhbGVudCB0byB1bmNoZWNrZWQuCi0gICAgICAgICAgICBXRUJLSVRf
QVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBERkNTX0JVVFRPTkNIRUNLKTsKLSAgICAgICAgICAgIGN0
eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6SW5kZXRlcm1pbmF0ZUNoZWNrYm94VHlwZTsK
LSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46Ok5vcm1hbFN0YXRl
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDQlNfTUlYRURIT1Q6Ci0gICAg
ICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19CVVRUT05DSEVDSyB8
IERGQ1NfSE9UKSk7Ci0gICAgICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46
OkluZGV0ZXJtaW5hdGVDaGVja2JveFR5cGU7Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0
VGhlbWVDb250cm9sV2luOjpIb3RTdGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgQ0JTX01JWEVEUFJFU1NFRDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3Np
Y1N0YXRlID09IChERkNTX0JVVFRPTkNIRUNLIHwgREZDU19QVVNIRUQpKTsKLSAgICAgICAgICAg
IGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6SW5kZXRlcm1pbmF0ZUNoZWNrYm94VHlw
ZTsKLSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlByZXNzZWRT
dGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQ0JTX01JWEVERElTQUJM
RUQ6Ci0gICAgICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19CVVRU
T05DSEVDSyB8IERGQ1NfSU5BQ1RJVkUpKTsKLSAgICAgICAgICAgIGN0eXBlID0gV2ViVGVzdFRo
ZW1lQ29udHJvbFdpbjo6SW5kZXRlcm1pbmF0ZUNoZWNrYm94VHlwZTsKLSAgICAgICAgICAgIGNz
dGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkRpc2FibGVkU3RhdGU7Ci0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgV0VCS0lUX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKEJQX1JBRElPQlVUVE9OID09IHBhcnQpIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewot
ICAgICAgICBjYXNlIFJCU19VTkNIRUNLRUROT1JNQUw6Ci0gICAgICAgICAgICBXRUJLSVRfQVNT
RVJUKGNsYXNzaWNTdGF0ZSA9PSBERkNTX0JVVFRPTlJBRElPKTsKLSAgICAgICAgICAgIGN0eXBl
ID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VW5jaGVja2VkUmFkaW9UeXBlOwotICAgICAgICAg
ICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Tm9ybWFsU3RhdGU7Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFJCU19VTkNIRUNLRURIT1Q6Ci0gICAgICAgICAg
ICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19CVVRUT05SQURJTyB8IERGQ1Nf
SE9UKSk7Ci0gICAgICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlVuY2hl
Y2tlZFJhZGlvVHlwZTsKLSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xX
aW46OkhvdFN0YXRlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBSQlNfVU5D
SEVDS0VEUFJFU1NFRDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09
IChERkNTX0JVVFRPTlJBRElPIHwgREZDU19QVVNIRUQpKTsKLSAgICAgICAgICAgIGN0eXBlID0g
V2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VW5jaGVja2VkUmFkaW9UeXBlOwotICAgICAgICAgICAg
Y3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6UHJlc3NlZFN0YXRlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBSQlNfVU5DSEVDS0VERElTQUJMRUQ6Ci0gICAgICAg
ICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19CVVRUT05SQURJTyB8IERG
Q1NfSU5BQ1RJVkUpKTsKLSAgICAgICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdp
bjo6VW5jaGVja2VkUmFkaW9UeXBlOwotICAgICAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1l
Q29udHJvbFdpbjo6RGlzYWJsZWRTdGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgUkJTX0NIRUNLRUROT1JNQUw6Ci0gICAgICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNz
aWNTdGF0ZSA9PSAoREZDU19CVVRUT05SQURJTyB8IERGQ1NfQ0hFQ0tFRCkpOwotICAgICAgICAg
ICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpDaGVja2VkUmFkaW9UeXBlOwotICAg
ICAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Tm9ybWFsU3RhdGU7Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFJCU19DSEVDS0VESE9UOgotICAgICAg
ICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gKERGQ1NfQlVUVE9OUkFESU8gfCBE
RkNTX0NIRUNLRUQgfCBERkNTX0hPVCkpOwotICAgICAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhl
bWVDb250cm9sV2luOjpDaGVja2VkUmFkaW9UeXBlOwotICAgICAgICAgICAgY3N0YXRlID0gV2Vi
VGVzdFRoZW1lQ29udHJvbFdpbjo6SG90U3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBjYXNlIFJCU19DSEVDS0VEUFJFU1NFRDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NFUlQo
Y2xhc3NpY1N0YXRlID09IChERkNTX0JVVFRPTlJBRElPIHwgREZDU19DSEVDS0VEIHwgREZDU19Q
VVNIRUQpKTsKLSAgICAgICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Q2hl
Y2tlZFJhZGlvVHlwZTsKLSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xX
aW46OlByZXNzZWRTdGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUkJT
X0NIRUNLRURESVNBQkxFRDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRl
ID09IChERkNTX0JVVFRPTlJBRElPIHwgREZDU19DSEVDS0VEIHwgREZDU19JTkFDVElWRSkpOwot
ICAgICAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpDaGVja2VkUmFkaW9U
eXBlOwotICAgICAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6RGlzYWJs
ZWRTdGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAoQlBfUFVTSEJVVFRPTiA9PSBwYXJ0KSB7Ci0gICAgICAg
IHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgICAgY2FzZSBQQlNfTk9STUFMOgotICAgICAgICAgICAg
V0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gREZDU19CVVRUT05QVVNIKTsKLSAgICAgICAg
ICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6UHVzaEJ1dHRvblR5cGU7Ci0gICAg
ICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpOb3JtYWxTdGF0ZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUEJTX0hPVDoKLSAgICAgICAgICAgIFdF
QktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IChERkNTX0JVVFRPTlBVU0ggfCBERkNTX0hPVCkp
OwotICAgICAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpQdXNoQnV0dG9u
VHlwZTsKLSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkhvdFN0
YXRlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBQQlNfUFJFU1NFRDoKLSAg
ICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IChERkNTX0JVVFRPTlBVU0gg
fCBERkNTX1BVU0hFRCkpOwotICAgICAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9s
V2luOjpQdXNoQnV0dG9uVHlwZTsKLSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNv
bnRyb2xXaW46OlByZXNzZWRTdGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgUEJTX0RJU0FCTEVEOgotICAgICAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUg
PT0gKERGQ1NfQlVUVE9OUFVTSCB8IERGQ1NfSU5BQ1RJVkUpKTsKLSAgICAgICAgICAgIGN0eXBl
ID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6UHVzaEJ1dHRvblR5cGU7Ci0gICAgICAgICAgICBj
c3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpEaXNhYmxlZFN0YXRlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBQQlNfREVGQVVMVEVEOgotICAgICAgICAgICAgV0VC
S0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gREZDU19CVVRUT05QVVNIKTsKLSAgICAgICAgICAg
IGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6UHVzaEJ1dHRvblR5cGU7Ci0gICAgICAg
ICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpGb2N1c2VkU3RhdGU7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgV0VCS0lUX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UKLSAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgZHJhd0Nv
bnRyb2woY2FudmFzLCByZWN0LCBjdHlwZSwgY3N0YXRlKTsKLX0KLQotdm9pZCBXZWJUZXN0VGhl
bWVFbmdpbmVXaW46OnBhaW50TWVudUxpc3QoV2ViQ2FudmFzKiBjYW52YXMsIGludCBwYXJ0LCBp
bnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCi17Ci0gICAg
V2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VHlwZSBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xX
aW46OlVua25vd25UeXBlOwotICAgIFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlN0YXRlIGNzdGF0
ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlVua25vd25TdGF0ZTsKLQotICAgIGlmIChDUF9E
Uk9QRE9XTkJVVFRPTiA9PSBwYXJ0KSB7Ci0gICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29u
dHJvbFdpbjo6RHJvcERvd25CdXR0b25UeXBlOwotICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0g
ICAgICAgIGNhc2UgQ0JYU19OT1JNQUw6Ci0gICAgICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNz
aWNTdGF0ZSA9PSBERkNTX01FTlVBUlJPVyk7Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0
VGhlbWVDb250cm9sV2luOjpOb3JtYWxTdGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgQ0JYU19IT1Q6Ci0gICAgICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0
ZSA9PSAoREZDU19NRU5VQVJST1cgfCBERkNTX0hPVCkpOwotICAgICAgICAgICAgY3N0YXRlID0g
V2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6SG92ZXJTdGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgQ0JYU19QUkVTU0VEOgotICAgICAgICAgICAgV0VCS0lUX0FTU0VSVChj
bGFzc2ljU3RhdGUgPT0gKERGQ1NfTUVOVUFSUk9XIHwgREZDU19QVVNIRUQpKTsKLSAgICAgICAg
ICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlByZXNzZWRTdGF0ZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQ0JYU19ESVNBQkxFRDoKLSAgICAgICAgICAg
IFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IChERkNTX01FTlVBUlJPVyB8IERGQ1NfSU5B
Q1RJVkUpKTsKLSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkRp
c2FibGVkU3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotCi0gICAgZHJhd0NvbnRyb2woY2FudmFzLCByZWN0LCBjdHlwZSwgY3N0YXRlKTsKLX0K
LQotdm9pZCBXZWJUZXN0VGhlbWVFbmdpbmVXaW46OnBhaW50U2Nyb2xsYmFyQXJyb3coV2ViQ2Fu
dmFzKiBjYW52YXMsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgV2ViUmVjdCYg
cmVjdCkKLXsKLSAgICBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpUeXBlIGN0eXBlID0gV2ViVGVz
dFRoZW1lQ29udHJvbFdpbjo6VW5rbm93blR5cGU7Ci0gICAgV2ViVGVzdFRoZW1lQ29udHJvbFdp
bjo6U3RhdGUgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VW5rbm93blN0YXRlOwot
Ci0gICAgc3dpdGNoIChzdGF0ZSkgewotICAgIGNhc2UgQUJTX1VQTk9STUFMOgotICAgICAgICBX
RUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBERkNTX1NDUk9MTFVQKTsKLSAgICAgICAgY3R5
cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpVcEFycm93VHlwZTsKLSAgICAgICAgY3N0YXRl
ID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Tm9ybWFsU3RhdGU7Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgY2FzZSBBQlNfRE9XTk5PUk1BTDoKLSAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2lj
U3RhdGUgPT0gREZDU19TQ1JPTExET1dOKTsKLSAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVD
b250cm9sV2luOjpEb3duQXJyb3dUeXBlOwotICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVD
b250cm9sV2luOjpOb3JtYWxTdGF0ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEFCU19M
RUZUTk9STUFMOgotICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBERkNTX1ND
Uk9MTExFRlQpOwotICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkxlZnRB
cnJvd1R5cGU7Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46Ok5vcm1h
bFN0YXRlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQUJTX1JJR0hUTk9STUFMOgotICAg
ICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBERkNTX1NDUk9MTFJJR0hUKTsKLSAg
ICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpSaWdodEFycm93VHlwZTsKLSAg
ICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Tm9ybWFsU3RhdGU7Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBBQlNfVVBIT1Q6Ci0gICAgICAgIFdFQktJVF9BU1NFUlQo
Y2xhc3NpY1N0YXRlID09IChERkNTX1NDUk9MTFVQIHwgREZDU19IT1QpKTsKLSAgICAgICAgY3R5
cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpVcEFycm93VHlwZTsKLSAgICAgICAgY3N0YXRl
ID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6SG90U3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgY2FzZSBBQlNfRE9XTkhPVDoKLSAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUg
PT0gKERGQ1NfU0NST0xMRE9XTiB8IERGQ1NfSE9UKSk7Ci0gICAgICAgIGN0eXBlID0gV2ViVGVz
dFRoZW1lQ29udHJvbFdpbjo6RG93bkFycm93VHlwZTsKLSAgICAgICAgY3N0YXRlID0gV2ViVGVz
dFRoZW1lQ29udHJvbFdpbjo6SG90U3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBB
QlNfTEVGVEhPVDoKLSAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gKERGQ1Nf
U0NST0xMTEVGVCB8IERGQ1NfSE9UKSk7Ci0gICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29u
dHJvbFdpbjo6TGVmdEFycm93VHlwZTsKLSAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29u
dHJvbFdpbjo6SG90U3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBQlNfUklHSFRI
T1Q6Ci0gICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IChERkNTX1NDUk9MTFJJ
R0hUIHwgREZDU19IT1QpKTsKLSAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2lu
OjpSaWdodEFycm93VHlwZTsKLSAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdp
bjo6SG90U3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBQlNfVVBIT1ZFUjoKLSAg
ICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gREZDU19TQ1JPTExVUCk7Ci0gICAg
ICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VXBBcnJvd1R5cGU7Ci0gICAgICAg
IGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkhvdmVyU3RhdGU7Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBBQlNfRE9XTkhPVkVSOgotICAgICAgICBXRUJLSVRfQVNTRVJUKGNs
YXNzaWNTdGF0ZSA9PSBERkNTX1NDUk9MTERPV04pOwotICAgICAgICBjdHlwZSA9IFdlYlRlc3RU
aGVtZUNvbnRyb2xXaW46OkRvd25BcnJvd1R5cGU7Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RU
aGVtZUNvbnRyb2xXaW46OkhvdmVyU3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBB
QlNfTEVGVEhPVkVSOgotICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBERkNT
X1NDUk9MTExFRlQpOwotICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46Okxl
ZnRBcnJvd1R5cGU7Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46Okhv
dmVyU3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBQlNfUklHSFRIT1ZFUjoKLSAg
ICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gREZDU19TQ1JPTExSSUdIVCk7Ci0g
ICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6UmlnaHRBcnJvd1R5cGU7Ci0g
ICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkhvdmVyU3RhdGU7Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBBQlNfVVBQUkVTU0VEOgotICAgICAgICBXRUJLSVRfQVNT
RVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19TQ1JPTExVUCB8IERGQ1NfUFVTSEVEIHwgREZDU19G
TEFUKSk7Ci0gICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VXBBcnJvd1R5
cGU7Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlByZXNzZWRTdGF0
ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEFCU19ET1dOUFJFU1NFRDoKLSAgICAgICAg
V0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gKERGQ1NfU0NST0xMRE9XTiB8IERGQ1NfUFVT
SEVEIHwgREZDU19GTEFUKSk7Ci0gICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdp
bjo6RG93bkFycm93VHlwZTsKLSAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdp
bjo6UHJlc3NlZFN0YXRlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQUJTX0xFRlRQUkVT
U0VEOgotICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19TQ1JPTExM
RUZUIHwgREZDU19QVVNIRUQgfCBERkNTX0ZMQVQpKTsKLSAgICAgICAgY3R5cGUgPSBXZWJUZXN0
VGhlbWVDb250cm9sV2luOjpMZWZ0QXJyb3dUeXBlOwotICAgICAgICBjc3RhdGUgPSBXZWJUZXN0
VGhlbWVDb250cm9sV2luOjpQcmVzc2VkU3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2Fz
ZSBBQlNfUklHSFRQUkVTU0VEOgotICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9
PSAoREZDU19TQ1JPTExSSUdIVCB8IERGQ1NfUFVTSEVEIHwgREZDU19GTEFUKSk7Ci0gICAgICAg
IGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6UmlnaHRBcnJvd1R5cGU7Ci0gICAgICAg
IGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlByZXNzZWRTdGF0ZTsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIEFCU19VUERJU0FCTEVEOgotICAgICAgICBXRUJLSVRfQVNTRVJU
KGNsYXNzaWNTdGF0ZSA9PSAoREZDU19TQ1JPTExVUCB8IERGQ1NfSU5BQ1RJVkUpKTsKLSAgICAg
ICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpVcEFycm93VHlwZTsKLSAgICAgICAg
Y3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6RGlzYWJsZWRTdGF0ZTsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIEFCU19ET1dORElTQUJMRUQ6Ci0gICAgICAgIFdFQktJVF9BU1NF
UlQoY2xhc3NpY1N0YXRlID09IChERkNTX1NDUk9MTERPV04gfCBERkNTX0lOQUNUSVZFKSk7Ci0g
ICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6RG93bkFycm93VHlwZTsKLSAg
ICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6RGlzYWJsZWRTdGF0ZTsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEFCU19MRUZURElTQUJMRUQ6Ci0gICAgICAgIFdFQktJ
VF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IChERkNTX1NDUk9MTExFRlQgfCBERkNTX0lOQUNUSVZF
KSk7Ci0gICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6TGVmdEFycm93VHlw
ZTsKLSAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6RGlzYWJsZWRTdGF0
ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEFCU19SSUdIVERJU0FCTEVEOgotICAgICAg
ICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19TQ1JPTExSSUdIVCB8IERGQ1Nf
SU5BQ1RJVkUpKTsKLSAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpSaWdo
dEFycm93VHlwZTsKLSAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6RGlz
YWJsZWRTdGF0ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBXRUJL
SVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRy
YXdDb250cm9sKGNhbnZhcywgcmVjdCwgY3R5cGUsIGNzdGF0ZSk7Ci19Ci0KLXZvaWQgV2ViVGVz
dFRoZW1lRW5naW5lV2luOjpwYWludFNjcm9sbGJhclRodW1iKFdlYkNhbnZhcyogY2FudmFzLCBp
bnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25zdCBXZWJSZWN0JiByZWN0
KQotewotICAgIFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlR5cGUgY3R5cGUgPSBXZWJUZXN0VGhl
bWVDb250cm9sV2luOjpVbmtub3duVHlwZTsKLSAgICBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpT
dGF0ZSBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpVbmtub3duU3RhdGU7Ci0KLSAg
ICBzd2l0Y2ggKHBhcnQpIHsKLSAgICBjYXNlIFNCUF9USFVNQkJUTkhPUlo6Ci0gICAgICAgIGN0
eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6SG9yaXpvbnRhbFNjcm9sbFRodW1iVHlwZTsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNCUF9USFVNQkJUTlZFUlQ6Ci0gICAgICAgIGN0
eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VmVydGljYWxTY3JvbGxUaHVtYlR5cGU7Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTQlBfR1JJUFBFUkhPUlo6Ci0gICAgICAgIGN0eXBl
ID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6SG9yaXpvbnRhbFNjcm9sbEdyaXBUeXBlOwotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgU0JQX0dSSVBQRVJWRVJUOgotICAgICAgICBjdHlwZSA9
IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlZlcnRpY2FsU2Nyb2xsR3JpcFR5cGU7Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAg
Y2FzZSBTQ1JCU19OT1JNQUw6Ci0gICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09
IGRmY3NOb3JtYWwpOwotICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpO
b3JtYWxTdGF0ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNDUkJTX0hPVDoKLSAgICAg
ICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gREZDU19IT1QpOwotICAgICAgICBjc3Rh
dGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpIb3RTdGF0ZTsKLSAgICAgICAgYnJlYWs7Ci0K
LSAgICBjYXNlIFNDUkJTX0hPVkVSOgotICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0
ZSA9PSBkZmNzTm9ybWFsKTsKLSAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdp
bjo6SG92ZXJTdGF0ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNDUkJTX1BSRVNTRUQ6
Ci0gICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IGRmY3NOb3JtYWwpOwotICAg
ICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpQcmVzc2VkU3RhdGU7Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBTQ1JCU19ESVNBQkxFRDoKLSAgICAgICAgV0VCS0lUX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gaW4gcHJhY3Rp
Y2UuCi0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgV0VCS0lUX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkcmF3Q29udHJv
bChjYW52YXMsIHJlY3QsIGN0eXBlLCBjc3RhdGUpOwotfQotCi12b2lkIFdlYlRlc3RUaGVtZUVu
Z2luZVdpbjo6cGFpbnRTY3JvbGxiYXJUcmFjayhXZWJDYW52YXMqIGNhbnZhcywgaW50IHBhcnQs
IGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgV2ViUmVjdCYgcmVjdCwgY29uc3Qg
V2ViUmVjdCYgYWxpZ25SZWN0KQotewotICAgIFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlR5cGUg
Y3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpVbmtub3duVHlwZTsKLSAgICBXZWJUZXN0
VGhlbWVDb250cm9sV2luOjpTdGF0ZSBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpV
bmtub3duU3RhdGU7Ci0KLSAgICBzd2l0Y2ggKHBhcnQpIHsKLSAgICBjYXNlIFNCUF9VUFBFUlRS
QUNLSE9SWjoKLSAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpIb3Jpem9u
dGFsU2Nyb2xsVHJhY2tCYWNrVHlwZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNCUF9M
T1dFUlRSQUNLSE9SWjoKLSAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpI
b3Jpem9udGFsU2Nyb2xsVHJhY2tGb3J3YXJkVHlwZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBj
YXNlIFNCUF9VUFBFUlRSQUNLVkVSVDoKLSAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250
cm9sV2luOjpWZXJ0aWNhbFNjcm9sbFRyYWNrQmFja1R5cGU7Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgY2FzZSBTQlBfTE9XRVJUUkFDS1ZFUlQ6Ci0gICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1l
Q29udHJvbFdpbjo6VmVydGljYWxTY3JvbGxUcmFja0ZvcndhcmRUeXBlOwotICAgICAgICBicmVh
azsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc3dpdGNoIChzdGF0ZSkgewotICAgIGNhc2Ug
U0NSQlNfTk9STUFMOgotICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBkZmNz
Tm9ybWFsKTsKLSAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Tm9ybWFs
U3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTQ1JCU19IT1Q6Ci0gICAgICAgIFdF
QktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGlu
IHByYWN0aWNlLgotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU0NSQlNfSE9WRVI6Ci0gICAg
ICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IGRmY3NOb3JtYWwpOwotICAgICAgICBj
c3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpIb3ZlclN0YXRlOwotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgU0NSQlNfUFJFU1NFRDoKLSAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gaW4gcHJhY3RpY2UuCi0gICAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBTQ1JCU19ESVNBQkxFRDoKLSAgICAgICAgV0VCS0lUX0FT
U0VSVChjbGFzc2ljU3RhdGUgPT0gREZDU19JTkFDVElWRSk7Ci0gICAgICAgIGNzdGF0ZSA9IFdl
YlRlc3RUaGVtZUNvbnRyb2xXaW46OkRpc2FibGVkU3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgZGVmYXVsdDoKLSAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBkcmF3Q29udHJvbChjYW52YXMsIHJlY3QsIGN0eXBlLCBj
c3RhdGUpOwotfQotCi12b2lkIFdlYlRlc3RUaGVtZUVuZ2luZVdpbjo6cGFpbnRTcGluQnV0dG9u
KFdlYkNhbnZhcyogY2FudmFzLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRl
LCBjb25zdCBXZWJSZWN0JiByZWN0KQotewotICAgIFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlR5
cGUgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpVbmtub3duVHlwZTsKLSAgICBXZWJU
ZXN0VGhlbWVDb250cm9sV2luOjpTdGF0ZSBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2lu
OjpVbmtub3duU3RhdGU7Ci0KLSAgICBpZiAocGFydCA9PSBTUE5QX1VQKSB7Ci0gICAgICAgIGN0
eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VXBBcnJvd1R5cGU7Ci0gICAgICAgIHN3aXRj
aCAoc3RhdGUpIHsKLSAgICAgICAgY2FzZSBVUFNfTk9STUFMOgotICAgICAgICAgICAgV0VCS0lU
X0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gREZDU19TQ1JPTExVUCk7Ci0gICAgICAgICAgICBjc3Rh
dGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpOb3JtYWxTdGF0ZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFVQU19ESVNBQkxFRDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NF
UlQoY2xhc3NpY1N0YXRlID09IChERkNTX1NDUk9MTFVQIHwgREZDU19JTkFDVElWRSkpOwotICAg
ICAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6RGlzYWJsZWRTdGF0ZTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVQU19QUkVTU0VEOgotICAgICAgICAg
ICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gKERGQ1NfU0NST0xMVVAgfCBERkNTX1BV
U0hFRCkpOwotICAgICAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6UHJl
c3NlZFN0YXRlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVVBTX0hPVDoKLSAg
ICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IChERkNTX1NDUk9MTFVQIHwg
REZDU19IT1QpKTsKLSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46
OkhvdmVyU3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSBpZiAocGFydCA9PSBTUE5QX0RPV04pIHsKLSAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVD
b250cm9sV2luOjpEb3duQXJyb3dUeXBlOwotICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAg
ICAgIGNhc2UgRE5TX05PUk1BTDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0
YXRlID09IERGQ1NfU0NST0xMRE9XTik7Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhl
bWVDb250cm9sV2luOjpOb3JtYWxTdGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEROU19ESVNBQkxFRDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRl
ID09IChERkNTX1NDUk9MTERPV04gfCBERkNTX0lOQUNUSVZFKSk7Ci0gICAgICAgICAgICBjc3Rh
dGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpEaXNhYmxlZFN0YXRlOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRE5TX1BSRVNTRUQ6Ci0gICAgICAgICAgICBXRUJLSVRfQVNT
RVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19TQ1JPTExET1dOIHwgREZDU19QVVNIRUQpKTsKLSAg
ICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlByZXNzZWRTdGF0ZTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEROU19IT1Q6Ci0gICAgICAgICAgICBX
RUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19TQ1JPTExET1dOIHwgREZDU19IT1Qp
KTsKLSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkhvdmVyU3Rh
dGU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFdF
QktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAg
ICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgZHJhd0NvbnRyb2woY2FudmFzLCBy
ZWN0LCBjdHlwZSwgY3N0YXRlKTsKLX0KLQotdm9pZCBXZWJUZXN0VGhlbWVFbmdpbmVXaW46OnBh
aW50VGV4dEZpZWxkKFdlYkNhbnZhcyogY2FudmFzLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQg
Y2xhc3NpY1N0YXRlLCBjb25zdCBXZWJSZWN0JiByZWN0LCBXZWJDb2xvciBjb2xvciwgYm9vbCBm
aWxsQ29udGVudEFyZWEsIGJvb2wgZHJhd0VkZ2VzKQotewotICAgIFdlYlRlc3RUaGVtZUNvbnRy
b2xXaW46OlR5cGUgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpVbmtub3duVHlwZTsK
LSAgICBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpTdGF0ZSBjc3RhdGUgPSBXZWJUZXN0VGhlbWVD
b250cm9sV2luOjpVbmtub3duU3RhdGU7Ci0KLSAgICBXRUJLSVRfQVNTRVJUKEVQX0VESVRURVhU
ID09IHBhcnQpOwotICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VGV4dEZpZWxk
VHlwZTsKLQotICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICBjYXNlIEVUU19OT1JNQUw6Ci0gICAg
ICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IGRmY3NOb3JtYWwpOwotICAgICAgICBj
c3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpOb3JtYWxTdGF0ZTsKLSAgICAgICAgYnJl
YWs7Ci0KLSAgICBjYXNlIEVUU19IT1Q6Ci0gICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0
YXRlID09IERGQ1NfSE9UKTsKLSAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdp
bjo6SG90U3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBFVFNfRElTQUJMRUQ6Ci0g
ICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IERGQ1NfSU5BQ1RJVkUpOwotICAg
ICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpEaXNhYmxlZFN0YXRlOwotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgRVRTX1NFTEVDVEVEOgotICAgICAgICBXRUJLSVRfQVNT
RVJUKGNsYXNzaWNTdGF0ZSA9PSBERkNTX1BVU0hFRCk7Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRl
c3RUaGVtZUNvbnRyb2xXaW46OlByZXNzZWRTdGF0ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBj
YXNlIEVUU19GT0NVU0VEOgotICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBk
ZmNzTm9ybWFsKTsKLSAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Rm9j
dXNlZFN0YXRlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRVRTX1JFQURPTkxZOgotICAg
ICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBkZmNzTm9ybWFsKTsKLSAgICAgICAg
Y3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6UmVhZE9ubHlTdGF0ZTsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRyYXdUZXh0RmllbGQoY2FudmFzLCBy
ZWN0LCBjdHlwZSwgY3N0YXRlLCBkcmF3RWRnZXMsIGZpbGxDb250ZW50QXJlYSwgY29sb3IpOwot
fQotCi12b2lkIFdlYlRlc3RUaGVtZUVuZ2luZVdpbjo6cGFpbnRUcmFja2JhcihXZWJDYW52YXMq
IGNhbnZhcywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgV2Vi
UmVjdCYgcmVjdCkKLXsKLSAgICBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpUeXBlIGN0eXBlID0g
V2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VW5rbm93blR5cGU7Ci0gICAgV2ViVGVzdFRoZW1lQ29u
dHJvbFdpbjo6U3RhdGUgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VW5rbm93blN0
YXRlOwotCi0gICAgaWYgKFRLUF9USFVNQkJPVFRPTSA9PSBwYXJ0KSB7Ci0gICAgICAgIGN0eXBl
ID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6SG9yaXpvbnRhbFNsaWRlclRodW1iVHlwZTsKLSAg
ICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIFRVU19OT1JNQUw6Ci0gICAgICAg
ICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBkZmNzTm9ybWFsKTsKLSAgICAgICAg
ICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46Ok5vcm1hbFN0YXRlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBUVVNfSE9UOgotICAgICAgICAgICAgV0VCS0lU
X0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gREZDU19IT1QpOwotICAgICAgICAgICAgY3N0YXRlID0g
V2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6SG90U3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBjYXNlIFRVU19ESVNBQkxFRDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xh
c3NpY1N0YXRlID09IERGQ1NfSU5BQ1RJVkUpOwotICAgICAgICAgICAgY3N0YXRlID0gV2ViVGVz
dFRoZW1lQ29udHJvbFdpbjo6RGlzYWJsZWRTdGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgVFVTX1BSRVNTRUQ6Ci0gICAgICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNz
aWNTdGF0ZSA9PSBERkNTX1BVU0hFRCk7Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhl
bWVDb250cm9sV2luOjpQcmVzc2VkU3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFRLUF9USFVNQlZFUlQg
PT0gcGFydCkgewotICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlZlcnRp
Y2FsU2xpZGVyVGh1bWJUeXBlOwotICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgIGNh
c2UgVFVTX05PUk1BTDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09
IGRmY3NOb3JtYWwpOwotICAgICAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdp
bjo6Tm9ybWFsU3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFRVU19I
T1Q6Ci0gICAgICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBERkNTX0hPVCk7
Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpIb3RTdGF0ZTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVFVTX0RJU0FCTEVEOgotICAgICAg
ICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gREZDU19JTkFDVElWRSk7Ci0gICAg
ICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpEaXNhYmxlZFN0YXRlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBUVVNfUFJFU1NFRDoKLSAgICAgICAg
ICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IERGQ1NfUFVTSEVEKTsKLSAgICAgICAg
ICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlByZXNzZWRTdGF0ZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBXRUJLSVRfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSBpZiAoVEtQX1RSQUNLID09IHBhcnQpIHsKLSAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhl
bWVDb250cm9sV2luOjpIb3Jpem9udGFsU2xpZGVyVHJhY2tUeXBlOwotICAgICAgICBXRUJLSVRf
QVNTRVJUKHN0YXRlID09IFRSU19OT1JNQUwpOwotICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNz
aWNTdGF0ZSA9PSBkZmNzTm9ybWFsKTsKLSAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29u
dHJvbFdpbjo6Tm9ybWFsU3RhdGU7Ci0gICAgfSBlbHNlIGlmIChUS1BfVFJBQ0tWRVJUID09IHBh
cnQpIHsKLSAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpWZXJ0aWNhbFNs
aWRlclRyYWNrVHlwZTsKLSAgICAgICAgV0VCS0lUX0FTU0VSVChzdGF0ZSA9PSBUUlZTX05PUk1B
TCk7Ci0gICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IGRmY3NOb3JtYWwpOwot
ICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpOb3JtYWxTdGF0ZTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgZHJh
d0NvbnRyb2woY2FudmFzLCByZWN0LCBjdHlwZSwgY3N0YXRlKTsKLX0KLQotCi12b2lkIFdlYlRl
c3RUaGVtZUVuZ2luZVdpbjo6cGFpbnRQcm9ncmVzc0JhcihXZWJLaXQ6OldlYkNhbnZhcyogY2Fu
dmFzLCBjb25zdCBXZWJLaXQ6OldlYlJlY3QmIGJhclJlY3QsIGNvbnN0IFdlYktpdDo6V2ViUmVj
dCYgdmFsdWVSZWN0LCBib29sIGRldGVybWluYXRlLCBkb3VibGUpCi17Ci0gICAgV2ViVGVzdFRo
ZW1lQ29udHJvbFdpbjo6VHlwZSBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlByb2dy
ZXNzQmFyVHlwZTsKLSAgICBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpTdGF0ZSBjc3RhdGUgPSBk
ZXRlcm1pbmF0ZSA/IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46Ok5vcm1hbFN0YXRlIDogV2ViVGVz
dFRoZW1lQ29udHJvbFdpbjo6SW5kZXRlcm1pbmF0ZVN0YXRlOwotICAgIGRyYXdQcm9ncmVzc0Jh
cihjYW52YXMsIGN0eXBlLCBjc3RhdGUsIGJhclJlY3QsIHZhbHVlUmVjdCk7Ci19Ci0KLQotV2Vi
S2l0OjpXZWJTaXplIFdlYlRlc3RUaGVtZUVuZ2luZVdpbjo6Z2V0U2l6ZShpbnQgcGFydCkKLXsK
LSAgICByZXR1cm4gV2ViS2l0OjpXZWJTaXplKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RUaGVtZUVuZ2lu
ZVdpbi5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2Vi
VGVzdFRoZW1lRW5naW5lV2luLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0YTNl
YzQyZTliNzdiZTE1MWMyMzU1MzI5YjhkMWQ0MDYwYzAzOWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvV2ViVGVzdFRoZW1lRW5naW5lV2luLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIFRoaXMgaW1wbGVtZW50cyB0aGUgV2ViVGhlbWVFbmdpbmUgQVBJIHVz
ZWQgYnkgdGhlIFdpbmRvd3MgdmVyc2lvbiBvZgotLy8gQ2hyb21pdW0gdG8gcmVuZGVyIG5hdGl2
ZSBmb3JtIGNvbnRyb2xzIGxpa2UgY2hlY2tib3hlcywgcmFkaW8gYnV0dG9ucywKLS8vIGFuZCBz
Y3JvbGwgYmFycy4KLS8vIFRoZSBub3JtYWwgaW1wbGVtZW50YXRpb24gKG5hdGl2ZV90aGVtZSkg
cmVuZGVycyB0aGUgY29udHJvbHMgdXNpbmcgZWl0aGVyCi0vLyB0aGUgVVhUaGVtZSB0aGVtaW5n
IGVuZ2luZSBwcmVzZW50IGluIFhQLCBWaXN0YSwgYW5kIFdpbiA3LCBvciB0aGUgImNsYXNzaWMi
Ci0vLyB0aGVtZSB1c2VkIGlmIHRoYXQgdGhlbWUgaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2t0b3Ag
c2V0dGluZ3MuCi0vLyBVbmZvcnR1bmF0ZWx5LCBib3RoIG9mIHRoZXNlIHRoZW1lcyByZW5kZXIg
Y29udHJvbHMgZGlmZmVyZW50bHkgb24gdGhlCi0vLyBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgV2lu
ZG93cy4KLS8vCi0vLyBJbiBvcmRlciB0byBlbnN1cmUgbWF4aW11bSBjb25zaXN0ZW5jeSBvZiBi
YXNlbGluZXMgYWNyb3NzIHRoZSBkaWZmZXJlbnQKLS8vIFdpbmRvd3MgdmVyc2lvbnMsIHdlIHBy
b3ZpZGUgYSBzaW1wbGUgaW1wbGVtZW50YXRpb24gZm9yIERSVCBoZXJlCi0vLyBpbnN0ZWFkLiBU
aGVzZSBjb250cm9scyBhcmUgYWN0dWFsbHkgcGxhdGZvcm0taW5kZXBlbmRlbnQgKHRoZXkncmUg
cmVuZGVyZWQKLS8vIHVzaW5nIFNraWEpIGFuZCBjb3VsZCBiZSB1c2VkIG9uIExpbnV4IGFuZCB0
aGUgTWFjIGFzIHdlbGwsIHNob3VsZCB3ZQotLy8gY2hvb3NlIHRvIGRvIHNvIGF0IHNvbWUgcG9p
bnQuCi0vLwotCi0jaWZuZGVmIFdlYlRlc3RUaGVtZUVuZ2luZVdpbl9oCi0jZGVmaW5lIFdlYlRl
c3RUaGVtZUVuZ2luZVdpbl9oCi0KLSNpbmNsdWRlIDxwdWJsaWMvd2luL1dlYlRoZW1lRW5naW5l
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotY2xhc3MgV2ViVGVzdFRoZW1lRW5n
aW5lV2luIDogcHVibGljIFdlYktpdDo6V2ViVGhlbWVFbmdpbmUgewotcHVibGljOgotICAgIFdl
YlRlc3RUaGVtZUVuZ2luZVdpbigpIHsgfQotCi0gICAgLy8gV2ViVGhlbWVFbmdpbmUgbWV0aG9k
czoKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oCi0gICAgICAgIFdlYktpdDo6V2ViQ2Fu
dmFzKiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICAgICAgY29u
c3QgV2ViS2l0OjpXZWJSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNZW51TGlzdCgK
LSAgICAgICAgV2ViS2l0OjpXZWJDYW52YXMqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xh
c3NpY1N0YXRlLAotICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlJlY3QmKTsKLQotICAgIHZpcnR1
YWwgdm9pZCBwYWludFNjcm9sbGJhckFycm93KAotICAgICAgICBXZWJLaXQ6OldlYkNhbnZhcyos
IGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJS
ZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxiYXJUaHVtYigKLSAgICAgICAg
V2ViS2l0OjpXZWJDYW52YXMqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRl
LAotICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBw
YWludFNjcm9sbGJhclRyYWNrKAotICAgICAgICBXZWJLaXQ6OldlYkNhbnZhcyosIGludCBwYXJ0
LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCi0gICAgICAgIGNvbnN0IFdlYktpdDo6V2Vi
UmVjdCYsIGNvbnN0IFdlYktpdDo6V2ViUmVjdCYgYWxpZ25SZWN0KTsKLQotICAgIHZpcnR1YWwg
dm9pZCBwYWludFNwaW5CdXR0b24oCi0gICAgICAgIFdlYktpdDo6V2ViQ2FudmFzKiwgaW50IHBh
cnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICAgICAgY29uc3QgV2ViS2l0OjpX
ZWJSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0RmllbGQoCi0gICAgICAgIFdl
YktpdDo6V2ViQ2FudmFzKiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwK
LSAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJSZWN0JiwgV2ViS2l0OjpXZWJDb2xvciwgYm9vbCBm
aWxsQ29udGVudEFyZWEsCi0gICAgICAgIGJvb2wgZHJhd0VkZ2VzKTsKLQotICAgIHZpcnR1YWwg
dm9pZCBwYWludFRyYWNrYmFyKAotICAgICAgICBXZWJLaXQ6OldlYkNhbnZhcyosIGludCBwYXJ0
LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCi0gICAgICAgIGNvbnN0IFdlYktpdDo6V2Vi
UmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoCi0gICAgICAgIFdl
YktpdDo6V2ViQ2FudmFzKiwgY29uc3QgV2ViS2l0OjpXZWJSZWN0JiBiYXJSZWN0LAotICAgICAg
ICBjb25zdCBXZWJLaXQ6OldlYlJlY3QmIHZhbHVlUmVjdCwKLSAgICAgICAgYm9vbCBkZXRlcm1p
bmF0ZSwgZG91YmxlIHRpbWUpOwotCi0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlNpemUgZ2V0U2l6
ZShpbnQgcGFydCk7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBXZWJUZXN0VGhlbWVFbmdpbmVXaW5f
aApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9z
cmMvV2ViVXNlck1lZGlhQ2xpZW50TW9jay5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9XZWJVc2VyTWVkaWFDbGllbnRNb2NrLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMTgxM2UxOGE1Y2VhMGFkYWQ5ZGE2NWVlMDZhNGU5N2EzM2Qz
ZmFkNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJVc2VyTWVkaWFDbGll
bnRNb2NrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlv
bi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaWYgRU5BQkxFX1dFQlJUQwotI2luY2x1ZGUgIldlYlVzZXJNZWRpYUNsaWVudE1v
Y2suaCIKLQotI2luY2x1ZGUgIk1vY2tDb25zdHJhaW50cy5oIgotI2luY2x1ZGUgIldlYkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiV2ViTWVkaWFTdHJlYW1SZWdpc3RyeS5oIgotI2luY2x1ZGUgIldl
YlRlc3REZWxlZ2F0ZS5oIgotI2luY2x1ZGUgIldlYlVzZXJNZWRpYVJlcXVlc3QuaCIKLSNpbmNs
dWRlIDxwdWJsaWMvV2ViTWVkaWFDb25zdHJhaW50cy5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJN
ZWRpYVN0cmVhbS5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJNZWRpYVN0cmVhbVNvdXJjZS5oPgot
I2luY2x1ZGUgPHB1YmxpYy9XZWJNZWRpYVN0cmVhbVRyYWNrLmg+Ci0jaW5jbHVkZSA8cHVibGlj
L1dlYlZlY3Rvci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgV2Vi
VGVzdFJ1bm5lciB7Ci0KLWNsYXNzIFVzZXJNZWRpYVJlcXVlc3RUYXNrIDogcHVibGljIFdlYk1l
dGhvZFRhc2s8V2ViVXNlck1lZGlhQ2xpZW50TW9jaz4gewotcHVibGljOgotICAgIFVzZXJNZWRp
YVJlcXVlc3RUYXNrKFdlYlVzZXJNZWRpYUNsaWVudE1vY2sqIG9iamVjdCwgY29uc3QgV2ViVXNl
ck1lZGlhUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViTWVkaWFTdHJlYW0gcmVzdWx0KQotICAg
ICAgICA6IFdlYk1ldGhvZFRhc2s8V2ViVXNlck1lZGlhQ2xpZW50TW9jaz4ob2JqZWN0KQotICAg
ICAgICAsIG1fcmVxdWVzdChyZXF1ZXN0KQotICAgICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSBPVkVSUklERQotICAg
IHsKLSAgICAgICAgaWYgKG1fcmVzdWx0LmlzTnVsbCgpKQotICAgICAgICAgICAgbV9yZXF1ZXN0
LnJlcXVlc3RGYWlsZWQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9yZXF1ZXN0LnJl
cXVlc3RTdWNjZWVkZWQobV9yZXN1bHQpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBXZWJVc2Vy
TWVkaWFSZXF1ZXN0IG1fcmVxdWVzdDsKLSAgICBXZWJNZWRpYVN0cmVhbSBtX3Jlc3VsdDsKLX07
Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLWNsYXNzIE1vY2tFeHRyYURh
dGEgOiBwdWJsaWMgV2ViTWVkaWFTdHJlYW06OkV4dHJhRGF0YSB7Ci1wdWJsaWM6Ci0gICAgaW50
IGZvbzsKLX07Ci0KLVdlYlVzZXJNZWRpYUNsaWVudE1vY2s6OldlYlVzZXJNZWRpYUNsaWVudE1v
Y2soV2ViVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSkKLSAgICA6IG1fZGVsZWdhdGUoZGVsZWdhdGUp
Ci17Ci19Ci0KLXZvaWQgV2ViVXNlck1lZGlhQ2xpZW50TW9jazo6cmVxdWVzdFVzZXJNZWRpYShj
b25zdCBXZWJVc2VyTWVkaWFSZXF1ZXN0JiBzdHJlYW1SZXF1ZXN0LCBjb25zdCBXZWJWZWN0b3I8
V2ViTWVkaWFTdHJlYW1Tb3VyY2U+JiBhdWRpb1NvdXJjZXNWZWN0b3IsIGNvbnN0IFdlYlZlY3Rv
cjxXZWJNZWRpYVN0cmVhbVNvdXJjZT4mIHZpZGVvU291cmNlc1ZlY3RvcikKLXsKLSAgICBXRUJL
SVRfQVNTRVJUKCFzdHJlYW1SZXF1ZXN0LmlzTnVsbCgpKTsKLSAgICBXZWJVc2VyTWVkaWFSZXF1
ZXN0IHJlcXVlc3QgPSBzdHJlYW1SZXF1ZXN0OwotCi0gICAgaWYgKHJlcXVlc3Qub3duZXJEb2N1
bWVudCgpLmlzTnVsbCgpIHx8ICFyZXF1ZXN0Lm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpKSB7Ci0g
ICAgICAgIG1fZGVsZWdhdGUtPnBvc3RUYXNrKG5ldyBVc2VyTWVkaWFSZXF1ZXN0VGFzayh0aGlz
LCByZXF1ZXN0LCBXZWJNZWRpYVN0cmVhbSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBXZWJNZWRpYUNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzID0gcmVxdWVzdC5hdWRpb0NvbnN0
cmFpbnRzKCk7Ci0gICAgaWYgKCFjb25zdHJhaW50cy5pc051bGwoKSAmJiAhTW9ja0NvbnN0cmFp
bnRzOjp2ZXJpZnlDb25zdHJhaW50cyhjb25zdHJhaW50cykpIHsKLSAgICAgICAgbV9kZWxlZ2F0
ZS0+cG9zdFRhc2sobmV3IFVzZXJNZWRpYVJlcXVlc3RUYXNrKHRoaXMsIHJlcXVlc3QsIFdlYk1l
ZGlhU3RyZWFtKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb25zdHJhaW50cyA9
IHJlcXVlc3QudmlkZW9Db25zdHJhaW50cygpOwotICAgIGlmICghY29uc3RyYWludHMuaXNOdWxs
KCkgJiYgIU1vY2tDb25zdHJhaW50czo6dmVyaWZ5Q29uc3RyYWludHMoY29uc3RyYWludHMpKSB7
Ci0gICAgICAgIG1fZGVsZWdhdGUtPnBvc3RUYXNrKG5ldyBVc2VyTWVkaWFSZXF1ZXN0VGFzayh0
aGlzLCByZXF1ZXN0LCBXZWJNZWRpYVN0cmVhbSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBjb25zdCBzaXplX3QgemVybyA9IDA7Ci0gICAgY29uc3Qgc2l6ZV90IG9uZSA9IDE7
Ci0gICAgV2ViVmVjdG9yPFdlYk1lZGlhU3RyZWFtVHJhY2s+IGF1ZGlvVHJhY2tzKHJlcXVlc3Qu
YXVkaW8oKSA/IG9uZSA6IHplcm8pOwotICAgIFdlYlZlY3RvcjxXZWJNZWRpYVN0cmVhbVRyYWNr
PiB2aWRlb1RyYWNrcyhyZXF1ZXN0LnZpZGVvKCkgPyBvbmUgOiB6ZXJvKTsKLQotICAgIGlmIChy
ZXF1ZXN0LmF1ZGlvKCkpIHsKLSAgICAgICAgV2ViTWVkaWFTdHJlYW1Tb3VyY2Ugc291cmNlOwot
ICAgICAgICBzb3VyY2UuaW5pdGlhbGl6ZSgiTW9ja0F1ZGlvRGV2aWNlIzEiLCBXZWJNZWRpYVN0
cmVhbVNvdXJjZTo6VHlwZUF1ZGlvLCAiTW9jayBhdWRpbyBkZXZpY2UiKTsKLSAgICAgICAgYXVk
aW9UcmFja3NbMF0uaW5pdGlhbGl6ZShzb3VyY2UpOwotICAgIH0KLQotICAgIGlmIChyZXF1ZXN0
LnZpZGVvKCkpIHsKLSAgICAgICAgV2ViTWVkaWFTdHJlYW1Tb3VyY2Ugc291cmNlOwotICAgICAg
ICBzb3VyY2UuaW5pdGlhbGl6ZSgiTW9ja1ZpZGVvRGV2aWNlIzEiLCBXZWJNZWRpYVN0cmVhbVNv
dXJjZTo6VHlwZVZpZGVvLCAiTW9jayB2aWRlbyBkZXZpY2UiKTsKLSAgICAgICAgdmlkZW9UcmFj
a3NbMF0uaW5pdGlhbGl6ZShzb3VyY2UpOwotICAgIH0KLQotICAgIFdlYk1lZGlhU3RyZWFtIHN0
cmVhbTsKLSAgICBzdHJlYW0uaW5pdGlhbGl6ZShhdWRpb1RyYWNrcywgdmlkZW9UcmFja3MpOwot
Ci0gICAgc3RyZWFtLnNldEV4dHJhRGF0YShuZXcgTW9ja0V4dHJhRGF0YSgpKTsKLQotICAgIG1f
ZGVsZWdhdGUtPnBvc3RUYXNrKG5ldyBVc2VyTWVkaWFSZXF1ZXN0VGFzayh0aGlzLCByZXF1ZXN0
LCBzdHJlYW0pKTsKLX0KLQotdm9pZCBXZWJVc2VyTWVkaWFDbGllbnRNb2NrOjpjYW5jZWxVc2Vy
TWVkaWFSZXF1ZXN0KGNvbnN0IFdlYlVzZXJNZWRpYVJlcXVlc3QmKQotewotfQotCi19Ci0KLSNl
bmRpZiAvLyBFTkFCTEVfV0VCUlRDCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJVc2VyTWVkaWFDbGllbnRNb2NrLmggYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJVc2VyTWVkaWFDbGllbnRN
b2NrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjOTkyYTA2OTlmZmMyZmVjYWQ0
OWE2OTk5MjQ5Y2FhYWE2MmQ0MmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
V2ViVXNlck1lZGlhQ2xpZW50TW9jay5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgV2ViVXNlck1lZGlhQ2xpZW50TW9ja19oCi0jZGVmaW5lIFdlYlVzZXJNZWRpYUNsaWVu
dE1vY2tfaAotCi0jaW5jbHVkZSAiVGVzdENvbW1vbi5oIgotI2luY2x1ZGUgIldlYlRhc2suaCIK
LSNpbmNsdWRlICJXZWJVc2VyTWVkaWFDbGllbnQuaCIKLSNpbmNsdWRlIDxwdWJsaWMvV2ViQ29t
bW9uLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5oPgotI2luY2x1ZGUgPHB1YmxpYy9X
ZWJVUkwuaD4KLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1jbGFzcyBXZWJUZXN0RGVs
ZWdhdGU7Ci0KLWNsYXNzIFdlYlVzZXJNZWRpYUNsaWVudE1vY2sgOiBwdWJsaWMgV2ViS2l0OjpX
ZWJVc2VyTWVkaWFDbGllbnQgewotcHVibGljOgotICAgIGV4cGxpY2l0IFdlYlVzZXJNZWRpYUNs
aWVudE1vY2soV2ViVGVzdERlbGVnYXRlKik7Ci0gICAgfldlYlVzZXJNZWRpYUNsaWVudE1vY2so
KSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0VXNlck1lZGlhKGNvbnN0IFdlYktpdDo6
V2ViVXNlck1lZGlhUmVxdWVzdCYsIGNvbnN0IFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2Vi
TWVkaWFTdHJlYW1Tb3VyY2U+JiwgY29uc3QgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJN
ZWRpYVN0cmVhbVNvdXJjZT4mKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsVXNl
ck1lZGlhUmVxdWVzdChjb25zdCBXZWJLaXQ6OldlYlVzZXJNZWRpYVJlcXVlc3QmKTsKLQotICAg
IC8vIFRhc2sgcmVsYXRlZCBtZXRob2RzCi0gICAgV2ViVGFza0xpc3QqIHRhc2tMaXN0KCkgeyBy
ZXR1cm4gJm1fdGFza0xpc3Q7IH0KLQotcHJpdmF0ZToKLSAgICBXZWJUYXNrTGlzdCBtX3Rhc2tM
aXN0OwotICAgIFdlYlRlc3REZWxlZ2F0ZSogbV9kZWxlZ2F0ZTsKLX07Ci0KLX0KLQotI2VuZGlm
IC8vIFdlYlVzZXJNZWRpYUNsaWVudE1vY2tfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvY29uZmlnLmggYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9jb25maWcuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYTJmYzZmNDFjMjY2M2U4ZjE1ZWNiYWVjOWE0N2VmZDc4ZmE5MzQ5Ni4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9jb25maWcuaAorKysgL2Rldi9udWxsCkBA
IC0xLDM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIGNvbmZpZ19oCi0jZGVmaW5lIGNvbmZpZ19oCi0KLSNkZWZp
bmUgVVNFKGZlYXR1cmUpIChkZWZpbmVkIFdURl9VU0VfIyNmZWF0dXJlICYmIFdURl9VU0VfIyNm
ZWF0dXJlKQotCi0jZW5kaWYgLy8gY29uZmlnX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0U2hlbGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDJlYzFk
Y2FmYzBlN2Y2NGVmODBlYjAzMTA5MjBmMTUwYTlmYjhkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RTaGVsbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NjcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0U2hlbGwuaCIKLQotI2luY2x1ZGUgIkRSVERldlRvb2xzQWdl
bnQuaCIKLSNpbmNsdWRlICJEUlREZXZUb29sc0NsaWVudC5oIgotI2luY2x1ZGUgIk1vY2tQbGF0
Zm9ybS5oIgotI2luY2x1ZGUgIk1vY2tXZWJQcmVyZW5kZXJpbmdTdXBwb3J0LmgiCi0jaW5jbHVk
ZSAiV2ViQXJyYXlCdWZmZXJWaWV3LmgiCi0jaW5jbHVkZSAiV2ViRGF0YVNvdXJjZS5oIgotI2lu
Y2x1ZGUgIldlYkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiV2ViRWxlbWVudC5oIgotI2luY2x1ZGUg
IldlYkZyYW1lLmgiCi0jaW5jbHVkZSAiV2ViSGlzdG9yeUl0ZW0uaCIKLSNpbmNsdWRlICJXZWJJ
REJGYWN0b3J5LmgiCi0jaW5jbHVkZSAiV2ViVGVzdGluZ1N1cHBvcnQuaCIKLSNpbmNsdWRlICJX
ZWJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIldlYlRlc3RQcm94eS5oIgotI2luY2x1ZGUgIldlYlRl
c3RSdW5uZXIuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0jaW5jbHVkZSAiV2ViVmlld0hvc3Qu
aCIKLSNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKLSNpbmNsdWRlICJ3ZWJr
aXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgotI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dl
YmtpdF9zdXBwb3J0X2dmeC5oIgotI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgotI2luY2x1
ZGUgPHB1YmxpYy9XZWJDb21wb3NpdG9yU3VwcG9ydC5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJQ
b2ludC5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJTaXplLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dl
YlN0cmluZy5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJUaHJlYWQuaD4KLSNpbmNsdWRlIDxwdWJs
aWMvV2ViVVJMUmVxdWVzdC5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkxSZXNwb25zZS5oPgot
I2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjY3R5cGU+Ci0jaW5jbHVkZSA8dmVjdG9y
PgotI2luY2x1ZGUgPHd0Zi9NRDUuaD4KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLQot
Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotdXNpbmcgbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXI7
Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi0vLyBDb250ZW50IGFyZWEgc2l6ZSBmb3IgbmV3bHkg
Y3JlYXRlZCB3aW5kb3dzLgotc3RhdGljIGNvbnN0IGludCB0ZXN0V2luZG93V2lkdGggPSA4MDA7
Ci1zdGF0aWMgY29uc3QgaW50IHRlc3RXaW5kb3dIZWlnaHQgPSA2MDA7Ci0KLS8vIFRoZSBXM0Mg
U1ZHIGxheW91dCB0ZXN0cyB1c2UgYSBkaWZmZXJlbnQgc2l6ZSB0aGFuIHRoZSBvdGhlciBsYXlv
dXQgdGVzdHMuCi1zdGF0aWMgY29uc3QgaW50IFNWR1Rlc3RXaW5kb3dXaWR0aCA9IDQ4MDsKLXN0
YXRpYyBjb25zdCBpbnQgU1ZHVGVzdFdpbmRvd0hlaWdodCA9IDM2MDsKLQotc3RhdGljIGNvbnN0
IGNoYXIgbGF5b3V0VGVzdHNQYXR0ZXJuW10gPSAiL0xheW91dFRlc3RzLyI7Ci1zdGF0aWMgY29u
c3Qgc3RyaW5nOjpzaXplX3R5cGUgbGF5b3V0VGVzdHNQYXR0ZXJuU2l6ZSA9IHNpemVvZihsYXlv
dXRUZXN0c1BhdHRlcm4pIC0gMTsKLXN0YXRpYyBjb25zdCBjaGFyIGZpbGVVcmxQYXR0ZXJuW10g
PSAiZmlsZTovIjsKLXN0YXRpYyBjb25zdCBjaGFyIGZpbGVUZXN0UHJlZml4W10gPSAiKGZpbGUg
dGVzdCk6IjsKLXN0YXRpYyBjb25zdCBjaGFyIGRhdGFVcmxQYXR0ZXJuW10gPSAiZGF0YToiOwot
c3RhdGljIGNvbnN0IHN0cmluZzo6c2l6ZV90eXBlIGRhdGFVcmxQYXR0ZXJuU2l6ZSA9IHNpemVv
ZihkYXRhVXJsUGF0dGVybikgLSAxOwotCi0vLyBGSVhNRTogTW92ZSB0aGlzIHRvIGEgY29tbW9u
IHBsYWNlIHNvIHRoYXQgaXQgY2FuIGJlIHNoYXJlZCB3aXRoCi0vLyBXZWJDb3JlOjpUcmFuc3Bh
cmVuY3lXaW46Om1ha2VMYXllck9wYXF1ZSgpLgotc3RhdGljIHZvaWQgbWFrZUNhbnZhc09wYXF1
ZShTa0NhbnZhcyogY2FudmFzKQotewotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBjYW52
YXMtPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAodHJ1ZSk7Ci0gICAgQVNTRVJUKGJpdG1h
cC5jb25maWcoKSA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOwotCi0gICAgU2tBdXRv
TG9ja1BpeGVscyBsb2NrKGJpdG1hcCk7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBiaXRtYXAu
aGVpZ2h0KCk7IHkrKykgewotICAgICAgICB1aW50MzJfdCogcm93ID0gYml0bWFwLmdldEFkZHIz
MigwLCB5KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBiaXRtYXAud2lkdGgoKTsgeCsr
KQotICAgICAgICAgICAgcm93W3hdIHw9IDB4RkYwMDAwMDA7IC8vIFNldCBhbHBoYSBiaXRzIHRv
IDEuCi0gICAgfQotfQotCi1UZXN0U2hlbGw6OlRlc3RTaGVsbCgpCi0gICAgOiBtX3Rlc3RJc1Bl
bmRpbmcoZmFsc2UpCi0gICAgLCBtX3Rlc3RJc1ByZXBhcmluZyhmYWxzZSkKLSAgICAsIG1fZm9j
dXNlZFdpZGdldCgwKQotICAgICwgbV9kZXZUb29scygwKQotICAgICwgbV9kdW1wUGl4ZWxzRm9y
Q3VycmVudFRlc3QoZmFsc2UpCi0gICAgLCBtX2FsbG93RXh0ZXJuYWxQYWdlcyhmYWxzZSkKLSAg
ICAsIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVvRW5hYmxlZChmYWxzZSkKLSAgICAs
IG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGZhbHNlKQot
ICAgICwgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkKGZh
bHNlKQotICAgICwgbV9zb2Z0d2FyZUNvbXBvc2l0aW5nRW5hYmxlZChmYWxzZSkKLSAgICAsIG1f
dGhyZWFkZWRDb21wb3NpdGluZ0VuYWJsZWQoZmFsc2UpCi0gICAgLCBtX2ZvcmNlQ29tcG9zaXRp
bmdNb2RlKGZhbHNlKQotICAgICwgbV90aHJlYWRlZEhUTUxQYXJzZXIodHJ1ZSkKLSAgICAsIG1f
YWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoZmFsc2UpCi0gICAgLCBtX3BlclRpbGVQYWludGlu
Z0VuYWJsZWQoZmFsc2UpCi0gICAgLCBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZmFs
c2UpCi0gICAgLCBtX3N0cmVzc09wdChmYWxzZSkKLSAgICAsIG1fc3RyZXNzRGVvcHQoZmFsc2Up
Ci0gICAgLCBtX2R1bXBXaGVuRmluaXNoZWQodHJ1ZSkKLSAgICAsIG1faXNEaXNwbGF5aW5nTW9k
YWxEaWFsb2coZmFsc2UpCi17Ci0gICAgLy8gMzAgc2Vjb25kIGlzIHRoZSBzYW1lIGFzIHRoZSB2
YWx1ZSBpbiBNYWMgRFJULgotICAgIC8vIElmIHdlIHVzZSBhIHZhbHVlIHNtYWxsZXIgdGhhbiB0
aGUgdGltZW91dCB2YWx1ZSBvZgotICAgIC8vIChuZXctKXJ1bi13ZWJraXQtdGVzdHMsIChuZXct
KXJ1bi13ZWJraXQtdGVzdHMgbWlzdW5kZXJzdGFuZHMgdGhhdCBhCi0gICAgLy8gdGltZWQtb3V0
IERSVCBwcm9jZXNzIHdhcyBjcmFzaGVkLgotICAgIG1fdGltZW91dCA9IDMwICogMTAwMDsKLX0K
LQotdm9pZCBUZXN0U2hlbGw6OmluaXRpYWxpemUoTW9ja1BsYXRmb3JtKiBwbGF0Zm9ybVN1cHBv
cnQpCi17Ci0gICAgbV90ZXN0SW50ZXJmYWNlcyA9IGFkb3B0UHRyKG5ldyBXZWJUZXN0SW50ZXJm
YWNlcygpKTsKLSAgICBwbGF0Zm9ybVN1cHBvcnQtPnNldEludGVyZmFjZXMobV90ZXN0SW50ZXJm
YWNlcy5nZXQoKSk7Ci0gICAgbV9kZXZUb29sc1Rlc3RJbnRlcmZhY2VzID0gYWRvcHRQdHIobmV3
IFdlYlRlc3RJbnRlcmZhY2VzKCkpOwotI2lmIEVOQUJMRShMSU5LX1BSRVJFTkRFUikKLSAgICBt
X3ByZXJlbmRlcmluZ1N1cHBvcnQgPSBhZG9wdFB0cihuZXcgTW9ja1dlYlByZXJlbmRlcmluZ1N1
cHBvcnQoKSk7Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChVU0VfREVGQVVMVF9SRU5ERVJfVEhFTUUp
ICYmIChPUyhXSU5ET1dTKSB8fCBPUyhNQUNfT1NfWCkpCi0gICAgLy8gU2V0IHRoZW1lIGVuZ2lu
ZS4KLSAgICB3ZWJraXRfc3VwcG9ydDo6U2V0VGhlbWVFbmdpbmUobV90ZXN0SW50ZXJmYWNlcy0+
dGhlbWVFbmdpbmUoKSk7Ci0jZW5kaWYKLQotCi0gICAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5n
KCk7Ci0KLSAgICBpZiAobV90aHJlYWRlZENvbXBvc2l0aW5nRW5hYmxlZCkKLSAgICAgICAgbV93
ZWJDb21wb3NpdG9yVGhyZWFkID0gYWRvcHRQdHIoV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgp
LT5jcmVhdGVUaHJlYWQoIkNvbXBvc2l0b3IiKSk7Ci0gICAgd2Via2l0X3N1cHBvcnQ6OlNldFRo
cmVhZGVkQ29tcG9zaXRvckVuYWJsZWQobV90aHJlYWRlZENvbXBvc2l0aW5nRW5hYmxlZCk7Ci0K
LSAgICBjcmVhdGVNYWluV2luZG93KCk7Ci19Ci0KLXZvaWQgVGVzdFNoZWxsOjpjcmVhdGVNYWlu
V2luZG93KCkKLXsKLSAgICBtX2RydERldlRvb2xzQWdlbnQgPSBhZG9wdFB0cihuZXcgRFJURGV2
VG9vbHNBZ2VudCk7Ci0gICAgbV93ZWJWaWV3SG9zdCA9IGFkb3B0UHRyKGNyZWF0ZU5ld1dpbmRv
dyhXZWJVUkwoKSwgbV9kcnREZXZUb29sc0FnZW50LmdldCgpLCBtX3Rlc3RJbnRlcmZhY2VzLmdl
dCgpKSk7Ci0gICAgbV93ZWJWaWV3ID0gbV93ZWJWaWV3SG9zdC0+d2ViVmlldygpOwotICAgIG1f
dGVzdEludGVyZmFjZXMtPnNldERlbGVnYXRlKG1fd2ViVmlld0hvc3QuZ2V0KCkpOwotICAgIG1f
dGVzdEludGVyZmFjZXMtPnNldFdlYlZpZXcobV93ZWJWaWV3LCBtX3dlYlZpZXdIb3N0LT5wcm94
eSgpKTsKLSAgICBtX2RydERldlRvb2xzQWdlbnQtPnNldFdlYlZpZXcobV93ZWJWaWV3KTsKLX0K
LQotVGVzdFNoZWxsOjp+VGVzdFNoZWxsKCkKLXsKLSAgICBpZiAobV93ZWJWaWV3SG9zdCkKLSAg
ICAgICAgbV93ZWJWaWV3SG9zdC0+c2h1dGRvd24oKTsKLSAgICBtX3Rlc3RJbnRlcmZhY2VzLT5z
ZXREZWxlZ2F0ZSgwKTsKLSAgICBtX3Rlc3RJbnRlcmZhY2VzLT5zZXRXZWJWaWV3KDAsIDApOwot
ICAgIG1fZGV2VG9vbHNUZXN0SW50ZXJmYWNlcy0+c2V0RGVsZWdhdGUoMCk7Ci0gICAgbV9kZXZU
b29sc1Rlc3RJbnRlcmZhY2VzLT5zZXRXZWJWaWV3KDAsIDApOwotICAgIG1fZHJ0RGV2VG9vbHNB
Z2VudC0+c2V0V2ViVmlldygwKTsKLX0KLQotdm9pZCBUZXN0U2hlbGw6OmNyZWF0ZURSVERldlRv
b2xzQ2xpZW50KERSVERldlRvb2xzQWdlbnQqIGFnZW50KQotewotICAgIG1fZHJ0RGV2VG9vbHND
bGllbnQgPSBhZG9wdFB0cihuZXcgRFJURGV2VG9vbHNDbGllbnQoYWdlbnQsIG1fZGV2VG9vbHMt
PndlYlZpZXcoKSkpOwotfQotCi12b2lkIFRlc3RTaGVsbDo6c2hvd0RldlRvb2xzKCkKLXsKLSAg
ICBpZiAoIW1fZGV2VG9vbHMpIHsKLSAgICAgICAgV2ViVVJMIHVybCA9IHdlYmtpdF9zdXBwb3J0
OjpHZXREZXZUb29sc1BhdGhBc1VSTCgpOwotICAgICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgbV9kZXZUb29scyA9IGNyZWF0ZU5ld1dpbmRvdyh1cmwsIDAsIG1fZGV2VG9v
bHNUZXN0SW50ZXJmYWNlcy5nZXQoKSk7Ci0gICAgICAgIG1fZGV2VG9vbHMtPndlYlZpZXcoKS0+
c2V0dGluZ3MoKS0+c2V0TWVtb3J5SW5mb0VuYWJsZWQodHJ1ZSk7Ci0gICAgICAgIG1fZGV2VG9v
bHMtPnByb3h5KCktPnNldExvZ0NvbnNvbGVPdXRwdXQoZmFsc2UpOwotICAgICAgICBtX2RldlRv
b2xzVGVzdEludGVyZmFjZXMtPnNldERlbGVnYXRlKG1fZGV2VG9vbHMpOwotICAgICAgICBtX2Rl
dlRvb2xzVGVzdEludGVyZmFjZXMtPnNldFdlYlZpZXcobV9kZXZUb29scy0+d2ViVmlldygpLCBt
X2RldlRvb2xzLT5wcm94eSgpKTsKLSAgICAgICAgQVNTRVJUKG1fZGV2VG9vbHMpOwotICAgICAg
ICBjcmVhdGVEUlREZXZUb29sc0NsaWVudChtX2RydERldlRvb2xzQWdlbnQuZ2V0KCkpOwotICAg
IH0KLSAgICBtX2RldlRvb2xzLT5zaG93KFdlYktpdDo6V2ViTmF2aWdhdGlvblBvbGljeU5ld1dp
bmRvdyk7Ci19Ci0KLXZvaWQgVGVzdFNoZWxsOjpjbG9zZURldlRvb2xzKCkKLXsKLSAgICBpZiAo
bV9kZXZUb29scykgewotICAgICAgICBtX2RldlRvb2xzLT53ZWJWaWV3KCktPnNldHRpbmdzKCkt
PnNldE1lbW9yeUluZm9FbmFibGVkKGZhbHNlKTsKLSAgICAgICAgbV9kcnREZXZUb29sc0FnZW50
LT5yZXNldCgpOwotICAgICAgICBtX2RydERldlRvb2xzQ2xpZW50LmNsZWFyKCk7Ci0gICAgICAg
IG1fZGV2VG9vbHNUZXN0SW50ZXJmYWNlcy0+c2V0RGVsZWdhdGUoMCk7Ci0gICAgICAgIG1fZGV2
VG9vbHNUZXN0SW50ZXJmYWNlcy0+c2V0V2ViVmlldygwLCAwKTsKLSAgICAgICAgY2xvc2VXaW5k
b3cobV9kZXZUb29scyk7Ci0gICAgICAgIG1fZGV2VG9vbHMgPSAwOwotICAgIH0KLX0KLQotdm9p
ZCBUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3MoV2ViVmlldyYgd2ViVmlldykKLXsKLSAgICBt
X3ByZWZzLnJlc2V0KCk7Ci0gICAgbV9wcmVmcy5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxl
ZCA9IHRydWU7Ci0gICAgbV9wcmVmcy5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW9FbmFi
bGVkID0gbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW9FbmFibGVkOwotICAgIG1fcHJl
ZnMuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkID0gbV9hY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQ7Ci0gICAgbV9wcmVmcy5h
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkID0gbV9hY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkOwotICAgIG1fcHJlZnMuZm9y
Y2VDb21wb3NpdGluZ01vZGUgPSBtX2ZvcmNlQ29tcG9zaXRpbmdNb2RlOwotICAgIG1fcHJlZnMu
YWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQgPSBtX2FjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVk
OwotICAgIG1fcHJlZnMucGVyVGlsZVBhaW50aW5nRW5hYmxlZCA9IG1fcGVyVGlsZVBhaW50aW5n
RW5hYmxlZDsKLSAgICBtX3ByZWZzLmRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBtX2Rl
ZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7Ci0gICAgbV9wcmVmcy50aHJlYWRlZEhUTUxQYXJz
ZXIgPSBtX3RocmVhZGVkSFRNTFBhcnNlcjsKLSAgICBtX3ByZWZzLmFwcGx5VG8oJndlYlZpZXcp
OwotfQotCi12b2lkIFRlc3RTaGVsbDo6cnVuRmlsZVRlc3QoY29uc3QgVGVzdFBhcmFtcyYgcGFy
YW1zLCBib29sIHNob3VsZER1bXBQaXhlbHMpCi17Ci0gICAgQVNTRVJUKHBhcmFtcy50ZXN0VXJs
LmlzVmFsaWQoKSk7Ci0gICAgbV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSBzaG91bGREdW1w
UGl4ZWxzOwotICAgIG1fdGVzdElzUHJlcGFyaW5nID0gdHJ1ZTsKLSAgICBtX3Rlc3RJbnRlcmZh
Y2VzLT5zZXRUZXN0SXNSdW5uaW5nKHRydWUpOwotICAgIG1fcGFyYW1zID0gcGFyYW1zOwotICAg
IHN0cmluZyB0ZXN0VXJsID0gbV9wYXJhbXMudGVzdFVybC5zcGVjKCk7Ci0gICAgbV90ZXN0SW50
ZXJmYWNlcy0+Y29uZmlndXJlRm9yVGVzdFdpdGhVUkwobV9wYXJhbXMudGVzdFVybCwgc2hvdWxk
RHVtcFBpeGVscyk7Ci0KLSAgICBpZiAodGVzdFVybC5maW5kKCJjb21wb3NpdGluZy8iKSAhPSBz
dHJpbmc6Om5wb3MgfHwgdGVzdFVybC5maW5kKCJjb21wb3NpdGluZ1xcIikgIT0gc3RyaW5nOjpu
cG9zKSB7Ci0gICAgICAgIGlmICghbV9zb2Z0d2FyZUNvbXBvc2l0aW5nRW5hYmxlZCkKLSAgICAg
ICAgICAgIG1fcHJlZnMuYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQgPSB0cnVlOwotICAgICAg
ICBtX3ByZWZzLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWRlb0VuYWJsZWQgPSB0cnVlOwot
ICAgICAgICBtX3ByZWZzLm1vY2tTY3JvbGxiYXJzRW5hYmxlZCA9IHRydWU7Ci0gICAgICAgIG1f
cHJlZnMuYXBwbHlUbyhtX3dlYlZpZXcpOwotICAgIH0KLQotICAgIGlmIChtX2R1bXBXaGVuRmlu
aXNoZWQpCi0gICAgICAgIG1fcHJpbnRlci5oYW5kbGVUZXN0SGVhZGVyKHRlc3RVcmwuY19zdHIo
KSk7Ci0gICAgbG9hZFVSTChtX3BhcmFtcy50ZXN0VXJsKTsKLQotICAgIGlmIChtX2RldlRvb2xz
KQotICAgICAgICB0aGlzLT5zZXRGb2N1cyhtX2RldlRvb2xzLT53ZWJWaWV3KCksIHRydWUpOwot
Ci0gICAgbV90ZXN0SXNQcmVwYXJpbmcgPSBmYWxzZTsKLSAgICB3YWl0VGVzdEZpbmlzaGVkKCk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1NWR1Rlc3RVUkwoY29uc3QgV2ViVVJMJiB1cmwp
Ci17Ci0gICAgcmV0dXJuIHVybC5pc1ZhbGlkKCkgJiYgc3RyaW5nKHVybC5zcGVjKCkpLmZpbmQo
IlczQy1TVkctMS4xIikgIT0gc3RyaW5nOjpucG9zOwotfQotCi12b2lkIFRlc3RTaGVsbDo6cmVz
aXplV2luZG93Rm9yVGVzdChXZWJWaWV3SG9zdCogd2luZG93LCBjb25zdCBXZWJVUkwmIHVybCkK
LXsKLSAgICBpbnQgd2lkdGgsIGhlaWdodDsKLSAgICBpZiAoaXNTVkdUZXN0VVJMKHVybCkpIHsK
LSAgICAgICAgd2lkdGggPSBTVkdUZXN0V2luZG93V2lkdGg7Ci0gICAgICAgIGhlaWdodCA9IFNW
R1Rlc3RXaW5kb3dIZWlnaHQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2lkdGggPSB0ZXN0V2lu
ZG93V2lkdGg7Ci0gICAgICAgIGhlaWdodCA9IHRlc3RXaW5kb3dIZWlnaHQ7Ci0gICAgfQotICAg
IHdpbmRvdy0+c2V0V2luZG93UmVjdChXZWJSZWN0KDAsIDAsIHdpZHRoICsgdmlydHVhbFdpbmRv
d0JvcmRlciAqIDIsIGhlaWdodCArIHZpcnR1YWxXaW5kb3dCb3JkZXIgKiAyKSk7Ci19Ci0KLXZv
aWQgVGVzdFNoZWxsOjpyZXNldFRlc3RDb250cm9sbGVyKCkKLXsKLSAgICByZXNldFdlYlNldHRp
bmdzKCp3ZWJWaWV3KCkpOwotICAgIG1fdGVzdEludGVyZmFjZXMtPnJlc2V0QWxsKCk7Ci0gICAg
bV9kZXZUb29sc1Rlc3RJbnRlcmZhY2VzLT5yZXNldEFsbCgpOwotICAgIG1fd2ViVmlld0hvc3Qt
PnJlc2V0KCk7Ci0gICAgbV9kcnREZXZUb29sc0FnZW50LT5yZXNldCgpOwotICAgIGlmIChtX2Ry
dERldlRvb2xzQ2xpZW50KQotICAgICAgICBtX2RydERldlRvb2xzQ2xpZW50LT5yZXNldCgpOwot
ICAgIHdlYlZpZXcoKS0+c2V0UGFnZVNjYWxlRmFjdG9yKDEsIFdlYlBvaW50KDAsIDApKTsKLSAg
ICB3ZWJWaWV3KCktPmVuYWJsZUZpeGVkTGF5b3V0TW9kZShmYWxzZSk7Ci0gICAgd2ViVmlldygp
LT5zZXRGaXhlZExheW91dFNpemUoV2ViU2l6ZSgwLCAwKSk7Ci0gICAgd2ViVmlldygpLT5tYWlu
RnJhbWUoKS0+Y2xlYXJPcGVuZXIoKTsKLSAgICBXZWJUZXN0aW5nU3VwcG9ydDo6cmVzZXRJbnRl
cm5hbHNPYmplY3Qod2ViVmlldygpLT5tYWluRnJhbWUoKSk7Ci19Ci0KLXZvaWQgVGVzdFNoZWxs
Ojpsb2FkVVJMKGNvbnN0IFdlYlVSTCYgdXJsKQotewotICAgIG1fd2ViVmlld0hvc3QtPmxvYWRV
UkxGb3JGcmFtZSh1cmwsIHN0cmluZygpKTsKLX0KLQotdm9pZCBUZXN0U2hlbGw6OnJlbG9hZCgp
Ci17Ci0gICAgbV93ZWJWaWV3SG9zdC0+bmF2aWdhdGlvbkNvbnRyb2xsZXIoKS0+cmVsb2FkKCk7
Ci19Ci0KLXZvaWQgVGVzdFNoZWxsOjpnb1RvT2Zmc2V0KGludCBvZmZzZXQpCi17Ci0gICAgIG1f
d2ViVmlld0hvc3QtPm5hdmlnYXRpb25Db250cm9sbGVyKCktPmdvVG9PZmZzZXQob2Zmc2V0KTsK
LX0KLQotaW50IFRlc3RTaGVsbDo6bmF2aWdhdGlvbkVudHJ5Q291bnQoKSBjb25zdAotewotICAg
IHJldHVybiBtX3dlYlZpZXdIb3N0LT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5lbnRyeUNvdW50
KCk7Ci19Ci0KLXZvaWQgVGVzdFNoZWxsOjpjYWxsSlNHQygpCi17Ci0gICAgbV93ZWJWaWV3LT5t
YWluRnJhbWUoKS0+Y29sbGVjdEdhcmJhZ2UoKTsKLX0KLQotdm9pZCBUZXN0U2hlbGw6OnNldEZv
Y3VzKFdlYldpZGdldCogd2lkZ2V0LCBib29sIGVuYWJsZSkKLXsKLSAgICAvLyBTaW11bGF0ZSB0
aGUgZWZmZWN0cyBvZiBJbnRlcmFjdGl2ZVNldEZvY3VzKCksIHdoaWNoIGluY2x1ZGVzIGNhbGxp
bmcKLSAgICAvLyBib3RoIHNldEZvY3VzKCkgYW5kIHNldElzQWN0aXZlKCkuCi0gICAgaWYgKGVu
YWJsZSkgewotICAgICAgICBpZiAobV9mb2N1c2VkV2lkZ2V0ICE9IHdpZGdldCkgewotICAgICAg
ICAgICAgaWYgKG1fZm9jdXNlZFdpZGdldCkKLSAgICAgICAgICAgICAgICBtX2ZvY3VzZWRXaWRn
ZXQtPnNldEZvY3VzKGZhbHNlKTsKLSAgICAgICAgICAgIHdlYlZpZXcoKS0+c2V0SXNBY3RpdmUo
ZW5hYmxlKTsKLSAgICAgICAgICAgIHdpZGdldC0+c2V0Rm9jdXMoZW5hYmxlKTsKLSAgICAgICAg
ICAgIG1fZm9jdXNlZFdpZGdldCA9IHdpZGdldDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmIChtX2ZvY3VzZWRXaWRnZXQgPT0gd2lkZ2V0KSB7Ci0gICAgICAgICAgICB3aWRn
ZXQtPnNldEZvY3VzKGVuYWJsZSk7Ci0gICAgICAgICAgICB3ZWJWaWV3KCktPnNldElzQWN0aXZl
KGVuYWJsZSk7Ci0gICAgICAgICAgICBtX2ZvY3VzZWRXaWRnZXQgPSAwOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIFRlc3RTaGVsbDo6dGVzdEZpbmlzaGVkKFdlYlZpZXdIb3N0KiBob3N0
KQotewotICAgIGlmIChob3N0ID09IG1fZGV2VG9vbHMpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICghbV90ZXN0SXNQZW5kaW5nKQotICAgICAgICByZXR1cm47Ci0gICAgbV90ZXN0SXNQZW5k
aW5nID0gZmFsc2U7Ci0gICAgbV90ZXN0SW50ZXJmYWNlcy0+c2V0VGVzdElzUnVubmluZyhmYWxz
ZSk7Ci0gICAgaWYgKG1fZHVtcFdoZW5GaW5pc2hlZCkKLSAgICAgICAgZHVtcCgpOwotICAgIHdl
YmtpdF9zdXBwb3J0OjpRdWl0TWVzc2FnZUxvb3AoKTsKLX0KLQotdm9pZCBUZXN0U2hlbGw6OnRl
c3RUaW1lZE91dCgpCi17Ci0gICAgbV9wcmludGVyLmhhbmRsZVRpbWVkT3V0KCk7Ci0gICAgdGVz
dEZpbmlzaGVkKHdlYlZpZXdIb3N0KCkpOwotfQotCi12b2lkIFRlc3RTaGVsbDo6ZHVtcCgpCi17
Ci0gICAgLy8gRHVtcCB0aGUgcmVxdWVzdGVkIHJlcHJlc2VudGF0aW9uLgotICAgIFdlYkZyYW1l
KiBmcmFtZSA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGJvb2wgc2hvdWxkRHVtcEFzQXVkaW8gPSBtX3Rlc3RJbnRlcmZhY2Vz
LT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBBc0F1ZGlvKCk7Ci0gICAgYm9vbCBzaG91bGRHZW5l
cmF0ZVBpeGVsUmVzdWx0cyA9IG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxk
R2VuZXJhdGVQaXhlbFJlc3VsdHMoKTsKLSAgICBib29sIGR1bXBlZEFueXRoaW5nID0gZmFsc2U7
Ci0KLSAgICBpZiAoc2hvdWxkRHVtcEFzQXVkaW8pIHsKLSAgICAgICAgY29uc3QgV2ViS2l0OjpX
ZWJBcnJheUJ1ZmZlclZpZXcqIHdlYkFycmF5QnVmZmVyVmlldyA9IG1fdGVzdEludGVyZmFjZXMt
PnRlc3RSdW5uZXIoKS0+YXVkaW9EYXRhKCk7Ci0gICAgICAgIG1fcHJpbnRlci5oYW5kbGVBdWRp
byh3ZWJBcnJheUJ1ZmZlclZpZXctPmJhc2VBZGRyZXNzKCksIHdlYkFycmF5QnVmZmVyVmlldy0+
Ynl0ZUxlbmd0aCgpKTsKLSAgICAgICAgbV9wcmludGVyLmhhbmRsZUF1ZGlvRm9vdGVyKCk7Ci0g
ICAgICAgIG1fcHJpbnRlci5oYW5kbGVUZXN0Rm9vdGVyKHRydWUpOwotCi0gICAgICAgIGZmbHVz
aChzdGRvdXQpOwotICAgICAgICBmZmx1c2goc3RkZXJyKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChtX3BhcmFtcy5kdW1wVHJlZSkgewotICAgICAgICBkdW1wZWRBbnl0aGlu
ZyA9IHRydWU7Ci0gICAgICAgIG1fcHJpbnRlci5oYW5kbGVUZXh0SGVhZGVyKCk7Ci0gICAgICAg
IHN0cmluZyBkYXRhVXRmOCA9IG1fd2ViVmlld0hvc3QtPnByb3h5KCktPmNhcHR1cmVUcmVlKG1f
cGFyYW1zLmRlYnVnUmVuZGVyVHJlZSk7Ci0gICAgICAgIGlmIChmd3JpdGUoZGF0YVV0ZjguY19z
dHIoKSwgMSwgZGF0YVV0Zjguc2l6ZSgpLCBzdGRvdXQpICE9IGRhdGFVdGY4LnNpemUoKSkKLSAg
ICAgICAgICAgIEZBVEFMKCJTaG9ydCB3cml0ZSB0byBzdGRvdXQsIGRpc2sgZnVsbD9cbiIpOwot
ICAgIH0KLSAgICBpZiAoZHVtcGVkQW55dGhpbmcgJiYgbV9wYXJhbXMucHJpbnRTZXBhcmF0b3Jz
KQotICAgICAgICBtX3ByaW50ZXIuaGFuZGxlVGV4dEZvb3RlcigpOwotCi0gICAgaWYgKG1fZHVt
cFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIHNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKSB7Ci0g
ICAgICAgIC8vIEltYWdlIG91dHB1dDogd2Ugd3JpdGUgdGhlIGltYWdlIGRhdGEgdG8gdGhlIGZp
bGUgZ2l2ZW4gb24gdGhlCi0gICAgICAgIC8vIGNvbW1hbmQgbGluZSAoZm9yIHRoZSBkdW1wIHBp
eGVscyBhcmd1bWVudCksIGFuZCB0aGUgTUQ1IHN1bSB0bwotICAgICAgICAvLyBzdGRvdXQuCi0g
ICAgICAgIGR1bXBlZEFueXRoaW5nID0gdHJ1ZTsKLSAgICAgICAgZHVtcEltYWdlKG1fd2ViVmll
d0hvc3QtPnByb3h5KCktPmNhcHR1cmVQaXhlbHMoKSk7Ci0gICAgfQotICAgIG1fcHJpbnRlci5o
YW5kbGVUZXN0Rm9vdGVyKGR1bXBlZEFueXRoaW5nKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAg
ICBmZmx1c2goc3RkZXJyKTsKLX0KLQotdm9pZCBUZXN0U2hlbGw6OmR1bXBJbWFnZShTa0NhbnZh
cyogY2FudmFzKSBjb25zdAotewotICAgIC8vIEZpeCB0aGUgYWxwaGEuIFRoZSBleHBlY3RlZCBQ
TkdzIG9uIE1hYyBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIHdhbnQKLSAgICAvLyB0byBr
ZWVwIGl0LiBPbiBXaW5kb3dzLCB0aGUgYWxwaGEgY2hhbm5lbCBpcyB3cm9uZyBzaW5jZSB0ZXh0
L2Zvcm0gY29udHJvbAotICAgIC8vIGRyYXdpbmcgbWF5IGhhdmUgZXJhc2VkIGl0IGluIGEgZmV3
IHBsYWNlcy4gU28gb24gV2luZG93cyB3ZSBmb3JjZSBpdCB0bwotICAgIC8vIG9wYXF1ZSBhbmQg
YWxzbyBkb24ndCB3cml0ZSB0aGUgYWxwaGEgY2hhbm5lbCBmb3IgdGhlIHJlZmVyZW5jZS4gTGlu
dXgKLSAgICAvLyBkb2Vzbid0IGhhdmUgdGhlIHdyb25nIGFscGhhIGxpa2UgV2luZG93cywgYnV0
IHdlIG1hdGNoIFdpbmRvd3MuCi0jaWYgT1MoTUFDX09TX1gpCi0gICAgYm9vbCBkaXNjYXJkVHJh
bnNwYXJlbmN5ID0gZmFsc2U7Ci0jZWxzZQotICAgIGJvb2wgZGlzY2FyZFRyYW5zcGFyZW5jeSA9
IHRydWU7Ci0gICAgbWFrZUNhbnZhc09wYXF1ZShjYW52YXMpOwotI2VuZGlmCi0KLSAgICBjb25z
dCBTa0JpdG1hcCYgc291cmNlQml0bWFwID0gY2FudmFzLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNz
Qml0bWFwKGZhbHNlKTsKLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIHNvdXJjZUJpdG1hcExvY2soc291
cmNlQml0bWFwKTsKLQotICAgIC8vIENvbXB1dGUgTUQ1IHN1bS4KLSAgICBNRDUgZGlnZXN0ZXI7
Ci0gICAgVmVjdG9yPHVpbnQ4X3QsIDE2PiBkaWdlc3RWYWx1ZTsKLSNpZiBPUyhBTkRST0lEKQot
ICAgIC8vIE9uIEFuZHJvaWQsIHBpeGVsIGxheW91dCBpcyBSR0JBIChzZWUgdGhpcmRfcGFydHkv
c2tpYS9pbmNsdWRlL2NvcmUvU2tDb2xvclByaXYuaCk7Ci0gICAgLy8gaG93ZXZlciwgb3RoZXIg
Q2hyb21lIHBsYXRmb3JtcyB1c2UgQkdSQSAoc2VlIHNraWEvY29uZmlnL1NrVXNlckNvbmZpZy5o
KS4KLSAgICAvLyBUbyBtYXRjaCB0aGUgY2hlY2tzdW0gb2Ygb3RoZXIgQ2hyb21lIHBsYXRmb3Jt
cywgd2UgbmVlZCB0byByZW9yZGVyIHRoZSBsYXlvdXQgb2YgcGl4ZWxzLgotICAgIC8vIE5PVEU6
IFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHVzZSBTa0JpdG1hcDo6a0FSR0JfODg4OF9D
b25maWcsCi0gICAgLy8gd2hpY2ggaGFzIGJlZW4gY2hlY2tlZCBpbiBkZXZpY2UubWFrZU9wYXF1
ZSgpIChzZWUgYWJvdmUpLgotICAgIGNvbnN0IHVpbnQ4X3QqIHJhd1BpeGVscyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNvdXJjZUJpdG1hcC5nZXRQaXhlbHMoKSk7Ci0gICAg
c2l6ZV90IGJpdG1hcFNpemUgPSBzb3VyY2VCaXRtYXAuZ2V0U2l6ZSgpOwotICAgIE93bkFycmF5
UHRyPHVpbnQ4X3Q+IHJlb3JkZXJlZFBpeGVscyA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQ4X3Rb
Yml0bWFwU2l6ZV0pOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYml0bWFwU2l6ZTsgaSAr
PSA0KSB7Ci0gICAgICAgIHJlb3JkZXJlZFBpeGVsc1tpXSA9IHJhd1BpeGVsc1tpICsgMl07IC8v
IFIKLSAgICAgICAgcmVvcmRlcmVkUGl4ZWxzW2kgKyAxXSA9IHJhd1BpeGVsc1tpICsgMV07IC8v
IEcKLSAgICAgICAgcmVvcmRlcmVkUGl4ZWxzW2kgKyAyXSA9IHJhd1BpeGVsc1tpXTsgLy8gQgot
ICAgICAgICByZW9yZGVyZWRQaXhlbHNbaSArIDNdID0gcmF3UGl4ZWxzW2kgKyAzXTsgLy8gQQot
ICAgIH0KLSAgICBkaWdlc3Rlci5hZGRCeXRlcyhyZW9yZGVyZWRQaXhlbHMuZ2V0KCksIGJpdG1h
cFNpemUpOwotICAgIHJlb3JkZXJlZFBpeGVscy5jbGVhcigpOwotI2Vsc2UKLSAgICBkaWdlc3Rl
ci5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2VCaXRtYXAu
Z2V0UGl4ZWxzKCkpLCBzb3VyY2VCaXRtYXAuZ2V0U2l6ZSgpKTsKLSNlbmRpZgotICAgIGRpZ2Vz
dGVyLmNoZWNrc3VtKGRpZ2VzdFZhbHVlKTsKLSAgICBzdHJpbmcgbWQ1aGFzaDsKLSAgICBtZDVo
YXNoLnJlc2VydmUoMTYgKiAyKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTY7ICsr
aSkgewotICAgICAgICBjaGFyIGhleFszXTsKLSAgICAgICAgLy8gVXNlICJ4Iiwgbm90ICJYIi4g
VGhlIHN0cmluZyBtdXN0IGJlIGxvd2VyY2FzZWQuCi0gICAgICAgIHNwcmludGYoaGV4LCAiJTAy
eCIsIGRpZ2VzdFZhbHVlW2ldKTsKLSAgICAgICAgbWQ1aGFzaC5hcHBlbmQoaGV4KTsKLSAgICB9
Ci0KLSAgICAvLyBPbmx5IGVuY29kZSBhbmQgZHVtcCB0aGUgcG5nIGlmIHRoZSBoYXNoZXMgZG9u
J3QgbWF0Y2guIEVuY29kaW5nIHRoZQotICAgIC8vIGltYWdlIGlzIHJlYWxseSBleHBlbnNpdmUu
Ci0gICAgaWYgKG1kNWhhc2guY29tcGFyZShtX3BhcmFtcy5waXhlbEhhc2gpKSB7Ci0gICAgICAg
IHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+IHBuZzsKLSNpZiBPUyhBTkRST0lEKQotICAgICAg
ICB3ZWJraXRfc3VwcG9ydDo6RW5jb2RlUkdCQVBOR1dpdGhDaGVja3N1bShyZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihzb3VyY2VCaXRtYXAuZ2V0UGl4ZWxzKCkpLCBzb3Vy
Y2VCaXRtYXAud2lkdGgoKSwKLSAgICAgICAgICAgIHNvdXJjZUJpdG1hcC5oZWlnaHQoKSwgc3Rh
dGljX2Nhc3Q8aW50Pihzb3VyY2VCaXRtYXAucm93Qnl0ZXMoKSksIGRpc2NhcmRUcmFuc3BhcmVu
Y3ksIG1kNWhhc2gsICZwbmcpOwotI2Vsc2UKLSAgICAgICAgd2Via2l0X3N1cHBvcnQ6OkVuY29k
ZUJHUkFQTkdXaXRoQ2hlY2tzdW0ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oc291cmNlQml0bWFwLmdldFBpeGVscygpKSwgc291cmNlQml0bWFwLndpZHRoKCksCi0gICAg
ICAgICAgICBzb3VyY2VCaXRtYXAuaGVpZ2h0KCksIHN0YXRpY19jYXN0PGludD4oc291cmNlQml0
bWFwLnJvd0J5dGVzKCkpLCBkaXNjYXJkVHJhbnNwYXJlbmN5LCBtZDVoYXNoLCAmcG5nKTsKLSNl
bmRpZgotCi0gICAgICAgIG1fcHJpbnRlci5oYW5kbGVJbWFnZShtZDVoYXNoLmNfc3RyKCksIG1f
cGFyYW1zLnBpeGVsSGFzaC5jX3N0cigpLCAmcG5nWzBdLCBwbmcuc2l6ZSgpKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgbV9wcmludGVyLmhhbmRsZUltYWdlKG1kNWhhc2guY19zdHIoKSwgbV9wYXJh
bXMucGl4ZWxIYXNoLmNfc3RyKCksIDAsIDApOwotfQotCi12b2lkIFRlc3RTaGVsbDo6YmluZEpT
T2JqZWN0c1RvV2luZG93KFdlYkZyYW1lKiBmcmFtZSkKLXsKLSAgICBXZWJUZXN0aW5nU3VwcG9y
dDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KGZyYW1lKTsKLSAgICBpZiAobV9kZXZUb29scyAmJiBt
X2RldlRvb2xzLT53ZWJWaWV3KCkgPT0gZnJhbWUtPnZpZXcoKSkKLSAgICAgICAgbV9kZXZUb29s
c1Rlc3RJbnRlcmZhY2VzLT5iaW5kVG8oZnJhbWUpOwotICAgIGVsc2UKLSAgICAgICAgbV90ZXN0
SW50ZXJmYWNlcy0+YmluZFRvKGZyYW1lKTsKLX0KLQotV2ViVmlld0hvc3QqIFRlc3RTaGVsbDo6
Y3JlYXRlTmV3V2luZG93KGNvbnN0IFdlYktpdDo6V2ViVVJMJiB1cmwpCi17Ci0gICAgcmV0dXJu
IGNyZWF0ZU5ld1dpbmRvdyh1cmwsIDAsIG1fdGVzdEludGVyZmFjZXMuZ2V0KCkpOwotfQotCi1X
ZWJWaWV3SG9zdCogVGVzdFNoZWxsOjpjcmVhdGVOZXdXaW5kb3coY29uc3QgV2ViS2l0OjpXZWJV
UkwmIHVybCwgRFJURGV2VG9vbHNBZ2VudCogZGV2VG9vbHNBZ2VudCwgV2ViVGVzdEludGVyZmFj
ZXMgKnRlc3RJbnRlcmZhY2VzKQotewotICAgIFdlYlRlc3RQcm94eTxXZWJWaWV3SG9zdCwgVGVz
dFNoZWxsKj4qIGhvc3QgPSBuZXcgV2ViVGVzdFByb3h5PFdlYlZpZXdIb3N0LCBUZXN0U2hlbGwq
Pih0aGlzKTsKLSAgICBob3N0LT5zZXRJbnRlcmZhY2VzKHRlc3RJbnRlcmZhY2VzKTsKLSAgICBp
ZiAobV93ZWJWaWV3SG9zdCkKLSAgICAgICAgaG9zdC0+c2V0RGVsZWdhdGUobV93ZWJWaWV3SG9z
dC5nZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICBob3N0LT5zZXREZWxlZ2F0ZShob3N0KTsKLSAg
ICBob3N0LT5zZXRQcm94eShob3N0KTsKLSAgICBXZWJWaWV3KiB2aWV3ID0gV2ViVmlldzo6Y3Jl
YXRlKGhvc3QpOwotICAgIHZpZXctPnNldFBlcm1pc3Npb25DbGllbnQodGVzdEludGVyZmFjZXMt
PnRlc3RSdW5uZXIoKS0+d2ViUGVybWlzc2lvbnMoKSk7Ci0gICAgdmlldy0+c2V0RGV2VG9vbHNB
Z2VudENsaWVudChkZXZUb29sc0FnZW50KTsKLSAgICBob3N0LT5zZXRXZWJXaWRnZXQodmlldyk7
Ci0gICAgbV9wcmVmcy5hcHBseVRvKHZpZXcpOwotICAgIHZpZXctPmluaXRpYWxpemVNYWluRnJh
bWUoaG9zdCk7Ci0gICAgbV93aW5kb3dMaXN0LmFwcGVuZChob3N0KTsKLSAgICBob3N0LT5sb2Fk
VVJMRm9yRnJhbWUodXJsLCBzdHJpbmcoKSk7Ci0gICAgcmV0dXJuIGhvc3Q7Ci19Ci0KLXZvaWQg
VGVzdFNoZWxsOjpjbG9zZVdpbmRvdyhXZWJWaWV3SG9zdCogd2luZG93KQotewotICAgIHNpemVf
dCBpID0gbV93aW5kb3dMaXN0LmZpbmQod2luZG93KTsKLSAgICBpZiAoaSA9PSBub3RGb3VuZCkg
ewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBtX3dpbmRvd0xpc3QucmVtb3ZlKGkpOwotICAgIFdlYldpZGdldCogZm9jdXNlZFdpZGdl
dCA9IG1fZm9jdXNlZFdpZGdldDsKLSAgICBpZiAod2luZG93LT53ZWJXaWRnZXQoKSA9PSBtX2Zv
Y3VzZWRXaWRnZXQpCi0gICAgICAgIGZvY3VzZWRXaWRnZXQgPSAwOwotCi0gICAgd2luZG93LT5z
aHV0ZG93bigpOwotICAgIGRlbGV0ZSB3aW5kb3c7Ci0gICAgLy8gV2Ugc2V0IHRoZSBmb2N1c2Vk
IHdpZGdldCBhZnRlciBkZWxldGluZyB0aGUgd2ViIHZpZXcgaG9zdCBiZWNhdXNlIGl0Ci0gICAg
Ly8gY2FuIGNoYW5nZSB0aGUgZm9jdXMuCi0gICAgbV9mb2N1c2VkV2lkZ2V0ID0gZm9jdXNlZFdp
ZGdldDsKLSAgICBpZiAobV9mb2N1c2VkV2lkZ2V0KSB7Ci0gICAgICAgIHdlYlZpZXcoKS0+c2V0
SXNBY3RpdmUodHJ1ZSk7Ci0gICAgICAgIG1fZm9jdXNlZFdpZGdldC0+c2V0Rm9jdXModHJ1ZSk7
Ci0gICAgfQotfQotCi12b2lkIFRlc3RTaGVsbDo6Y2xvc2VSZW1haW5pbmdXaW5kb3dzKCkKLXsK
LSAgICAvLyBKdXN0IGNsb3NlIGRldlRvb2xzIHdpbmRvdyBtYW51YWxseSBiZWNhdXNlIHdlIGhh
dmUgY3VzdG9tIGRlaW5pdGlhbGl6YXRpb24gY29kZSBmb3IgaXQuCi0gICAgY2xvc2VEZXZUb29s
cygpOwotCi0gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSB3aW5kb3cgbGlzdCBhbmQgY2xvc2Ug
ZXZlcnl0aGluZyBleGNlcHQgdGhlIG1haW4KLSAgICAvLyB3aW5kb3cuIFdlIGRvbid0IHdhbnQg
dG8gZGVsZXRlIGVsZW1lbnRzIGFzIHdlJ3JlIGl0ZXJhdGluZywgc28gd2UgY29weQotICAgIC8v
IHRvIGEgdGVtcCB2ZWN0b3IgZmlyc3QuCi0gICAgVmVjdG9yPFdlYlZpZXdIb3N0Kj4gd2luZG93
c1RvRGVsZXRlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3dpbmRvd0xpc3Quc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fd2luZG93TGlzdFtpXSAhPSB3ZWJWaWV3SG9zdCgp
KQotICAgICAgICAgICAgd2luZG93c1RvRGVsZXRlLmFwcGVuZChtX3dpbmRvd0xpc3RbaV0pOwot
ICAgIH0KLSAgICBBU1NFUlQod2luZG93c1RvRGVsZXRlLnNpemUoKSArIDEgPT0gbV93aW5kb3dM
aXN0LnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHdpbmRvd3NUb0RlbGV0
ZS5zaXplKCk7ICsraSkKLSAgICAgICAgY2xvc2VXaW5kb3cod2luZG93c1RvRGVsZXRlW2ldKTsK
LSAgICBBU1NFUlQobV93aW5kb3dMaXN0LnNpemUoKSA9PSAxKTsKLX0KLQotaW50IFRlc3RTaGVs
bDo6d2luZG93Q291bnQoKQotewotICAgIHJldHVybiBtX3dpbmRvd0xpc3Quc2l6ZSgpOwotfQot
Ci12b2lkIFRlc3RTaGVsbDo6Y2FwdHVyZUhpc3RvcnlGb3JXaW5kb3coc2l6ZV90IHdpbmRvd0lu
ZGV4LCBXZWJWZWN0b3I8V2ViSGlzdG9yeUl0ZW0+KiBoaXN0b3J5LCBzaXplX3QqIGN1cnJlbnRF
bnRyeUluZGV4KQotewotICAgIEFTU0VSVChoaXN0b3J5KTsKLSAgICBBU1NFUlQoY3VycmVudEVu
dHJ5SW5kZXgpOwotICAgIGlmICh3aW5kb3dJbmRleCA+PSBtX3dpbmRvd0xpc3Quc2l6ZSgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgVGVzdE5hdmlnYXRpb25Db250cm9sbGVyJiBuYXZpZ2F0aW9u
Q29udHJvbGxlciA9ICptX3dpbmRvd0xpc3Rbd2luZG93SW5kZXhdLT5uYXZpZ2F0aW9uQ29udHJv
bGxlcigpOwotICAgIHNpemVfdCBlbnRyeUNvdW50ID0gbmF2aWdhdGlvbkNvbnRyb2xsZXIuZW50
cnlDb3VudCgpOwotICAgIFdlYlZlY3RvcjxXZWJIaXN0b3J5SXRlbT4gcmVzdWx0KGVudHJ5Q291
bnQpOwotICAgICpjdXJyZW50RW50cnlJbmRleCA9IG5hdmlnYXRpb25Db250cm9sbGVyLmxhc3RD
b21taXR0ZWRFbnRyeUluZGV4KCk7Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8
IGVudHJ5Q291bnQ7ICsraW5kZXgpIHsKLSAgICAgICAgV2ViSGlzdG9yeUl0ZW0gaGlzdG9yeUl0
ZW0gPSBuYXZpZ2F0aW9uQ29udHJvbGxlci5lbnRyeUF0SW5kZXgoaW5kZXgpLT5jb250ZW50U3Rh
dGUoKTsKLSAgICAgICAgaWYgKGhpc3RvcnlJdGVtLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBo
aXN0b3J5SXRlbS5pbml0aWFsaXplKCk7Ci0gICAgICAgICAgICBoaXN0b3J5SXRlbS5zZXRVUkxT
dHJpbmcobmF2aWdhdGlvbkNvbnRyb2xsZXIuZW50cnlBdEluZGV4KGluZGV4KS0+VVJMKCkuc3Bl
YygpLnV0ZjE2KCkpOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdFtpbmRleF0gPSBoaXN0b3J5
SXRlbTsKLSAgICB9Ci0gICAgaGlzdG9yeS0+c3dhcChyZXN1bHQpOwotfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmggYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMTc0OThkM2JlZjE2OTM4OWY0ODMwZmExZjk4N2IwMThhOTA2ZDRhYi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBUZXN0U2hlbGxfaAotI2RlZmluZSBUZXN0U2hlbGxfaAotCi0jaW5jbHVkZSAiVGVzdEV2ZW50
UHJpbnRlci5oIgotI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCi0jaW5jbHVkZSAiV2ViVGVz
dEludGVyZmFjZXMuaCIKLSNpbmNsdWRlICJXZWJWaWV3SG9zdC5oIgotI2luY2x1ZGUgPHN0cmlu
Zz4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0v
LyBUZXN0U2hlbGwgaXMgYSBjb250YWluZXIgb2YgZ2xvYmFsIHZhcmlhYmxlcyBhbmQgaGFzIGJy
aWRnZSBmdW5jdGlvbnMgYmV0d2VlbgotLy8gdmFyaW91cyBvYmplY3RzLiBPbmx5IG9uZSBpbnN0
YW5jZSBpcyBjcmVhdGVkIGluIG9uZSBEUlQgcHJvY2Vzcy4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci1jbGFzcyBXZWJEZXZUb29sc0FnZW50Q2xpZW50OwotY2xhc3MgV2ViRnJhbWU7Ci1jbGFzcyBX
ZWJUaHJlYWQ7Ci1jbGFzcyBXZWJWaWV3OwotY2xhc3MgV2ViVGhlbWVFbmdpbmU7Ci1jbGFzcyBX
ZWJVUkw7Ci19Ci0KLWNsYXNzIERSVERldlRvb2xzQWdlbnQ7Ci1jbGFzcyBEUlREZXZUb29sc0Nh
bGxBcmdzOwotY2xhc3MgRFJURGV2VG9vbHNDbGllbnQ7Ci1jbGFzcyBNb2NrV2ViUHJlcmVuZGVy
aW5nU3VwcG9ydDsKLWNsYXNzIE1vY2tQbGF0Zm9ybTsKLQotc3RydWN0IFRlc3RQYXJhbXMgewot
ICAgIGJvb2wgZHVtcFRyZWU7Ci0gICAgYm9vbCBkZWJ1Z1JlbmRlclRyZWU7Ci0gICAgYm9vbCBk
ZWJ1Z0xheWVyVHJlZTsKLSAgICBib29sIHByaW50U2VwYXJhdG9yczsKLSAgICBXZWJLaXQ6Oldl
YlVSTCB0ZXN0VXJsOwotICAgIHN0ZDo6c3RyaW5nIHBpeGVsSGFzaDsKLQotICAgIFRlc3RQYXJh
bXMoKQotICAgICAgICA6IGR1bXBUcmVlKHRydWUpCi0gICAgICAgICwgZGVidWdSZW5kZXJUcmVl
KGZhbHNlKQotICAgICAgICAsIGRlYnVnTGF5ZXJUcmVlKGZhbHNlKQotICAgICAgICAsIHByaW50
U2VwYXJhdG9ycyhmYWxzZSkgeyB9Ci19OwotCi1jbGFzcyBUZXN0U2hlbGwgewotcHVibGljOgot
ICAgIFRlc3RTaGVsbCgpOwotICAgIH5UZXN0U2hlbGwoKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6
ZShNb2NrUGxhdGZvcm0qKTsKLQotICAgIC8vIFRoZSBtYWluIFdlYlZpZXcuCi0gICAgV2ViS2l0
OjpXZWJWaWV3KiB3ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3OyB9Ci0gICAgLy8g
UmV0dXJucyB0aGUgaG9zdCBmb3IgdGhlIG1haW4gV2ViVmlldy4KLSAgICBXZWJWaWV3SG9zdCog
d2ViVmlld0hvc3QoKSBjb25zdCB7IHJldHVybiBtX3dlYlZpZXdIb3N0LmdldCgpOyB9Ci0gICAg
V2ViVGVzdFJ1bm5lcjo6V2ViVGVzdFJ1bm5lciogdGVzdFJ1bm5lcigpIGNvbnN0IHsgcmV0dXJu
IG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKTsgfQotICAgIGNvbnN0IFRlc3RFdmVudFBy
aW50ZXIqIHByaW50ZXIoKSBjb25zdCB7IHJldHVybiAmbV9wcmludGVyOyB9Ci0KLSAgICBXZWJU
ZXN0UnVubmVyOjpXZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMoKSB7IHJldHVybiAmbV9wcmVm
czsgfQotICAgIHZvaWQgYXBwbHlQcmVmZXJlbmNlcygpIHsgbV9wcmVmcy5hcHBseVRvKG1fd2Vi
Vmlldyk7IH0KLQotICAgIHZvaWQgYmluZEpTT2JqZWN0c1RvV2luZG93KFdlYktpdDo6V2ViRnJh
bWUqKTsKLSAgICB2b2lkIHJ1bkZpbGVUZXN0KGNvbnN0IFRlc3RQYXJhbXMmLCBib29sIHNob3Vs
ZER1bXBQaXhlbFRlc3RzKTsKLSAgICB2b2lkIGNhbGxKU0dDKCk7Ci0gICAgdm9pZCByZXNldFRl
c3RDb250cm9sbGVyKCk7Ci0gICAgdm9pZCB3YWl0VGVzdEZpbmlzaGVkKCk7Ci0KLSAgICAvLyBP
cGVyYXRpb25zIHRvIHRoZSBtYWluIHdpbmRvdy4KLSAgICB2b2lkIGxvYWRVUkwoY29uc3QgV2Vi
S2l0OjpXZWJVUkwmKTsKLSAgICB2b2lkIHJlbG9hZCgpOwotICAgIHZvaWQgZ29Ub09mZnNldChp
bnQgb2Zmc2V0KTsKLSAgICBpbnQgbmF2aWdhdGlvbkVudHJ5Q291bnQoKSBjb25zdDsKLQotICAg
IHZvaWQgc2V0Rm9jdXMoV2ViS2l0OjpXZWJXaWRnZXQqLCBib29sIGVuYWJsZSk7Ci0KLSAgICAv
LyBDYWxsZWQgYnkgdGhlIERSVFRlc3RSdW5uZXIgdG8gc2lnbmFsIHRlc3QgY29tcGxldGlvbi4K
LSAgICB2b2lkIHRlc3RGaW5pc2hlZChXZWJWaWV3SG9zdCopOwotICAgIC8vIENhbGxlZCBieSBE
UlRUZXN0UnVubmVyIHdoZW4gYSB0ZXN0IGhpdHMgdGhlIHRpbWVvdXQsIGJ1dCBkb2VzIG5vdAot
ICAgIC8vIGNhdXNlIGEgaGFuZy4gV2UgY2FuIGF2b2lkIGtpbGxpbmcgVGVzdFNoZWxsIGluIHRo
aXMgY2FzZSBhbmQgc3RpbGwgZHVtcAotICAgIC8vIHRoZSB0ZXN0IHJlc3VsdHMuCi0gICAgdm9p
ZCB0ZXN0VGltZWRPdXQoKTsKLQotICAgIGJvb2wgYWxsb3dFeHRlcm5hbFBhZ2VzKCkgY29uc3Qg
eyByZXR1cm4gbV9hbGxvd0V4dGVybmFsUGFnZXM7IH0KLSAgICB2b2lkIHNldEFsbG93RXh0ZXJu
YWxQYWdlcyhib29sIGFsbG93RXh0ZXJuYWxQYWdlcykgeyBtX2FsbG93RXh0ZXJuYWxQYWdlcyA9
IGFsbG93RXh0ZXJuYWxQYWdlczsgfQotCi0gICAgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nRm9yVmlkZW9FbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdGb3JWaWRlb0VuYWJsZWQgPSBlbmFibGVkOyB9Ci0gICAgdm9pZCBzZXRBY2NlbGVyYXRlZENv
bXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fYWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkID0gZW5hYmxlZDsgfQotICAg
IHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZChi
b29sIGVuYWJsZWQpIHsgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxF
bmFibGVkID0gZW5hYmxlZDsgfQotICAgIGJvb2wgc29mdHdhcmVDb21wb3NpdGluZ0VuYWJsZWQo
KSB7IHJldHVybiBtX3NvZnR3YXJlQ29tcG9zaXRpbmdFbmFibGVkOyB9Ci0gICAgdm9pZCBzZXRT
b2Z0d2FyZUNvbXBvc2l0aW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9zb2Z0d2FyZUNvbXBv
c2l0aW5nRW5hYmxlZCA9IGVuYWJsZWQ7IH0KLSAgICB2b2lkIHNldFRocmVhZGVkQ29tcG9zaXRp
bmdFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX3RocmVhZGVkQ29tcG9zaXRpbmdFbmFibGVkID0g
ZW5hYmxlZDsgfQotICAgIHZvaWQgc2V0Rm9yY2VDb21wb3NpdGluZ01vZGUoYm9vbCBlbmFibGVk
KSB7IG1fZm9yY2VDb21wb3NpdGluZ01vZGUgPSBlbmFibGVkOyB9Ci0gICAgdm9pZCBzZXRUaHJl
YWRlZEhUTUxQYXJzZXIoYm9vbCBlbmFibGVkKSB7IG1fdGhyZWFkZWRIVE1MUGFyc2VyID0gZW5h
YmxlZDsgfQotICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFi
bGVkKSB7IG1fYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQgPSBlbmFibGVkOyB9Ci0gICAgdm9p
ZCBzZXRQZXJUaWxlUGFpbnRpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX3BlclRpbGVQYWlu
dGluZ0VuYWJsZWQgPSBlbmFibGVkOyB9Ci0gICAgdm9pZCBzZXREZWZlcnJlZEltYWdlRGVjb2Rp
bmdFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQg
PSBlbmFibGVkOyB9Ci0jaWYgZGVmaW5lZChPU19XSU4pCi0gICAgLy8gQWNjZXNzIHRvIHRoZSBm
aW5pc2hlZCBldmVudC4gVXNlZCBieSB0aGUgc3RhdGljIFdhdGNoRG9nIHRocmVhZC4KLSAgICBI
QU5ETEUgZmluaXNoZWRFdmVudCgpIHsgcmV0dXJuIG1fZmluaXNoZWRFdmVudDsgfQotI2VuZGlm
Ci0KLSAgICAvLyBHZXQgdGhlIHRpbWVvdXQgZm9yIHJ1bm5pbmcgYSB0ZXN0IGluIG1pbGxpc2Vj
b25kcy4KLSAgICBpbnQgbGF5b3V0VGVzdFRpbWVvdXQoKSB7IHJldHVybiBtX3RpbWVvdXQ7IH0K
LSAgICBpbnQgbGF5b3V0VGVzdFRpbWVvdXRGb3JXYXRjaERvZygpIHsgcmV0dXJuIGxheW91dFRl
c3RUaW1lb3V0KCkgKyAxMDAwOyB9Ci0gICAgdm9pZCBzZXRMYXlvdXRUZXN0VGltZW91dChpbnQg
dGltZW91dCkgeyBtX3RpbWVvdXQgPSB0aW1lb3V0OyB9Ci0KLSAgICAvLyBWOCBKYXZhU2NyaXB0
IHN0cmVzcyB0ZXN0IG9wdGlvbnMuCi0gICAgaW50IHN0cmVzc09wdCgpIHsgcmV0dXJuIG1fc3Ry
ZXNzT3B0OyB9Ci0gICAgdm9pZCBzZXRTdHJlc3NPcHQoYm9vbCBzdHJlc3NPcHQpIHsgbV9zdHJl
c3NPcHQgPSBzdHJlc3NPcHQ7IH0KLSAgICBpbnQgc3RyZXNzRGVvcHQoKSB7IHJldHVybiBtX3N0
cmVzc0Rlb3B0OyB9Ci0gICAgdm9pZCBzZXRTdHJlc3NEZW9wdChpbnQgc3RyZXNzRGVvcHQpIHsg
bV9zdHJlc3NEZW9wdCA9IHN0cmVzc0Rlb3B0OyB9Ci0KLSAgICAvLyBUaGUgSmF2YVNjcmlwdCBm
bGFncyBzcGVjaWZpZWQgYXMgYSBzdHJpbmdzLgotICAgIHN0ZDo6c3RyaW5nIGphdmFTY3JpcHRG
bGFncygpIHsgcmV0dXJuIG1famF2YVNjcmlwdEZsYWdzOyB9Ci0gICAgdm9pZCBzZXRKYXZhU2Ny
aXB0RmxhZ3Moc3RkOjpzdHJpbmcgamF2YVNjcmlwdEZsYWdzKSB7IG1famF2YVNjcmlwdEZsYWdz
ID0gamF2YVNjcmlwdEZsYWdzOyB9Ci0KLSAgICAvLyBTZXQgd2hldGhlciB0byBkdW1wIHdoZW4g
dGhlIGxvYWRlZCBwYWdlIGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nLiBUaGlzIGlzIHVzZWQgd2l0
aCBtdWx0aXBsZSBsb2FkCi0gICAgLy8gdGVzdGluZyB3aGVyZSB3ZSBvbmx5IHdhbnQgdG8gaGF2
ZSB0aGUgb3V0cHV0IGZyb20gdGhlIGxhc3QgbG9hZC4KLSAgICB2b2lkIHNldER1bXBXaGVuRmlu
aXNoZWQoYm9vbCBkdW1wV2hlbkZpbmlzaGVkKSB7IG1fZHVtcFdoZW5GaW5pc2hlZCA9IGR1bXBX
aGVuRmluaXNoZWQ7IH0KLQotICAgIHZvaWQgc2V0SXNEaXNwbGF5aW5nTW9kYWxEaWFsb2coYm9v
bCBpc0Rpc3BsYXlpbmdNb2RhbERpYWxvZykgeyBtX2lzRGlzcGxheWluZ01vZGFsRGlhbG9nID0g
aXNEaXNwbGF5aW5nTW9kYWxEaWFsb2c7IH0KLSAgICBib29sIGlzRGlzcGxheWluZ01vZGFsRGlh
bG9nKCkgY29uc3QgeyByZXR1cm4gbV9pc0Rpc3BsYXlpbmdNb2RhbERpYWxvZzsgfQotCi0gICAg
Ly8gU2V0IHdoZXRoZXIgdGhlIGJpbmFyeSBkYXRhIG91dHB1dCBzaG91bGQgYmUgZW5jb2RlZCBp
biBiYXNlNjQgdGV4dC4KLSAgICB2b2lkIHNldEVuY29kZUJpbmFyeShib29sIGVuY29kZUJpbmFy
eSkgeyBtX3ByaW50ZXIuc2V0RW5jb2RlQmluYXJ5KGVuY29kZUJpbmFyeSk7IH0KLQotICAgIFdl
YlZpZXdIb3N0KiBjcmVhdGVOZXdXaW5kb3coY29uc3QgV2ViS2l0OjpXZWJVUkwmKTsKLSAgICB2
b2lkIGNsb3NlV2luZG93KFdlYlZpZXdIb3N0Kik7Ci0gICAgdm9pZCBjbG9zZVJlbWFpbmluZ1dp
bmRvd3MoKTsKLSAgICBpbnQgd2luZG93Q291bnQoKTsKLSAgICB2b2lkIGNhcHR1cmVIaXN0b3J5
Rm9yV2luZG93KHNpemVfdCB3aW5kb3dJbmRleCwgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpX
ZWJIaXN0b3J5SXRlbT4qLCBzaXplX3QqIGN1cnJlbnRFbnRyeUluZGV4KTsKLSAgICBzdGF0aWMg
dm9pZCByZXNpemVXaW5kb3dGb3JUZXN0KFdlYlZpZXdIb3N0KiwgY29uc3QgV2ViS2l0OjpXZWJV
UkwmKTsKLQotICAgIHZvaWQgc2hvd0RldlRvb2xzKCk7Ci0gICAgdm9pZCBjbG9zZURldlRvb2xz
KCk7Ci0KLSAgICBEUlREZXZUb29sc0FnZW50KiBkcnREZXZUb29sc0FnZW50KCkgeyByZXR1cm4g
bV9kcnREZXZUb29sc0FnZW50LmdldCgpOyB9Ci0gICAgRFJURGV2VG9vbHNDbGllbnQqIGRydERl
dlRvb2xzQ2xpZW50KCkgeyByZXR1cm4gbV9kcnREZXZUb29sc0NsaWVudC5nZXQoKTsgfQotICAg
IFdlYlZpZXdIb3N0KiBkZXZUb29sc1dlYlZpZXcoKSB7IHJldHVybiBtX2RldlRvb2xzOyB9Ci0K
LSAgICBzdGF0aWMgY29uc3QgaW50IHZpcnR1YWxXaW5kb3dCb3JkZXIgPSAzOwotCi0gICAgdHlw
ZWRlZiBWZWN0b3I8V2ViVmlld0hvc3QqPiBXaW5kb3dMaXN0OwotICAgIFdpbmRvd0xpc3Qgd2lu
ZG93TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93TGlzdDsgfQotCi0gICAgV2ViS2l0OjpX
ZWJUaHJlYWQqIHdlYkNvbXBvc2l0b3JUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX3dlYkNvbXBv
c2l0b3JUaHJlYWQuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBXZWJWaWV3SG9zdCogY3JlYXRl
TmV3V2luZG93KGNvbnN0IFdlYktpdDo6V2ViVVJMJiwgRFJURGV2VG9vbHNBZ2VudCosIFdlYlRl
c3RSdW5uZXI6OldlYlRlc3RJbnRlcmZhY2VzKik7Ci0gICAgdm9pZCBjcmVhdGVNYWluV2luZG93
KCk7Ci0gICAgdm9pZCBjcmVhdGVEUlREZXZUb29sc0NsaWVudChEUlREZXZUb29sc0FnZW50Kik7
Ci0KLSAgICB2b2lkIHJlc2V0V2ViU2V0dGluZ3MoV2ViS2l0OjpXZWJWaWV3Jik7Ci0gICAgdm9p
ZCBkdW1wKCk7Ci0gICAgc3RkOjpzdHJpbmcgZHVtcEFsbEJhY2tGb3J3YXJkTGlzdHMoKTsKLSAg
ICB2b2lkIGR1bXBJbWFnZShTa0NhbnZhcyopIGNvbnN0OwotCi0gICAgYm9vbCBtX3Rlc3RJc1Bl
bmRpbmc7Ci0gICAgYm9vbCBtX3Rlc3RJc1ByZXBhcmluZzsKLSAgICBXZWJLaXQ6OldlYlZpZXcq
IG1fd2ViVmlldzsKLSAgICBXZWJLaXQ6OldlYldpZGdldCogbV9mb2N1c2VkV2lkZ2V0OwotICAg
IFdlYlZpZXdIb3N0KiBtX2RldlRvb2xzOwotCi0gICAgLy8gQmUgY2FyZWZ1bCBvZiB0aGUgZGVz
dHJ1Y3Rpb24gb3JkZXIgb2YgdGhlIGZvbGxvd2luZyBvYmplY3RzLgotICAgIFRlc3RFdmVudFBy
aW50ZXIgbV9wcmludGVyOwotICAgIE93blB0cjxEUlREZXZUb29sc0FnZW50PiBtX2RydERldlRv
b2xzQWdlbnQ7Ci0gICAgT3duUHRyPERSVERldlRvb2xzQ2xpZW50PiBtX2RydERldlRvb2xzQ2xp
ZW50OwotICAgIE93blB0cjxXZWJUZXN0UnVubmVyOjpXZWJUZXN0SW50ZXJmYWNlcz4gbV90ZXN0
SW50ZXJmYWNlczsKLSAgICBPd25QdHI8V2ViVGVzdFJ1bm5lcjo6V2ViVGVzdEludGVyZmFjZXM+
IG1fZGV2VG9vbHNUZXN0SW50ZXJmYWNlczsKLSAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRo
aXMgdGhyZWFkIGlzIGRlc3Ryb3llZCBhZnRlciB0aGUgV2ViVmlld0hvc3QuCi0gICAgT3duUHRy
PFdlYktpdDo6V2ViVGhyZWFkPiBtX3dlYkNvbXBvc2l0b3JUaHJlYWQ7Ci0gICAgT3duUHRyPFdl
YlZpZXdIb3N0PiBtX3dlYlZpZXdIb3N0OwotI2lmIEVOQUJMRShMSU5LX1BSRVJFTkRFUikKLSAg
ICBPd25QdHI8TW9ja1dlYlByZXJlbmRlcmluZ1N1cHBvcnQ+IG1fcHJlcmVuZGVyaW5nU3VwcG9y
dDsKLSNlbmRpZgotCi0gICAgVGVzdFBhcmFtcyBtX3BhcmFtczsKLSAgICBib29sIG1fZHVtcFBp
eGVsc0ZvckN1cnJlbnRUZXN0OwotICAgIGludCBtX3RpbWVvdXQ7IC8vIHRpbWVvdXQgdmFsdWUg
aW4gbWlsbGlzZWNvbmQKLSAgICBib29sIG1fYWxsb3dFeHRlcm5hbFBhZ2VzOwotICAgIGJvb2wg
bV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW9FbmFibGVkOwotICAgIGJvb2wgbV9hY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQ7Ci0gICAgYm9vbCBtX2Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJsZWQ7Ci0gICAgYm9vbCBt
X3NvZnR3YXJlQ29tcG9zaXRpbmdFbmFibGVkOwotICAgIGJvb2wgbV90aHJlYWRlZENvbXBvc2l0
aW5nRW5hYmxlZDsKLSAgICBib29sIG1fZm9yY2VDb21wb3NpdGluZ01vZGU7Ci0gICAgYm9vbCBt
X3RocmVhZGVkSFRNTFBhcnNlcjsKLSAgICBib29sIG1fYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJs
ZWQ7Ci0gICAgYm9vbCBtX3BlclRpbGVQYWludGluZ0VuYWJsZWQ7Ci0gICAgYm9vbCBtX2RlZmVy
cmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7Ci0gICAgV2ViVGVzdFJ1bm5lcjo6V2ViUHJlZmVyZW5j
ZXMgbV9wcmVmczsKLSAgICBib29sIG1fc3RyZXNzT3B0OwotICAgIGJvb2wgbV9zdHJlc3NEZW9w
dDsKLSAgICBzdGQ6OnN0cmluZyBtX2phdmFTY3JpcHRGbGFnczsKLSAgICBib29sIG1fZHVtcFdo
ZW5GaW5pc2hlZDsKLSAgICBib29sIG1faXNEaXNwbGF5aW5nTW9kYWxEaWFsb2c7Ci0KLQotICAg
IC8vIExpc3Qgb2YgYWxsIHdpbmRvd3MgaW4gdGhpcyBwcm9jZXNzLgotICAgIC8vIFRoZSBtYWlu
IHdpbmRvdyBzaG91bGQgYmUgcHV0IGludG8gd2luZG93TGlzdFswXS4KLSAgICBXaW5kb3dMaXN0
IG1fd2luZG93TGlzdDsKLQotI2lmIGRlZmluZWQoT1NfV0lOKQotICAgIC8vIFVzZWQgYnkgdGhl
IHdhdGNoZG9nIHRvIGtub3cgd2hlbiBpdCdzIGZpbmlzaGVkLgotICAgIEhBTkRMRSBtX2Zpbmlz
aGVkRXZlbnQ7Ci0jZW5kaWYKLX07Ci0KLXZvaWQgcGxhdGZvcm1Jbml0KGludCosIGNoYXIqKiop
Owotdm9pZCBvcGVuU3RhcnR1cERpYWxvZygpOwotYm9vbCBjaGVja0xheW91dFRlc3RTeXN0ZW1E
ZXBlbmRlbmNpZXMoKTsKLQotI2VuZGlmIC8vIFRlc3RTaGVsbF9oCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxBbmRyb2lkLmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxYTMyN2JiODUzZWVhMjFhZmM2MzFlMDAyNTNlMjAzODM3ZTM4ZjRj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0U2hlbGwu
aCIKLQotI2luY2x1ZGUgImxpbnV4L1dlYkZvbnRSZW5kZXJpbmcuaCIKLSNpbmNsdWRlICJ0aGly
ZF9wYXJ0eS9za2lhL2luY2x1ZGUvcG9ydHMvU2tUeXBlZmFjZV9hbmRyb2lkLmgiCi0KLW5hbWVz
cGFjZSB7Ci0KLS8vIE11c3QgYmUgc2FtZSBhcyBERVZJQ0VfRFJUX0RJUiBpbiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHkuCi0jZGVm
aW5lIERFVklDRV9EUlRfRElSICIvZGF0YS9sb2NhbC90bXAvZHJ0LyIKLQotY29uc3QgY2hhciBm
b250TWFpbkNvbmZpZ0ZpbGVbXSA9IERFVklDRV9EUlRfRElSICJhbmRyb2lkX21haW5fZm9udHMu
eG1sIjsKLWNvbnN0IGNoYXIgZm9udEZhbGxiYWNrQ29uZmlnRmlsZVtdID0gREVWSUNFX0RSVF9E
SVIgImFuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1sIjsKLWNvbnN0IGNoYXIgZm9udHNEaXJbXSA9
IERFVklDRV9EUlRfRElSICJmb250cy8iOwotCi19IC8vIG5hbWVzcGFjZQotCi12b2lkIHBsYXRm
b3JtSW5pdChpbnQqIGFyZ2MsIGNoYXIqKiogYXJndikKLXsKLSAgICAvLyBJbml0aWFsaXplIHNr
aWEgd2l0aCBjdXN0b21pemVkIGZvbnQgY29uZmlnIGZpbGVzLgotICAgIFNrVXNlVGVzdEZvbnRD
b25maWdGaWxlKGZvbnRNYWluQ29uZmlnRmlsZSwgZm9udEZhbGxiYWNrQ29uZmlnRmlsZSwgZm9u
dHNEaXIpOwotCi0gICAgLy8gRGlzYWJsZSBhdXRvIGhpbnQgYW5kIHVzZSBub3JtYWwgaGludGlu
ZyBpbiBsYXlvdXQgdGVzdCBtb2RlIHRvIHByb2R1Y2UgdGhlIHNhbWUgZm9udCBtZXRyaWNzIGFz
IGNocm9taXVtLWxpbnV4LgotICAgIFdlYktpdDo6V2ViRm9udFJlbmRlcmluZzo6c2V0QXV0b0hp
bnQoZmFsc2UpOwotICAgIFdlYktpdDo6V2ViRm9udFJlbmRlcmluZzo6c2V0SGludGluZyhTa1Bh
aW50OjprTm9ybWFsX0hpbnRpbmcpOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFNoZWxsTWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFNoZWxsTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2VkZTU2
NjY5YjI4NDE4MzkzNzc1Njg2NjAzN2FkMDA4MDhiZjI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RTaGVsbE1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaW5jbHVkZSAiVGVzdFNoZWxsLmgiCi0jaW5jbHVkZSAid2Via2l0L3N1cHBv
cnQvd2Via2l0X3N1cHBvcnQuaCIKLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLQotLy8gQSBj
bGFzcyB0byBiZSB0aGUgdGFyZ2V0L3NlbGVjdG9yIG9mIHRoZSAid2F0Y2hkb2ciIHRocmVhZCB0
aGF0IGVuc3VyZXMKLS8vIHBhZ2VzIHRpbWVvdXQgaWYgdGhleSB0YWtlIHRvbyBsb25nIGFuZCB0
ZWxscyB0aGUgdGVzdCBoYXJuZXNzIHZpYSBzdGRvdXQuCi1AaW50ZXJmYWNlIFdhdGNoRG9nVGFy
Z2V0IDogTlNPYmplY3QgewotQHByaXZhdGUKLSAgICBOU1RpbWVJbnRlcnZhbCBfdGltZW91dDsK
LX0KLS8vIHx0aW1lb3V0fCBpcyBpbiBzZWNvbmRzCi0tIChpZClpbml0V2l0aFRpbWVvdXQ6KE5T
VGltZUludGVydmFsKXRpbWVvdXQ7Ci0vLyBzZXJ2ZXMgYXMgdGhlICJydW4iIG1ldGhvZCBvZiBh
IE5TVGhyZWFkLgotLSAodm9pZClydW46KGlkKXNlbmRlcjsKLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIFdhdGNoRG9nVGFyZ2V0Ci0KLS0gKGlkKWluaXRXaXRoVGltZW91dDooTlNUaW1lSW50ZXJ2
YWwpdGltZW91dAotewotICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIF90
aW1lb3V0ID0gdGltZW91dDsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClydW46KGlk
KWlnbm9yZQotewotICAgIE5TQXV0b3JlbGVhc2VQb29sKiBwb29sID0gW1tOU0F1dG9yZWxlYXNl
UG9vbCBhbGxvY10gaW5pdF07Ci0KLSAgICAvLyBjaGVjayBmb3IgZGVidWdnZXIsIGp1c3QgYmFp
bCBpZiBzby4gV2UgZG9uJ3Qgd2FudCB0aGUgdGltZW91dHMgaGl0dGluZwotICAgIC8vIHdoZW4g
d2UncmUgdHJ5aW5nIHRvIHRyYWNrIGRvd24gYW4gaXNzdWUuCi0gICAgaWYgKHdlYmtpdF9zdXBw
b3J0OjpCZWluZ0RlYnVnZ2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TVGhyZWFkKiBj
dXJyZW50VGhyZWFkID0gW05TVGhyZWFkIGN1cnJlbnRUaHJlYWRdOwotCi0gICAgLy8gV2FpdCB0
byBiZSBjYW5jZWxsZWQuIElmIHdlIGFyZSB0aGF0IG1lYW5zIHRoZSB0ZXN0IGZpbmlzaGVkLiBJ
ZiBpdCBoYXNuJ3QsCi0gICAgLy8gdGhlbiB3ZSBuZWVkIHRvIHRlbGwgdGhlIGxheW91dCBzY3Jp
cHQgd2UgdGltZWQgb3V0IGFuZCBzdGFydCBhZ2Fpbi4KLSAgICBOU0RhdGUqIGxpbWl0RGF0ZSA9
IFtOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZU5vdzpfdGltZW91dF07Ci0gICAgd2hp
bGUgKFsoTlNEYXRlKilbTlNEYXRlIGRhdGVdIGNvbXBhcmU6bGltaXREYXRlXSA9PSBOU09yZGVy
ZWRBc2NlbmRpbmcgJiYKLSAgICAgICAgICAgIVtjdXJyZW50VGhyZWFkIGlzQ2FuY2VsbGVkXSkg
ewotICAgICAgICAvLyBzbGVlcCBmb3IgYSBzbWFsbCBpbmNyZW1lbnQgdGhlbiBjaGVjayBhZ2Fp
bgotICAgICAgICBOU0RhdGUqIGluY3JlbWVudERhdGUgPSBbTlNEYXRlIGRhdGVXaXRoVGltZUlu
dGVydmFsU2luY2VOb3c6MS4wXTsKLSAgICAgICAgW05TVGhyZWFkIHNsZWVwVW50aWxEYXRlOmlu
Y3JlbWVudERhdGVdOwotICAgIH0KLSAgICBpZiAoIVtjdXJyZW50VGhyZWFkIGlzQ2FuY2VsbGVk
XSkgewotICAgICAgICAvLyBQcmludCBhIHdhcm5pbmcgdG8gYmUgY2F1Z2h0IGJ5IHRoZSBsYXlv
dXQtdGVzdCBzY3JpcHQuCi0gICAgICAgIC8vIE5vdGU6IHRoZSBsYXlvdXQgdGVzdCBkcml2ZXIg
bWF5IG9yIG1heSBub3QgcmVjb2duaXplCi0gICAgICAgIC8vIHRoaXMgYXMgYSB0aW1lb3V0Lgot
ICAgICAgICBwdXRzKCIjVEVTVF9USU1FRF9PVVRcbiIpOwotICAgICAgICBwdXRzKCIjRU9GXG4i
KTsKLSAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgICAgIGV4aXQoMCk7Ci0gICAgfQotCi0g
ICAgW3Bvb2wgcmVsZWFzZV07Ci19Ci0KLUBlbmQKLQotdm9pZCBUZXN0U2hlbGw6OndhaXRUZXN0
RmluaXNoZWQoKQotewotICAgIEFTU0VSVCghbV90ZXN0SXNQZW5kaW5nKTsKLQotICAgIG1fdGVz
dElzUGVuZGluZyA9IHRydWU7Ci0KLSAgICAvLyBDcmVhdGUgYSB3YXRjaGRvZyB0aHJlYWQgd2hp
Y2gganVzdCBzZXRzIGEgdGltZXIgYW5kCi0gICAgLy8ga2lsbHMgdGhlIHByb2Nlc3MgaWYgaXQg
dGltZXMgb3V0LiAgVGhpcyBjYXRjaGVzIHJlYWxseQotICAgIC8vIGJhZCBoYW5ncyB3aGVyZSB0
aGUgc2hlbGwgaXNuJ3QgY29taW5nIGJhY2sgdG8gdGhlCi0gICAgLy8gbWVzc2FnZSBsb29wLiAg
SWYgdGhlIHdhdGNoZG9nIGlzIHdoYXQgY2F0Y2hlcyBhCi0gICAgLy8gdGltZW91dCwgaXQgY2Fu
J3QgZG8gYW55dGhpbmcgZXhjZXB0IHRlcm1pbmF0ZSB0aGUgdGVzdAotICAgIC8vIHNoZWxsLCB3
aGljaCBpcyB1bmZvcnR1bmF0ZS4KLSAgICAvLyBXaW5kb3dzIG11bHRpcGxpZXMgYnkgMi41LCBi
dXQgdGhhdCBjYXVzZXMgdXMgdG8gcnVuIGZvciBmYXIsIGZhciB0b28KLSAgICAvLyBsb25nLiBX
ZSB1c2UgdGhlIHBhc3NlZCB2YWx1ZSBhbmQgbGV0IHRoZSBzY3JpcHRzIGZsYWcgb3ZlcnJpZGUK
LSAgICAvLyB0aGUgdmFsdWUgYXMgbmVlZGVkLgotICAgIE5TVGltZUludGVydmFsIHRpbWVvdXRT
ZWNvbmRzID0gbGF5b3V0VGVzdFRpbWVvdXRGb3JXYXRjaERvZygpIC8gMTAwMDsKLSAgICBXYXRj
aERvZ1RhcmdldCogd2F0Y2hkb2cgPSBbW1tXYXRjaERvZ1RhcmdldCBhbGxvY10KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRXaXRoVGltZW91dDp0aW1lb3V0U2Vjb25k
c10gYXV0b3JlbGVhc2VdOwotICAgIE5TVGhyZWFkKiB0aHJlYWQgPSBbW05TVGhyZWFkIGFsbG9j
XSBpbml0V2l0aFRhcmdldDp3YXRjaGRvZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxlY3RvcjpAc2VsZWN0b3IocnVuOikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Om5pbF07Ci0gICAgW3RocmVhZCBzdGFydF07Ci0K
LSAgICAvLyBUZXN0RmluaXNoZWQoKSB3aWxsIHBvc3QgYSBxdWl0IG1lc3NhZ2UgdG8gYnJlYWsg
dGhpcyBsb29wIHdoZW4gdGhlIHBhZ2UKLSAgICAvLyBmaW5pc2hlcyBsb2FkaW5nLgotICAgIHdo
aWxlIChtX3Rlc3RJc1BlbmRpbmcpCi0gICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdl
TG9vcCgpOwotCi0gICAgLy8gVGVsbCB0aGUgd2F0Y2hkb2cgdGhhdCB3ZSdyZSBmaW5pc2hlZC4g
Tm8gcG9pbnQgd2FpdGluZyB0byByZS1qb2luLCBpdCdsbAotICAgIC8vIGRpZSBvbiBpdHMgb3du
LgotICAgIFt0aHJlYWQgY2FuY2VsXTsKLSAgICBbdGhyZWFkIHJlbGVhc2VdOwotfQotCi12b2lk
IHBsYXRmb3JtSW5pdChpbnQqLCBjaGFyKioqKQotewotfQotCi12b2lkIG9wZW5TdGFydHVwRGlh
bG9nKCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGRvZXNuJ3Qgd29yay4gTmVlZCBOU0Fw
cGxpY2F0aW9uIGV2ZW50IGxvb3A/Ci0gICAgTlNBbGVydCogYWxlcnQgPSBbW1tOU0FsZXJ0IGFs
bG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Ci0gICAgYWxlcnQubWVzc2FnZVRleHQgPSBAIkF0dGFj
aCB0byBtZT8iOwotICAgIGFsZXJ0LmluZm9ybWF0aXZlVGV4dCA9IEAiVGhpcyB3b3VsZCBwcm9i
YWJseSBiZSBhIGdvb2QgdGltZSB0byBhdHRhY2ggeW91ciBkZWJ1Z2dlci4iOwotICAgIFthbGVy
dCBhZGRCdXR0b25XaXRoVGl0bGU6QCJPSyJdOwotICAgIFthbGVydCBydW5Nb2RhbF07Ci19Ci0K
LWJvb2wgY2hlY2tMYXlvdXRUZXN0U3lzdGVtRGVwZW5kZW5jaWVzKCkKLXsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFNoZWxsUG9zaXguY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
UG9zaXguY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmQ4YTU0MWNjMDU4NGVl
MDU5YTQyYzY4OWMwOTM3NTIxOTU2YWIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFBv
c2l4LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVGVzdFNoZWxsLmgiCi0KLSNpbmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93ZWJr
aXRfc3VwcG9ydC5oIgotCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+
Ci0KLXN0YXRpYyB2b2lkIEFsYXJtSGFuZGxlcihpbnQpCi17Ci0gICAgLy8gSWYgdGhlIGFsYXJt
IGFsYXJtZWQsIGtpbGwgdGhlIHByb2Nlc3Mgc2luY2Ugd2UgaGF2ZSBhIHJlYWxseSBiYWQgaGFu
Zy4KLSAgICBwdXRzKCJcbiNURVNUX1RJTUVEX09VVFxuIik7Ci0gICAgcHV0cygiI0VPRlxuIik7
Ci0gICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgZXhpdCgwKTsKLX0KLQotdm9pZCBUZXN0U2hlbGw6
OndhaXRUZXN0RmluaXNoZWQoKQotewotICAgIEFTU0VSVCghbV90ZXN0SXNQZW5kaW5nKTsKLSAg
ICBtX3Rlc3RJc1BlbmRpbmcgPSB0cnVlOwotCi0gICAgLy8gSW5zdGFsbCBhbiBhbGFybSBzaWdu
YWwgaGFuZGxlciB0aGF0IHdpbGwga2lsbCB1cyBpZiB3ZSB0aW1lIG91dC4KLSAgICBzdHJ1Y3Qg
c2lnYWN0aW9uIGFsYXJtQWN0aW9uOwotICAgIGFsYXJtQWN0aW9uLnNhX2hhbmRsZXIgPSBBbGFy
bUhhbmRsZXI7Ci0gICAgc2lnZW1wdHlzZXQoJmFsYXJtQWN0aW9uLnNhX21hc2spOwotICAgIGFs
YXJtQWN0aW9uLnNhX2ZsYWdzID0gMDsKLQotICAgIHN0cnVjdCBzaWdhY3Rpb24gb2xkQWN0aW9u
OwotICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmYWxhcm1BY3Rpb24sICZvbGRBY3Rpb24pOwotICAg
IGFsYXJtKGxheW91dFRlc3RUaW1lb3V0Rm9yV2F0Y2hEb2coKSAvIDEwMDApOwotCi0gICAgLy8g
VGVzdEZpbmlzaGVkKCkgd2lsbCBwb3N0IGEgcXVpdCBtZXNzYWdlIHRvIGJyZWFrIHRoaXMgbG9v
cCB3aGVuIHRoZSBwYWdlCi0gICAgLy8gZmluaXNoZXMgbG9hZGluZy4KLSAgICB3aGlsZSAobV90
ZXN0SXNQZW5kaW5nKQotICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuTWVzc2FnZUxvb3AoKTsK
LQotICAgIC8vIFJlbW92ZSB0aGUgYWxhcm0uCi0gICAgYWxhcm0oMCk7Ci0gICAgc2lnYWN0aW9u
KFNJR0FMUk0sICZvbGRBY3Rpb24sIDApOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFNoZWxsU3R1Yi5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGxTdHViLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NmMzNGY4NGIzOTVhN2UxZmUyODFkZGY3NDI5ZDFlYzc0NDc0ZWEwZC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0U2hlbGxTdHViLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgotCi1ib29sIGNoZWNr
TGF5b3V0VGVzdFN5c3RlbURlcGVuZGVuY2llcygpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgb3BlblN0YXJ0dXBEaWFsb2coKQotewotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50
ZWQuCi19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbFdpbi5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxXaW4u
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTE2NDFlZDNlMjBjYmRmNmM5ZTBl
YjM5MjA1OWQyNTg0YmRkZGUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFdpbi5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUZXN0U2hlbGwuaCIKLQotI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBw
b3J0LmgiCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxpby5oPgotI2luY2x1ZGUgPGxp
c3Q+Ci0jaW5jbHVkZSA8cHJvY2Vzcy5oPgotI2luY2x1ZGUgPHNobHdhcGkuaD4KLSNpbmNsdWRl
IDxzdHJpbmc+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0K
LSNkZWZpbmUgU0laRU9GX1NUUlVDVF9XSVRIX1NQRUNJRklFRF9MQVNUX01FTUJFUihzdHJ1Y3RO
YW1lLCBtZW1iZXIpIFwKLSAgICBvZmZzZXRvZihzdHJ1Y3ROYW1lLCBtZW1iZXIpICsgXAotICAg
IChzaXplb2Ygc3RhdGljX2Nhc3Q8c3RydWN0TmFtZSo+KDApLT5tZW1iZXIpCi0jZGVmaW5lIE5P
TkNMSUVOVE1FVFJJQ1NfU0laRV9QUkVfVklTVEEgXAotICAgIFNJWkVPRl9TVFJVQ1RfV0lUSF9T
UEVDSUZJRURfTEFTVF9NRU1CRVIoTk9OQ0xJRU5UTUVUUklDUywgbGZNZXNzYWdlRm9udCkKLQot
Ly8gVGhyZWFkIG1haW4gdG8gcnVuIGZvciB0aGUgdGhyZWFkIHdoaWNoIGp1c3QgdGVzdHMgZm9y
IHRpbWVvdXQuCi11bnNpZ25lZCBpbnQgX19zdGRjYWxsIHdhdGNoRG9nVGhyZWFkKHZvaWQqIGFy
ZykKLXsKLSAgICAvLyBJZiB3ZSdyZSBkZWJ1Z2dpbmcgYSBsYXlvdXQgdGVzdCwgZG9uJ3QgdGlt
ZW91dC4KLSAgICBpZiAoOjpJc0RlYnVnZ2VyUHJlc2VudCgpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIFRlc3RTaGVsbCogc2hlbGwgPSBzdGF0aWNfY2FzdDxUZXN0U2hlbGwqPihhcmcpOwot
ICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHVzZXItc3BlY2lmaWVkIHRpbWUgc2V0dGluZ3MgYXMg
d2l0aCB0aGUgb3JpZ2luYWwKLSAgICAvLyBDaHJvbWl1bSBpbXBsZW1lbnRhdGlvbj8KLSAgICBE
V09SRCB0aW1lb3V0ID0gc3RhdGljX2Nhc3Q8RFdPUkQ+KHNoZWxsLT5sYXlvdXRUZXN0VGltZW91
dEZvcldhdGNoRG9nKCkpOwotICAgIERXT1JEIHJ2ID0gV2FpdEZvclNpbmdsZU9iamVjdChzaGVs
bC0+ZmluaXNoZWRFdmVudCgpLCB0aW1lb3V0KTsKLSAgICBpZiAocnYgPT0gV0FJVF9USU1FT1VU
KSB7Ci0gICAgICAgIC8vIFByaW50IGEgd2FybmluZyB0byBiZSBjYXVnaHQgYnkgdGhlIGxheW91
dC10ZXN0IHNjcmlwdC4KLSAgICAgICAgLy8gTm90ZTogdGhlIGxheW91dCB0ZXN0IGRyaXZlciBt
YXkgb3IgbWF5IG5vdCByZWNvZ25pemUKLSAgICAgICAgLy8gdGhpcyBhcyBhIHRpbWVvdXQuCi0g
ICAgICAgIHB1dHMoIlxuI1RFU1RfVElNRURfT1VUXG4iKTsKLSAgICAgICAgcHV0cygiI0VPRlxu
Iik7Ci0gICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAgICAgICBUZXJtaW5hdGVQcm9jZXNzKEdl
dEN1cnJlbnRQcm9jZXNzKCksIDApOwotICAgIH0KLSAgICAvLyBGaW5pc2hlZCBub3JtYWxseS4K
LSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBUZXN0U2hlbGw6OndhaXRUZXN0RmluaXNoZWQoKQot
ewotICAgIEFTU0VSVCghbV90ZXN0SXNQZW5kaW5nKTsKLQotICAgIG1fdGVzdElzUGVuZGluZyA9
IHRydWU7Ci0KLSAgICAvLyBDcmVhdGUgYSB3YXRjaGRvZyB0aHJlYWQgd2hpY2gganVzdCBzZXRz
IGEgdGltZXIgYW5kCi0gICAgLy8ga2lsbHMgdGhlIHByb2Nlc3MgaWYgaXQgdGltZXMgb3V0LiBU
aGlzIGNhdGNoZXMgcmVhbGx5Ci0gICAgLy8gYmFkIGhhbmdzIHdoZXJlIHRoZSBzaGVsbCBpc24n
dCBjb21pbmcgYmFjayB0byB0aGUKLSAgICAvLyBtZXNzYWdlIGxvb3AuIElmIHRoZSB3YXRjaGRv
ZyBpcyB3aGF0IGNhdGNoZXMgYQotICAgIC8vIHRpbWVvdXQsIGl0IGNhbid0IGRvIGFueXRoaW5n
IGV4Y2VwdCB0ZXJtaW5hdGUgdGhlIHRlc3QKLSAgICAvLyBzaGVsbCwgd2hpY2ggaXMgdW5mb3J0
dW5hdGUuCi0gICAgbV9maW5pc2hlZEV2ZW50ID0gQ3JlYXRlRXZlbnQoMCwgVFJVRSwgRkFMU0Us
IDApOwotICAgIEFTU0VSVChtX2ZpbmlzaGVkRXZlbnQpOwotCi0gICAgSEFORExFIHRocmVhZEhh
bmRsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPihfYmVnaW50aHJlYWRleCgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndhdGNo
RG9nVGhyZWFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwKSk7Ci0gICAgQVNTRVJUKHRocmVhZEhhbmRsZSk7Ci0KLSAgICAv
LyBUZXN0RmluaXNoZWQoKSB3aWxsIHBvc3QgYSBxdWl0IG1lc3NhZ2UgdG8gYnJlYWsgdGhpcyBs
b29wIHdoZW4gdGhlIHBhZ2UKLSAgICAvLyBmaW5pc2hlcyBsb2FkaW5nLgotICAgIHdoaWxlICht
X3Rlc3RJc1BlbmRpbmcpCi0gICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdlTG9vcCgp
OwotCi0gICAgLy8gVGVsbCB0aGUgd2F0Y2hkb2cgdGhhdCB3ZSBhcmUgZmluaXNoZWQuCi0gICAg
U2V0RXZlbnQobV9maW5pc2hlZEV2ZW50KTsKLQotICAgIC8vIFdhaXQgdG8gam9pbiB0aGUgd2F0
Y2hkb2cgdGhyZWFkLiAgKHVwIHRvIDFzLCB0aGVuIHF1aXQpCi0gICAgV2FpdEZvclNpbmdsZU9i
amVjdCh0aHJlYWRIYW5kbGUsIDEwMDApOwotfQotCi12b2lkIHBsYXRmb3JtSW5pdChpbnQqLCBj
aGFyKioqKQotewotICAgIC8vIFNldCBzdGRvdXQvc3RkZXJyIGJpbmFyeSBtb2RlLgotICAgIF9z
ZXRtb2RlKF9maWxlbm8oc3Rkb3V0KSwgX09fQklOQVJZKTsKLSAgICBfc2V0bW9kZShfZmlsZW5v
KHN0ZGVyciksIF9PX0JJTkFSWSk7Ci0KLSAgICAvLyBMb2FkIEFoZW0gZm9udC4KLSAgICAvLyBB
SEVNX19fXy5UVEYgaXMgY29waWVkIHRvIHRoZSBkaXJlY3Rvcnkgb2YgRHVtcFJlbmRlclRyZWUu
ZXhlIGJ5IFdlYktpdC5neXAuCi0gICAgV0NIQVIgcGF0aFtfTUFYX1BBVEhdOwotICAgIGlmICgh
OjpHZXRNb2R1bGVGaWxlTmFtZSgwLCBwYXRoLCBfTUFYX1BBVEgpKSB7Ci0gICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiQ2FuJ3QgZ2V0IHRoZSBtb2R1bGUgcGF0aC5cbiIpOwotICAgICAgICBleGl0
KDEpOwotICAgIH0KLSAgICA6OlBhdGhSZW1vdmVGaWxlU3BlYyhwYXRoKTsKLSAgICB3Y3NjYXRf
cyhwYXRoLCBfTUFYX1BBVEgsIEwiL0FIRU1fX19fLlRURiIpOwotICAgIHN0cnVjdCBfc3RhdCBh
aGVtU3RhdDsKLSAgICBpZiAoX3dzdGF0KHBhdGgsICZhaGVtU3RhdCkgPT0gLTEpIHsKLSAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBhY2Nlc3M6ICclUydcbiIsIHBhdGgpOwotICAgICAg
ICBleGl0KDEpOwotICAgIH0KLQotICAgIEZJTEUqIGZwID0gX3dmb3BlbihwYXRoLCBMInJiIik7
Ci0gICAgaWYgKCFmcCkgewotICAgICAgICBfd3BlcnJvcihwYXRoKTsKLSAgICAgICAgZXhpdCgx
KTsKLSAgICB9Ci0gICAgc2l6ZV90IHNpemUgPSBhaGVtU3RhdC5zdF9zaXplOwotICAgIGNoYXIq
IGZvbnRCdWZmZXIgPSBuZXcgY2hhcltzaXplXTsKLSAgICBpZiAoZnJlYWQoZm9udEJ1ZmZlciwg
MSwgc2l6ZSwgZnApICE9IHNpemUpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBy
ZWFkIHRoZSBmb250OiAnJVMnXG4iLCBwYXRoKTsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAg
ICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgZmNsb3NlKGZwKTsKLSAgICBEV09SRCBudW1Gb250cyA9
IDE7Ci0gICAgSEFORExFIGZvbnRIYW5kbGUgPSA6OkFkZEZvbnRNZW1SZXNvdXJjZUV4KGZvbnRC
dWZmZXIsIHNpemUsIDAsICZudW1Gb250cyk7Ci0gICAgZGVsZXRlW10gZm9udEJ1ZmZlcjsgLy8g
T1Mgb3ducyBhIGNvcHkgb2YgdGhlIGJ1ZmZlci4KLSAgICBpZiAoIWZvbnRIYW5kbGUpIHsKLSAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcmVnaXN0ZXIgQWhlbSBmb250OiAnJVMn
XG4iLCBwYXRoKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgLy8gV2UgZG9uJ3QgbmVl
ZCB0byByZWxlYXNlIHRoZSBmb250IGV4cGxpY2l0bHkuCi19Ci0KLXZvaWQgb3BlblN0YXJ0dXBE
aWFsb2coKQotewotICAgIDo6TWVzc2FnZUJveCgwLCBMIkF0dGFjaCB0byBtZT8iLCBMIkR1bXBS
ZW5kZXJUcmVlIiwgTUJfT0spOwotfQotCi1ib29sIGNoZWNrTGF5b3V0VGVzdFN5c3RlbURlcGVu
ZGVuY2llcygpCi17Ci0gICAgLy8gVGhpcyBtZXRyaWMgd2lsbCBiZSAxNyB3aGVuIGZvbnQgc2l6
ZSBpcyAiTm9ybWFsIi4KLSAgICAvLyBUaGUgc2l6ZSBvZiBkcm9wLWRvd24gbWVudXMgZGVwZW5k
cyBvbiBpdC4KLSAgICBpbnQgdmVydGljYWxTY3JvbGxTaXplID0gOjpHZXRTeXN0ZW1NZXRyaWNz
KFNNX0NYVlNDUk9MTCk7Ci0gICAgaW50IHJlcXVpcmVkVlNjcm9sbFNpemUgPSAxNzsKLSAgICBz
dGQ6Omxpc3Q8c3RkOjpzdHJpbmc+IGVycm9yczsKLSAgICBpZiAodmVydGljYWxTY3JvbGxTaXpl
ICE9IHJlcXVpcmVkVlNjcm9sbFNpemUpCi0gICAgICAgIGVycm9ycy5wdXNoX2JhY2soIk11c3Qg
dXNlIG5vcm1hbCBzaXplIGZvbnRzICg5NiBkcGkpLiIpOwotCi0gICAgLy8gQ2xlYXJUeXBlIG11
c3QgYmUgZGlzYWJsZWQsIGJlY2F1c2UgdGhlIHJlbmRlcmluZyBpcyB1bnByZWRpY3RhYmxlLgot
ICAgIEJPT0wgZm9udFNtb290aGluZ0VuYWJsZWQ7Ci0gICAgOjpTeXN0ZW1QYXJhbWV0ZXJzSW5m
byhTUElfR0VURk9OVFNNT09USElORywgMCwgJmZvbnRTbW9vdGhpbmdFbmFibGVkLCAwKTsKLSAg
ICBpbnQgZm9udFNtb290aGluZ1R5cGU7Ci0gICAgOjpTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElf
R0VURk9OVFNNT09USElOR1RZUEUsIDAsICZmb250U21vb3RoaW5nVHlwZSwgMCk7Ci0gICAgaWYg
KGZvbnRTbW9vdGhpbmdFbmFibGVkICYmIChmb250U21vb3RoaW5nVHlwZSA9PSBGRV9GT05UU01P
T1RISU5HQ0xFQVJUWVBFKSkKLSAgICAgICAgZXJyb3JzLnB1c2hfYmFjaygiQ2xlYXJUeXBlIG11
c3QgYmUgZGlzYWJsZWQuIik7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHdlJ3JlIHVzaW5nIHRoZSBk
ZWZhdWx0IHN5c3RlbSBmb250cy4KLSAgICBPU1ZFUlNJT05JTkZPIHZlcnNpb25JbmZvID0gezB9
OwotICAgIHZlcnNpb25JbmZvLmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2YodmVyc2lvbklu
Zm8pOwotICAgIDo6R2V0VmVyc2lvbkV4KCZ2ZXJzaW9uSW5mbyk7Ci0gICAgY29uc3QgYm9vbCBp
c1Zpc3RhT3JMYXRlciA9ICh2ZXJzaW9uSW5mby5kd01ham9yVmVyc2lvbiA+PSA2KTsKLSAgICBO
T05DTElFTlRNRVRSSUNTIG1ldHJpY3MgPSB7MH07Ci0gICAgbWV0cmljcy5jYlNpemUgPSBpc1Zp
c3RhT3JMYXRlciA/IChzaXplb2YgTk9OQ0xJRU5UTUVUUklDUykgOiBOT05DTElFTlRNRVRSSUNT
X1NJWkVfUFJFX1ZJU1RBOwotICAgIGNvbnN0IGJvb2wgc3VjY2VzcyA9ICEhOjpTeXN0ZW1QYXJh
bWV0ZXJzSW5mbyhTUElfR0VUTk9OQ0xJRU5UTUVUUklDUywgbWV0cmljcy5jYlNpemUsICZtZXRy
aWNzLCAwKTsKLSAgICBBU1NFUlQoc3VjY2Vzcyk7Ci0gICAgTE9HRk9OVFcqIHN5c3RlbUZvbnRz
W10gPQotICAgICAgICB7Jm1ldHJpY3MubGZTdGF0dXNGb250LCAmbWV0cmljcy5sZk1lbnVGb250
LCAmbWV0cmljcy5sZlNtQ2FwdGlvbkZvbnR9OwotICAgIGNvbnN0IHdjaGFyX3QqIGNvbnN0IHJl
cXVpcmVkRm9udCA9IGlzVmlzdGFPckxhdGVyID8gTCJTZWdvZSBVSSIgOiBMIlRhaG9tYSI7Ci0g
ICAgY29uc3QgaW50IHJlcXVpcmVkRm9udFNpemUgPSBpc1Zpc3RhT3JMYXRlciA/IC0xMiA6IC0x
MTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5c2l6ZShzeXN0ZW1Gb250cyk7ICsr
aSkgewotICAgICAgICBpZiAoc3lzdGVtRm9udHNbaV0tPmxmSGVpZ2h0ICE9IHJlcXVpcmVkRm9u
dFNpemUgfHwgd2NzY21wKHJlcXVpcmVkRm9udCwgc3lzdGVtRm9udHNbaV0tPmxmRmFjZU5hbWUp
KSB7Ci0gICAgICAgICAgICBlcnJvcnMucHVzaF9iYWNrKGlzVmlzdGFPckxhdGVyID8gIk11c3Qg
dXNlIGVpdGhlciB0aGUgQWVybyBvciBCYXNpYyB0aGVtZS4iIDogIk11c3QgdXNlIHRoZSBkZWZh
dWx0IFhQIHRoZW1lIChMdW5hKS4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKCFlcnJvcnMuZW1wdHkoKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIiVzIiwKLSAgICAgICAgICAgICAgICAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCi0gICAgICAgICAgICAgICAg
IiMjIExheW91dCB0ZXN0IHN5c3RlbSBkZXBlbmRlbmNpZXMgY2hlY2sgZmFpbGVkLlxuIgotICAg
ICAgICAgICAgICAgICIjI1xuIik7Ci0gICAgICAgIGZvciAoc3RkOjpsaXN0PHN0ZDo6c3RyaW5n
Pjo6aXRlcmF0b3IgaXQgPSBlcnJvcnMuYmVnaW4oKTsgaXQgIT0gZXJyb3JzLmVuZCgpOyArK2l0
KQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIjIyAlc1xuIiwgaXQtPmNfc3RyKCkpOwot
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwKLSAgICAgICAgICAgICAgICAiIyNcbiIKLSAg
ICAgICAgICAgICAgICAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVycm9ycy5l
bXB0eSgpOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFNoZWxsWDExLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFgx
MS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMjVhYTM0YmU1ZTE1MzllZjEx
ZmIzZmU5ZDBjMjBlODYyNTFjNTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsWDExLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlRlc3RTaGVsbC5oIgotCi0jaW5jbHVkZSA8Zm9udGNvbmZpZy9mb250Y29uZmlnLmg+
Ci0KLSNpZiBVU0UoR1RLKQotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotdm9pZCBvcGVuU3RhcnR1
cERpYWxvZygpCi17Ci0gICAgR3RrV2lkZ2V0KiBkaWFsb2cgPSBndGtfbWVzc2FnZV9kaWFsb2df
bmV3KAotICAgICAgICAwLCBHVEtfRElBTE9HX01PREFMLCBHVEtfTUVTU0FHRV9JTkZPLCBHVEtf
QlVUVE9OU19PSywgIkF0dGFjaCB0byBtZT8iKTsKLSAgICBndGtfd2luZG93X3NldF90aXRsZShH
VEtfV0lORE9XKGRpYWxvZyksICJEdW1wUmVuZGVyVHJlZSIpOwotICAgIGd0a19kaWFsb2dfcnVu
KEdUS19ESUFMT0coZGlhbG9nKSk7IC8vIFJ1bnMgYSBuZXN0ZWQgbWVzc2FnZSBsb29wLgotICAg
IGd0a193aWRnZXRfZGVzdHJveShkaWFsb2cpOwotfQotCi1ib29sIGNoZWNrTGF5b3V0VGVzdFN5
c3RlbURlcGVuZGVuY2llcygpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYgLy8gVVNF
KEdUSykKLQotc3RhdGljIGJvb2wgY2hlY2tBbmRMb2FkRm9udEZpbGUoRmNDb25maWcqIGZvbnRj
ZmcsIGNvbnN0IGNoYXIqIHBhdGgxLCBjb25zdCBjaGFyKiBwYXRoMikKLXsKLSAgICBjb25zdCBj
aGFyKiBmb250ID0gcGF0aDE7Ci0gICAgaWYgKGFjY2Vzcyhmb250LCBSX09LKSA8IDApIHsKLSAg
ICAgICAgZm9udCA9IHBhdGgyOwotICAgICAgICBpZiAoYWNjZXNzKGZvbnQsIFJfT0spIDwgMCkg
ewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJZb3UgYXJlIG1pc3NpbmcgJXMgb3IgJXMu
IFdpdGhvdXQgdGhpcywgc29tZSBsYXlvdXQgdGVzdHMgbWF5IGZhaWwuICIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiU2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS93
aWtpL0xheW91dFRlc3RzTGludXggIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3Ig
bW9yZS5cbiIsIHBhdGgxLCBwYXRoMik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgaWYgKCFGY0NvbmZpZ0FwcEZvbnRBZGRGaWxlKGZvbnRjZmcsIChG
Y0NoYXI4ICopIGZvbnQpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGxv
YWQgZm9udCAlc1xuIiwgZm9udCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldHVwRm9udGNvbmZpZygpCi17Ci0gICAg
Ly8gV2Ugd2lzaCB0byBtYWtlIHRoZSBsYXlvdXQgdGVzdHMgcmVwcm9kdWNhYmxlIHdpdGggcmVz
cGVjdCB0byBmb250cy4gU2tpYQotICAgIC8vIHVzZXMgZm9udGNvbmZpZyB0byByZXNvbHZlIGZv
bnQgZmFtaWx5IG5hbWVzIGZyb20gV2ViS2l0IGludG8gYWN0dWFsIGZvbnQKLSAgICAvLyBmaWxl
cyBmb3VuZCBvbiB0aGUgY3VycmVudCBzeXN0ZW0uIFRoaXMgbWVhbnMgdGhhdCBmb250cyB2YXJ5
IGJhc2VkIG9uIHRoZQotICAgIC8vIHN5c3RlbSBhbmQgYWxzbyBvbiB0aGUgZm9udGNvbmZpZyBj
b25maWd1cmF0aW9uLgotICAgIC8vCi0gICAgLy8gVG8gYXZvaWQgdGhpcyB3ZSBpbml0aWFsaXNl
IGZvbnRjb25maWcgaGVyZSBhbmQgaW5zdGFsbCBhIGNvbmZpZ3VyYXRpb24KLSAgICAvLyB3aGlj
aCBvbmx5IGtub3dzIGFib3V0IGEgZmV3LCBzZWxlY3QsIGZvbnRzLgotCi0gICAgLy8gV2UgaGF2
ZSBmb250Y29uZmlnIHBhcnNlIGEgY29uZmlnIGZpbGUgZnJvbSBvdXIgcmVzb3VyY2VzIGZpbGUu
IFRoaXMKLSAgICAvLyBzZXRzIGEgbnVtYmVyIG9mIGFsaWFzZXMgKCJzYW5zIi0+IkFyaWFsIiBl
dGMpLCBidXQgZG9lc24ndCBpbmNsdWRlIGFueQotICAgIC8vIGZvbnQgZGlyZWN0b3JpZXMuCi0g
ICAgRmNJbml0KCk7Ci0KLSAgICBjaGFyIGRydFBhdGhbUEFUSF9NQVggKyAxXTsKLSAgICBpbnQg
ZHJ0UGF0aFNpemUgPSByZWFkbGluaygiL3Byb2Mvc2VsZi9leGUiLCBkcnRQYXRoLCBQQVRIX01B
WCk7Ci0gICAgaWYgKGRydFBhdGhTaXplIDwgMCB8fCBkcnRQYXRoU2l6ZSA+IFBBVEhfTUFYKSB7
Ci0gICAgICAgIGZwdXRzKCJVbmFibGUgdG8gcmVzb2x2ZSAvcHJvYy9zZWxmL2V4ZS4iLCBzdGRl
cnIpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLSAgICBkcnRQYXRoW2RydFBhdGhTaXplXSA9
IDA7Ci0gICAgc3RkOjpzdHJpbmcgZHJ0RGlyUGF0aChkcnRQYXRoKTsKLSAgICBzaXplX3QgbGFz
dFBhdGhQb3MgPSBkcnREaXJQYXRoLnJmaW5kKCIvIik7Ci0gICAgQVNTRVJUKGxhc3RQYXRoUG9z
ICE9IHN0ZDo6c3RyaW5nOjpucG9zKTsKLSAgICBkcnREaXJQYXRoLmVyYXNlKGxhc3RQYXRoUG9z
ICsgMSk7Ci0KLSAgICBGY0NvbmZpZyogZm9udGNmZyA9IEZjQ29uZmlnQ3JlYXRlKCk7Ci0gICAg
c3RkOjpzdHJpbmcgZm9udGNvbmZpZ1BhdGggPSBkcnREaXJQYXRoICsgImZvbnRzLmNvbmYiOwot
ICAgIGlmICghRmNDb25maWdQYXJzZUFuZExvYWQoZm9udGNmZywgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBGY0NoYXI4Kj4oZm9udGNvbmZpZ1BhdGguY19zdHIoKSksIHRydWUpKSB7Ci0gICAgICAg
IGZwdXRzKCJGYWlsZWQgdG8gcGFyc2UgZm9udGNvbmZpZyBjb25maWcgZmlsZVxuIiwgc3RkZXJy
KTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGlzIHRoZSBsaXN0IG9m
IGZvbnRzIHRoYXQgZm9udGNvbmZpZyB3aWxsIGtub3cgYWJvdXQuIEl0Ci0gICAgLy8gd2lsbCB0
cnkgaXRzIGJlc3QgdG8gbWF0Y2ggYmFzZWQgb25seSBvbiB0aGUgZm9udHMgaGVyZSBpbi4gVGhl
Ci0gICAgLy8gcGF0aHMgYXJlIHdoZXJlIHRoZXNlIGZvbnRzIGFyZSBmb3VuZCBvbiBvdXIgVWJ1
bnR1IGJveGVzLgotICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBmb250c1tdID0gewotICAg
ICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9rb2NoaS9rb2NoaS1nb3RoaWMudHRmIiwK
LSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUva29jaGkva29jaGktbWluY2hvLnR0
ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQXJp
YWwudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250
cy9BcmlhbF9Cb2xkLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21z
dHRjb3JlZm9udHMvQXJpYWxfQm9sZF9JdGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUv
Zm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9BcmlhbF9JdGFsaWMudHRmIiwKLSAgICAgICAg
Ii91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db21pY19TYW5zX01TLnR0
ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ29t
aWNfU2Fuc19NU19Cb2xkLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBl
L21zdHRjb3JlZm9udHMvQ291cmllcl9OZXcudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db3VyaWVyX05ld19Cb2xkLnR0ZiIsCi0gICAgICAg
ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ291cmllcl9OZXdfQm9s
ZF9JdGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNv
cmVmb250cy9Db3VyaWVyX05ld19JdGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9HZW9yZ2lhLnR0ZiIsCi0gICAgICAgICIvdXNyL3No
YXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvR2VvcmdpYV9Cb2xkLnR0ZiIsCi0gICAg
ICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvR2VvcmdpYV9Cb2xk
X0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29y
ZWZvbnRzL0dlb3JnaWFfSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3Ry
dWV0eXBlL21zdHRjb3JlZm9udHMvSW1wYWN0LnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2Zv
bnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVHJlYnVjaGV0X01TLnR0ZiIsCi0gICAgICAgICIv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVHJlYnVjaGV0X01TX0JvbGQu
dHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9U
cmVidWNoZXRfTVNfQm9sZF9JdGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMv
dHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UcmVidWNoZXRfTVNfSXRhbGljLnR0ZiIsCi0gICAgICAg
ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVGltZXNfTmV3X1JvbWFu
LnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMv
VGltZXNfTmV3X1JvbWFuX0JvbGQudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUvbXN0dGNvcmVmb250cy9UaW1lc19OZXdfUm9tYW5fQm9sZF9JdGFsaWMudHRmIiwKLSAg
ICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UaW1lc19OZXdf
Um9tYW5fSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21z
dHRjb3JlZm9udHMvVmVyZGFuYS50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVl
dHlwZS9tc3R0Y29yZWZvbnRzL1ZlcmRhbmFfQm9sZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFy
ZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1ZlcmRhbmFfQm9sZF9JdGFsaWMudHRmIiwK
LSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9WZXJkYW5h
X0l0YWxpYy50dGYiLAotICAgICAgICAvLyBUaGUgRGVqYVZ1U2FucyBmb250IGlzIHVzZWQgYnkg
dGhlIGNzczIuMSB0ZXN0cy4KLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRm
LWRlamF2dS9EZWphVnVTYW5zLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0
eXBlL3R0Zi1pbmRpYy1mb250cy1jb3JlL2xvaGl0X2hpLnR0ZiIsCi0gICAgICAgICIvdXNyL3No
YXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1pbmRpYy1mb250cy1jb3JlL2xvaGl0X3RhLnR0ZiIsCi0g
ICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1pbmRpYy1mb250cy1jb3JlL011
a3RpTmFycm93LnR0ZiIsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5
c2l6ZShmb250cyk7ICsraSkgewotICAgICAgICBpZiAoYWNjZXNzKGZvbnRzW2ldLCBSX09LKSkg
ewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJZb3UgYXJlIG1pc3NpbmcgJXMuIFRyeSBy
ZS1ydW5uaW5nIGJ1aWxkL2luc3RhbGwtYnVpbGQtZGVwcy5zaC4gQWxzbyBzZWUgIgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0v
d2lraS9MYXlvdXRUZXN0c0xpbnV4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250
c1tpXSk7Ci0gICAgICAgICAgICBleGl0KDEpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghRmND
b25maWdBcHBGb250QWRkRmlsZShmb250Y2ZnLCAoRmNDaGFyOCAqKSBmb250c1tpXSkpIHsKLSAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGxvYWQgZm9udCAlc1xuIiwgZm9u
dHNbaV0pOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
ICghY2hlY2tBbmRMb2FkRm9udEZpbGUoZm9udGNmZywgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5
cGUvdGhhaS9HYXJ1ZGEudHRmIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvdXNy
L3NoYXJlL2ZvbnRzL3RydWV0eXBlL3Rsd2cvR2FydWRhLnR0ZiIpKQotICAgICAgICBleGl0KDEp
OwotCi0gICAgLy8gV2Ugc3BlY2lhbCBjYXNlIHRoZXNlIGZvbnRzIGJlY2F1c2UgdGhleSdyZSBv
bmx5IG5lZWRlZCBpbiBhCi0gICAgLy8gZmV3IGxheW91dCB0ZXN0cy4KLSAgICBjaGVja0FuZExv
YWRGb250RmlsZShmb250Y2ZnLCAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtaW5kaWMt
Zm9udHMtY29yZS9sb2hpdF9wYS50dGYiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAiL3Vz
ci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtcHVuamFiaS1mb250cy9sb2hpdF9wYS50dGYiKTsK
LQotICAgIC8vIEFsc28gbG9hZCB0aGUgbGF5b3V0LXRlc3Qtc3BlY2lmaWMgIkFoZW0iIGZvbnQu
Ci0gICAgc3RkOjpzdHJpbmcgYWhlbVBhdGggPSBkcnREaXJQYXRoICsgIkFIRU1fX19fLlRURiI7
Ci0gICAgaWYgKCFGY0NvbmZpZ0FwcEZvbnRBZGRGaWxlKGZvbnRjZmcsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgRmNDaGFyOCo+KGFoZW1QYXRoLmNfc3RyKCkpKSkgewotICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkZhaWxlZCB0byBsb2FkIGZvbnQgJXNcbiIsIGFoZW1QYXRoLmNfc3RyKCkpOwot
ICAgICAgICBleGl0KDEpOwotICAgIH0KLQotICAgIGlmICghRmNDb25maWdTZXRDdXJyZW50KGZv
bnRjZmcpKSB7Ci0gICAgICAgIGZwdXRzKCJGYWlsZWQgdG8gc2V0IHRoZSBkZWZhdWx0IGZvbnQg
Y29uZmlndXJhdGlvblxuIiwgc3RkZXJyKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci19Ci0K
LXZvaWQgcGxhdGZvcm1Jbml0KGludCogYXJnYywgY2hhcioqKiBhcmd2KQotewotICAgIC8vIEZJ
WE1FOiBJdCdzIGJldHRlciBjYWxsIGd0a19pbml0KCkgb25seSB3aGVuIHdlIHJ1biBwbHVnaW4g
dGVzdHMuCi0gICAgLy8gU2VlIGh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9hL2Nocm9taXVtLm9y
Zy9ncm91cC9jaHJvbWl1bS1kZXYvYnJvd3NlX3RocmVhZC90aHJlYWQvNjMzZWExNjdjZGUxOTZj
YSMKLSNpZiBVU0UoR1RLKQotICAgIGd0a19pbml0KGFyZ2MsIGFyZ3YpOwotI2VuZGlmCi0KLSAg
ICBzZXR1cEZvbnRjb25maWcoKTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1dlYlZpZXdIb3N0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM1NDJhNDA2
YjRhYTE2ODY3MTI0Y2MxZTdmZmJiNDdmOTkyYjA1Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJW
aWV3SG9zdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVmlld0hvc3QuaCIKLQotI2luY2x1ZGUg
IkRSVERldlRvb2xzQWdlbnQuaCIKLSNpbmNsdWRlICJUYXNrLmgiCi0jaW5jbHVkZSAiVGVzdE5h
dmlnYXRpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiVGVzdFNoZWxsLmgiCi0jaW5jbHVkZSAi
V2ViQ2FjaGVkVVJMUmVxdWVzdC5oIgotI2luY2x1ZGUgIldlYkNvbnNvbGVNZXNzYWdlLmgiCi0j
aW5jbHVkZSAiV2ViQ29udGV4dE1lbnVEYXRhLmgiCi0jaW5jbHVkZSAiV2ViRE9NTWVzc2FnZUV2
ZW50LmgiCi0jaW5jbHVkZSAiV2ViRGF0YVNvdXJjZS5oIgotI2luY2x1ZGUgIldlYkRvY3VtZW50
LmgiCi0jaW5jbHVkZSAiV2ViRWxlbWVudC5oIgotI2luY2x1ZGUgIldlYkZyYW1lLmgiCi0jaW5j
bHVkZSAiV2ViSGlzdG9yeUl0ZW0uaCIKLSNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJX
ZWJOb2RlLmgiCi0jaW5jbHVkZSAiV2ViUGx1Z2luUGFyYW1zLmgiCi0jaW5jbHVkZSAiV2ViUG9w
dXBNZW51LmgiCi0jaW5jbHVkZSAiV2ViUG9wdXBUeXBlLmgiCi0jaW5jbHVkZSAiV2ViUHJpbnRQ
YXJhbXMuaCIKLSNpbmNsdWRlICJXZWJSYW5nZS5oIgotI2luY2x1ZGUgIldlYlNjcmVlbkluZm8u
aCIKLSNpbmNsdWRlICJXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlICJXZWJV
c2VyR2VzdHVyZUluZGljYXRvci5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlICJX
ZWJXaW5kb3dGZWF0dXJlcy5oIgotI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3Rlc3RfbWVkaWFf
c3RyZWFtX2NsaWVudC5oIgotI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0
LmgiCi0jaW5jbHVkZSA8Y2N0eXBlPgotI2luY2x1ZGUgPGNsb2NhbGU+Ci0jaW5jbHVkZSA8cHVi
bGljL1dlYkNTdHJpbmcuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViQ29tcG9zaXRvck91dHB1dFN1
cmZhY2UuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViQ29tcG9zaXRvclN1cHBvcnQuaD4KLSNpbmNs
dWRlIDxwdWJsaWMvV2ViRHJhZ0RhdGEuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViUmVjdC5oPgot
I2luY2x1ZGUgPHB1YmxpYy9XZWJTaXplLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlN0b3JhZ2VO
YW1lc3BhY2UuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViVGhyZWFkLmg+Ci0jaW5jbHVkZSA8cHVi
bGljL1dlYlVSTFJlcXVlc3QuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViVVJMUmVzcG9uc2UuaD4K
LQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL093bkFycmF5UHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLXVz
aW5nIG5hbWVzcGFjZSBXZWJUZXN0UnVubmVyOwotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotc3Rh
dGljIGNvbnN0IGludCBzY3JlZW5XaWR0aCA9IDE5MjA7Ci1zdGF0aWMgY29uc3QgaW50IHNjcmVl
bkhlaWdodCA9IDEwODA7Ci1zdGF0aWMgY29uc3QgaW50IHNjcmVlblVuYXZhaWxhYmxlQm9yZGVy
ID0gODsKLQotc3RhdGljIGludCBuZXh0UGFnZUlEID0gMTsKLQotLy8gV2ViVmlld0NsaWVudCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLVdlYlZpZXcqIFdlYlZpZXdIb3N0OjpjcmVhdGVWaWV3KFdlYkZyYW1lKiBjcmVhdG9y
LCBjb25zdCBXZWJVUkxSZXF1ZXN0JiwgY29uc3QgV2ViV2luZG93RmVhdHVyZXMmLCBjb25zdCBX
ZWJTdHJpbmcmLCBXZWJOYXZpZ2F0aW9uUG9saWN5KQotewotICAgIFdlYlVzZXJHZXN0dXJlSW5k
aWNhdG9yOjpjb25zdW1lVXNlckdlc3R1cmUoKTsKLSAgICByZXR1cm4gbV9zaGVsbC0+Y3JlYXRl
TmV3V2luZG93KFdlYlVSTCgpKS0+d2ViVmlldygpOwotfQotCi1XZWJXaWRnZXQqIFdlYlZpZXdI
b3N0OjpjcmVhdGVQb3B1cE1lbnUoV2ViUG9wdXBUeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0
eXBlKSB7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYlBvcHVwVHlwZU5vbmU6Ci0gICAgY2FzZSBXZWJL
aXQ6OldlYlBvcHVwVHlwZVBhZ2U6Ci0gICAgY2FzZSBXZWJLaXQ6OldlYlBvcHVwVHlwZUhlbHBl
clBsdWdpbjoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYlBvcHVwVHlwZVNl
bGVjdDoKLSAgICBjYXNlIFdlYktpdDo6V2ViUG9wdXBUeXBlU3VnZ2VzdGlvbjoKLSAgICAgICAg
bV9wb3B1cG1lbnVzLmFwcGVuZChXZWJQb3B1cE1lbnU6OmNyZWF0ZSgwKSk7Ci0gICAgICAgIHJl
dHVybiBtX3BvcHVwbWVudXMubGFzdCgpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotV2Vi
V2lkZ2V0KiBXZWJWaWV3SG9zdDo6Y3JlYXRlUG9wdXBNZW51KGNvbnN0IFdlYlBvcHVwTWVudUlu
Zm8mKQotewotICAgIC8vIERvIG5vdCB1c2UgdGhpcyBtZXRob2QuIEl0J3MgYmVlbiByZXBsYWNl
ZCBieSBjcmVhdGVFeHRlcm5hbFBvcHVwTWVudS4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gMDsKLX0KLQotV2ViU3RvcmFnZU5hbWVzcGFjZSogV2ViVmlld0hvc3Q6OmNy
ZWF0ZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKHVuc2lnbmVkIHF1b3RhKQotewotICAgIHJldHVy
biB3ZWJraXRfc3VwcG9ydDo6Q3JlYXRlU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UocXVvdGEpOwot
fQotCi12b2lkIFdlYlZpZXdIb3N0OjpkaWRBZGRNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFdlYkNv
bnNvbGVNZXNzYWdlJiBtZXNzYWdlLCBjb25zdCBXZWJTdHJpbmcmIHNvdXJjZU5hbWUsIHVuc2ln
bmVkIHNvdXJjZUxpbmUpCi17Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OmRpZFN0YXJ0TG9hZGlu
ZygpCi17Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OmRpZFN0b3BMb2FkaW5nKCkKLXsKLX0KLQot
Ym9vbCBXZWJWaWV3SG9zdDo6c2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFdlYlJhbmdlJiByYW5n
ZSkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJWaWV3SG9zdDo6c2hvdWxkRW5k
RWRpdGluZyhjb25zdCBXZWJSYW5nZSYgcmFuZ2UpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgV2ViVmlld0hvc3Q6OnNob3VsZEluc2VydE5vZGUoY29uc3QgV2ViTm9kZSYgbm9kZSwg
Y29uc3QgV2ViUmFuZ2UmIHJhbmdlLCBXZWJFZGl0aW5nQWN0aW9uIGFjdGlvbikKLXsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJWaWV3SG9zdDo6c2hvdWxkSW5zZXJ0VGV4dChjb25z
dCBXZWJTdHJpbmcmIHRleHQsIGNvbnN0IFdlYlJhbmdlJiByYW5nZSwgV2ViRWRpdGluZ0FjdGlv
biBhY3Rpb24pCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViVmlld0hvc3Q6OnNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoCi0gICAgY29uc3QgV2ViUmFuZ2UmIGZyb21SYW5nZSwg
Y29uc3QgV2ViUmFuZ2UmIHRvUmFuZ2UsIFdlYlRleHRBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBz
dGlsbFNlbGVjdGluZykKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJWaWV3SG9z
dDo6c2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgV2ViUmFuZ2UmIHJhbmdlKQotewotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFdlYlZpZXdIb3N0OjpzaG91bGRBcHBseVN0eWxlKGNvbnN0IFdl
YlN0cmluZyYgc3R5bGUsIGNvbnN0IFdlYlJhbmdlJiByYW5nZSkKLXsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBXZWJWaWV3SG9zdDo6aGFuZGxlQ3VycmVudEtleWJvYXJkRXZlbnQoKQot
ewotICAgIGlmIChtX2VkaXRDb21tYW5kTmFtZS5lbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgV2ViRnJhbWUqIGZyYW1lID0gd2ViVmlldygpLT5mb2N1c2VkRnJhbWUoKTsKLSAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZnJhbWUt
PmV4ZWN1dGVDb21tYW5kKFdlYlN0cmluZzo6ZnJvbVVURjgobV9lZGl0Q29tbWFuZE5hbWUpLCBX
ZWJTdHJpbmc6OmZyb21VVEY4KG1fZWRpdENvbW1hbmRWYWx1ZSkpOwotfQotCi0vLyBXZWJLaXQ6
OldlYlByZXJlbmRlcmVyQ2xpZW50Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OndpbGxBZGRQcmVyZW5k
ZXIoV2ViS2l0OjpXZWJQcmVyZW5kZXIqKQotewotfQotCi0KLXZvaWQgV2ViVmlld0hvc3Q6OnJ1
bk1vZGFsQWxlcnREaWFsb2coV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCi17
Ci19Ci0KLWJvb2wgV2ViVmlld0hvc3Q6OnJ1bk1vZGFsQ29uZmlybURpYWxvZyhXZWJGcmFtZSos
IGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBXZWJWaWV3SG9zdDo6cnVuTW9kYWxQcm9tcHREaWFsb2coV2ViRnJhbWUqIGZyYW1lLCBjb25z
dCBXZWJTdHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXZWJTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgV2ViU3RyaW5nKikKLXsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6c2hvd0NvbnRleHRNZW51KFdlYkZy
YW1lKiwgY29uc3QgV2ViQ29udGV4dE1lbnVEYXRhJiBjb250ZXh0TWVudURhdGEpCi17Ci19Ci0K
LXZvaWQgV2ViVmlld0hvc3Q6OmRpZFVwZGF0ZUxheW91dCgpCi17Ci0jaWYgT1MoTUFDX09TX1gp
Ci0gICAgc3RhdGljIGJvb2wgcXVlcnlpbmdQcmVmZXJyZWRTaXplID0gZmFsc2U7Ci0gICAgaWYg
KHF1ZXJ5aW5nUHJlZmVycmVkU2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcXVlcnlpbmdQ
cmVmZXJyZWRTaXplID0gdHJ1ZTsKLSAgICAvLyBRdWVyeSBwcmVmZXJyZWQgd2lkdGggdG8gZW11
bGF0ZSB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGluIENocm9taXVtOgotICAgIC8vIHNlZSBSZW5k
ZXJWaWV3OjpDaGVja1ByZWZlcnJlZFNpemUgKHNyYy9jb250ZW50L3JlbmRlcmVyL3JlbmRlcl92
aWV3LmNjKQotICAgIC8vIGFuZCBUYWJDb250ZW50c1ZpZXdNYWM6OlJlbmRlclZpZXdDcmVhdGVk
IChzcmMvY2hyb21lL2Jyb3dzZXIvdGFiX2NvbnRlbnRzL3RhYl9jb250ZW50c192aWV3X21hYy5t
bSkKLSAgICB3ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5jb250ZW50c1ByZWZlcnJlZFdpZHRoKCk7
Ci0gICAgd2ViVmlldygpLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnRFbGVtZW50U2Nyb2xsSGVpZ2h0
KCk7Ci0gICAgcXVlcnlpbmdQcmVmZXJyZWRTaXplID0gZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBXZWJWaWV3SG9zdDo6bmF2aWdhdGVCYWNrRm9yd2FyZFNvb24oaW50IG9mZnNldCkKLXsKLSAg
ICBuYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5nb1RvT2Zmc2V0KG9mZnNldCk7Ci19Ci0KLWludCBX
ZWJWaWV3SG9zdDo6aGlzdG9yeUJhY2tMaXN0Q291bnQoKQotewotICAgIHJldHVybiBuYXZpZ2F0
aW9uQ29udHJvbGxlcigpLT5sYXN0Q29tbWl0dGVkRW50cnlJbmRleCgpOwotfQotCi1pbnQgV2Vi
Vmlld0hvc3Q6Omhpc3RvcnlGb3J3YXJkTGlzdENvdW50KCkKLXsKLSAgICBpbnQgY3VycmVudElu
ZGV4ID1uYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5sYXN0Q29tbWl0dGVkRW50cnlJbmRleCgpOwot
ICAgIHJldHVybiBuYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5lbnRyeUNvdW50KCkgLSBjdXJyZW50
SW5kZXggLSAxOwotfQotCi0vLyBXZWJXaWRnZXRDbGllbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBXZWJWaWV3SG9z
dDo6ZGlkQXV0b1Jlc2l6ZShjb25zdCBXZWJTaXplJiBuZXdTaXplKQotewotICAgIC8vIFB1cnBv
c2VseSBkb24ndCBpbmNsdWRlIHRoZSB2aXJ0dWFsV2luZG93Qm9yZGVyIGluIHRoaXMgY2FzZSBz
byB0aGF0Ci0gICAgLy8gd2luZG93LmlubmVyW1dpZHRofEhlaWdodF0gaXMgdGhlIHNhbWUgYXMg
d2luZG93Lm91dGVyW1dpZHRofEhlaWdodF0KLSAgICBzZXRXaW5kb3dSZWN0KFdlYlJlY3QoMCwg
MCwgbmV3U2l6ZS53aWR0aCwgbmV3U2l6ZS5oZWlnaHQpKTsKLX0KLQotY2xhc3MgV2ViVmlld0hv
c3REUlRMYXllclRyZWVWaWV3Q2xpZW50IDogcHVibGljIHdlYmtpdF9zdXBwb3J0OjpEUlRMYXll
clRyZWVWaWV3Q2xpZW50IHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJWaWV3SG9zdERSVExh
eWVyVHJlZVZpZXdDbGllbnQoV2ViVmlld0hvc3QqIGhvc3QpCi0gICAgICAgIDogbV9ob3N0KGhv
c3QpIHsgfQotICAgIHZpcnR1YWwgfldlYlZpZXdIb3N0RFJUTGF5ZXJUcmVlVmlld0NsaWVudCgp
IHsgfQotCi0gICAgdmlydHVhbCB2b2lkIExheW91dCgpIHsgbV9ob3N0LT53ZWJWaWV3KCktPmxh
eW91dCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIFNjaGVkdWxlQ29tcG9zaXRlKCkgeyBtX2hvc3Qt
PnByb3h5KCktPnNjaGVkdWxlQ29tcG9zaXRlKCk7IH0KLQotcHJpdmF0ZToKLSAgICBXZWJWaWV3
SG9zdCogbV9ob3N0OwotfTsKLQotdm9pZCBXZWJWaWV3SG9zdDo6aW5pdGlhbGl6ZUxheWVyVHJl
ZVZpZXcoKQotewotICAgIG1fbGF5ZXJUcmVlVmlld0NsaWVudCA9IGFkb3B0UHRyKG5ldyBXZWJW
aWV3SG9zdERSVExheWVyVHJlZVZpZXdDbGllbnQodGhpcykpOwotICAgIGlmIChtX3NoZWxsLT5z
b2Z0d2FyZUNvbXBvc2l0aW5nRW5hYmxlZCgpKSB7Ci0gICAgICAgIG1fbGF5ZXJUcmVlVmlldyA9
IGFkb3B0UHRyKHdlYmtpdF9zdXBwb3J0OjpDcmVhdGVMYXllclRyZWVWaWV3KAotICAgICAgICAg
ICAgd2Via2l0X3N1cHBvcnQ6OlNPRlRXQVJFX0NPTlRFWFQsCi0gICAgICAgICAgICBtX2xheWVy
VHJlZVZpZXdDbGllbnQuZ2V0KCksCi0gICAgICAgICAgICBtX3NoZWxsLT53ZWJDb21wb3NpdG9y
VGhyZWFkKCkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2xheWVyVHJlZVZpZXcgPSBhZG9w
dFB0cih3ZWJraXRfc3VwcG9ydDo6Q3JlYXRlTGF5ZXJUcmVlVmlldygKLSAgICAgICAgICAgIHdl
YmtpdF9zdXBwb3J0OjpNRVNBX0NPTlRFWFQsCi0gICAgICAgICAgICBtX2xheWVyVHJlZVZpZXdD
bGllbnQuZ2V0KCksCi0gICAgICAgICAgICBtX3NoZWxsLT53ZWJDb21wb3NpdG9yVGhyZWFkKCkp
KTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9sYXllclRyZWVWaWV3KTsKLSAgICB1cGRhdGVWaWV3
cG9ydFNpemUoKTsKLSAgICBtX2xheWVyVHJlZVZpZXctPnNldFN1cmZhY2VSZWFkeSgpOwotfQot
Ci1XZWJMYXllclRyZWVWaWV3KiBXZWJWaWV3SG9zdDo6bGF5ZXJUcmVlVmlldygpCi17Ci0gICAg
cmV0dXJuIG1fbGF5ZXJUcmVlVmlldy5nZXQoKTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6c2No
ZWR1bGVBbmltYXRpb24oKQotewotICAgIGlmICh3ZWJWaWV3KCktPnNldHRpbmdzKCktPnNjcm9s
bEFuaW1hdG9yRW5hYmxlZCgpKQotICAgICAgICB3ZWJWaWV3KCktPmFuaW1hdGUoMC4wKTsKLX0K
LQotdm9pZCBXZWJWaWV3SG9zdDo6ZGlkRm9jdXMoKQotewotfQotCi12b2lkIFdlYlZpZXdIb3N0
OjpkaWRCbHVyKCkKLXsKLX0KLQotV2ViU2NyZWVuSW5mbyBXZWJWaWV3SG9zdDo6c2NyZWVuSW5m
bygpCi17Ci0gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBzZXQgYWN0dWFsIHZhbHVlcy4KLSAgICBX
ZWJTY3JlZW5JbmZvIGluZm87Ci0gICAgaW5mby5kZXB0aCA9IDI0OwotICAgIGluZm8uZGVwdGhQ
ZXJDb21wb25lbnQgPSA4OwotICAgIGluZm8uaXNNb25vY2hyb21lID0gZmFsc2U7Ci0gICAgaW5m
by5yZWN0ID0gV2ViUmVjdCgwLCAwLCBzY3JlZW5XaWR0aCwgc2NyZWVuSGVpZ2h0KTsKLSAgICAv
LyBVc2UgdmFsdWVzIGRpZmZlcmVudCBmcm9tIGluZm8ucmVjdCBmb3IgdGVzdGluZy4KLSAgICBp
bmZvLmF2YWlsYWJsZVJlY3QgPSBXZWJSZWN0KHNjcmVlblVuYXZhaWxhYmxlQm9yZGVyLCBzY3Jl
ZW5VbmF2YWlsYWJsZUJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj
cmVlbldpZHRoIC0gc2NyZWVuVW5hdmFpbGFibGVCb3JkZXIgKiAyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2NyZWVuSGVpZ2h0IC0gc2NyZWVuVW5hdmFpbGFibGVCb3JkZXIg
KiAyKTsKLSAgICByZXR1cm4gaW5mbzsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6c2hvdyhXZWJO
YXZpZ2F0aW9uUG9saWN5KQotewotICAgIG1faGFzV2luZG93ID0gdHJ1ZTsKLX0KLQotCi0KLXZv
aWQgV2ViVmlld0hvc3Q6OmNsb3NlV2lkZ2V0KCkKLXsKLSAgICBtX2hhc1dpbmRvdyA9IGZhbHNl
OwotICAgIG1fc2hlbGwtPmNsb3NlV2luZG93KHRoaXMpOwotICAgIC8vIE5vIG1vcmUgY29kZSBo
ZXJlLCB3ZSBzaG91bGQgYmUgZGVsZXRlZCBhdCB0aGlzIHBvaW50LgotfQotCi12b2lkIFdlYlZp
ZXdIb3N0OjpjbG9zZVdpZGdldFNvb24oKQotewotICAgIHBvc3REZWxheWVkVGFzayhuZXcgSG9z
dE1ldGhvZFRhc2sodGhpcywgJldlYlZpZXdIb3N0OjpjbG9zZVdpZGdldCksIDApOwotfQotCi12
b2lkIFdlYlZpZXdIb3N0OjpkaWRDaGFuZ2VDdXJzb3IoY29uc3QgV2ViQ3Vyc29ySW5mbyYgY3Vy
c29ySW5mbykKLXsKLSAgICBpZiAoIWhhc1dpbmRvdygpKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9jdXJyZW50Q3Vyc29yID0gY3Vyc29ySW5mbzsKLX0KLQotV2ViUmVjdCBXZWJWaWV3SG9zdDo6
d2luZG93UmVjdCgpCi17Ci0gICAgcmV0dXJuIG1fd2luZG93UmVjdDsKLX0KLQotdm9pZCBXZWJW
aWV3SG9zdDo6c2V0V2luZG93UmVjdChjb25zdCBXZWJSZWN0JiByZWN0KQotewotICAgIG1fd2lu
ZG93UmVjdCA9IHJlY3Q7Ci0gICAgY29uc3QgaW50IGJvcmRlcjIgPSBUZXN0U2hlbGw6OnZpcnR1
YWxXaW5kb3dCb3JkZXIgKiAyOwotICAgIGlmIChtX3dpbmRvd1JlY3Qud2lkdGggPD0gYm9yZGVy
MikKLSAgICAgICAgbV93aW5kb3dSZWN0LndpZHRoID0gMSArIGJvcmRlcjI7Ci0gICAgaWYgKG1f
d2luZG93UmVjdC5oZWlnaHQgPD0gYm9yZGVyMikKLSAgICAgICAgbV93aW5kb3dSZWN0LmhlaWdo
dCA9IDEgKyBib3JkZXIyOwotICAgIGludCB3aWR0aCA9IG1fd2luZG93UmVjdC53aWR0aCAtIGJv
cmRlcjI7Ci0gICAgaW50IGhlaWdodCA9IG1fd2luZG93UmVjdC5oZWlnaHQgLSBib3JkZXIyOwot
ICAgIHdlYldpZGdldCgpLT5yZXNpemUoV2ViU2l6ZSh3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgdXBk
YXRlVmlld3BvcnRTaXplKCk7Ci19Ci0KLVdlYlJlY3QgV2ViVmlld0hvc3Q6OnJvb3RXaW5kb3dS
ZWN0KCkKLXsKLSAgICByZXR1cm4gd2luZG93UmVjdCgpOwotfQotCi1XZWJSZWN0IFdlYlZpZXdI
b3N0Ojp3aW5kb3dSZXNpemVyUmVjdCgpCi17Ci0gICAgLy8gTm90IG5lY2Vzc2FyeS4KLSAgICBy
ZXR1cm4gV2ViUmVjdCgpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpydW5Nb2RhbCgpCi17Ci0g
ICAgaWYgKG1fc2hlbGwtPmlzRGlzcGxheWluZ01vZGFsRGlhbG9nKCkpIHsKLSAgICAgICAgLy8g
RHVtcFJlbmRlclRyZWUgZG9lc24ndCBzdXBwb3J0IHJlYWwgbW9kYWwgZGlhbG9ncywgc28gYSB0
ZXN0IHNob3VsZG4ndCB0cnkgdG8gc3RhcnQgdHdvIG1vZGFsIGRpYWxvZ3MgYXQgdGhlIHNhbWUg
dGltZS4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgLy8gVGhpcyBXZWJWaWV3SG9zdCBtaWdodCBnZXQgZGVsZXRlZCBiZWZvcmUgUnVu
TWVzc2FnZUxvb3AoKSByZXR1cm5zLCBzbyBrZWVwIGEgY29weSBvZiB0aGUgbV9zaGVsbCBtZW1i
ZXIgdmFyaWFibGUgYXJvdW5kLgotICAgIEFTU0VSVChtX3NoZWxsLT53ZWJWaWV3SG9zdCgpICE9
IHRoaXMpOwotICAgIFRlc3RTaGVsbCogc2hlbGwgPSBtX3NoZWxsOwotICAgIHNoZWxsLT5zZXRJ
c0Rpc3BsYXlpbmdNb2RhbERpYWxvZyh0cnVlKTsKLSAgICBib29sIG9sZFN0YXRlID0gd2Via2l0
X3N1cHBvcnQ6Ok1lc3NhZ2VMb29wTmVzdGFibGVUYXNrc0FsbG93ZWQoKTsKLSAgICB3ZWJraXRf
c3VwcG9ydDo6TWVzc2FnZUxvb3BTZXROZXN0YWJsZVRhc2tzQWxsb3dlZCh0cnVlKTsKLSAgICBt
X2luTW9kYWxMb29wID0gdHJ1ZTsKLSAgICB3ZWJraXRfc3VwcG9ydDo6UnVuTWVzc2FnZUxvb3Ao
KTsKLSAgICB3ZWJraXRfc3VwcG9ydDo6TWVzc2FnZUxvb3BTZXROZXN0YWJsZVRhc2tzQWxsb3dl
ZChvbGRTdGF0ZSk7Ci0gICAgc2hlbGwtPnNldElzRGlzcGxheWluZ01vZGFsRGlhbG9nKGZhbHNl
KTsKLX0KLQotYm9vbCBXZWJWaWV3SG9zdDo6ZW50ZXJGdWxsU2NyZWVuKCkKLXsKLSAgICBwb3N0
RGVsYXllZFRhc2sobmV3IEhvc3RNZXRob2RUYXNrKHRoaXMsICZXZWJWaWV3SG9zdDo6ZW50ZXJG
dWxsU2NyZWVuTm93KSwgMCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViVmlld0hv
c3Q6OmV4aXRGdWxsU2NyZWVuKCkKLXsKLSAgICBwb3N0RGVsYXllZFRhc2sobmV3IEhvc3RNZXRo
b2RUYXNrKHRoaXMsICZXZWJWaWV3SG9zdDo6ZXhpdEZ1bGxTY3JlZW5Ob3cpLCAwKTsKLX0KLQot
Ly8gV2ViRnJhbWVDbGllbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdlYlBsdWdpbiogV2ViVmlld0hvc3Q6OmNyZWF0ZVBs
dWdpbihXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYlBsdWdpblBhcmFtcyYgcGFyYW1zKQotewot
ICAgIHJldHVybiB3ZWJraXRfc3VwcG9ydDo6Q3JlYXRlV2ViUGx1Z2luKGZyYW1lLCBwYXJhbXMp
OwotfQotCi1XZWJNZWRpYVBsYXllciogV2ViVmlld0hvc3Q6OmNyZWF0ZU1lZGlhUGxheWVyKFdl
YkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViVVJMJiB1cmwsIFdlYk1lZGlhUGxheWVyQ2xpZW50KiBj
bGllbnQpCi17Ci0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICByZXR1cm4gd2Via2l0X3N1
cHBvcnQ6OkNyZWF0ZU1lZGlhUGxheWVyKGZyYW1lLCB1cmwsIGNsaWVudCwgdGVzdE1lZGlhU3Ry
ZWFtQ2xpZW50KCkpOwotI2Vsc2UKLSAgICByZXR1cm4gd2Via2l0X3N1cHBvcnQ6OkNyZWF0ZU1l
ZGlhUGxheWVyKGZyYW1lLCB1cmwsIGNsaWVudCk7Ci0jZW5kaWYKLX0KLQotV2ViQXBwbGljYXRp
b25DYWNoZUhvc3QqIFdlYlZpZXdIb3N0OjpjcmVhdGVBcHBsaWNhdGlvbkNhY2hlSG9zdChXZWJG
cmFtZSogZnJhbWUsIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50KiBjbGllbnQpCi17Ci0g
ICAgcmV0dXJuIHdlYmtpdF9zdXBwb3J0OjpDcmVhdGVBcHBsaWNhdGlvbkNhY2hlSG9zdChmcmFt
ZSwgY2xpZW50KTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6bG9hZFVSTEV4dGVybmFsbHkoV2Vi
RnJhbWUqIGZyYW1lLCBjb25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0LCBXZWJOYXZpZ2F0aW9u
UG9saWN5IHBvbGljeSkKLXsKLSAgICBsb2FkVVJMRXh0ZXJuYWxseShmcmFtZSwgcmVxdWVzdCwg
cG9saWN5LCBXZWJTdHJpbmcoKSk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OmxvYWRVUkxFeHRl
cm5hbGx5KFdlYkZyYW1lKiwgY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCwgV2ViTmF2aWdh
dGlvblBvbGljeSBwb2xpY3ksIGNvbnN0IFdlYlN0cmluZyYgZG93bmxvYWROYW1lKQotewotICAg
IEFTU0VSVChwb2xpY3kgIT0gIFdlYktpdDo6V2ViTmF2aWdhdGlvblBvbGljeUN1cnJlbnRUYWIp
OwotICAgIFdlYlZpZXdIb3N0KiBhbm90aGVyID0gbV9zaGVsbC0+Y3JlYXRlTmV3V2luZG93KHJl
cXVlc3QudXJsKCkpOwotICAgIGlmIChhbm90aGVyKQotICAgICAgICBhbm90aGVyLT5zaG93KHBv
bGljeSk7Ci19Ci0KLVdlYk5hdmlnYXRpb25Qb2xpY3kgV2ViVmlld0hvc3Q6OmRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb24oCi0gICAgV2ViRnJhbWUqLCBjb25zdCBXZWJVUkxSZXF1ZXN0JiwKLSAg
ICBXZWJOYXZpZ2F0aW9uVHlwZSwgY29uc3QgV2ViTm9kZSYsCi0gICAgV2ViTmF2aWdhdGlvblBv
bGljeSBkZWZhdWx0UG9saWN5LCBib29sKQotewotICAgIHJldHVybiBkZWZhdWx0UG9saWN5Owot
fQotCi1ib29sIFdlYlZpZXdIb3N0OjpjYW5IYW5kbGVSZXF1ZXN0KFdlYkZyYW1lKiwgY29uc3Qg
V2ViVVJMUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotV2ViVVJM
RXJyb3IgV2ViVmlld0hvc3Q6OmNhbmNlbGxlZEVycm9yKFdlYkZyYW1lKiwgY29uc3QgV2ViVVJM
UmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gd2Via2l0X3N1cHBvcnQ6OkNyZWF0ZUNh
bmNlbGxlZEVycm9yKHJlcXVlc3QpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0Ojp1bmFibGVUb0lt
cGxlbWVudFBvbGljeVdpdGhFcnJvcihXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYlVSTEVycm9y
JiBlcnJvcikKLXsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6ZGlkQ3JlYXRlRGF0YVNvdXJjZShX
ZWJGcmFtZSosIFdlYkRhdGFTb3VyY2UqIGRzKQotewotICAgIGRzLT5zZXRFeHRyYURhdGEobV9w
ZW5kaW5nRXh0cmFEYXRhLmxlYWtQdHIoKSk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OmRpZENv
bW1pdFByb3Zpc2lvbmFsTG9hZChXZWJGcmFtZSogZnJhbWUsIGJvb2wgaXNOZXdOYXZpZ2F0aW9u
KQotewotICAgIHVwZGF0ZUZvckNvbW1pdHRlZExvYWQoZnJhbWUsIGlzTmV3TmF2aWdhdGlvbik7
Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OmRpZENsZWFyV2luZG93T2JqZWN0KFdlYkZyYW1lKiBm
cmFtZSkKLXsKLSAgICBtX3NoZWxsLT5iaW5kSlNPYmplY3RzVG9XaW5kb3coZnJhbWUpOwotfQot
Ci12b2lkIFdlYlZpZXdIb3N0OjpkaWRSZWNlaXZlVGl0bGUoV2ViRnJhbWUqIGZyYW1lLCBjb25z
dCBXZWJTdHJpbmcmIHRpdGxlLCBXZWJUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBz
ZXRQYWdlVGl0bGUodGl0bGUpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpkaWRDaGFuZ2VJY29u
KFdlYkZyYW1lKiAsIFdlYkljb25VUkw6OlR5cGUpCi17Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6
OmRpZE5hdmlnYXRlV2l0aGluUGFnZShXZWJGcmFtZSogZnJhbWUsIGJvb2wgaXNOZXdOYXZpZ2F0
aW9uKQotewotICAgIGZyYW1lLT5kYXRhU291cmNlKCktPnNldEV4dHJhRGF0YShtX3BlbmRpbmdF
eHRyYURhdGEubGVha1B0cigpKTsKLQotICAgIHVwZGF0ZUZvckNvbW1pdHRlZExvYWQoZnJhbWUs
IGlzTmV3TmF2aWdhdGlvbik7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OndpbGxTZW5kUmVxdWVz
dChXZWJGcmFtZSogZnJhbWUsIHVuc2lnbmVkLCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBXZWJVUkxSZXNwb25zZSYpCi17Ci0gICAgaWYgKHJlcXVlc3QudXJsKCkuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICByZXF1ZXN0LnNldEV4dHJhRGF0YSh3ZWJraXRfc3VwcG9y
dDo6Q3JlYXRlV2ViVVJMUmVxdWVzdEV4dHJhRGF0YShmcmFtZS0+ZG9jdW1lbnQoKS5yZWZlcnJl
clBvbGljeSgpKSk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6Om9wZW5GaWxlU3lzdGVtKFdlYkZy
YW1lKiBmcmFtZSwgV2ViRmlsZVN5c3RlbVR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wg
Y3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MpCi17Ci0gICAgd2Via2l0
X3N1cHBvcnQ6Ok9wZW5GaWxlU3lzdGVtKGZyYW1lLCB0eXBlLCBzaXplLCBjcmVhdGUsIGNhbGxi
YWNrcyk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OmRlbGV0ZUZpbGVTeXN0ZW0oV2ViS2l0OjpX
ZWJGcmFtZSogZnJhbWUsIFdlYktpdDo6V2ViRmlsZVN5c3RlbVR5cGUgdHlwZSwgV2ViS2l0OjpX
ZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MpCi17Ci0gICAgd2Via2l0X3N1cHBvcnQ6
OkRlbGV0ZUZpbGVTeXN0ZW0oZnJhbWUsIHR5cGUsIGNhbGxiYWNrcyk7Ci19Ci0KLWJvb2wgV2Vi
Vmlld0hvc3Q6OndpbGxDaGVja0FuZERpc3BhdGNoTWVzc2FnZUV2ZW50KFdlYkZyYW1lKiBzb3Vy
Y2VGcmFtZSwgV2ViRnJhbWUqIHRhcmdldEZyYW1lLCBXZWJTZWN1cml0eU9yaWdpbiB0YXJnZXQs
IFdlYkRPTU1lc3NhZ2VFdmVudCBldmVudCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8v
IFdlYlRlc3REZWxlZ2F0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBXZWJWaWV3SG9zdDo6c2V0RWRpdENvbW1hbmQo
Y29uc3Qgc3RyaW5nJiBuYW1lLCBjb25zdCBzdHJpbmcmIHZhbHVlKQotewotICAgIG1fZWRpdENv
bW1hbmROYW1lID0gbmFtZTsKLSAgICBtX2VkaXRDb21tYW5kVmFsdWUgPSB2YWx1ZTsKLX0KLQot
dm9pZCBXZWJWaWV3SG9zdDo6Y2xlYXJFZGl0Q29tbWFuZCgpCi17Ci0gICAgbV9lZGl0Q29tbWFu
ZE5hbWUuY2xlYXIoKTsKLSAgICBtX2VkaXRDb21tYW5kVmFsdWUuY2xlYXIoKTsKLX0KLQotdm9p
ZCBXZWJWaWV3SG9zdDo6c2V0R2FtZXBhZERhdGEoY29uc3QgV2ViR2FtZXBhZHMmIHBhZHMpCi17
Ci0gICAgd2Via2l0X3N1cHBvcnQ6OlNldEdhbWVwYWREYXRhKHBhZHMpOwotfQotCi12b2lkIFdl
YlZpZXdIb3N0OjpwcmludE1lc3NhZ2UoY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2UpCi17Ci0g
ICAgcHJpbnRmKCIlcyIsIG1lc3NhZ2UuY19zdHIoKSk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6
OnBvc3RUYXNrKFdlYlRhc2sqIHRhc2spCi17Ci0gICAgOjpwb3N0VGFzayh0YXNrKTsKLX0KLQot
dm9pZCBXZWJWaWV3SG9zdDo6cG9zdERlbGF5ZWRUYXNrKFdlYlRhc2sqIHRhc2ssIGxvbmcgbG9u
ZyBtcykKLXsKLSAgICA6OnBvc3REZWxheWVkVGFzayh0YXNrLCBtcyk7Ci19Ci0KLVdlYlN0cmlu
ZyBXZWJWaWV3SG9zdDo6cmVnaXN0ZXJJc29sYXRlZEZpbGVTeXN0ZW0oY29uc3QgV2ViVmVjdG9y
PFdlYlN0cmluZz4mIGFic29sdXRlRmlsZW5hbWVzKQotewotICAgIHJldHVybiB3ZWJraXRfc3Vw
cG9ydDo6UmVnaXN0ZXJJc29sYXRlZEZpbGVTeXN0ZW0oYWJzb2x1dGVGaWxlbmFtZXMpOwotfQot
Ci1sb25nIGxvbmcgV2ViVmlld0hvc3Q6OmdldEN1cnJlbnRUaW1lSW5NaWxsaXNlY29uZCgpCi17
Ci0gICAgcmV0dXJuIHdlYmtpdF9zdXBwb3J0OjpHZXRDdXJyZW50VGltZUluTWlsbGlzZWNvbmQo
KTsKLX0KLQotV2ViS2l0OjpXZWJTdHJpbmcgV2ViVmlld0hvc3Q6OmdldEFic29sdXRlV2ViU3Ry
aW5nRnJvbVVURjhQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiB3
ZWJraXRfc3VwcG9ydDo6R2V0QWJzb2x1dGVXZWJTdHJpbmdGcm9tVVRGOFBhdGgocGF0aCk7Ci19
Ci0KLVdlYlVSTCBXZWJWaWV3SG9zdDo6bG9jYWxGaWxlVG9EYXRhVVJMKGNvbnN0IFdlYktpdDo6
V2ViVVJMJiB1cmwpCi17Ci0gICAgcmV0dXJuIHdlYmtpdF9zdXBwb3J0OjpMb2NhbEZpbGVUb0Rh
dGFVUkwodXJsKTsKLX0KLQotV2ViVVJMIFdlYlZpZXdIb3N0OjpyZXdyaXRlTGF5b3V0VGVzdHNV
UkwoY29uc3Qgc3RkOjpzdHJpbmcmIHVybCkKLXsKLSAgICByZXR1cm4gd2Via2l0X3N1cHBvcnQ6
OlJld3JpdGVMYXlvdXRUZXN0c1VSTCh1cmwpOwotfQotCi1XZWJQcmVmZXJlbmNlcyogV2ViVmll
d0hvc3Q6OnByZWZlcmVuY2VzKCkKLXsKLSAgICByZXR1cm4gbV9zaGVsbC0+cHJlZmVyZW5jZXMo
KTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6YXBwbHlQcmVmZXJlbmNlcygpCi17Ci0gICAgbV9z
aGVsbC0+YXBwbHlQcmVmZXJlbmNlcygpOwotfQotCi1zdGQ6OnN0cmluZyBXZWJWaWV3SG9zdDo6
bWFrZVVSTEVycm9yRGVzY3JpcHRpb24oY29uc3QgV2ViS2l0OjpXZWJVUkxFcnJvciYgZXJyb3Ip
Ci17Ci0gICAgcmV0dXJuIHdlYmtpdF9zdXBwb3J0OjpNYWtlVVJMRXJyb3JEZXNjcmlwdGlvbihl
cnJvcik7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OnNob3dEZXZUb29scygpCi17Ci0gICAgbV9z
aGVsbC0+c2hvd0RldlRvb2xzKCk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OmNsb3NlRGV2VG9v
bHMoKQotewotICAgIG1fc2hlbGwtPmNsb3NlRGV2VG9vbHMoKTsKLX0KLQotdm9pZCBXZWJWaWV3
SG9zdDo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJRCwgY29uc3Qgc3RkOjpzdHJp
bmcmIHNjcmlwdCkKLXsKLSAgICBtX3NoZWxsLT5kcnREZXZUb29sc0FnZW50KCktPmV2YWx1YXRl
SW5XZWJJbnNwZWN0b3IoY2FsbElELCBzY3JpcHQpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0Ojpj
bGVhckFsbERhdGFiYXNlcygpCi17Ci0gICAgd2Via2l0X3N1cHBvcnQ6OkNsZWFyQWxsRGF0YWJh
c2VzKCk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OnNldERhdGFiYXNlUXVvdGEoaW50IHF1b3Rh
KQotewotICAgIHdlYmtpdF9zdXBwb3J0OjpTZXREYXRhYmFzZVF1b3RhKHF1b3RhKTsKLX0KLQot
dm9pZCBXZWJWaWV3SG9zdDo6c2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVG
YWN0b3IpCi17Ci0gICAgd2ViVmlldygpLT5zZXREZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2Fs
ZUZhY3Rvcik7Ci0gICAgdXBkYXRlVmlld3BvcnRTaXplKCk7Ci19Ci0KLXZvaWQgV2ViVmlld0hv
c3Q6OnNldEZvY3VzKFdlYlRlc3RQcm94eUJhc2UqIHByb3h5LCBib29sIGZvY3VzZWQpCi17Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3NoZWxsLT53aW5kb3dMaXN0KCkuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKG1fc2hlbGwtPndpbmRvd0xpc3QoKVtpXS0+cHJveHkoKSA9PSBw
cm94eSkKLSAgICAgICAgICAgIG1fc2hlbGwtPnNldEZvY3VzKG1fc2hlbGwtPndpbmRvd0xpc3Qo
KVtpXS0+d2ViV2lkZ2V0KCksIGZvY3VzZWQpOwotICAgIH0KLX0KLQotdm9pZCBXZWJWaWV3SG9z
dDo6c2V0QWNjZXB0QWxsQ29va2llcyhib29sIGFjY2VwdENvb2tpZXMpCi17Ci0gICAgd2Via2l0
X3N1cHBvcnQ6OlNldEFjY2VwdEFsbENvb2tpZXMoYWNjZXB0Q29va2llcyk7Ci19Ci0KLXN0cmlu
ZyBXZWJWaWV3SG9zdDo6cGF0aFRvTG9jYWxSZXNvdXJjZShjb25zdCBzdHJpbmcmIHVybCkKLXsK
LSNpZiBPUyhXSU5ET1dTKQotICAgIGlmICghdXJsLmZpbmQoIi90bXAvIikpIHsKLSAgICAgICAg
Ly8gV2Ugd2FudCBhIHRlbXAgZmlsZS4KLSAgICAgICAgY29uc3QgdW5zaWduZWQgdGVtcFByZWZp
eExlbmd0aCA9IDU7Ci0gICAgICAgIHNpemVfdCBidWZmZXJTaXplID0gTUFYX1BBVEg7Ci0gICAg
ICAgIE93bkFycmF5UHRyPFdDSEFSPiB0ZW1wUGF0aCA9IGFkb3B0QXJyYXlQdHIobmV3IFdDSEFS
W2J1ZmZlclNpemVdKTsKLSAgICAgICAgRFdPUkQgdGVtcExlbmd0aCA9IDo6R2V0VGVtcFBhdGhX
KGJ1ZmZlclNpemUsIHRlbXBQYXRoLmdldCgpKTsKLSAgICAgICAgaWYgKHRlbXBMZW5ndGggKyB1
cmwubGVuZ3RoKCkgLSB0ZW1wUHJlZml4TGVuZ3RoICsgMSA+IGJ1ZmZlclNpemUpIHsKLSAgICAg
ICAgICAgIGJ1ZmZlclNpemUgPSB0ZW1wTGVuZ3RoICsgdXJsLmxlbmd0aCgpIC0gdGVtcFByZWZp
eExlbmd0aCArIDE7Ci0gICAgICAgICAgICB0ZW1wUGF0aCA9IGFkb3B0QXJyYXlQdHIobmV3IFdD
SEFSW2J1ZmZlclNpemVdKTsKLSAgICAgICAgICAgIHRlbXBMZW5ndGggPSBHZXRUZW1wUGF0aFco
YnVmZmVyU2l6ZSwgdGVtcFBhdGguZ2V0KCkpOwotICAgICAgICAgICAgQVNTRVJUKHRlbXBMZW5n
dGggPCBidWZmZXJTaXplKTsKLSAgICAgICAgfQotICAgICAgICBzdHJpbmcgcmVzdWx0UGF0aChX
ZWJTdHJpbmcodGVtcFBhdGguZ2V0KCksIHRlbXBMZW5ndGgpLnV0ZjgoKSk7Ci0gICAgICAgIHJl
c3VsdFBhdGguYXBwZW5kKHVybC5zdWJzdHIodGVtcFByZWZpeExlbmd0aCkpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0UGF0aDsKLSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIFNvbWUgbGF5b3V0IHRl
c3RzIHVzZSBmaWxlOi8vLy8gd2hpY2ggd2UgcmVzb2x2ZSBhcyBhIFVOQyBwYXRoLiBOb3JtYWxp
emUKLSAgICAvLyB0aGVtIHRvIGp1c3QgZmlsZTovLy8uCi0gICAgc3RyaW5nIGxvd2VyVXJsID0g
dXJsOwotICAgIHN0cmluZyByZXN1bHQgPSB1cmw7Ci0gICAgdHJhbnNmb3JtKGxvd2VyVXJsLmJl
Z2luKCksIGxvd2VyVXJsLmVuZCgpLCBsb3dlclVybC5iZWdpbigpLCA6OnRvbG93ZXIpOwotICAg
IHdoaWxlICghbG93ZXJVcmwuZmluZCgiZmlsZTovLy8vIikpIHsKLSAgICAgICAgcmVzdWx0ID0g
cmVzdWx0LnN1YnN0cigwLCA4KSArIHJlc3VsdC5zdWJzdHIoOSk7Ci0gICAgICAgIGxvd2VyVXJs
ID0gbG93ZXJVcmwuc3Vic3RyKDAsIDgpICsgbG93ZXJVcmwuc3Vic3RyKDkpOwotICAgIH0KLSAg
ICByZXR1cm4gd2Via2l0X3N1cHBvcnQ6OlJld3JpdGVMYXlvdXRUZXN0c1VSTChyZXN1bHQpLnNw
ZWMoKTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6c2V0TG9jYWxlKGNvbnN0IHN0ZDo6c3RyaW5n
JiBsb2NhbGUpCi17Ci0gICAgc2V0bG9jYWxlKExDX0FMTCwgbG9jYWxlLmNfc3RyKCkpOwotfQot
Ci12b2lkIFdlYlZpZXdIb3N0Ojp0ZXN0RmluaXNoZWQoKQotewotICAgIG1fc2hlbGwtPnRlc3RG
aW5pc2hlZCh0aGlzKTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6dGVzdFRpbWVkT3V0KCkKLXsK
LSAgICBtX3NoZWxsLT50ZXN0VGltZWRPdXQoKTsKLX0KLQotYm9vbCBXZWJWaWV3SG9zdDo6aXNC
ZWluZ0RlYnVnZ2VkKCkKLXsKLSAgICByZXR1cm4gd2Via2l0X3N1cHBvcnQ6OkJlaW5nRGVidWdn
ZWQoKTsKLX0KLQotaW50IFdlYlZpZXdIb3N0OjpsYXlvdXRUZXN0VGltZW91dCgpCi17Ci0gICAg
cmV0dXJuIG1fc2hlbGwtPmxheW91dFRlc3RUaW1lb3V0KCk7Ci19Ci0KLXZvaWQgV2ViVmlld0hv
c3Q6OmNsb3NlUmVtYWluaW5nV2luZG93cygpCi17Ci0gICAgbV9zaGVsbC0+Y2xvc2VSZW1haW5p
bmdXaW5kb3dzKCk7Ci19Ci0KLWludCBXZWJWaWV3SG9zdDo6bmF2aWdhdGlvbkVudHJ5Q291bnQo
KQotewotICAgIHJldHVybiBtX3NoZWxsLT5uYXZpZ2F0aW9uRW50cnlDb3VudCgpOwotfQotCi12
b2lkIFdlYlZpZXdIb3N0Ojpnb1RvT2Zmc2V0KGludCBvZmZzZXQpCi17Ci0gICAgbV9zaGVsbC0+
Z29Ub09mZnNldChvZmZzZXQpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpyZWxvYWQoKQotewot
ICAgIG1fc2hlbGwtPnJlbG9hZCgpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0Ojpsb2FkVVJMRm9y
RnJhbWUoY29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0IHN0cmluZyYgZnJhbWVOYW1lKQotewotICAg
IGlmICghdXJsLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFRlc3RTaGVsbDo6cmVz
aXplV2luZG93Rm9yVGVzdCh0aGlzLCB1cmwpOwotICAgIG5hdmlnYXRpb25Db250cm9sbGVyKCkt
PmxvYWRFbnRyeShUZXN0TmF2aWdhdGlvbkVudHJ5OjpjcmVhdGUoLTEsIHVybCwgV2ViU3RyaW5n
KCksIFdlYlN0cmluZzo6ZnJvbVVURjgoZnJhbWVOYW1lKSkuZ2V0KCkpOwotfQotCi1ib29sIFdl
YlZpZXdIb3N0OjphbGxvd0V4dGVybmFsUGFnZXMoKQotewotICAgIHJldHVybiBtX3NoZWxsLT5h
bGxvd0V4dGVybmFsUGFnZXMoKTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6Y2FwdHVyZUhpc3Rv
cnlGb3JXaW5kb3coV2ViVGVzdFByb3h5QmFzZSogcHJveHksIFdlYlZlY3RvcjxXZWJIaXN0b3J5
SXRlbT4qIGhpc3RvcnksIHNpemVfdCogY3VycmVudEVudHJ5SW5kZXgpCi17Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3NoZWxsLT53aW5kb3dMaXN0KCkuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgaWYgKG1fc2hlbGwtPndpbmRvd0xpc3QoKVtpXS0+cHJveHkoKSA9PSBwcm94eSkKLSAg
ICAgICAgICAgIG1fc2hlbGwtPmNhcHR1cmVIaXN0b3J5Rm9yV2luZG93KGksIGhpc3RvcnksIGN1
cnJlbnRFbnRyeUluZGV4KTsKLSAgICB9Ci19Ci0KLS8vIFB1YmxpYyBmdW5jdGlvbnMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
V2ViVmlld0hvc3Q6OldlYlZpZXdIb3N0KFRlc3RTaGVsbCogc2hlbGwpCi0gICAgOiBtX3NoZWxs
KHNoZWxsKQotICAgICwgbV9wcm94eSgwKQotICAgICwgbV93ZWJXaWRnZXQoMCkKLSAgICAsIG1f
c2h1dGRvd25XYXNJbnZva2VkKGZhbHNlKQotewotICAgIHJlc2V0KCk7Ci19Ci0KLVdlYlZpZXdI
b3N0Ojp+V2ViVmlld0hvc3QoKQotewotICAgIEFTU0VSVChtX3NodXRkb3duV2FzSW52b2tlZCk7
Ci0gICAgaWYgKG1faW5Nb2RhbExvb3ApCi0gICAgICAgIHdlYmtpdF9zdXBwb3J0OjpRdWl0TWVz
c2FnZUxvb3AoKTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6c2h1dGRvd24oKQotewotICAgIEFT
U0VSVCghbV9zaHV0ZG93bldhc0ludm9rZWQpOwotCi0gICAgLy8gRGV2VG9vbHMgZnJvbnRlbmQg
cGFnZSBpcyBzdXBwb3NlZCB0byBiZSBuYXZpZ2F0ZWQgb25seSBvbmNlIGFuZAotICAgIC8vIGxv
YWRpbmcgYW5vdGhlciBVUkwgaW4gdGhhdCBQYWdlIGlzIGFuIGVycm9yLgotICAgIGlmIChtX3No
ZWxsLT5kZXZUb29sc1dlYlZpZXcoKSAhPSB0aGlzKSB7Ci0gICAgICAgIC8vIE5hdmlnYXRlIHRv
IGFuIGVtcHR5IHBhZ2UgdG8gZmlyZSBhbGwgdGhlIGRlc3RydWN0aW9uIGxvZ2ljIGZvciB0aGUK
LSAgICAgICAgLy8gY3VycmVudCBwYWdlLgotICAgICAgICBsb2FkVVJMRm9yRnJhbWUoR1VSTCgi
YWJvdXQ6YmxhbmsiKSwgc3RyaW5nKCkpOwotICAgIH0KLQotICAgIGZvciAoVmVjdG9yPFdlYktp
dDo6V2ViV2lkZ2V0Kj46Oml0ZXJhdG9yIGl0ID0gbV9wb3B1cG1lbnVzLmJlZ2luKCk7Ci0gICAg
ICAgICBpdCA8IG1fcG9wdXBtZW51cy5lbmQoKTsgKytpdCkKLSAgICAgICAgKCppdCktPmNsb3Nl
KCk7Ci0KLSAgICB3ZWJXaWRnZXQoKS0+d2lsbENsb3NlTGF5ZXJUcmVlVmlldygpOwotICAgIG1f
bGF5ZXJUcmVlVmlldy5jbGVhcigpOwotICAgIHdlYldpZGdldCgpLT5jbG9zZSgpOwotICAgIG1f
d2ViV2lkZ2V0ID0gMDsKLSAgICBtX3NodXRkb3duV2FzSW52b2tlZCA9IHRydWU7Ci19Ci0KLXZv
aWQgV2ViVmlld0hvc3Q6OnNldFdlYldpZGdldChXZWJLaXQ6OldlYldpZGdldCogd2lkZ2V0KQot
ewotICAgIG1fd2ViV2lkZ2V0ID0gd2lkZ2V0OwotICAgIHdlYlZpZXcoKS0+c2V0U3BlbGxDaGVj
a0NsaWVudChwcm94eSgpLT5zcGVsbENoZWNrQ2xpZW50KCkpOwotICAgIHdlYlZpZXcoKS0+c2V0
UHJlcmVuZGVyZXJDbGllbnQodGhpcyk7Ci19Ci0KLVdlYlZpZXcqIFdlYlZpZXdIb3N0Ojp3ZWJW
aWV3KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV93ZWJXaWRnZXQpOwotICAgIC8vIERSVCBkb2Vz
IG5vdCBzdXBwb3J0IHBvcHVwIHdpZGdldHMuIFNvIG1fd2ViV2lkZ2V0IGlzIGFsd2F5cyBhIFdl
YlZpZXcuCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYlZpZXcqPihtX3dlYldpZGdldCk7Ci19
Ci0KLVdlYldpZGdldCogV2ViVmlld0hvc3Q6OndlYldpZGdldCgpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKG1fd2ViV2lkZ2V0KTsKLSAgICByZXR1cm4gbV93ZWJXaWRnZXQ7Ci19Ci0KLVdlYlRlc3RQ
cm94eUJhc2UqIFdlYlZpZXdIb3N0Ojpwcm94eSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcHJv
eHkpOwotICAgIHJldHVybiBtX3Byb3h5OwotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpzZXRQcm94
eShXZWJUZXN0UHJveHlCYXNlKiBwcm94eSkKLXsKLSAgICBBU1NFUlQoIW1fcHJveHkpOwotICAg
IEFTU0VSVChwcm94eSk7Ci0gICAgbV9wcm94eSA9IHByb3h5OwotfQotCi12b2lkIFdlYlZpZXdI
b3N0OjpyZXNldCgpCi17Ci0gICAgbV9wYWdlSWQgPSAtMTsKLSAgICBtX2xhc3RQYWdlSWRVcGRh
dGVkID0gLTE7Ci0gICAgbV9oYXNXaW5kb3cgPSBmYWxzZTsKLSAgICBtX2luTW9kYWxMb29wID0g
ZmFsc2U7Ci0KLSAgICBtX25hdmlnYXRpb25Db250cm9sbGVyID0gYWRvcHRQdHIobmV3IFRlc3RO
YXZpZ2F0aW9uQ29udHJvbGxlcih0aGlzKSk7Ci0KLSAgICBtX3BlbmRpbmdFeHRyYURhdGEuY2xl
YXIoKTsKLSAgICBtX2VkaXRDb21tYW5kTmFtZS5jbGVhcigpOwotICAgIG1fZWRpdENvbW1hbmRW
YWx1ZS5jbGVhcigpOwotCi0gICAgbV9jdXJyZW50Q3Vyc29yID0gV2ViQ3Vyc29ySW5mbygpOwot
ICAgIG1fd2luZG93UmVjdCA9IFdlYlJlY3QoKTsKLSAgICAvLyBtX3Byb3h5IGlzIG5vdCBzZXQg
d2hlbiByZXNldCgpIGlzIGludm9rZWQgZnJvbSB0aGUgY29uc3RydWN0b3IuCi0gICAgaWYgKG1f
cHJveHkpCi0gICAgICAgIHByb3h5KCktPnJlc2V0KCk7Ci0KLSAgICBpZiAobV93ZWJXaWRnZXQp
IHsKLSAgICAgICAgd2ViVmlldygpLT5tYWluRnJhbWUoKS0+c2V0TmFtZShXZWJTdHJpbmcoKSk7
Ci0gICAgfQotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpzZXRDbGllbnRXaW5kb3dSZWN0KGNvbnN0
IFdlYktpdDo6V2ViUmVjdCYgcmVjdCkKLXsKLSAgICBzZXRXaW5kb3dSZWN0KHJlY3QpOwotfQot
Ci1ib29sIFdlYlZpZXdIb3N0OjpuYXZpZ2F0ZShjb25zdCBUZXN0TmF2aWdhdGlvbkVudHJ5JiBl
bnRyeSwgYm9vbCByZWxvYWQpCi17Ci0gICAgLy8gR2V0IHRoZSByaWdodCB0YXJnZXQgZnJhbWUg
Zm9yIHRoZSBlbnRyeS4KLSAgICBXZWJGcmFtZSogZnJhbWUgPSB3ZWJWaWV3KCktPm1haW5GcmFt
ZSgpOwotICAgIGlmICghZW50cnkudGFyZ2V0RnJhbWUoKS5pc0VtcHR5KCkpCi0gICAgICAgIGZy
YW1lID0gd2ViVmlldygpLT5maW5kRnJhbWVCeU5hbWUoZW50cnkudGFyZ2V0RnJhbWUoKSk7Ci0K
LSAgICAvLyBUT0RPKG1wY29tcGxldGUpOiBzaG91bGQgd2UgY2xlYXIgdGhlIHRhcmdldCBmcmFt
ZSwgb3Igc2hvdWxkCi0gICAgLy8gYmFjay9mb3J3YXJkIG5hdmlnYXRpb25zIG1haW50YWluIHRo
ZSB0YXJnZXQgZnJhbWU/Ci0KLSAgICAvLyBBIG5hdmlnYXRpb24gcmVzdWx0aW5nIGZyb20gbG9h
ZGluZyBhIGphdmFzY3JpcHQgVVJMIHNob3VsZCBub3QgYmUKLSAgICAvLyB0cmVhdGVkIGFzIGEg
YnJvd3NlciBpbml0aWF0ZWQgZXZlbnQuIEluc3RlYWQsIHdlIHdhbnQgaXQgdG8gbG9vayBhcyBp
ZgotICAgIC8vIHRoZSBwYWdlIGluaXRpYXRlZCBhbnkgbG9hZCByZXN1bHRpbmcgZnJvbSBKUyBl
eGVjdXRpb24uCi0gICAgaWYgKCFHVVJMKGVudHJ5LlVSTCgpKS5TY2hlbWVJcygiamF2YXNjcmlw
dCIpKQotICAgICAgICBzZXRQZW5kaW5nRXh0cmFEYXRhKGFkb3B0UHRyKG5ldyBUZXN0U2hlbGxF
eHRyYURhdGEoZW50cnkucGFnZUlEKCkpKSk7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgcmVsb2FkaW5n
LCB0aGVuIFdlYktpdCB3aWxsIHVzZSB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgcGFnZS4KLSAg
ICAvLyBPdGhlcndpc2UsIHdlIGdpdmUgaXQgdGhlIHN0YXRlIHRvIG5hdmlnYXRlIHRvLgotICAg
IGlmIChyZWxvYWQpIHsKLSAgICAgICAgZnJhbWUtPnJlbG9hZChmYWxzZSk7Ci0gICAgfSBlbHNl
IGlmICghZW50cnkuY29udGVudFN0YXRlKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgQVNTRVJUKGVu
dHJ5LnBhZ2VJRCgpICE9IC0xKTsKLSAgICAgICAgZnJhbWUtPmxvYWRIaXN0b3J5SXRlbShlbnRy
eS5jb250ZW50U3RhdGUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGVudHJ5LnBh
Z2VJRCgpID09IC0xKTsKLSAgICAgICAgZnJhbWUtPmxvYWRSZXF1ZXN0KFdlYlVSTFJlcXVlc3Qo
ZW50cnkuVVJMKCkpKTsKLSAgICB9Ci0KLSAgICAvLyBJbiBjYXNlIExvYWRSZXF1ZXN0IGZhaWxl
ZCBiZWZvcmUgRGlkQ3JlYXRlRGF0YVNvdXJjZSB3YXMgY2FsbGVkLgotICAgIHNldFBlbmRpbmdF
eHRyYURhdGEobnVsbHB0cik7Ci0KLSAgICAvLyBSZXN0b3JlIGZvY3VzIHRvIHRoZSBtYWluIGZy
YW1lIHByaW9yIHRvIGxvYWRpbmcgbmV3IHJlcXVlc3QuCi0gICAgLy8gVGhpcyBtYWtlcyBzdXJl
IHRoYXQgd2UgZG9uJ3QgaGF2ZSBhIGZvY3VzZWQgaWZyYW1lLiBPdGhlcndpc2UsIHRoYXQKLSAg
ICAvLyBpZnJhbWUgd291bGQga2VlcCBmb2N1cyB3aGVuIHRoZSBTZXRGb2N1cyBjYWxsZWQgaW1t
ZWRpYXRlbHkgYWZ0ZXIKLSAgICAvLyBMb2FkUmVxdWVzdCwgdGh1cyBtYWtpbmcgc29tZSB0ZXN0
cyBmYWlsIChzZWUgaHR0cDovL2IvaXNzdWU/aWQ9ODQ1MzM3Ci0gICAgLy8gZm9yIG1vcmUgZGV0
YWlscykuCi0gICAgd2ViVmlldygpLT5zZXRGb2N1c2VkRnJhbWUoZnJhbWUpOwotICAgIG1fc2hl
bGwtPnNldEZvY3VzKHdlYlZpZXcoKSwgdHJ1ZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ly8gUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFdlYlZpZXdIb3N0Ojp1cGRhdGVGb3JDb21t
aXR0ZWRMb2FkKFdlYkZyYW1lKiBmcmFtZSwgYm9vbCBpc05ld05hdmlnYXRpb24pCi17Ci0gICAg
Ly8gQ29kZSBkdXBsaWNhdGVkIGZyb20gUmVuZGVyVmlldzo6RGlkQ29tbWl0TG9hZEZvckZyYW1l
LgotICAgIFRlc3RTaGVsbEV4dHJhRGF0YSogZXh0cmFEYXRhID0gc3RhdGljX2Nhc3Q8VGVzdFNo
ZWxsRXh0cmFEYXRhKj4oZnJhbWUtPmRhdGFTb3VyY2UoKS0+ZXh0cmFEYXRhKCkpOwotICAgIGNv
bnN0IFdlYlVSTCYgdXJsID0gZnJhbWUtPmRhdGFTb3VyY2UoKS0+cmVxdWVzdCgpLnVybCgpOwot
ICAgIGJvb2wgbm9uQmxhbmtQYWdlQWZ0ZXJSZXNldCA9IG1fcGFnZUlkID09IC0xICYmICF1cmwu
aXNFbXB0eSgpICYmIHN0cmNtcCh1cmwuc3BlYygpLmRhdGEoKSwgImFib3V0OmJsYW5rIik7Ci0K
LSAgICBpZiAoaXNOZXdOYXZpZ2F0aW9uIHx8IG5vbkJsYW5rUGFnZUFmdGVyUmVzZXQpIHsKLSAg
ICAgICAgLy8gTmV3IG5hdmlnYXRpb24uCi0gICAgICAgIHVwZGF0ZVNlc3Npb25IaXN0b3J5KGZy
YW1lKTsKLSAgICAgICAgbV9wYWdlSWQgPSBuZXh0UGFnZUlEKys7Ci0gICAgfSBlbHNlIGlmIChl
eHRyYURhdGEgJiYgZXh0cmFEYXRhLT5wZW5kaW5nUGFnZUlEICE9IC0xICYmICFleHRyYURhdGEt
PnJlcXVlc3RDb21taXR0ZWQpIHsKLSAgICAgICAgLy8gVGhpcyBpcyBhIHN1Y2Nlc3NmdWwgc2Vz
c2lvbiBoaXN0b3J5IG5hdmlnYXRpb24hCi0gICAgICAgIHVwZGF0ZVNlc3Npb25IaXN0b3J5KGZy
YW1lKTsKLSAgICAgICAgbV9wYWdlSWQgPSBleHRyYURhdGEtPnBlbmRpbmdQYWdlSUQ7Ci0gICAg
fQotCi0gICAgLy8gRG9uJ3QgdXBkYXRlIHNlc3Npb24gaGlzdG9yeSBtdWx0aXBsZSB0aW1lcy4K
LSAgICBpZiAoZXh0cmFEYXRhKQotICAgICAgICBleHRyYURhdGEtPnJlcXVlc3RDb21taXR0ZWQg
PSB0cnVlOwotCi0gICAgdXBkYXRlVVJMKGZyYW1lKTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6
dXBkYXRlVVJMKFdlYkZyYW1lKiBmcmFtZSkKLXsKLSAgICBXZWJEYXRhU291cmNlKiBkcyA9IGZy
YW1lLT5kYXRhU291cmNlKCk7Ci0gICAgQVNTRVJUKGRzKTsKLSAgICBjb25zdCBXZWJVUkxSZXF1
ZXN0JiByZXF1ZXN0ID0gZHMtPnJlcXVlc3QoKTsKLSAgICBSZWZQdHI8VGVzdE5hdmlnYXRpb25F
bnRyeT4gZW50cnkoVGVzdE5hdmlnYXRpb25FbnRyeTo6Y3JlYXRlKCkpOwotCi0gICAgLy8gVGhl
IHJlZmVycmVyIHdpbGwgYmUgZW1wdHkgb24gaHR0cHMtPmh0dHAgdHJhbnNpdGlvbnMuIEl0Ci0g
ICAgLy8gd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCBnZXQgdGhlIHJlYWwgcmVmZXJyZXIgZnJv
bSBzb21ld2hlcmUuCi0gICAgZW50cnktPnNldFBhZ2VJRChtX3BhZ2VJZCk7Ci0gICAgaWYgKGRz
LT5oYXNVbnJlYWNoYWJsZVVSTCgpKQotICAgICAgICBlbnRyeS0+c2V0VVJMKGRzLT51bnJlYWNo
YWJsZVVSTCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGVudHJ5LT5zZXRVUkwocmVxdWVzdC51cmwo
KSk7Ci0KLSAgICBjb25zdCBXZWJIaXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0gPSBmcmFtZS0+Y3Vy
cmVudEhpc3RvcnlJdGVtKCk7Ci0gICAgaWYgKCFoaXN0b3J5SXRlbS5pc051bGwoKSkKLSAgICAg
ICAgZW50cnktPnNldENvbnRlbnRTdGF0ZShoaXN0b3J5SXRlbSk7Ci0KLSAgICBuYXZpZ2F0aW9u
Q29udHJvbGxlcigpLT5kaWROYXZpZ2F0ZVRvRW50cnkoZW50cnkuZ2V0KCkpOwotICAgIG1fbGFz
dFBhZ2VJZFVwZGF0ZWQgPSBtYXgobV9sYXN0UGFnZUlkVXBkYXRlZCwgbV9wYWdlSWQpOwotfQot
Ci12b2lkIFdlYlZpZXdIb3N0Ojp1cGRhdGVTZXNzaW9uSGlzdG9yeShXZWJGcmFtZSogZnJhbWUp
Ci17Ci0gICAgLy8gSWYgd2UgaGF2ZSBhIHZhbGlkIHBhZ2UgSUQgYXQgdGhpcyBwb2ludCwgdGhl
biBpdCBjb3JyZXNwb25kcyB0byB0aGUgcGFnZQotICAgIC8vIHdlIGFyZSBuYXZpZ2F0aW5nIGF3
YXkgZnJvbS4gT3RoZXJ3aXNlLCB0aGlzIGlzIHRoZSBmaXJzdCBuYXZpZ2F0aW9uLCBzbwotICAg
IC8vIHRoZXJlIGlzIG5vIHBhc3Qgc2Vzc2lvbiBoaXN0b3J5IHRvIHJlY29yZC4KLSAgICBpZiAo
bV9wYWdlSWQgPT0gLTEpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRlc3ROYXZpZ2F0aW9uRW50
cnkqIGVudHJ5ID0gbmF2aWdhdGlvbkNvbnRyb2xsZXIoKS0+ZW50cnlXaXRoUGFnZUlEKG1fcGFn
ZUlkKTsKLSAgICBpZiAoIWVudHJ5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBXZWJI
aXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0gPSB3ZWJWaWV3KCktPm1haW5GcmFtZSgpLT5wcmV2aW91
c0hpc3RvcnlJdGVtKCk7Ci0gICAgaWYgKGhpc3RvcnlJdGVtLmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBlbnRyeS0+c2V0Q29udGVudFN0YXRlKGhpc3RvcnlJdGVtKTsKLX0KLQot
dm9pZCBXZWJWaWV3SG9zdDo6dXBkYXRlVmlld3BvcnRTaXplKCkKLXsKLSAgICBpZiAoIW1fbGF5
ZXJUcmVlVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViU2l6ZSBkZXZpY2VWaWV3cG9y
dFNpemUod2ViV2lkZ2V0KCktPnNpemUoKS53aWR0aCAqIHdlYlZpZXcoKS0+ZGV2aWNlU2NhbGVG
YWN0b3IoKSwKLSAgICAgICAgd2ViV2lkZ2V0KCktPnNpemUoKS5oZWlnaHQgKiB3ZWJWaWV3KCkt
PmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgIG1fbGF5ZXJUcmVlVmlldy0+c2V0Vmlld3BvcnRT
aXplKHdlYldpZGdldCgpLT5zaXplKCksIGRldmljZVZpZXdwb3J0U2l6ZSk7Ci19Ci0KLXZvaWQg
V2ViVmlld0hvc3Q6OnByaW50RnJhbWVEZXNjcmlwdGlvbihXZWJGcmFtZSogd2ViZnJhbWUpCi17
Ci0gICAgc3RyaW5nIG5hbWU4ID0gd2ViZnJhbWUtPnVuaXF1ZU5hbWUoKS51dGY4KCk7Ci0gICAg
aWYgKHdlYmZyYW1lID09IHdlYlZpZXcoKS0+bWFpbkZyYW1lKCkpIHsKLSAgICAgICAgaWYgKCFu
YW1lOC5sZW5ndGgoKSkgewotICAgICAgICAgICAgZnB1dHMoIm1haW4gZnJhbWUiLCBzdGRvdXQp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigibWFpbiBm
cmFtZSBcIiVzXCIiLCBuYW1lOC5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoIW5hbWU4Lmxlbmd0aCgpKSB7Ci0gICAgICAgIGZwdXRzKCJmcmFtZSAoYW5vbnltb3Vz
KSIsIHN0ZG91dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcHJpbnRmKCJmcmFtZSBc
IiVzXCIiLCBuYW1lOC5jX3N0cigpKTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6c2V0UGVuZGlu
Z0V4dHJhRGF0YShQYXNzT3duUHRyPFRlc3RTaGVsbEV4dHJhRGF0YT4gZXh0cmFEYXRhKQotewot
ICAgIG1fcGVuZGluZ0V4dHJhRGF0YSA9IGV4dHJhRGF0YTsKLX0KLQotdm9pZCBXZWJWaWV3SG9z
dDo6c2V0UGFnZVRpdGxlKGNvbnN0IFdlYlN0cmluZyYpCi17Ci0gICAgLy8gTm90aGluZyB0byBk
byBpbiBsYXlvdXQgdGVzdC4KLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6ZW50ZXJGdWxsU2NyZWVu
Tm93KCkKLXsKLSAgICB3ZWJWaWV3KCktPndpbGxFbnRlckZ1bGxTY3JlZW4oKTsKLSAgICB3ZWJW
aWV3KCktPmRpZEVudGVyRnVsbFNjcmVlbigpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpleGl0
RnVsbFNjcmVlbk5vdygpCi17Ci0gICAgd2ViVmlldygpLT53aWxsRXhpdEZ1bGxTY3JlZW4oKTsK
LSAgICB3ZWJWaWV3KCktPmRpZEV4aXRGdWxsU2NyZWVuKCk7Ci19Ci0KLSNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQotd2Via2l0X3N1cHBvcnQ6OlRlc3RNZWRpYVN0cmVhbUNsaWVudCogV2ViVmll
d0hvc3Q6OnRlc3RNZWRpYVN0cmVhbUNsaWVudCgpCi17Ci0gICAgaWYgKCFtX3Rlc3RNZWRpYVN0
cmVhbUNsaWVudC5nZXQoKSkKLSAgICAgICAgbV90ZXN0TWVkaWFTdHJlYW1DbGllbnQgPSBhZG9w
dFB0cihuZXcgd2Via2l0X3N1cHBvcnQ6OlRlc3RNZWRpYVN0cmVhbUNsaWVudCgpKTsKLSAgICBy
ZXR1cm4gbV90ZXN0TWVkaWFTdHJlYW1DbGllbnQuZ2V0KCk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmggYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA3YjFjYjIyZjBkZTEyNjMxYjE4ZjUyZjQxMDQyMWEwNWZmM2JlNzY3Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOTEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgV2ViVmlld0hvc3RfaAotI2RlZmluZSBXZWJWaWV3SG9zdF9oCi0KLSNpbmNs
dWRlICJUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJXZWJDdXJzb3JJbmZv
LmgiCi0jaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJQcmVyZW5kZXJl
ckNsaWVudC5oIgotI2luY2x1ZGUgIldlYlRhc2suaCIKLSNpbmNsdWRlICJXZWJUZXN0RGVsZWdh
dGUuaCIKLSNpbmNsdWRlICJXZWJUZXN0UHJveHkuaCIKLSNpbmNsdWRlICJXZWJWaWV3Q2xpZW50
LmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYkZpbGVTeXN0ZW1UeXBlLmg+Ci0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotY2xhc3MgU2tDYW52YXM7
Ci1jbGFzcyBUZXN0U2hlbGw7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViRnJhbWU7
Ci1jbGFzcyBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWU7Ci1jbGFzcyBXZWJTaGFyZWRXb3JrZXJD
bGllbnQ7Ci1jbGFzcyBXZWJVUkw7Ci1zdHJ1Y3QgV2ViUmVjdDsKLXN0cnVjdCBXZWJVUkxFcnJv
cjsKLXN0cnVjdCBXZWJXaW5kb3dGZWF0dXJlczsKLX0KLQotbmFtZXNwYWNlIHdlYmtpdF9zdXBw
b3J0IHsKLWNsYXNzIERSVExheWVyVHJlZVZpZXdDbGllbnQ7Ci1jbGFzcyBNZWRpYVN0cmVhbVV0
aWw7Ci1jbGFzcyBUZXN0TWVkaWFTdHJlYW1DbGllbnQ7Ci19Ci0KLW5hbWVzcGFjZSBXZWJUZXN0
UnVubmVyIHsKLWNsYXNzIFdlYlRlc3RSdW5uZXI7Ci19Ci0KLWNsYXNzIFdlYlZpZXdIb3N0IDog
cHVibGljIFdlYktpdDo6V2ViVmlld0NsaWVudCwgcHVibGljIFdlYktpdDo6V2ViRnJhbWVDbGll
bnQsIHB1YmxpYyBOYXZpZ2F0aW9uSG9zdCwgcHVibGljIFdlYktpdDo6V2ViUHJlcmVuZGVyZXJD
bGllbnQsIHB1YmxpYyBXZWJUZXN0UnVubmVyOjpXZWJUZXN0RGVsZWdhdGUgewotIHB1YmxpYzoK
LSAgICBXZWJWaWV3SG9zdChUZXN0U2hlbGwqKTsKLSAgICB2aXJ0dWFsIH5XZWJWaWV3SG9zdCgp
OwotICAgIHZvaWQgc2h1dGRvd24oKTsKLSAgICB2b2lkIHNldFdlYldpZGdldChXZWJLaXQ6Oldl
YldpZGdldCopOwotICAgIFdlYktpdDo6V2ViVmlldyogd2ViVmlldygpIGNvbnN0OwotICAgIFdl
YktpdDo6V2ViV2lkZ2V0KiB3ZWJXaWRnZXQoKSBjb25zdDsKLSAgICBXZWJUZXN0UnVubmVyOjpX
ZWJUZXN0UHJveHlCYXNlKiBwcm94eSgpIGNvbnN0OwotICAgIHZvaWQgc2V0UHJveHkoV2ViVGVz
dFJ1bm5lcjo6V2ViVGVzdFByb3h5QmFzZSopOwotICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2b2lk
IHNldFBlbmRpbmdFeHRyYURhdGEoUGFzc093blB0cjxUZXN0U2hlbGxFeHRyYURhdGE+KTsKLQot
ICAgIFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlciogbmF2aWdhdGlvbkNvbnRyb2xsZXIoKSB7IHJl
dHVybiBtX25hdmlnYXRpb25Db250cm9sbGVyLmdldCgpOyB9Ci0KLSAgICB2b2lkIGNsb3NlV2lk
Z2V0KCk7Ci0KLSAgICAvLyBXZWJUZXN0RGVsZWdhdGUuCi0gICAgdmlydHVhbCB2b2lkIHNldEVk
aXRDb21tYW5kKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFs
dWUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhckVkaXRDb21tYW5kKCkgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEdhbWVwYWREYXRhKGNvbnN0IFdlYktpdDo6V2ViR2Ft
ZXBhZHMmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJpbnRNZXNzYWdlKGNvbnN0IHN0
ZDo6c3RyaW5nJiBtZXNzYWdlKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2so
V2ViVGVzdFJ1bm5lcjo6V2ViVGFzayopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0
RGVsYXllZFRhc2soV2ViVGVzdFJ1bm5lcjo6V2ViVGFzayosIGxvbmcgbG9uZyBtcykgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlN0cmluZyByZWdpc3Rlcklzb2xhdGVkRmlsZVN5
c3RlbShjb25zdCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYlN0cmluZz4mIGFic29sdXRl
RmlsZW5hbWVzKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGxvbmcgbG9uZyBnZXRDdXJyZW50VGlt
ZUluTWlsbGlzZWNvbmQoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViU3RyaW5n
IGdldEFic29sdXRlV2ViU3RyaW5nRnJvbVVURjhQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRo
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViVVJMIGxvY2FsRmlsZVRvRGF0YVVS
TChjb25zdCBXZWJLaXQ6OldlYlVSTCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgV2ViS2l0OjpX
ZWJVUkwgcmV3cml0ZUxheW91dFRlc3RzVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJikgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCBXZWJUZXN0UnVubmVyOjpXZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMo
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlQcmVmZXJlbmNlcygpIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgbWFrZVVSTEVycm9yRGVzY3JpcHRpb24oY29uc3Qg
V2ViS2l0OjpXZWJVUkxFcnJvciYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDbGll
bnRXaW5kb3dSZWN0KGNvbnN0IFdlYktpdDo6V2ViUmVjdCYpIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCBzaG93RGV2VG9vbHMoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VE
ZXZUb29scygpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBldmFsdWF0ZUluV2ViSW5zcGVj
dG9yKGxvbmcsIGNvbnN0IHN0ZDo6c3RyaW5nJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lk
IGNsZWFyQWxsRGF0YWJhc2VzKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldERhdGFi
YXNlUXVvdGEoaW50KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhXZWJUZXN0
UnVubmVyOjpXZWJUZXN0UHJveHlCYXNlKiwgYm9vbCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2
b2lkIHNldEFjY2VwdEFsbENvb2tpZXMoYm9vbCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBzdGQ6
OnN0cmluZyBwYXRoVG9Mb2NhbFJlc291cmNlKGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwpIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMb2NhbGUoY29uc3Qgc3RkOjpzdHJpbmcmKSBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgdGVzdEZpbmlzaGVkKCkgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIHRlc3RUaW1lZE91dCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBpc0Jl
aW5nRGVidWdnZWQoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGludCBsYXlvdXRUZXN0VGltZW91
dCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVJlbWFpbmluZ1dpbmRvd3MoKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIGludCBuYXZpZ2F0aW9uRW50cnlDb3VudCgpIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgdm9pZCBnb1RvT2Zmc2V0KGludCkgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIHJlbG9hZCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkVVJMRm9yRnJh
bWUoY29uc3QgV2ViS2l0OjpXZWJVUkwmLCBjb25zdCBzdGQ6OnN0cmluZyYgZnJhbWVOYW1lKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dFeHRlcm5hbFBhZ2VzKCkgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIGNhcHR1cmVIaXN0b3J5Rm9yV2luZG93KFdlYlRlc3RSdW5uZXI6
OldlYlRlc3RQcm94eUJhc2UqLCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkhpc3RvcnlJ
dGVtPiosIHNpemVfdCogY3VycmVudEVudHJ5SW5kZXgpIE9WRVJSSURFOwotCi0gICAgLy8gTmF2
aWdhdGlvbkhvc3QKLSAgICB2aXJ0dWFsIGJvb2wgbmF2aWdhdGUoY29uc3QgVGVzdE5hdmlnYXRp
b25FbnRyeSYsIGJvb2wgcmVsb2FkKTsKLQotICAgIC8vIFdlYktpdDo6V2ViUHJlcmVuZGVyZXJD
bGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbEFkZFByZXJlbmRlcihXZWJLaXQ6OldlYlByZXJl
bmRlciopIE9WRVJSSURFOwotCi0gICAgLy8gV2ViS2l0OjpXZWJWaWV3Q2xpZW50Ci0gICAgdmly
dHVhbCBXZWJLaXQ6OldlYlZpZXcqIGNyZWF0ZVZpZXcoV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0
IFdlYktpdDo6V2ViVVJMUmVxdWVzdCYsIGNvbnN0IFdlYktpdDo6V2ViV2luZG93RmVhdHVyZXMm
LCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYsIFdlYktpdDo6V2ViTmF2aWdhdGlvblBvbGljeSk7
Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYldpZGdldCogY3JlYXRlUG9wdXBNZW51KFdlYktpdDo6
V2ViUG9wdXBUeXBlKTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViV2lkZ2V0KiBjcmVhdGVQb3B1
cE1lbnUoY29uc3QgV2ViS2l0OjpXZWJQb3B1cE1lbnVJbmZvJik7Ci0gICAgdmlydHVhbCBXZWJL
aXQ6OldlYlN0b3JhZ2VOYW1lc3BhY2UqIGNyZWF0ZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKHVu
c2lnbmVkIHF1b3RhKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkTWVzc2FnZVRvQ29uc29sZShj
b25zdCBXZWJLaXQ6OldlYkNvbnNvbGVNZXNzYWdlJiwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcm
IHNvdXJjZU5hbWUsIHVuc2lnbmVkIHNvdXJjZUxpbmUpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRT
dGFydExvYWRpbmcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcExvYWRpbmcoKTsKLSAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFdlYktpdDo6V2ViUmFuZ2UmKTsK
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhjb25zdCBXZWJLaXQ6OldlYlJhbmdl
Jik7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydE5vZGUoY29uc3QgV2ViS2l0OjpXZWJO
b2RlJiwgY29uc3QgV2ViS2l0OjpXZWJSYW5nZSYsIFdlYktpdDo6V2ViRWRpdGluZ0FjdGlvbik7
Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEluc2VydFRleHQoY29uc3QgV2ViS2l0OjpXZWJTdHJp
bmcmLCBjb25zdCBXZWJLaXQ6OldlYlJhbmdlJiwgV2ViS2l0OjpXZWJFZGl0aW5nQWN0aW9uKTsK
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjb25zdCBXZWJLaXQ6
OldlYlJhbmdlJiBmcm9tLCBjb25zdCBXZWJLaXQ6OldlYlJhbmdlJiB0bywgV2ViS2l0OjpXZWJU
ZXh0QWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91
bGREZWxldGVSYW5nZShjb25zdCBXZWJLaXQ6OldlYlJhbmdlJik7Ci0gICAgdmlydHVhbCBib29s
IHNob3VsZEFwcGx5U3R5bGUoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHN0eWxlLCBjb25zdCBX
ZWJLaXQ6OldlYlJhbmdlJik7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUN1cnJlbnRLZXlib2Fy
ZEV2ZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHJ1bk1vZGFsQWxlcnREaWFsb2coV2ViS2l0OjpX
ZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJik7Ci0gICAgdmlydHVhbCBib29sIHJ1
bk1vZGFsQ29uZmlybURpYWxvZyhXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJT
dHJpbmcmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcnVuTW9kYWxQcm9tcHREaWFsb2coV2ViS2l0OjpX
ZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBXZWJLaXQ6
OldlYlN0cmluZyYgZGVmYXVsdFZhbHVlLCBXZWJLaXQ6OldlYlN0cmluZyogYWN0dWFsVmFsdWUp
OwotICAgIHZpcnR1YWwgdm9pZCBzaG93Q29udGV4dE1lbnUoV2ViS2l0OjpXZWJGcmFtZSosIGNv
bnN0IFdlYktpdDo6V2ViQ29udGV4dE1lbnVEYXRhJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFVw
ZGF0ZUxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBuYXZpZ2F0ZUJhY2tGb3J3YXJkU29vbihp
bnQgb2Zmc2V0KTsKLSAgICB2aXJ0dWFsIGludCBoaXN0b3J5QmFja0xpc3RDb3VudCgpOwotICAg
IHZpcnR1YWwgaW50IGhpc3RvcnlGb3J3YXJkTGlzdENvdW50KCk7Ci0KLSAgICAvLyBXZWJLaXQ6
OldlYldpZGdldENsaWVudAotICAgIHZpcnR1YWwgdm9pZCBkaWRBdXRvUmVzaXplKGNvbnN0IFdl
YktpdDo6V2ViU2l6ZSYgbmV3U2l6ZSk7Ci0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVMYXll
clRyZWVWaWV3KCk7Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXcqIGxheWVy
VHJlZVZpZXcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkRm9jdXMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQmx1cigpOwotICAg
IHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VDdXJzb3IoY29uc3QgV2ViS2l0OjpXZWJDdXJzb3JJbmZv
Jik7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlV2lkZ2V0U29vbigpOwotICAgIHZpcnR1YWwgdm9p
ZCBzaG93KFdlYktpdDo6V2ViTmF2aWdhdGlvblBvbGljeSk7Ci0gICAgdmlydHVhbCB2b2lkIHJ1
bk1vZGFsKCk7Ci0gICAgdmlydHVhbCBib29sIGVudGVyRnVsbFNjcmVlbigpOwotICAgIHZpcnR1
YWwgdm9pZCBleGl0RnVsbFNjcmVlbigpOwotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJSZWN0IHdp
bmRvd1JlY3QoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBXZWJLaXQ6
OldlYlJlY3QmKTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViUmVjdCByb290V2luZG93UmVjdCgp
OwotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJSZWN0IHdpbmRvd1Jlc2l6ZXJSZWN0KCk7Ci0gICAg
dmlydHVhbCBXZWJLaXQ6OldlYlNjcmVlbkluZm8gc2NyZWVuSW5mbygpOwotCi0gICAgLy8gV2Vi
S2l0OjpXZWJGcmFtZUNsaWVudAotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJQbHVnaW4qIGNyZWF0
ZVBsdWdpbihXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJQbHVnaW5QYXJhbXMm
KTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViTWVkaWFQbGF5ZXIqIGNyZWF0ZU1lZGlhUGxheWVy
KFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlVSTCYsIFdlYktpdDo6V2ViTWVk
aWFQbGF5ZXJDbGllbnQqKTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViQXBwbGljYXRpb25DYWNo
ZUhvc3QqIGNyZWF0ZUFwcGxpY2F0aW9uQ2FjaGVIb3N0KFdlYktpdDo6V2ViRnJhbWUqLCBXZWJL
aXQ6OldlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGxv
YWRVUkxFeHRlcm5hbGx5KFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlVSTFJl
cXVlc3QmLCBXZWJLaXQ6OldlYk5hdmlnYXRpb25Qb2xpY3kpOwotICAgIHZpcnR1YWwgdm9pZCBs
b2FkVVJMRXh0ZXJuYWxseShXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJVUkxS
ZXF1ZXN0JiwgV2ViS2l0OjpXZWJOYXZpZ2F0aW9uUG9saWN5LCBjb25zdCBXZWJLaXQ6OldlYlN0
cmluZyYgZG93bmxvYWROYW1lKTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViTmF2aWdhdGlvblBv
bGljeSBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uKAotICAgICAgICBXZWJLaXQ6OldlYkZyYW1l
KiwgY29uc3QgV2ViS2l0OjpXZWJVUkxSZXF1ZXN0JiwKLSAgICAgICAgV2ViS2l0OjpXZWJOYXZp
Z2F0aW9uVHlwZSwgY29uc3QgV2ViS2l0OjpXZWJOb2RlJiwKLSAgICAgICAgV2ViS2l0OjpXZWJO
YXZpZ2F0aW9uUG9saWN5LCBib29sIGlzUmVkaXJlY3QpOwotICAgIHZpcnR1YWwgYm9vbCBjYW5I
YW5kbGVSZXF1ZXN0KFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlVSTFJlcXVl
c3QmKTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViVVJMRXJyb3IgY2FuY2VsbGVkRXJyb3IoV2Vi
S2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViVVJMUmVxdWVzdCYpOwotICAgIHZpcnR1
YWwgdm9pZCB1bmFibGVUb0ltcGxlbWVudFBvbGljeVdpdGhFcnJvcihXZWJLaXQ6OldlYkZyYW1l
KiwgY29uc3QgV2ViS2l0OjpXZWJVUkxFcnJvciYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVh
dGVEYXRhU291cmNlKFdlYktpdDo6V2ViRnJhbWUqLCBXZWJLaXQ6OldlYkRhdGFTb3VyY2UqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0UHJvdmlzaW9uYWxMb2FkKFdlYktpdDo6V2ViRnJh
bWUqLCBib29sIGlzTmV3TmF2aWdhdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENsZWFyV2lu
ZG93T2JqZWN0KFdlYktpdDo6V2ViRnJhbWUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZVRpdGxlKFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYsIFdlYktp
dDo6V2ViVGV4dERpcmVjdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUljb24oV2Vi
S2l0OjpXZWJGcmFtZSogLCBXZWJLaXQ6OldlYkljb25VUkw6OlR5cGUpOwotICAgIHZpcnR1YWwg
dm9pZCBkaWROYXZpZ2F0ZVdpdGhpblBhZ2UoV2ViS2l0OjpXZWJGcmFtZSosIGJvb2wgaXNOZXdO
YXZpZ2F0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFdlYktpdDo6V2Vi
RnJhbWUqLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBXZWJLaXQ6OldlYlVSTFJlcXVlc3QmLCBjb25z
dCBXZWJLaXQ6OldlYlVSTFJlc3BvbnNlJik7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5GaWxlU3lz
dGVtKFdlYktpdDo6V2ViRnJhbWUqLCBXZWJLaXQ6OldlYkZpbGVTeXN0ZW1UeXBlLCBsb25nIGxv
bmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdlYktpdDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrcyopOwot
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGaWxlU3lzdGVtKFdlYktpdDo6V2ViRnJhbWUqLCBXZWJL
aXQ6OldlYkZpbGVTeXN0ZW1UeXBlLCBXZWJLaXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3MqKTsK
LSAgICB2aXJ0dWFsIGJvb2wgd2lsbENoZWNrQW5kRGlzcGF0Y2hNZXNzYWdlRXZlbnQoCi0gICAg
ICAgIFdlYktpdDo6V2ViRnJhbWUqIHNvdXJjZUZyYW1lLCBXZWJLaXQ6OldlYkZyYW1lKiB0YXJn
ZXRGcmFtZSwgCi0gICAgICAgIFdlYktpdDo6V2ViU2VjdXJpdHlPcmlnaW4gdGFyZ2V0LCBXZWJL
aXQ6OldlYkRPTU1lc3NhZ2VFdmVudCk7Ci0KLSAgICAvLyBQZW5kaW5nIHRhc2sgbGlzdCwgTm90
ZSB0YWh0IHRoZSBtZXRob2QgaXMgcmVmZXJyZWQgZnJvbSBXZWJNZXRob2RUYXNrIGNsYXNzLgot
ICAgIFdlYlRlc3RSdW5uZXI6OldlYlRhc2tMaXN0KiB0YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rh
c2tMaXN0OyB9Ci0KLSAgICAvLyBFeHBvc2VkIGZvciBXZWJUZXN0UHJveHkuCi0gICAgdm9pZCBz
Y2hlZHVsZUNvbXBvc2l0ZSgpIHsgfQotCi1wcml2YXRlOgotCi0gICAgY2xhc3MgSG9zdE1ldGhv
ZFRhc2sgOiBwdWJsaWMgV2ViVGVzdFJ1bm5lcjo6V2ViTWV0aG9kVGFzazxXZWJWaWV3SG9zdD4g
ewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiB2b2lkIChXZWJWaWV3SG9zdDo6KkNhbGxi
YWNrTWV0aG9kVHlwZSkoKTsKLSAgICAgICAgSG9zdE1ldGhvZFRhc2soV2ViVmlld0hvc3QqIG9i
amVjdCwgQ2FsbGJhY2tNZXRob2RUeXBlIGNhbGxiYWNrKQotICAgICAgICAgICAgOiBXZWJUZXN0
UnVubmVyOjpXZWJNZXRob2RUYXNrPFdlYlZpZXdIb3N0PihvYmplY3QpCi0gICAgICAgICAgICAs
IG1fY2FsbGJhY2soY2FsbGJhY2spCi0gICAgICAgIHsgfQotCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBydW5JZlZhbGlkKCkgeyAobV9vYmplY3QtPiptX2NhbGxiYWNrKSgpOyB9Ci0KLSAgICBwcml2
YXRlOgotICAgICAgICBDYWxsYmFja01ldGhvZFR5cGUgbV9jYWxsYmFjazsKLSAgICB9OwotCi0g
ICAgLy8gQ2FsbGVkIHRoZSB0aXRsZSBvZiB0aGUgcGFnZSBjaGFuZ2VzLgotICAgIC8vIENhbiBi
ZSB1c2VkIHRvIHVwZGF0ZSB0aGUgdGl0bGUgb2YgdGhlIHdpbmRvdy4KLSAgICB2b2lkIHNldFBh
Z2VUaXRsZShjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYpOwotCi0gICAgdm9pZCBlbnRlckZ1bGxT
Y3JlZW5Ob3coKTsKLSAgICB2b2lkIGV4aXRGdWxsU2NyZWVuTm93KCk7Ci0KLSAgICB2b2lkIHVw
ZGF0ZUZvckNvbW1pdHRlZExvYWQoV2ViS2l0OjpXZWJGcmFtZSosIGJvb2wgaXNOZXdOYXZpZ2F0
aW9uKTsKLSAgICB2b2lkIHVwZGF0ZVVSTChXZWJLaXQ6OldlYkZyYW1lKik7Ci0gICAgdm9pZCB1
cGRhdGVTZXNzaW9uSGlzdG9yeShXZWJLaXQ6OldlYkZyYW1lKik7Ci0KLSAgICAvLyBEdW1waW5n
IGEgZnJhbWUgdG8gdGhlIGNvbnNvbGUuCi0gICAgdm9pZCBwcmludEZyYW1lRGVzY3JpcHRpb24o
V2ViS2l0OjpXZWJGcmFtZSopOwotCi0gICAgYm9vbCBoYXNXaW5kb3coKSBjb25zdCB7IHJldHVy
biBtX2hhc1dpbmRvdzsgfQotCi0gICAgdm9pZCB1cGRhdGVWaWV3cG9ydFNpemUoKTsKLQotI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgd2Via2l0X3N1cHBvcnQ6OlRlc3RNZWRpYVN0cmVh
bUNsaWVudCogdGVzdE1lZGlhU3RyZWFtQ2xpZW50KCk7Ci0jZW5kaWYKLQotICAgIC8vIE5vbi1v
d25pbmcgcG9pbnRlci4gVGhlIFdlYlZpZXdIb3N0IGluc3RhbmNlIGlzIG93bmVkIGJ5IHRoaXMg
VGVzdFNoZWxsIGluc3RhbmNlLgotICAgIFRlc3RTaGVsbCogbV9zaGVsbDsKLQotICAgIC8vIE5v
bi1vd25pbmcgcG9pbnRlci4gVGhpcyBjbGFzcyBuZWVkcyB0byBiZSB3cmFwcGVkIGluIGEgV2Vi
VGVzdFByb3h5LiBUaGlzIGlzIHRoZSBwb2ludGVyIHRvIHRoZSBXZWJUZXN0UHJveHlCYXNlLgot
ICAgIFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eUJhc2UqIG1fcHJveHk7Ci0KLSAgICAvLyBU
aGlzIGRlbGVnYXRlIHdvcmtzIGZvciB0aGUgZm9sbG93aW5nIHdpZGdldC4KLSAgICBXZWJLaXQ6
OldlYldpZGdldCogbV93ZWJXaWRnZXQ7Ci0KLSAgICAvLyBGb3IgdHJhY2tpbmcgc2Vzc2lvbiBo
aXN0b3J5LiBTZWUgUmVuZGVyVmlldy4KLSAgICBpbnQgbV9wYWdlSWQ7Ci0gICAgaW50IG1fbGFz
dFBhZ2VJZFVwZGF0ZWQ7Ci0KLSAgICBPd25QdHI8VGVzdFNoZWxsRXh0cmFEYXRhPiBtX3BlbmRp
bmdFeHRyYURhdGE7Ci0KLSAgICBXZWJLaXQ6OldlYkN1cnNvckluZm8gbV9jdXJyZW50Q3Vyc29y
OwotCi0gICAgYm9vbCBtX2hhc1dpbmRvdzsKLSAgICBib29sIG1faW5Nb2RhbExvb3A7Ci0KLSAg
ICBib29sIG1fc2h1dGRvd25XYXNJbnZva2VkOwotCi0gICAgV2ViS2l0OjpXZWJSZWN0IG1fd2lu
ZG93UmVjdDsKLQotICAgIC8vIEVkaXQgY29tbWFuZCBhc3NvY2lhdGVkIHRvIHRoZSBjdXJyZW50
IGtleWJvYXJkIGV2ZW50LgotICAgIHN0ZDo6c3RyaW5nIG1fZWRpdENvbW1hbmROYW1lOwotICAg
IHN0ZDo6c3RyaW5nIG1fZWRpdENvbW1hbmRWYWx1ZTsKLQotCi0gICAgT3duUHRyPFdlYktpdDo6
V2ViQ29udGV4dE1lbnVEYXRhPiBtX2xhc3RDb250ZXh0TWVudURhdGE7Ci0KLQotI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCi0gICAgT3duUHRyPHdlYmtpdF9zdXBwb3J0OjpUZXN0TWVkaWFTdHJl
YW1DbGllbnQ+IG1fdGVzdE1lZGlhU3RyZWFtQ2xpZW50OwotI2VuZGlmCi0KLSAgICBPd25QdHI8
VGVzdE5hdmlnYXRpb25Db250cm9sbGVyPiBtX25hdmlnYXRpb25Db250cm9sbGVyOwotCi0gICAg
V2ViVGVzdFJ1bm5lcjo6V2ViVGFza0xpc3QgbV90YXNrTGlzdDsKLSAgICBWZWN0b3I8V2ViS2l0
OjpXZWJXaWRnZXQqPiBtX3BvcHVwbWVudXM7Ci0KLSAgICBPd25QdHI8d2Via2l0X3N1cHBvcnQ6
OkRSVExheWVyVHJlZVZpZXdDbGllbnQ+IG1fbGF5ZXJUcmVlVmlld0NsaWVudDsKLSAgICBPd25Q
dHI8V2ViS2l0OjpXZWJMYXllclRyZWVWaWV3PiBtX2xheWVyVHJlZVZpZXc7Ci19OwotCi0jZW5k
aWYgLy8gV2ViVmlld0hvc3RfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vYW5kcm9pZF9mYWxsYmFja19mb250cy54bWwgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9hbmRyb2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNzkxOTNiN2M0ZDczZTY1M2U5MmYxY2YzZWY2NTQ0NTA3Mzc5ZDE0OS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9hbmRyb2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbAorKysgL2Rldi9udWxsCkBA
IC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08
ZmFtaWx5c2V0PgotICAgIDxmYW1pbHk+Ci0gICAgICAgIDxmaWxlc2V0PgotICAgICAgICAgICAg
PGZpbGU+RGVqYVZ1U2Fucy50dGY8L2ZpbGU+Ci0gICAgICAgIDwvZmlsZXNldD4KLSAgICA8L2Zh
bWlseT4KLSAgICA8ZmFtaWx5PgotICAgICAgICA8ZmlsZXNldD4KLSAgICAgICAgICAgIDxmaWxl
PmtvY2hpLW1pbmNoby50dGY8L2ZpbGU+Ci0gICAgICAgIDwvZmlsZXNldD4KLSAgICA8L2ZhbWls
eT4KLSAgICA8ZmFtaWx5PgotICAgICAgICA8ZmlsZXNldD4KLSAgICAgICAgICAgIDxmaWxlPmxv
aGl0X2hpLnR0ZjwvZmlsZT4KLSAgICAgICAgPC9maWxlc2V0PgotICAgIDwvZmFtaWx5PgotICAg
IDxmYW1pbHk+Ci0gICAgICAgIDxmaWxlc2V0PgotICAgICAgICAgICAgPGZpbGU+bG9oaXRfdGEu
dHRmPC9maWxlPgotICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgPC9mYW1pbHk+Ci0gICAgPGZhbWls
eT4KLSAgICAgICAgPGZpbGVzZXQ+Ci0gICAgICAgICAgICA8ZmlsZT5NdWt0aU5hcnJvdy50dGY8
L2ZpbGU+Ci0gICAgICAgIDwvZmlsZXNldD4KLSAgICA8L2ZhbWlseT4KLSAgICA8ZmFtaWx5Pgot
ICAgICAgICA8ZmlsZXNldD4KLSAgICAgICAgICAgIDxmaWxlPkdhcnVkYS50dGY8L2ZpbGU+Ci0g
ICAgICAgIDwvZmlsZXNldD4KLSAgICA8L2ZhbWlseT4KLSAgICA8ZmFtaWx5PgotICAgICAgICA8
ZmlsZXNldD4KLSAgICAgICAgICAgIDxmaWxlPmxvaGl0X3BhLnR0ZjwvZmlsZT4KLSAgICAgICAg
PC9maWxlc2V0PgotICAgIDwvZmFtaWx5PgotPC9mYW1pbHlzZXQ+CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9hbmRyb2lkX21haW5fZm9udHMueG1sIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vYW5kcm9pZF9tYWluX2ZvbnRzLnhtbApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYjZhZmE3OTQ0NGEyZjE0MjhjYWE3ZjI2NmEyNDZlYzYwMzdi
N2U0ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9hbmRyb2lkX21haW5fZm9udHMueG1sCisrKyAvZGV2
L251bGwKQEAgLTEsMTIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0
Zi04Ij8+Ci08ZmFtaWx5c2V0PgotCi0gICAgPGZhbWlseT4KLSAgICAgICAgPG5hbWVzZXQ+Ci0g
ICAgICAgICAgICA8bmFtZT5zYW5zPC9uYW1lPgotICAgICAgICAgICAgPG5hbWU+c2FucyBzZXJp
ZjwvbmFtZT4KLSAgICAgICAgICAgIDxuYW1lPnNhbnMtc2VyaWY8L25hbWU+Ci0gICAgICAgICAg
ICA8bmFtZT5BcmlhbDwvbmFtZT4KLSAgICAgICAgICAgIDxuYW1lPkhlbHZldGljYTwvbmFtZT4K
LSAgICAgICAgPC9uYW1lc2V0PgotICAgICAgICA8ZmlsZXNldD4KLSAgICAgICAgICAgIDxmaWxl
PkFyaWFsLnR0ZjwvZmlsZT4KLSAgICAgICAgICAgIDxmaWxlPkFyaWFsX0JvbGQudHRmPC9maWxl
PgotICAgICAgICAgICAgPGZpbGU+QXJpYWxfSXRhbGljLnR0ZjwvZmlsZT4KLSAgICAgICAgICAg
IDxmaWxlPkFyaWFsX0JvbGRfSXRhbGljLnR0ZjwvZmlsZT4KLSAgICAgICAgPC9maWxlc2V0Pgot
ICAgIDwvZmFtaWx5PgotCi0gICAgPGZhbWlseT4KLSAgICAgICAgPG5hbWVzZXQ+Ci0gICAgICAg
ICAgICA8bmFtZT5zZXJpZjwvbmFtZT4KLSAgICAgICAgICAgIDxuYW1lPlRpbWVzPC9uYW1lPgot
ICAgICAgICAgICAgPG5hbWU+VGltZXMgTmV3IFJvbWFuPC9uYW1lPgotICAgICAgICAgICAgPG5h
bWU+TW9uYWNvPC9uYW1lPgotICAgICAgICAgICAgPCEtLSBNYXRjaCBjaHJvbWl1bS1saW51eC4g
U2VlIGNvbW1lbnRzIG9mIFN1YnBpeGVsUG9zaXRpb25pbmcgaW4gZm9udHMuY29uZiAtLT4KLSAg
ICAgICAgICAgIDxuYW1lPlN1YnBpeGVsUG9zaXRpb25pbmc8L25hbWU+Ci0gICAgICAgIDwvbmFt
ZXNldD4KLSAgICAgICAgPGZpbGVzZXQ+Ci0gICAgICAgICAgICA8ZmlsZT5UaW1lc19OZXdfUm9t
YW4udHRmPC9maWxlPgotICAgICAgICAgICAgPGZpbGU+VGltZXNfTmV3X1JvbWFuX0JvbGQudHRm
PC9maWxlPgotICAgICAgICAgICAgPGZpbGU+VGltZXNfTmV3X1JvbWFuX0l0YWxpYy50dGY8L2Zp
bGU+Ci0gICAgICAgICAgICA8ZmlsZT5UaW1lc19OZXdfUm9tYW5fQm9sZF9JdGFsaWMudHRmPC9m
aWxlPgotICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgPC9mYW1pbHk+Ci0KLSAgICA8ZmFtaWx5Pgot
ICAgICAgICA8bmFtZXNldD4KLSAgICAgICAgICAgIDxuYW1lPm1vbm88L25hbWU+Ci0gICAgICAg
ICAgICA8bmFtZT5tb25vc3BhY2U8L25hbWU+Ci0gICAgICAgICAgICA8bmFtZT5Db3VyaWVyPC9u
YW1lPgotICAgICAgICAgICAgPG5hbWU+Q291cmllciBOZXc8L25hbWU+Ci0gICAgICAgIDwvbmFt
ZXNldD4KLSAgICAgICAgPGZpbGVzZXQ+Ci0gICAgICAgICAgICA8ZmlsZT5Db3VyaWVyX05ldy50
dGY8L2ZpbGU+Ci0gICAgICAgICAgICA8ZmlsZT5Db3VyaWVyX05ld19Cb2xkLnR0ZjwvZmlsZT4K
LSAgICAgICAgICAgIDxmaWxlPkNvdXJpZXJfTmV3X0l0YWxpYy50dGY8L2ZpbGU+Ci0gICAgICAg
ICAgICA8ZmlsZT5Db3VyaWVyX05ld19Cb2xkX0l0YWxpYy50dGY8L2ZpbGU+Ci0gICAgICAgIDwv
ZmlsZXNldD4KLSAgICA8L2ZhbWlseT4KLQotICAgIDxmYW1pbHk+Ci0gICAgICAgIDxuYW1lc2V0
PgotICAgICAgICAgICAgPG5hbWU+Y3Vyc2l2ZTwvbmFtZT4KLSAgICAgICAgICAgIDxuYW1lPkNv
bWljIFNhbnMgTVM8L25hbWU+Ci0gICAgICAgIDwvbmFtZXNldD4KLSAgICAgICAgPGZpbGVzZXQ+
Ci0gICAgICAgICAgICA8ZmlsZT5Db21pY19TYW5zX01TLnR0ZjwvZmlsZT4KLSAgICAgICAgICAg
IDxmaWxlPkNvbWljX1NhbnNfTVNfQm9sZC50dGY8L2ZpbGU+Ci0gICAgICAgIDwvZmlsZXNldD4K
LSAgICA8L2ZhbWlseT4KLQotICAgIDxmYW1pbHk+Ci0gICAgICAgIDxuYW1lc2V0PgotICAgICAg
ICAgICAgPG5hbWU+ZmFudGFzeTwvbmFtZT4KLSAgICAgICAgICAgIDxuYW1lPkltcGFjdDwvbmFt
ZT4KLSAgICAgICAgPC9uYW1lc2V0PgotICAgICAgICA8ZmlsZXNldD4KLSAgICAgICAgICAgIDxm
aWxlPkltcGFjdC50dGY8L2ZpbGU+Ci0gICAgICAgIDwvZmlsZXNldD4KLSAgICA8L2ZhbWlseT4K
LQotICAgIDxmYW1pbHk+Ci0gICAgICAgIDxuYW1lc2V0PgotICAgICAgICAgICAgPG5hbWU+R2Vv
cmdpYTwvbmFtZT4KLSAgICAgICAgPC9uYW1lc2V0PgotICAgICAgICA8ZmlsZXNldD4KLSAgICAg
ICAgICAgIDxmaWxlPkdlb3JnaWEudHRmPC9maWxlPgotICAgICAgICAgICAgPGZpbGU+R2Vvcmdp
YV9Cb2xkLnR0ZjwvZmlsZT4KLSAgICAgICAgICAgIDxmaWxlPkdlb3JnaWFfSXRhbGljLnR0Zjwv
ZmlsZT4KLSAgICAgICAgICAgIDxmaWxlPkdlb3JnaWFfQm9sZF9JdGFsaWMudHRmPC9maWxlPgot
ICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgPC9mYW1pbHk+Ci0KLSAgICA8ZmFtaWx5PgotICAgICAg
ICA8bmFtZXNldD4KLSAgICAgICAgICAgIDxuYW1lPlRyZWJ1Y2hldCBNUzwvbmFtZT4KLSAgICAg
ICAgPC9uYW1lc2V0PgotICAgICAgICA8ZmlsZXNldD4KLSAgICAgICAgICAgIDxmaWxlPlRyZWJ1
Y2hldF9NUy50dGY8L2ZpbGU+Ci0gICAgICAgICAgICA8ZmlsZT5UcmVidWNoZXRfTVNfQm9sZC50
dGY8L2ZpbGU+Ci0gICAgICAgICAgICA8ZmlsZT5UcmVidWNoZXRfTVNfSXRhbGljLnR0ZjwvZmls
ZT4KLSAgICAgICAgICAgIDxmaWxlPlRyZWJ1Y2hldF9NU19Cb2xkX0l0YWxpYy50dGY8L2ZpbGU+
Ci0gICAgICAgIDwvZmlsZXNldD4KLSAgICA8L2ZhbWlseT4KLQotICAgIDxmYW1pbHk+Ci0gICAg
ICAgIDxuYW1lc2V0PgotICAgICAgICAgICAgPG5hbWU+VmVyZGFuYTwvbmFtZT4KLSAgICAgICAg
PC9uYW1lc2V0PgotICAgICAgICA8ZmlsZXNldD4KLSAgICAgICAgICAgIDxmaWxlPlZlcmRhbmEu
dHRmPC9maWxlPgotICAgICAgICAgICAgPGZpbGU+VmVyZGFuYV9Cb2xkLnR0ZjwvZmlsZT4KLSAg
ICAgICAgICAgIDxmaWxlPlZlcmRhbmFfSXRhbGljLnR0ZjwvZmlsZT4KLSAgICAgICAgICAgIDxm
aWxlPlZlcmRhbmFfQm9sZF9JdGFsaWMudHRmPC9maWxlPgotICAgICAgICA8L2ZpbGVzZXQ+Ci0g
ICAgPC9mYW1pbHk+Ci0KLSAgICA8ZmFtaWx5PgotICAgICAgICA8bmFtZXNldD4KLSAgICAgICAg
ICAgIDxuYW1lPkFoZW08L25hbWU+Ci0gICAgICAgICAgICA8IS0tIE1hdGNoIGNocm9taXVtLWxp
bnV4LiBTZWUgY29tbWVudHMgb2YgU3VicGl4ZWxQb3NpdGlvbmluZyBpbiBmb250cy5jb25mIC0t
PgotICAgICAgICAgICAgPG5hbWU+U3VicGl4ZWxQb3NpdGlvbmluZ0FoZW08L25hbWU+Ci0gICAg
ICAgIDwvbmFtZXNldD4KLSAgICAgICAgPGZpbGVzZXQ+Ci0gICAgICAgICAgICA8ZmlsZT5BSEVN
X19fXy5UVEY8L2ZpbGU+Ci0gICAgICAgIDwvZmlsZXNldD4KLSAgICA8L2ZhbWlseT4KLQotPC9m
YW1pbHlzZXQ+CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9jb25m
aWcuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL2NvbmZpZy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlZjQxOGFlYzAyNmVmNjI5YzZlZDE1ZTM2MWY0ZjgwZmEzOWE1
YTcwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL2NvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgY29uZmlnX2gKLSNkZWZpbmUgY29uZmlnX2gKLQotI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgotI2luY2x1ZGUgPHd0Zi9FeHBvcnRNYWNyb3MuaD4KLQotI2lmIE9TKFdJ
TkRPV1MpICYmICFDT01QSUxFUihHQ0MpCi0vLyBBbGxvdyAndGhpcycgdG8gYmUgdXNlZCBpbiBi
YXNlIG1lbWJlciBpbml0aWFsaXplciBsaXN0LgotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0
MzU1KQotI2VuZGlmCi0KLSNlbmRpZiAvLyBjb25maWdfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vZm9udHMuY29uZiBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL2ZvbnRzLmNvbmYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzMzdiMTI0
MzFkNDAxMjc2MzliZDc3MDNkOTYzZjExZDI2ODQxMmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vZm9u
dHMuY29uZgorKysgL2Rldi9udWxsCkBAIC0xLDI1MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIx
LjAiPz4KLTwhRE9DVFlQRSBmb250Y29uZmlnIFNZU1RFTSAiZm9udHMuZHRkIj4KLTwhLS0gL2V0
Yy9mb250cy9mb250cy5jb25mIGZpbGUgdG8gY29uZmlndXJlIHN5c3RlbSBmb250IGFjY2VzcyAt
LT4KLTxmb250Y29uZmlnPgotICA8bWF0Y2ggdGFyZ2V0PSJmb250Ij4KLSAgICA8ZWRpdCBuYW1l
PSJlbWJlZGRlZGJpdG1hcCIgbW9kZT0iYXNzaWduIj48Ym9vbD5mYWxzZTwvYm9vbD48L2VkaXQ+
Ci0gIDwvbWF0Y2g+Ci0KLSAgPG1hdGNoIHRhcmdldD0icGF0dGVybiI+Ci0gICAgPHRlc3QgcXVh
bD0iYW55IiBuYW1lPSJmYW1pbHkiPgotICAgICAgPHN0cmluZz5UaW1lczwvc3RyaW5nPgotICAg
IDwvdGVzdD4KLSAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+Ci0gICAgICA8
c3RyaW5nPlRpbWVzIE5ldyBSb21hbjwvc3RyaW5nPgotICAgIDwvZWRpdD4KLSAgPC9tYXRjaD4K
LQotICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9
ImZhbWlseSI+Ci0gICAgICA8c3RyaW5nPnNhbnM8L3N0cmluZz4KLSAgICA8L3Rlc3Q+Ci0gICAg
PGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPgotICAgICAgPHN0cmluZz5BcmlhbDwv
c3RyaW5nPgotICAgIDwvZWRpdD4KLSAgPC9tYXRjaD4KLQotICA8bWF0Y2ggdGFyZ2V0PSJwYXR0
ZXJuIj4KLSAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+Ci0gICAgICA8c3RyaW5n
PnNhbnMgc2VyaWY8L3N0cmluZz4KLSAgICA8L3Rlc3Q+Ci0gICAgPGVkaXQgbmFtZT0iZmFtaWx5
IiBtb2RlPSJhc3NpZ24iPgotICAgICAgPHN0cmluZz5BcmlhbDwvc3RyaW5nPgotICAgIDwvZWRp
dD4KLSAgPC9tYXRjaD4KLQotICA8IS0tIFNvbWUgbGF5b3V0IHRlc3RzIHNwZWNpZnkgSGVsdmV0
aWNhIGFzIGEgZmFtaWx5IGFuZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZQotICAgICAgIHRoYXQgd2Ug
ZG9uJ3QgZmFsbGJhY2sgdG8gVGltZXMgTmV3IFJvbWFuIGZvciB0aGVtIC0tPgotICA8bWF0Y2gg
dGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+Ci0g
ICAgICA8c3RyaW5nPkhlbHZldGljYTwvc3RyaW5nPgotICAgIDwvdGVzdD4KLSAgICA8ZWRpdCBu
YW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+Ci0gICAgICA8c3RyaW5nPkFyaWFsPC9zdHJpbmc+
Ci0gICAgPC9lZGl0PgotICA8L21hdGNoPgotCi0gIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgot
ICAgIDx0ZXN0IHF1YWw9ImFueSIgbmFtZT0iZmFtaWx5Ij4KLSAgICAgIDxzdHJpbmc+c2Fucy1z
ZXJpZjwvc3RyaW5nPgotICAgIDwvdGVzdD4KLSAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9
ImFzc2lnbiI+Ci0gICAgICA8c3RyaW5nPkFyaWFsPC9zdHJpbmc+Ci0gICAgPC9lZGl0PgotICA8
L21hdGNoPgotCi0gIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgotICAgIDx0ZXN0IHF1YWw9ImFu
eSIgbmFtZT0iZmFtaWx5Ij4KLSAgICAgIDxzdHJpbmc+c2VyaWY8L3N0cmluZz4KLSAgICA8L3Rl
c3Q+Ci0gICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPgotICAgICAgPHN0cmlu
Zz5UaW1lcyBOZXcgUm9tYW48L3N0cmluZz4KLSAgICA8L2VkaXQ+Ci0gIDwvbWF0Y2g+Ci0KLSAg
PG1hdGNoIHRhcmdldD0icGF0dGVybiI+Ci0gICAgPHRlc3QgcXVhbD0iYW55IiBuYW1lPSJmYW1p
bHkiPgotICAgICAgPHN0cmluZz5tb25vPC9zdHJpbmc+Ci0gICAgPC90ZXN0PgotICAgIDxlZGl0
IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIj4KLSAgICAgIDxzdHJpbmc+Q291cmllciBOZXc8
L3N0cmluZz4KLSAgICA8L2VkaXQ+Ci0gIDwvbWF0Y2g+Ci0KLSAgPG1hdGNoIHRhcmdldD0icGF0
dGVybiI+Ci0gICAgPHRlc3QgcXVhbD0iYW55IiBuYW1lPSJmYW1pbHkiPgotICAgICAgPHN0cmlu
Zz5tb25vc3BhY2U8L3N0cmluZz4KLSAgICA8L3Rlc3Q+Ci0gICAgPGVkaXQgbmFtZT0iZmFtaWx5
IiBtb2RlPSJhc3NpZ24iPgotICAgICAgPHN0cmluZz5Db3VyaWVyIE5ldzwvc3RyaW5nPgotICAg
IDwvZWRpdD4KLSAgPC9tYXRjaD4KLQotICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICA8
dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+Ci0gICAgICA8c3RyaW5nPkNvdXJpZXI8L3N0
cmluZz4KLSAgICA8L3Rlc3Q+Ci0gICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24i
PgotICAgICAgPHN0cmluZz5Db3VyaWVyIE5ldzwvc3RyaW5nPgotICAgIDwvZWRpdD4KLSAgPC9t
YXRjaD4KLQotICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICA8dGVzdCBxdWFsPSJhbnki
IG5hbWU9ImZhbWlseSI+Ci0gICAgICA8c3RyaW5nPmN1cnNpdmU8L3N0cmluZz4KLSAgICA8L3Rl
c3Q+Ci0gICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPgotICAgICAgPHN0cmlu
Zz5Db21pYyBTYW5zIE1TPC9zdHJpbmc+Ci0gICAgPC9lZGl0PgotICA8L21hdGNoPgotCi0gIDxt
YXRjaCB0YXJnZXQ9InBhdHRlcm4iPgotICAgIDx0ZXN0IHF1YWw9ImFueSIgbmFtZT0iZmFtaWx5
Ij4KLSAgICAgIDxzdHJpbmc+ZmFudGFzeTwvc3RyaW5nPgotICAgIDwvdGVzdD4KLSAgICA8ZWRp
dCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+Ci0gICAgICA8c3RyaW5nPkltcGFjdDwvc3Ry
aW5nPgotICAgIDwvZWRpdD4KLSAgPC9tYXRjaD4KLQotICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJu
Ij4KLSAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+Ci0gICAgICA8c3RyaW5nPk1v
bmFjbzwvc3RyaW5nPgotICAgIDwvdGVzdD4KLSAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9
ImFzc2lnbiI+Ci0gICAgICA8c3RyaW5nPlRpbWVzIE5ldyBSb21hbjwvc3RyaW5nPgotICAgIDwv
ZWRpdD4KLSAgPC9tYXRjaD4KLQotICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICA8dGVz
dCBuYW1lPSJmYW1pbHkiIGNvbXBhcmU9ImVxIj4KLSAgICAgIDxzdHJpbmc+Tm9uQW50aUFsaWFz
ZWRTYW5zPC9zdHJpbmc+Ci0gICAgPC90ZXN0PgotICAgIDxlZGl0IG5hbWU9ImZhbWlseSIgbW9k
ZT0iYXNzaWduIj4KLSAgICAgIDxzdHJpbmc+QXJpYWw8L3N0cmluZz4KLSAgICA8L2VkaXQ+Ci0g
ICAgPGVkaXQgbmFtZT0iYW50aWFsaWFzIiBtb2RlPSJhc3NpZ24iPgotICAgICAgPGJvb2w+ZmFs
c2U8L2Jvb2w+Ci0gICAgPC9lZGl0PgotICA8L21hdGNoPgotCi0gIDxtYXRjaCB0YXJnZXQ9InBh
dHRlcm4iPgotICAgIDx0ZXN0IG5hbWU9ImZhbWlseSIgY29tcGFyZT0iZXEiPgotICAgICAgPHN0
cmluZz5TbGlnaHRIaW50ZWRHZW9yZ2lhPC9zdHJpbmc+Ci0gICAgPC90ZXN0PgotICAgIDxlZGl0
IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIj4KLSAgICAgIDxzdHJpbmc+R2VvcmdpYTwvc3Ry
aW5nPgotICAgIDwvZWRpdD4KLSAgICA8ZWRpdCBuYW1lPSJoaW50c3R5bGUiIG1vZGU9ImFzc2ln
biI+Ci0gICAgICA8Y29uc3Q+aGludHNsaWdodDwvY29uc3Q+Ci0gICAgPC9lZGl0PgotICA8L21h
dGNoPgotCi0gIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgotICAgIDx0ZXN0IG5hbWU9ImZhbWls
eSIgY29tcGFyZT0iZXEiPgotICAgICAgPHN0cmluZz5Ob25IaW50ZWRTYW5zPC9zdHJpbmc+Ci0g
ICAgPC90ZXN0PgotICAgIDxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIj4KLSAgICAg
IDxzdHJpbmc+VmVyZGFuYTwvc3RyaW5nPgotICAgIDwvZWRpdD4KLSAgICA8IS0tIFRoZXNlIGRl
bGliZXJhdGVseSBjb250cmFkaWN0IGVhY2ggb3RoZXIuIFRoZSAnaGludGluZycgcHJlZmVyZW5j
ZQotICAgICAgICAgc2hvdWxkIHRha2UgcHJpb3JpdHkgLS0+Ci0gICAgPGVkaXQgbmFtZT0iaGlu
dHN0eWxlIiBtb2RlPSJhc3NpZ24iPgotICAgICAgPGNvbnN0PmhpbnRmdWxsPC9jb25zdD4KLSAg
ICA8L2VkaXQ+Ci0gICA8ZWRpdCBuYW1lPSJoaW50aW5nIiBtb2RlPSJhc3NpZ24iPgotICAgICAg
PGJvb2w+ZmFsc2U8L2Jvb2w+Ci0gICAgPC9lZGl0PgotICA8L21hdGNoPgotCi0gIDxtYXRjaCB0
YXJnZXQ9InBhdHRlcm4iPgotICAgIDx0ZXN0IG5hbWU9ImZhbWlseSIgY29tcGFyZT0iZXEiPgot
ICAgICAgPHN0cmluZz5BdXRvaGludGVkU2VyaWY8L3N0cmluZz4KLSAgICA8L3Rlc3Q+Ci0gICAg
PGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPgotICAgICAgPHN0cmluZz5BcmlhbDwv
c3RyaW5nPgotICAgIDwvZWRpdD4KLSAgICA8ZWRpdCBuYW1lPSJhdXRvaGludCIgbW9kZT0iYXNz
aWduIj4KLSAgICAgIDxib29sPnRydWU8L2Jvb2w+Ci0gICAgPC9lZGl0PgotICAgIDxlZGl0IG5h
bWU9ImhpbnRzdHlsZSIgbW9kZT0iYXNzaWduIj4KLSAgICAgIDxjb25zdD5oaW50bWVkaXVtPC9j
b25zdD4KLSAgICA8L2VkaXQ+Ci0gIDwvbWF0Y2g+Ci0KLSAgPG1hdGNoIHRhcmdldD0icGF0dGVy
biI+Ci0gICAgPHRlc3QgbmFtZT0iZmFtaWx5IiBjb21wYXJlPSJlcSI+Ci0gICAgICA8c3RyaW5n
PkhpbnRlZFNlcmlmPC9zdHJpbmc+Ci0gICAgPC90ZXN0PgotICAgIDxlZGl0IG5hbWU9ImZhbWls
eSIgbW9kZT0iYXNzaWduIj4KLSAgICAgIDxzdHJpbmc+QXJpYWw8L3N0cmluZz4KLSAgICA8L2Vk
aXQ+Ci0gICAgPGVkaXQgbmFtZT0iYXV0b2hpbnQiIG1vZGU9ImFzc2lnbiI+Ci0gICAgICA8Ym9v
bD5mYWxzZTwvYm9vbD4KLSAgICA8L2VkaXQ+Ci0gICAgPGVkaXQgbmFtZT0iaGludHN0eWxlIiBt
b2RlPSJhc3NpZ24iPgotICAgICAgPGNvbnN0PmhpbnRtZWRpdW08L2NvbnN0PgotICAgIDwvZWRp
dD4KLSAgPC9tYXRjaD4KLQotICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICA8dGVzdCBu
YW1lPSJmYW1pbHkiIGNvbXBhcmU9ImVxIj4KLSAgICAgIDxzdHJpbmc+RnVsbEFuZEF1dG9IaW50
ZWRTZXJpZjwvc3RyaW5nPgotICAgIDwvdGVzdD4KLSAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1v
ZGU9ImFzc2lnbiI+Ci0gICAgICA8c3RyaW5nPkFyaWFsPC9zdHJpbmc+Ci0gICAgPC9lZGl0Pgot
ICAgIDxlZGl0IG5hbWU9ImF1dG9oaW50IiBtb2RlPSJhc3NpZ24iPgotICAgICAgPGJvb2w+dHJ1
ZTwvYm9vbD4KLSAgICA8L2VkaXQ+Ci0gICAgPGVkaXQgbmFtZT0iaGludHN0eWxlIiBtb2RlPSJh
c3NpZ24iPgotICAgICAgPGNvbnN0PmhpbnRmdWxsPC9jb25zdD4KLSAgICA8L2VkaXQ+Ci0gIDwv
bWF0Y2g+Ci0KLSAgPG1hdGNoIHRhcmdldD0icGF0dGVybiI+Ci0gICAgPHRlc3QgbmFtZT0iZmFt
aWx5IiBjb21wYXJlPSJlcSI+Ci0gICAgICA8c3RyaW5nPlN1YnBpeGVsRW5hYmxlZEFyaWFsPC9z
dHJpbmc+Ci0gICAgPC90ZXN0PgotICAgIDxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWdu
Ij4KLSAgICAgIDxzdHJpbmc+QXJpYWw8L3N0cmluZz4KLSAgICA8L2VkaXQ+Ci0gICAgPGVkaXQg
bmFtZT0icmdiYSIgbW9kZT0iYXNzaWduIj4KLSAgICAgIDxjb25zdD5yZ2I8L2NvbnN0PgotICAg
IDwvZWRpdD4KLSAgPC9tYXRjaD4KLQotICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICA8
dGVzdCBuYW1lPSJmYW1pbHkiIGNvbXBhcmU9ImVxIj4KLSAgICAgIDxzdHJpbmc+U3VicGl4ZWxE
aXNhYmxlZEFyaWFsPC9zdHJpbmc+Ci0gICAgPC90ZXN0PgotICAgIDxlZGl0IG5hbWU9ImZhbWls
eSIgbW9kZT0iYXNzaWduIj4KLSAgICAgIDxzdHJpbmc+QXJpYWw8L3N0cmluZz4KLSAgICA8L2Vk
aXQ+Ci0gICAgPGVkaXQgbmFtZT0icmdiYSIgbW9kZT0iYXNzaWduIj4KLSAgICAgIDxjb25zdD5u
b25lPC9jb25zdD4KLSAgICA8L2VkaXQ+Ci0gIDwvbWF0Y2g+Ci0KLSAgPG1hdGNoIHRhcmdldD0i
cGF0dGVybiI+Ci0gICAgPCEtLSBGb250Q29uZmlnIGRvZXNuJ3QgY3VycmVudGx5IHByb3ZpZGUg
YSB3ZWxsLWRlZmluZWQgd2F5IHRvIHR1cm4gb24KLSAgICAgICAgIHN1YnBpeGVsIHBvc2l0aW9u
aW5nLiAgVGhpcyBpcyBqdXN0IGFuIGFyYml0cmFyeSBwYXR0ZXJuIHRvIHVzZSBhZnRlcgotICAg
ICAgICAgdHVybmluZyBzdWJwaXhlbCBwb3NpdGlvbmluZyBvbiBnbG9iYWxseSB0byBlbnN1cmUg
dGhhdCB3ZSBkb24ndCBoYXZlCi0gICAgICAgICBpc3N1ZXMgd2l0aCBvdXIgc3R5bGUgZ2V0dGlu
ZyBjYWNoZWQgZm9yIG90aGVyIHRlc3RzLiAtLT4KLSAgICA8dGVzdCBuYW1lPSJmYW1pbHkiIGNv
bXBhcmU9ImVxIj4KLSAgICAgIDxzdHJpbmc+U3VicGl4ZWxQb3NpdGlvbmluZzwvc3RyaW5nPgot
ICAgIDwvdGVzdD4KLSAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+Ci0gICAg
ICA8c3RyaW5nPlRpbWVzIE5ldyBSb21hbjwvc3RyaW5nPgotICAgIDwvZWRpdD4KLSAgPC9tYXRj
aD4KLQotICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICA8IS0tIFNlZSBjb21tZW50cyBh
Ym92ZSAtLT4KLSAgICA8dGVzdCBuYW1lPSJmYW1pbHkiIGNvbXBhcmU9ImVxIj4KLSAgICAgIDxz
dHJpbmc+U3VicGl4ZWxQb3NpdGlvbmluZ0FoZW08L3N0cmluZz4KLSAgICA8L3Rlc3Q+Ci0gICAg
PGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPgotICAgICAgPHN0cmluZz5haGVtPC9z
dHJpbmc+Ci0gICAgPC9lZGl0PgotICA8L21hdGNoPgotCi08L2ZvbnRjb25maWc+CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0gYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KaW5kZXggODA3M2U2OWFkZTFiOWU5
YzU3YWJmYzZhY2ExYjE0ZGQyMTg3ZTE5OS4uOWVhZjFhZDNjMDAyZDIwMzA2MDA0NGNiZGJlMmQy
ZmRhMGU5N2E2YSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5k
ZXJUcmVlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5t
bQpAQCAtNjEwLDcgKzYxMCw3IEBAIHN0YXRpYyB2b2lkIHJlc2V0RGVmYXVsdHNUb0NvbnNpc3Rl
bnRWYWx1ZXMoKQogI2VuZGlmCiAKIAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTA4MCAmJiAhUExBVEZPUk0oQ0hST01JVU0pCisjaWYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMDgwCiAgICAgW2RlZmF1bHRzIHNldEJvb2w6Tk8gZm9yS2V5OkAi
TlNTY3JvbGxBbmltYXRpb25FbmFibGVkIl07CiAjZWxzZQogICAgIFtkZWZhdWx0cyBzZXRCb29s
Ok5PIGZvcktleTpAIkFwcGxlU2Nyb2xsQW5pbWF0aW9uRW5hYmxlZCJdOwo=
</data>
<flag name="review"
          id="218658"
          type_id="1"
          status="+"
          setter="tkent"
    />
          </attachment>
      

    </bug>

</bugzilla>